Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / vector-popcnt-128-ult-ugt.ll
blob364dc185d26c2389e00976d744a9969e8d92ea61
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=SSE,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse3 | FileCheck %s --check-prefixes=SSE,SSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=SSE,SSSE3
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE41
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq | FileCheck %s --check-prefixes=AVX,AVX512VPOPCNTDQ
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vpopcntdq,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX512VPOPCNTDQVL
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg | FileCheck %s --check-prefix=BITALG_NOVLX
11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bitalg,+avx512vl | FileCheck %s --check-prefix=BITALG
14 define <16 x i8> @ugt_1_v16i8(<16 x i8> %0) {
15 ; SSE-LABEL: ugt_1_v16i8:
16 ; SSE:       # %bb.0:
17 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
18 ; SSE-NEXT:    movdqa %xmm0, %xmm2
19 ; SSE-NEXT:    paddb %xmm1, %xmm2
20 ; SSE-NEXT:    pand %xmm2, %xmm0
21 ; SSE-NEXT:    pxor %xmm2, %xmm2
22 ; SSE-NEXT:    pcmpeqb %xmm2, %xmm0
23 ; SSE-NEXT:    pxor %xmm1, %xmm0
24 ; SSE-NEXT:    retq
26 ; AVX1-LABEL: ugt_1_v16i8:
27 ; AVX1:       # %bb.0:
28 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
29 ; AVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm2
30 ; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
31 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
32 ; AVX1-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
33 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
34 ; AVX1-NEXT:    retq
36 ; AVX2-LABEL: ugt_1_v16i8:
37 ; AVX2:       # %bb.0:
38 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
39 ; AVX2-NEXT:    vpaddb %xmm1, %xmm0, %xmm2
40 ; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0
41 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
42 ; AVX2-NEXT:    vpcmpeqb %xmm2, %xmm0, %xmm0
43 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
44 ; AVX2-NEXT:    retq
46 ; AVX512VPOPCNTDQ-LABEL: ugt_1_v16i8:
47 ; AVX512VPOPCNTDQ:       # %bb.0:
48 ; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
49 ; AVX512VPOPCNTDQ-NEXT:    vpaddb %xmm1, %xmm0, %xmm1
50 ; AVX512VPOPCNTDQ-NEXT:    vpand %xmm1, %xmm0, %xmm0
51 ; AVX512VPOPCNTDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
52 ; AVX512VPOPCNTDQ-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
53 ; AVX512VPOPCNTDQ-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
54 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
55 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
56 ; AVX512VPOPCNTDQ-NEXT:    retq
58 ; AVX512VPOPCNTDQVL-LABEL: ugt_1_v16i8:
59 ; AVX512VPOPCNTDQVL:       # %bb.0:
60 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
61 ; AVX512VPOPCNTDQVL-NEXT:    vpaddb %xmm1, %xmm0, %xmm1
62 ; AVX512VPOPCNTDQVL-NEXT:    vpand %xmm1, %xmm0, %xmm0
63 ; AVX512VPOPCNTDQVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
64 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
65 ; AVX512VPOPCNTDQVL-NEXT:    vpternlogq $15, %xmm0, %xmm0, %xmm0
66 ; AVX512VPOPCNTDQVL-NEXT:    retq
68 ; BITALG_NOVLX-LABEL: ugt_1_v16i8:
69 ; BITALG_NOVLX:       # %bb.0:
70 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
71 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
72 ; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
73 ; BITALG_NOVLX-NEXT:    vzeroupper
74 ; BITALG_NOVLX-NEXT:    retq
76 ; BITALG-LABEL: ugt_1_v16i8:
77 ; BITALG:       # %bb.0:
78 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
79 ; BITALG-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
80 ; BITALG-NEXT:    retq
81   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
82   %3 = icmp ugt <16 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>
83   %4 = sext <16 x i1> %3 to <16 x i8>
84   ret <16 x i8> %4
87 define <16 x i8> @ult_2_v16i8(<16 x i8> %0) {
88 ; SSE-LABEL: ult_2_v16i8:
89 ; SSE:       # %bb.0:
90 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
91 ; SSE-NEXT:    paddb %xmm0, %xmm1
92 ; SSE-NEXT:    pand %xmm1, %xmm0
93 ; SSE-NEXT:    pxor %xmm1, %xmm1
94 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
95 ; SSE-NEXT:    retq
97 ; AVX-LABEL: ult_2_v16i8:
98 ; AVX:       # %bb.0:
99 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
100 ; AVX-NEXT:    vpaddb %xmm1, %xmm0, %xmm1
101 ; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
102 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
103 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
104 ; AVX-NEXT:    retq
106 ; BITALG_NOVLX-LABEL: ult_2_v16i8:
107 ; BITALG_NOVLX:       # %bb.0:
108 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
109 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
110 ; BITALG_NOVLX-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
111 ; BITALG_NOVLX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
112 ; BITALG_NOVLX-NEXT:    vzeroupper
113 ; BITALG_NOVLX-NEXT:    retq
115 ; BITALG-LABEL: ult_2_v16i8:
116 ; BITALG:       # %bb.0:
117 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
118 ; BITALG-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
119 ; BITALG-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
120 ; BITALG-NEXT:    retq
121   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
122   %3 = icmp ult <16 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>
123   %4 = sext <16 x i1> %3 to <16 x i8>
124   ret <16 x i8> %4
127 define <16 x i8> @ugt_2_v16i8(<16 x i8> %0) {
128 ; SSE2-LABEL: ugt_2_v16i8:
129 ; SSE2:       # %bb.0:
130 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
131 ; SSE2-NEXT:    psrlw $1, %xmm1
132 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
133 ; SSE2-NEXT:    psubb %xmm1, %xmm0
134 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
135 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
136 ; SSE2-NEXT:    pand %xmm1, %xmm2
137 ; SSE2-NEXT:    psrlw $2, %xmm0
138 ; SSE2-NEXT:    pand %xmm1, %xmm0
139 ; SSE2-NEXT:    paddb %xmm2, %xmm0
140 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
141 ; SSE2-NEXT:    psrlw $4, %xmm1
142 ; SSE2-NEXT:    paddb %xmm1, %xmm0
143 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
144 ; SSE2-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
145 ; SSE2-NEXT:    retq
147 ; SSE3-LABEL: ugt_2_v16i8:
148 ; SSE3:       # %bb.0:
149 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
150 ; SSE3-NEXT:    psrlw $1, %xmm1
151 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
152 ; SSE3-NEXT:    psubb %xmm1, %xmm0
153 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
154 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
155 ; SSE3-NEXT:    pand %xmm1, %xmm2
156 ; SSE3-NEXT:    psrlw $2, %xmm0
157 ; SSE3-NEXT:    pand %xmm1, %xmm0
158 ; SSE3-NEXT:    paddb %xmm2, %xmm0
159 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
160 ; SSE3-NEXT:    psrlw $4, %xmm1
161 ; SSE3-NEXT:    paddb %xmm1, %xmm0
162 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
163 ; SSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
164 ; SSE3-NEXT:    retq
166 ; SSSE3-LABEL: ugt_2_v16i8:
167 ; SSSE3:       # %bb.0:
168 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
169 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
170 ; SSSE3-NEXT:    pand %xmm2, %xmm3
171 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
172 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
173 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
174 ; SSSE3-NEXT:    psrlw $4, %xmm0
175 ; SSSE3-NEXT:    pand %xmm2, %xmm0
176 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
177 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
178 ; SSSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
179 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
180 ; SSSE3-NEXT:    retq
182 ; SSE41-LABEL: ugt_2_v16i8:
183 ; SSE41:       # %bb.0:
184 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
185 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
186 ; SSE41-NEXT:    pand %xmm2, %xmm3
187 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
188 ; SSE41-NEXT:    movdqa %xmm1, %xmm4
189 ; SSE41-NEXT:    pshufb %xmm3, %xmm4
190 ; SSE41-NEXT:    psrlw $4, %xmm0
191 ; SSE41-NEXT:    pand %xmm2, %xmm0
192 ; SSE41-NEXT:    pshufb %xmm0, %xmm1
193 ; SSE41-NEXT:    paddb %xmm4, %xmm1
194 ; SSE41-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
195 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
196 ; SSE41-NEXT:    retq
198 ; AVX1-LABEL: ugt_2_v16i8:
199 ; AVX1:       # %bb.0:
200 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
201 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
202 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
203 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
204 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
205 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
206 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
207 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
208 ; AVX1-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
209 ; AVX1-NEXT:    retq
211 ; AVX2-LABEL: ugt_2_v16i8:
212 ; AVX2:       # %bb.0:
213 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
214 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
215 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
216 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
217 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
218 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
219 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
220 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
221 ; AVX2-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
222 ; AVX2-NEXT:    retq
224 ; AVX512VPOPCNTDQ-LABEL: ugt_2_v16i8:
225 ; AVX512VPOPCNTDQ:       # %bb.0:
226 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
227 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
228 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
229 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
230 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
231 ; AVX512VPOPCNTDQ-NEXT:    retq
233 ; AVX512VPOPCNTDQVL-LABEL: ugt_2_v16i8:
234 ; AVX512VPOPCNTDQVL:       # %bb.0:
235 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
236 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
237 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
238 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
239 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
240 ; AVX512VPOPCNTDQVL-NEXT:    retq
242 ; BITALG_NOVLX-LABEL: ugt_2_v16i8:
243 ; BITALG_NOVLX:       # %bb.0:
244 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
245 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
246 ; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
247 ; BITALG_NOVLX-NEXT:    vzeroupper
248 ; BITALG_NOVLX-NEXT:    retq
250 ; BITALG-LABEL: ugt_2_v16i8:
251 ; BITALG:       # %bb.0:
252 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
253 ; BITALG-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
254 ; BITALG-NEXT:    retq
255   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
256   %3 = icmp ugt <16 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>
257   %4 = sext <16 x i1> %3 to <16 x i8>
258   ret <16 x i8> %4
261 define <16 x i8> @ult_3_v16i8(<16 x i8> %0) {
262 ; SSE2-LABEL: ult_3_v16i8:
263 ; SSE2:       # %bb.0:
264 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
265 ; SSE2-NEXT:    psrlw $1, %xmm1
266 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
267 ; SSE2-NEXT:    psubb %xmm1, %xmm0
268 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
269 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
270 ; SSE2-NEXT:    pand %xmm1, %xmm2
271 ; SSE2-NEXT:    psrlw $2, %xmm0
272 ; SSE2-NEXT:    pand %xmm1, %xmm0
273 ; SSE2-NEXT:    paddb %xmm2, %xmm0
274 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
275 ; SSE2-NEXT:    psrlw $4, %xmm1
276 ; SSE2-NEXT:    paddb %xmm0, %xmm1
277 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
278 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
279 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
280 ; SSE2-NEXT:    retq
282 ; SSE3-LABEL: ult_3_v16i8:
283 ; SSE3:       # %bb.0:
284 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
285 ; SSE3-NEXT:    psrlw $1, %xmm1
286 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
287 ; SSE3-NEXT:    psubb %xmm1, %xmm0
288 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
289 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
290 ; SSE3-NEXT:    pand %xmm1, %xmm2
291 ; SSE3-NEXT:    psrlw $2, %xmm0
292 ; SSE3-NEXT:    pand %xmm1, %xmm0
293 ; SSE3-NEXT:    paddb %xmm2, %xmm0
294 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
295 ; SSE3-NEXT:    psrlw $4, %xmm1
296 ; SSE3-NEXT:    paddb %xmm0, %xmm1
297 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
298 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
299 ; SSE3-NEXT:    pcmpgtb %xmm1, %xmm0
300 ; SSE3-NEXT:    retq
302 ; SSSE3-LABEL: ult_3_v16i8:
303 ; SSSE3:       # %bb.0:
304 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
305 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
306 ; SSSE3-NEXT:    pand %xmm1, %xmm2
307 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
308 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
309 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
310 ; SSSE3-NEXT:    psrlw $4, %xmm0
311 ; SSSE3-NEXT:    pand %xmm1, %xmm0
312 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
313 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
314 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
315 ; SSSE3-NEXT:    pcmpgtb %xmm3, %xmm0
316 ; SSSE3-NEXT:    retq
318 ; SSE41-LABEL: ult_3_v16i8:
319 ; SSE41:       # %bb.0:
320 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
321 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
322 ; SSE41-NEXT:    pand %xmm1, %xmm2
323 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
324 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
325 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
326 ; SSE41-NEXT:    psrlw $4, %xmm0
327 ; SSE41-NEXT:    pand %xmm1, %xmm0
328 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
329 ; SSE41-NEXT:    paddb %xmm4, %xmm3
330 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
331 ; SSE41-NEXT:    pcmpgtb %xmm3, %xmm0
332 ; SSE41-NEXT:    retq
334 ; AVX1-LABEL: ult_3_v16i8:
335 ; AVX1:       # %bb.0:
336 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
337 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
338 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
339 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
340 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
341 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
342 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
343 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
344 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
345 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
346 ; AVX1-NEXT:    retq
348 ; AVX2-LABEL: ult_3_v16i8:
349 ; AVX2:       # %bb.0:
350 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
351 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
352 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
353 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
354 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
355 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
356 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
357 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
358 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
359 ; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
360 ; AVX2-NEXT:    retq
362 ; AVX512VPOPCNTDQ-LABEL: ult_3_v16i8:
363 ; AVX512VPOPCNTDQ:       # %bb.0:
364 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
365 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
366 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
367 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
368 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
369 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
370 ; AVX512VPOPCNTDQ-NEXT:    retq
372 ; AVX512VPOPCNTDQVL-LABEL: ult_3_v16i8:
373 ; AVX512VPOPCNTDQVL:       # %bb.0:
374 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
375 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
376 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
377 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
378 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
379 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
380 ; AVX512VPOPCNTDQVL-NEXT:    retq
382 ; BITALG_NOVLX-LABEL: ult_3_v16i8:
383 ; BITALG_NOVLX:       # %bb.0:
384 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
385 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
386 ; BITALG_NOVLX-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
387 ; BITALG_NOVLX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
388 ; BITALG_NOVLX-NEXT:    vzeroupper
389 ; BITALG_NOVLX-NEXT:    retq
391 ; BITALG-LABEL: ult_3_v16i8:
392 ; BITALG:       # %bb.0:
393 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
394 ; BITALG-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3]
395 ; BITALG-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
396 ; BITALG-NEXT:    retq
397   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
398   %3 = icmp ult <16 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>
399   %4 = sext <16 x i1> %3 to <16 x i8>
400   ret <16 x i8> %4
403 define <16 x i8> @ugt_3_v16i8(<16 x i8> %0) {
404 ; SSE2-LABEL: ugt_3_v16i8:
405 ; SSE2:       # %bb.0:
406 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
407 ; SSE2-NEXT:    psrlw $1, %xmm1
408 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
409 ; SSE2-NEXT:    psubb %xmm1, %xmm0
410 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
411 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
412 ; SSE2-NEXT:    pand %xmm1, %xmm2
413 ; SSE2-NEXT:    psrlw $2, %xmm0
414 ; SSE2-NEXT:    pand %xmm1, %xmm0
415 ; SSE2-NEXT:    paddb %xmm2, %xmm0
416 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
417 ; SSE2-NEXT:    psrlw $4, %xmm1
418 ; SSE2-NEXT:    paddb %xmm1, %xmm0
419 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
420 ; SSE2-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
421 ; SSE2-NEXT:    retq
423 ; SSE3-LABEL: ugt_3_v16i8:
424 ; SSE3:       # %bb.0:
425 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
426 ; SSE3-NEXT:    psrlw $1, %xmm1
427 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
428 ; SSE3-NEXT:    psubb %xmm1, %xmm0
429 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
430 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
431 ; SSE3-NEXT:    pand %xmm1, %xmm2
432 ; SSE3-NEXT:    psrlw $2, %xmm0
433 ; SSE3-NEXT:    pand %xmm1, %xmm0
434 ; SSE3-NEXT:    paddb %xmm2, %xmm0
435 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
436 ; SSE3-NEXT:    psrlw $4, %xmm1
437 ; SSE3-NEXT:    paddb %xmm1, %xmm0
438 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
439 ; SSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
440 ; SSE3-NEXT:    retq
442 ; SSSE3-LABEL: ugt_3_v16i8:
443 ; SSSE3:       # %bb.0:
444 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
445 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
446 ; SSSE3-NEXT:    pand %xmm2, %xmm3
447 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
448 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
449 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
450 ; SSSE3-NEXT:    psrlw $4, %xmm0
451 ; SSSE3-NEXT:    pand %xmm2, %xmm0
452 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
453 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
454 ; SSSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
455 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
456 ; SSSE3-NEXT:    retq
458 ; SSE41-LABEL: ugt_3_v16i8:
459 ; SSE41:       # %bb.0:
460 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
461 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
462 ; SSE41-NEXT:    pand %xmm2, %xmm3
463 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
464 ; SSE41-NEXT:    movdqa %xmm1, %xmm4
465 ; SSE41-NEXT:    pshufb %xmm3, %xmm4
466 ; SSE41-NEXT:    psrlw $4, %xmm0
467 ; SSE41-NEXT:    pand %xmm2, %xmm0
468 ; SSE41-NEXT:    pshufb %xmm0, %xmm1
469 ; SSE41-NEXT:    paddb %xmm4, %xmm1
470 ; SSE41-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
471 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
472 ; SSE41-NEXT:    retq
474 ; AVX1-LABEL: ugt_3_v16i8:
475 ; AVX1:       # %bb.0:
476 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
477 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
478 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
479 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
480 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
481 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
482 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
483 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
484 ; AVX1-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
485 ; AVX1-NEXT:    retq
487 ; AVX2-LABEL: ugt_3_v16i8:
488 ; AVX2:       # %bb.0:
489 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
490 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
491 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
492 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
493 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
494 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
495 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
496 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
497 ; AVX2-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
498 ; AVX2-NEXT:    retq
500 ; AVX512VPOPCNTDQ-LABEL: ugt_3_v16i8:
501 ; AVX512VPOPCNTDQ:       # %bb.0:
502 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
503 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
504 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
505 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
506 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
507 ; AVX512VPOPCNTDQ-NEXT:    retq
509 ; AVX512VPOPCNTDQVL-LABEL: ugt_3_v16i8:
510 ; AVX512VPOPCNTDQVL:       # %bb.0:
511 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
512 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
513 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
514 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
515 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
516 ; AVX512VPOPCNTDQVL-NEXT:    retq
518 ; BITALG_NOVLX-LABEL: ugt_3_v16i8:
519 ; BITALG_NOVLX:       # %bb.0:
520 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
521 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
522 ; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
523 ; BITALG_NOVLX-NEXT:    vzeroupper
524 ; BITALG_NOVLX-NEXT:    retq
526 ; BITALG-LABEL: ugt_3_v16i8:
527 ; BITALG:       # %bb.0:
528 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
529 ; BITALG-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
530 ; BITALG-NEXT:    retq
531   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
532   %3 = icmp ugt <16 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>
533   %4 = sext <16 x i1> %3 to <16 x i8>
534   ret <16 x i8> %4
537 define <16 x i8> @ult_4_v16i8(<16 x i8> %0) {
538 ; SSE2-LABEL: ult_4_v16i8:
539 ; SSE2:       # %bb.0:
540 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
541 ; SSE2-NEXT:    psrlw $1, %xmm1
542 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
543 ; SSE2-NEXT:    psubb %xmm1, %xmm0
544 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
545 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
546 ; SSE2-NEXT:    pand %xmm1, %xmm2
547 ; SSE2-NEXT:    psrlw $2, %xmm0
548 ; SSE2-NEXT:    pand %xmm1, %xmm0
549 ; SSE2-NEXT:    paddb %xmm2, %xmm0
550 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
551 ; SSE2-NEXT:    psrlw $4, %xmm1
552 ; SSE2-NEXT:    paddb %xmm0, %xmm1
553 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
554 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
555 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
556 ; SSE2-NEXT:    retq
558 ; SSE3-LABEL: ult_4_v16i8:
559 ; SSE3:       # %bb.0:
560 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
561 ; SSE3-NEXT:    psrlw $1, %xmm1
562 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
563 ; SSE3-NEXT:    psubb %xmm1, %xmm0
564 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
565 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
566 ; SSE3-NEXT:    pand %xmm1, %xmm2
567 ; SSE3-NEXT:    psrlw $2, %xmm0
568 ; SSE3-NEXT:    pand %xmm1, %xmm0
569 ; SSE3-NEXT:    paddb %xmm2, %xmm0
570 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
571 ; SSE3-NEXT:    psrlw $4, %xmm1
572 ; SSE3-NEXT:    paddb %xmm0, %xmm1
573 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
574 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
575 ; SSE3-NEXT:    pcmpgtb %xmm1, %xmm0
576 ; SSE3-NEXT:    retq
578 ; SSSE3-LABEL: ult_4_v16i8:
579 ; SSSE3:       # %bb.0:
580 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
581 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
582 ; SSSE3-NEXT:    pand %xmm1, %xmm2
583 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
584 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
585 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
586 ; SSSE3-NEXT:    psrlw $4, %xmm0
587 ; SSSE3-NEXT:    pand %xmm1, %xmm0
588 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
589 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
590 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
591 ; SSSE3-NEXT:    pcmpgtb %xmm3, %xmm0
592 ; SSSE3-NEXT:    retq
594 ; SSE41-LABEL: ult_4_v16i8:
595 ; SSE41:       # %bb.0:
596 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
597 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
598 ; SSE41-NEXT:    pand %xmm1, %xmm2
599 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
600 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
601 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
602 ; SSE41-NEXT:    psrlw $4, %xmm0
603 ; SSE41-NEXT:    pand %xmm1, %xmm0
604 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
605 ; SSE41-NEXT:    paddb %xmm4, %xmm3
606 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
607 ; SSE41-NEXT:    pcmpgtb %xmm3, %xmm0
608 ; SSE41-NEXT:    retq
610 ; AVX1-LABEL: ult_4_v16i8:
611 ; AVX1:       # %bb.0:
612 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
613 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
614 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
615 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
616 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
617 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
618 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
619 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
620 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
621 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
622 ; AVX1-NEXT:    retq
624 ; AVX2-LABEL: ult_4_v16i8:
625 ; AVX2:       # %bb.0:
626 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
627 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
628 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
629 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
630 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
631 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
632 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
633 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
634 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
635 ; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
636 ; AVX2-NEXT:    retq
638 ; AVX512VPOPCNTDQ-LABEL: ult_4_v16i8:
639 ; AVX512VPOPCNTDQ:       # %bb.0:
640 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
641 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
642 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
643 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
644 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
645 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
646 ; AVX512VPOPCNTDQ-NEXT:    retq
648 ; AVX512VPOPCNTDQVL-LABEL: ult_4_v16i8:
649 ; AVX512VPOPCNTDQVL:       # %bb.0:
650 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
651 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
652 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
653 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
654 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
655 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
656 ; AVX512VPOPCNTDQVL-NEXT:    retq
658 ; BITALG_NOVLX-LABEL: ult_4_v16i8:
659 ; BITALG_NOVLX:       # %bb.0:
660 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
661 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
662 ; BITALG_NOVLX-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
663 ; BITALG_NOVLX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
664 ; BITALG_NOVLX-NEXT:    vzeroupper
665 ; BITALG_NOVLX-NEXT:    retq
667 ; BITALG-LABEL: ult_4_v16i8:
668 ; BITALG:       # %bb.0:
669 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
670 ; BITALG-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4]
671 ; BITALG-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
672 ; BITALG-NEXT:    retq
673   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
674   %3 = icmp ult <16 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>
675   %4 = sext <16 x i1> %3 to <16 x i8>
676   ret <16 x i8> %4
679 define <16 x i8> @ugt_4_v16i8(<16 x i8> %0) {
680 ; SSE2-LABEL: ugt_4_v16i8:
681 ; SSE2:       # %bb.0:
682 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
683 ; SSE2-NEXT:    psrlw $1, %xmm1
684 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
685 ; SSE2-NEXT:    psubb %xmm1, %xmm0
686 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
687 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
688 ; SSE2-NEXT:    pand %xmm1, %xmm2
689 ; SSE2-NEXT:    psrlw $2, %xmm0
690 ; SSE2-NEXT:    pand %xmm1, %xmm0
691 ; SSE2-NEXT:    paddb %xmm2, %xmm0
692 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
693 ; SSE2-NEXT:    psrlw $4, %xmm1
694 ; SSE2-NEXT:    paddb %xmm1, %xmm0
695 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
696 ; SSE2-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
697 ; SSE2-NEXT:    retq
699 ; SSE3-LABEL: ugt_4_v16i8:
700 ; SSE3:       # %bb.0:
701 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
702 ; SSE3-NEXT:    psrlw $1, %xmm1
703 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
704 ; SSE3-NEXT:    psubb %xmm1, %xmm0
705 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
706 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
707 ; SSE3-NEXT:    pand %xmm1, %xmm2
708 ; SSE3-NEXT:    psrlw $2, %xmm0
709 ; SSE3-NEXT:    pand %xmm1, %xmm0
710 ; SSE3-NEXT:    paddb %xmm2, %xmm0
711 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
712 ; SSE3-NEXT:    psrlw $4, %xmm1
713 ; SSE3-NEXT:    paddb %xmm1, %xmm0
714 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
715 ; SSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
716 ; SSE3-NEXT:    retq
718 ; SSSE3-LABEL: ugt_4_v16i8:
719 ; SSSE3:       # %bb.0:
720 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
721 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
722 ; SSSE3-NEXT:    pand %xmm2, %xmm3
723 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
724 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
725 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
726 ; SSSE3-NEXT:    psrlw $4, %xmm0
727 ; SSSE3-NEXT:    pand %xmm2, %xmm0
728 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
729 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
730 ; SSSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
731 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
732 ; SSSE3-NEXT:    retq
734 ; SSE41-LABEL: ugt_4_v16i8:
735 ; SSE41:       # %bb.0:
736 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
737 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
738 ; SSE41-NEXT:    pand %xmm2, %xmm3
739 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
740 ; SSE41-NEXT:    movdqa %xmm1, %xmm4
741 ; SSE41-NEXT:    pshufb %xmm3, %xmm4
742 ; SSE41-NEXT:    psrlw $4, %xmm0
743 ; SSE41-NEXT:    pand %xmm2, %xmm0
744 ; SSE41-NEXT:    pshufb %xmm0, %xmm1
745 ; SSE41-NEXT:    paddb %xmm4, %xmm1
746 ; SSE41-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
747 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
748 ; SSE41-NEXT:    retq
750 ; AVX1-LABEL: ugt_4_v16i8:
751 ; AVX1:       # %bb.0:
752 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
753 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
754 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
755 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
756 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
757 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
758 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
759 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
760 ; AVX1-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
761 ; AVX1-NEXT:    retq
763 ; AVX2-LABEL: ugt_4_v16i8:
764 ; AVX2:       # %bb.0:
765 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
766 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
767 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
768 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
769 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
770 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
771 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
772 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
773 ; AVX2-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
774 ; AVX2-NEXT:    retq
776 ; AVX512VPOPCNTDQ-LABEL: ugt_4_v16i8:
777 ; AVX512VPOPCNTDQ:       # %bb.0:
778 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
779 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
780 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
781 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
782 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
783 ; AVX512VPOPCNTDQ-NEXT:    retq
785 ; AVX512VPOPCNTDQVL-LABEL: ugt_4_v16i8:
786 ; AVX512VPOPCNTDQVL:       # %bb.0:
787 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
788 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
789 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
790 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
791 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
792 ; AVX512VPOPCNTDQVL-NEXT:    retq
794 ; BITALG_NOVLX-LABEL: ugt_4_v16i8:
795 ; BITALG_NOVLX:       # %bb.0:
796 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
797 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
798 ; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
799 ; BITALG_NOVLX-NEXT:    vzeroupper
800 ; BITALG_NOVLX-NEXT:    retq
802 ; BITALG-LABEL: ugt_4_v16i8:
803 ; BITALG:       # %bb.0:
804 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
805 ; BITALG-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
806 ; BITALG-NEXT:    retq
807   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
808   %3 = icmp ugt <16 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>
809   %4 = sext <16 x i1> %3 to <16 x i8>
810   ret <16 x i8> %4
813 define <16 x i8> @ult_5_v16i8(<16 x i8> %0) {
814 ; SSE2-LABEL: ult_5_v16i8:
815 ; SSE2:       # %bb.0:
816 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
817 ; SSE2-NEXT:    psrlw $1, %xmm1
818 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
819 ; SSE2-NEXT:    psubb %xmm1, %xmm0
820 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
821 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
822 ; SSE2-NEXT:    pand %xmm1, %xmm2
823 ; SSE2-NEXT:    psrlw $2, %xmm0
824 ; SSE2-NEXT:    pand %xmm1, %xmm0
825 ; SSE2-NEXT:    paddb %xmm2, %xmm0
826 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
827 ; SSE2-NEXT:    psrlw $4, %xmm1
828 ; SSE2-NEXT:    paddb %xmm0, %xmm1
829 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
830 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
831 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
832 ; SSE2-NEXT:    retq
834 ; SSE3-LABEL: ult_5_v16i8:
835 ; SSE3:       # %bb.0:
836 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
837 ; SSE3-NEXT:    psrlw $1, %xmm1
838 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
839 ; SSE3-NEXT:    psubb %xmm1, %xmm0
840 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
841 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
842 ; SSE3-NEXT:    pand %xmm1, %xmm2
843 ; SSE3-NEXT:    psrlw $2, %xmm0
844 ; SSE3-NEXT:    pand %xmm1, %xmm0
845 ; SSE3-NEXT:    paddb %xmm2, %xmm0
846 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
847 ; SSE3-NEXT:    psrlw $4, %xmm1
848 ; SSE3-NEXT:    paddb %xmm0, %xmm1
849 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
850 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
851 ; SSE3-NEXT:    pcmpgtb %xmm1, %xmm0
852 ; SSE3-NEXT:    retq
854 ; SSSE3-LABEL: ult_5_v16i8:
855 ; SSSE3:       # %bb.0:
856 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
857 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
858 ; SSSE3-NEXT:    pand %xmm1, %xmm2
859 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
860 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
861 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
862 ; SSSE3-NEXT:    psrlw $4, %xmm0
863 ; SSSE3-NEXT:    pand %xmm1, %xmm0
864 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
865 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
866 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
867 ; SSSE3-NEXT:    pcmpgtb %xmm3, %xmm0
868 ; SSSE3-NEXT:    retq
870 ; SSE41-LABEL: ult_5_v16i8:
871 ; SSE41:       # %bb.0:
872 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
873 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
874 ; SSE41-NEXT:    pand %xmm1, %xmm2
875 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
876 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
877 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
878 ; SSE41-NEXT:    psrlw $4, %xmm0
879 ; SSE41-NEXT:    pand %xmm1, %xmm0
880 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
881 ; SSE41-NEXT:    paddb %xmm4, %xmm3
882 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
883 ; SSE41-NEXT:    pcmpgtb %xmm3, %xmm0
884 ; SSE41-NEXT:    retq
886 ; AVX1-LABEL: ult_5_v16i8:
887 ; AVX1:       # %bb.0:
888 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
889 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
890 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
891 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
892 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
893 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
894 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
895 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
896 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
897 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
898 ; AVX1-NEXT:    retq
900 ; AVX2-LABEL: ult_5_v16i8:
901 ; AVX2:       # %bb.0:
902 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
903 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
904 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
905 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
906 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
907 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
908 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
909 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
910 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
911 ; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
912 ; AVX2-NEXT:    retq
914 ; AVX512VPOPCNTDQ-LABEL: ult_5_v16i8:
915 ; AVX512VPOPCNTDQ:       # %bb.0:
916 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
917 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
918 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
919 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
920 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
921 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
922 ; AVX512VPOPCNTDQ-NEXT:    retq
924 ; AVX512VPOPCNTDQVL-LABEL: ult_5_v16i8:
925 ; AVX512VPOPCNTDQVL:       # %bb.0:
926 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
927 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
928 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
929 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
930 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
931 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
932 ; AVX512VPOPCNTDQVL-NEXT:    retq
934 ; BITALG_NOVLX-LABEL: ult_5_v16i8:
935 ; BITALG_NOVLX:       # %bb.0:
936 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
937 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
938 ; BITALG_NOVLX-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
939 ; BITALG_NOVLX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
940 ; BITALG_NOVLX-NEXT:    vzeroupper
941 ; BITALG_NOVLX-NEXT:    retq
943 ; BITALG-LABEL: ult_5_v16i8:
944 ; BITALG:       # %bb.0:
945 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
946 ; BITALG-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5]
947 ; BITALG-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
948 ; BITALG-NEXT:    retq
949   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
950   %3 = icmp ult <16 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>
951   %4 = sext <16 x i1> %3 to <16 x i8>
952   ret <16 x i8> %4
955 define <16 x i8> @ugt_5_v16i8(<16 x i8> %0) {
956 ; SSE2-LABEL: ugt_5_v16i8:
957 ; SSE2:       # %bb.0:
958 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
959 ; SSE2-NEXT:    psrlw $1, %xmm1
960 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
961 ; SSE2-NEXT:    psubb %xmm1, %xmm0
962 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
963 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
964 ; SSE2-NEXT:    pand %xmm1, %xmm2
965 ; SSE2-NEXT:    psrlw $2, %xmm0
966 ; SSE2-NEXT:    pand %xmm1, %xmm0
967 ; SSE2-NEXT:    paddb %xmm2, %xmm0
968 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
969 ; SSE2-NEXT:    psrlw $4, %xmm1
970 ; SSE2-NEXT:    paddb %xmm1, %xmm0
971 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
972 ; SSE2-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
973 ; SSE2-NEXT:    retq
975 ; SSE3-LABEL: ugt_5_v16i8:
976 ; SSE3:       # %bb.0:
977 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
978 ; SSE3-NEXT:    psrlw $1, %xmm1
979 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
980 ; SSE3-NEXT:    psubb %xmm1, %xmm0
981 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
982 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
983 ; SSE3-NEXT:    pand %xmm1, %xmm2
984 ; SSE3-NEXT:    psrlw $2, %xmm0
985 ; SSE3-NEXT:    pand %xmm1, %xmm0
986 ; SSE3-NEXT:    paddb %xmm2, %xmm0
987 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
988 ; SSE3-NEXT:    psrlw $4, %xmm1
989 ; SSE3-NEXT:    paddb %xmm1, %xmm0
990 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
991 ; SSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
992 ; SSE3-NEXT:    retq
994 ; SSSE3-LABEL: ugt_5_v16i8:
995 ; SSSE3:       # %bb.0:
996 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
997 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
998 ; SSSE3-NEXT:    pand %xmm2, %xmm3
999 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1000 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
1001 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
1002 ; SSSE3-NEXT:    psrlw $4, %xmm0
1003 ; SSSE3-NEXT:    pand %xmm2, %xmm0
1004 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
1005 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
1006 ; SSSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1007 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1008 ; SSSE3-NEXT:    retq
1010 ; SSE41-LABEL: ugt_5_v16i8:
1011 ; SSE41:       # %bb.0:
1012 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1013 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
1014 ; SSE41-NEXT:    pand %xmm2, %xmm3
1015 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1016 ; SSE41-NEXT:    movdqa %xmm1, %xmm4
1017 ; SSE41-NEXT:    pshufb %xmm3, %xmm4
1018 ; SSE41-NEXT:    psrlw $4, %xmm0
1019 ; SSE41-NEXT:    pand %xmm2, %xmm0
1020 ; SSE41-NEXT:    pshufb %xmm0, %xmm1
1021 ; SSE41-NEXT:    paddb %xmm4, %xmm1
1022 ; SSE41-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1023 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1024 ; SSE41-NEXT:    retq
1026 ; AVX1-LABEL: ugt_5_v16i8:
1027 ; AVX1:       # %bb.0:
1028 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1029 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1030 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1031 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1032 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1033 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1034 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1035 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1036 ; AVX1-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1037 ; AVX1-NEXT:    retq
1039 ; AVX2-LABEL: ugt_5_v16i8:
1040 ; AVX2:       # %bb.0:
1041 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1042 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
1043 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1044 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1045 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
1046 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1047 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1048 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1049 ; AVX2-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1050 ; AVX2-NEXT:    retq
1052 ; AVX512VPOPCNTDQ-LABEL: ugt_5_v16i8:
1053 ; AVX512VPOPCNTDQ:       # %bb.0:
1054 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1055 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1056 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
1057 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1058 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
1059 ; AVX512VPOPCNTDQ-NEXT:    retq
1061 ; AVX512VPOPCNTDQVL-LABEL: ugt_5_v16i8:
1062 ; AVX512VPOPCNTDQVL:       # %bb.0:
1063 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1064 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1065 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
1066 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1067 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
1068 ; AVX512VPOPCNTDQVL-NEXT:    retq
1070 ; BITALG_NOVLX-LABEL: ugt_5_v16i8:
1071 ; BITALG_NOVLX:       # %bb.0:
1072 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1073 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
1074 ; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1075 ; BITALG_NOVLX-NEXT:    vzeroupper
1076 ; BITALG_NOVLX-NEXT:    retq
1078 ; BITALG-LABEL: ugt_5_v16i8:
1079 ; BITALG:       # %bb.0:
1080 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
1081 ; BITALG-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1082 ; BITALG-NEXT:    retq
1083   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
1084   %3 = icmp ugt <16 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>
1085   %4 = sext <16 x i1> %3 to <16 x i8>
1086   ret <16 x i8> %4
1089 define <16 x i8> @ult_6_v16i8(<16 x i8> %0) {
1090 ; SSE2-LABEL: ult_6_v16i8:
1091 ; SSE2:       # %bb.0:
1092 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1093 ; SSE2-NEXT:    psrlw $1, %xmm1
1094 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1095 ; SSE2-NEXT:    psubb %xmm1, %xmm0
1096 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1097 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1098 ; SSE2-NEXT:    pand %xmm1, %xmm2
1099 ; SSE2-NEXT:    psrlw $2, %xmm0
1100 ; SSE2-NEXT:    pand %xmm1, %xmm0
1101 ; SSE2-NEXT:    paddb %xmm2, %xmm0
1102 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1103 ; SSE2-NEXT:    psrlw $4, %xmm1
1104 ; SSE2-NEXT:    paddb %xmm0, %xmm1
1105 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1106 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1107 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
1108 ; SSE2-NEXT:    retq
1110 ; SSE3-LABEL: ult_6_v16i8:
1111 ; SSE3:       # %bb.0:
1112 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1113 ; SSE3-NEXT:    psrlw $1, %xmm1
1114 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1115 ; SSE3-NEXT:    psubb %xmm1, %xmm0
1116 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1117 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
1118 ; SSE3-NEXT:    pand %xmm1, %xmm2
1119 ; SSE3-NEXT:    psrlw $2, %xmm0
1120 ; SSE3-NEXT:    pand %xmm1, %xmm0
1121 ; SSE3-NEXT:    paddb %xmm2, %xmm0
1122 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1123 ; SSE3-NEXT:    psrlw $4, %xmm1
1124 ; SSE3-NEXT:    paddb %xmm0, %xmm1
1125 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1126 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1127 ; SSE3-NEXT:    pcmpgtb %xmm1, %xmm0
1128 ; SSE3-NEXT:    retq
1130 ; SSSE3-LABEL: ult_6_v16i8:
1131 ; SSSE3:       # %bb.0:
1132 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1133 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1134 ; SSSE3-NEXT:    pand %xmm1, %xmm2
1135 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1136 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
1137 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
1138 ; SSSE3-NEXT:    psrlw $4, %xmm0
1139 ; SSSE3-NEXT:    pand %xmm1, %xmm0
1140 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
1141 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
1142 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1143 ; SSSE3-NEXT:    pcmpgtb %xmm3, %xmm0
1144 ; SSSE3-NEXT:    retq
1146 ; SSE41-LABEL: ult_6_v16i8:
1147 ; SSE41:       # %bb.0:
1148 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1149 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
1150 ; SSE41-NEXT:    pand %xmm1, %xmm2
1151 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1152 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
1153 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
1154 ; SSE41-NEXT:    psrlw $4, %xmm0
1155 ; SSE41-NEXT:    pand %xmm1, %xmm0
1156 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
1157 ; SSE41-NEXT:    paddb %xmm4, %xmm3
1158 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1159 ; SSE41-NEXT:    pcmpgtb %xmm3, %xmm0
1160 ; SSE41-NEXT:    retq
1162 ; AVX1-LABEL: ult_6_v16i8:
1163 ; AVX1:       # %bb.0:
1164 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1165 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1166 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1167 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1168 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1169 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1170 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1171 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1172 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1173 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1174 ; AVX1-NEXT:    retq
1176 ; AVX2-LABEL: ult_6_v16i8:
1177 ; AVX2:       # %bb.0:
1178 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1179 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
1180 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1181 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1182 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
1183 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1184 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1185 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1186 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1187 ; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1188 ; AVX2-NEXT:    retq
1190 ; AVX512VPOPCNTDQ-LABEL: ult_6_v16i8:
1191 ; AVX512VPOPCNTDQ:       # %bb.0:
1192 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1193 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1194 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
1195 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1196 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1197 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
1198 ; AVX512VPOPCNTDQ-NEXT:    retq
1200 ; AVX512VPOPCNTDQVL-LABEL: ult_6_v16i8:
1201 ; AVX512VPOPCNTDQVL:       # %bb.0:
1202 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1203 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1204 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
1205 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1206 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1207 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
1208 ; AVX512VPOPCNTDQVL-NEXT:    retq
1210 ; BITALG_NOVLX-LABEL: ult_6_v16i8:
1211 ; BITALG_NOVLX:       # %bb.0:
1212 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1213 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
1214 ; BITALG_NOVLX-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1215 ; BITALG_NOVLX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1216 ; BITALG_NOVLX-NEXT:    vzeroupper
1217 ; BITALG_NOVLX-NEXT:    retq
1219 ; BITALG-LABEL: ult_6_v16i8:
1220 ; BITALG:       # %bb.0:
1221 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
1222 ; BITALG-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6]
1223 ; BITALG-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1224 ; BITALG-NEXT:    retq
1225   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
1226   %3 = icmp ult <16 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>
1227   %4 = sext <16 x i1> %3 to <16 x i8>
1228   ret <16 x i8> %4
1231 define <16 x i8> @ugt_6_v16i8(<16 x i8> %0) {
1232 ; SSE2-LABEL: ugt_6_v16i8:
1233 ; SSE2:       # %bb.0:
1234 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1235 ; SSE2-NEXT:    psrlw $1, %xmm1
1236 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1237 ; SSE2-NEXT:    psubb %xmm1, %xmm0
1238 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1239 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1240 ; SSE2-NEXT:    pand %xmm1, %xmm2
1241 ; SSE2-NEXT:    psrlw $2, %xmm0
1242 ; SSE2-NEXT:    pand %xmm1, %xmm0
1243 ; SSE2-NEXT:    paddb %xmm2, %xmm0
1244 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1245 ; SSE2-NEXT:    psrlw $4, %xmm1
1246 ; SSE2-NEXT:    paddb %xmm1, %xmm0
1247 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1248 ; SSE2-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1249 ; SSE2-NEXT:    retq
1251 ; SSE3-LABEL: ugt_6_v16i8:
1252 ; SSE3:       # %bb.0:
1253 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1254 ; SSE3-NEXT:    psrlw $1, %xmm1
1255 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1256 ; SSE3-NEXT:    psubb %xmm1, %xmm0
1257 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1258 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
1259 ; SSE3-NEXT:    pand %xmm1, %xmm2
1260 ; SSE3-NEXT:    psrlw $2, %xmm0
1261 ; SSE3-NEXT:    pand %xmm1, %xmm0
1262 ; SSE3-NEXT:    paddb %xmm2, %xmm0
1263 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1264 ; SSE3-NEXT:    psrlw $4, %xmm1
1265 ; SSE3-NEXT:    paddb %xmm1, %xmm0
1266 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1267 ; SSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1268 ; SSE3-NEXT:    retq
1270 ; SSSE3-LABEL: ugt_6_v16i8:
1271 ; SSSE3:       # %bb.0:
1272 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1273 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
1274 ; SSSE3-NEXT:    pand %xmm2, %xmm3
1275 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1276 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
1277 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
1278 ; SSSE3-NEXT:    psrlw $4, %xmm0
1279 ; SSSE3-NEXT:    pand %xmm2, %xmm0
1280 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
1281 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
1282 ; SSSE3-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1283 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
1284 ; SSSE3-NEXT:    retq
1286 ; SSE41-LABEL: ugt_6_v16i8:
1287 ; SSE41:       # %bb.0:
1288 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1289 ; SSE41-NEXT:    movdqa %xmm0, %xmm3
1290 ; SSE41-NEXT:    pand %xmm2, %xmm3
1291 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1292 ; SSE41-NEXT:    movdqa %xmm1, %xmm4
1293 ; SSE41-NEXT:    pshufb %xmm3, %xmm4
1294 ; SSE41-NEXT:    psrlw $4, %xmm0
1295 ; SSE41-NEXT:    pand %xmm2, %xmm0
1296 ; SSE41-NEXT:    pshufb %xmm0, %xmm1
1297 ; SSE41-NEXT:    paddb %xmm4, %xmm1
1298 ; SSE41-NEXT:    pcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1299 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1300 ; SSE41-NEXT:    retq
1302 ; AVX1-LABEL: ugt_6_v16i8:
1303 ; AVX1:       # %bb.0:
1304 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1305 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1306 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1307 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1308 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1309 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1310 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1311 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1312 ; AVX1-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1313 ; AVX1-NEXT:    retq
1315 ; AVX2-LABEL: ugt_6_v16i8:
1316 ; AVX2:       # %bb.0:
1317 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1318 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
1319 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1320 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1321 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
1322 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1323 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1324 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1325 ; AVX2-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1326 ; AVX2-NEXT:    retq
1328 ; AVX512VPOPCNTDQ-LABEL: ugt_6_v16i8:
1329 ; AVX512VPOPCNTDQ:       # %bb.0:
1330 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1331 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1332 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
1333 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1334 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
1335 ; AVX512VPOPCNTDQ-NEXT:    retq
1337 ; AVX512VPOPCNTDQVL-LABEL: ugt_6_v16i8:
1338 ; AVX512VPOPCNTDQVL:       # %bb.0:
1339 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1340 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1341 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
1342 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1343 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
1344 ; AVX512VPOPCNTDQVL-NEXT:    retq
1346 ; BITALG_NOVLX-LABEL: ugt_6_v16i8:
1347 ; BITALG_NOVLX:       # %bb.0:
1348 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1349 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
1350 ; BITALG_NOVLX-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1351 ; BITALG_NOVLX-NEXT:    vzeroupper
1352 ; BITALG_NOVLX-NEXT:    retq
1354 ; BITALG-LABEL: ugt_6_v16i8:
1355 ; BITALG:       # %bb.0:
1356 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
1357 ; BITALG-NEXT:    vpcmpgtb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1358 ; BITALG-NEXT:    retq
1359   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
1360   %3 = icmp ugt <16 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>
1361   %4 = sext <16 x i1> %3 to <16 x i8>
1362   ret <16 x i8> %4
1365 define <16 x i8> @ult_7_v16i8(<16 x i8> %0) {
1366 ; SSE2-LABEL: ult_7_v16i8:
1367 ; SSE2:       # %bb.0:
1368 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1369 ; SSE2-NEXT:    psrlw $1, %xmm1
1370 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1371 ; SSE2-NEXT:    psubb %xmm1, %xmm0
1372 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1373 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1374 ; SSE2-NEXT:    pand %xmm1, %xmm2
1375 ; SSE2-NEXT:    psrlw $2, %xmm0
1376 ; SSE2-NEXT:    pand %xmm1, %xmm0
1377 ; SSE2-NEXT:    paddb %xmm2, %xmm0
1378 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1379 ; SSE2-NEXT:    psrlw $4, %xmm1
1380 ; SSE2-NEXT:    paddb %xmm0, %xmm1
1381 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1382 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1383 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm0
1384 ; SSE2-NEXT:    retq
1386 ; SSE3-LABEL: ult_7_v16i8:
1387 ; SSE3:       # %bb.0:
1388 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1389 ; SSE3-NEXT:    psrlw $1, %xmm1
1390 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1391 ; SSE3-NEXT:    psubb %xmm1, %xmm0
1392 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1393 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
1394 ; SSE3-NEXT:    pand %xmm1, %xmm2
1395 ; SSE3-NEXT:    psrlw $2, %xmm0
1396 ; SSE3-NEXT:    pand %xmm1, %xmm0
1397 ; SSE3-NEXT:    paddb %xmm2, %xmm0
1398 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1399 ; SSE3-NEXT:    psrlw $4, %xmm1
1400 ; SSE3-NEXT:    paddb %xmm0, %xmm1
1401 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1402 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1403 ; SSE3-NEXT:    pcmpgtb %xmm1, %xmm0
1404 ; SSE3-NEXT:    retq
1406 ; SSSE3-LABEL: ult_7_v16i8:
1407 ; SSSE3:       # %bb.0:
1408 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1409 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1410 ; SSSE3-NEXT:    pand %xmm1, %xmm2
1411 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1412 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
1413 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
1414 ; SSSE3-NEXT:    psrlw $4, %xmm0
1415 ; SSSE3-NEXT:    pand %xmm1, %xmm0
1416 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
1417 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
1418 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1419 ; SSSE3-NEXT:    pcmpgtb %xmm3, %xmm0
1420 ; SSSE3-NEXT:    retq
1422 ; SSE41-LABEL: ult_7_v16i8:
1423 ; SSE41:       # %bb.0:
1424 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1425 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
1426 ; SSE41-NEXT:    pand %xmm1, %xmm2
1427 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1428 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
1429 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
1430 ; SSE41-NEXT:    psrlw $4, %xmm0
1431 ; SSE41-NEXT:    pand %xmm1, %xmm0
1432 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
1433 ; SSE41-NEXT:    paddb %xmm4, %xmm3
1434 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1435 ; SSE41-NEXT:    pcmpgtb %xmm3, %xmm0
1436 ; SSE41-NEXT:    retq
1438 ; AVX1-LABEL: ult_7_v16i8:
1439 ; AVX1:       # %bb.0:
1440 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1441 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1442 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1443 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1444 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1445 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1446 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1447 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1448 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1449 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1450 ; AVX1-NEXT:    retq
1452 ; AVX2-LABEL: ult_7_v16i8:
1453 ; AVX2:       # %bb.0:
1454 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1455 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
1456 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1457 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1458 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
1459 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1460 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1461 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1462 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1463 ; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1464 ; AVX2-NEXT:    retq
1466 ; AVX512VPOPCNTDQ-LABEL: ult_7_v16i8:
1467 ; AVX512VPOPCNTDQ:       # %bb.0:
1468 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1469 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1470 ; AVX512VPOPCNTDQ-NEXT:    vpmovdb %zmm0, %xmm0
1471 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1472 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1473 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
1474 ; AVX512VPOPCNTDQ-NEXT:    retq
1476 ; AVX512VPOPCNTDQVL-LABEL: ult_7_v16i8:
1477 ; AVX512VPOPCNTDQVL:       # %bb.0:
1478 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
1479 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %zmm0, %zmm0
1480 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdb %zmm0, %xmm0
1481 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1482 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1483 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
1484 ; AVX512VPOPCNTDQVL-NEXT:    retq
1486 ; BITALG_NOVLX-LABEL: ult_7_v16i8:
1487 ; BITALG_NOVLX:       # %bb.0:
1488 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1489 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
1490 ; BITALG_NOVLX-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1491 ; BITALG_NOVLX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1492 ; BITALG_NOVLX-NEXT:    vzeroupper
1493 ; BITALG_NOVLX-NEXT:    retq
1495 ; BITALG-LABEL: ult_7_v16i8:
1496 ; BITALG:       # %bb.0:
1497 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
1498 ; BITALG-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]
1499 ; BITALG-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
1500 ; BITALG-NEXT:    retq
1501   %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
1502   %3 = icmp ult <16 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>
1503   %4 = sext <16 x i1> %3 to <16 x i8>
1504   ret <16 x i8> %4
1507 define <8 x i16> @ugt_1_v8i16(<8 x i16> %0) {
1508 ; SSE-LABEL: ugt_1_v8i16:
1509 ; SSE:       # %bb.0:
1510 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
1511 ; SSE-NEXT:    movdqa %xmm0, %xmm2
1512 ; SSE-NEXT:    paddw %xmm1, %xmm2
1513 ; SSE-NEXT:    pand %xmm2, %xmm0
1514 ; SSE-NEXT:    pxor %xmm2, %xmm2
1515 ; SSE-NEXT:    pcmpeqw %xmm2, %xmm0
1516 ; SSE-NEXT:    pxor %xmm1, %xmm0
1517 ; SSE-NEXT:    retq
1519 ; AVX1-LABEL: ugt_1_v8i16:
1520 ; AVX1:       # %bb.0:
1521 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1522 ; AVX1-NEXT:    vpaddw %xmm1, %xmm0, %xmm2
1523 ; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
1524 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1525 ; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
1526 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1527 ; AVX1-NEXT:    retq
1529 ; AVX2-LABEL: ugt_1_v8i16:
1530 ; AVX2:       # %bb.0:
1531 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1532 ; AVX2-NEXT:    vpaddw %xmm1, %xmm0, %xmm2
1533 ; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0
1534 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
1535 ; AVX2-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
1536 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1537 ; AVX2-NEXT:    retq
1539 ; AVX512VPOPCNTDQ-LABEL: ugt_1_v8i16:
1540 ; AVX512VPOPCNTDQ:       # %bb.0:
1541 ; AVX512VPOPCNTDQ-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1542 ; AVX512VPOPCNTDQ-NEXT:    vpaddw %xmm1, %xmm0, %xmm1
1543 ; AVX512VPOPCNTDQ-NEXT:    vpand %xmm1, %xmm0, %xmm0
1544 ; AVX512VPOPCNTDQ-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1545 ; AVX512VPOPCNTDQ-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
1546 ; AVX512VPOPCNTDQ-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
1547 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1548 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
1549 ; AVX512VPOPCNTDQ-NEXT:    retq
1551 ; AVX512VPOPCNTDQVL-LABEL: ugt_1_v8i16:
1552 ; AVX512VPOPCNTDQVL:       # %bb.0:
1553 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1554 ; AVX512VPOPCNTDQVL-NEXT:    vpaddw %xmm1, %xmm0, %xmm1
1555 ; AVX512VPOPCNTDQVL-NEXT:    vpand %xmm1, %xmm0, %xmm0
1556 ; AVX512VPOPCNTDQVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1557 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
1558 ; AVX512VPOPCNTDQVL-NEXT:    vpternlogq $15, %xmm0, %xmm0, %xmm0
1559 ; AVX512VPOPCNTDQVL-NEXT:    retq
1561 ; BITALG_NOVLX-LABEL: ugt_1_v8i16:
1562 ; BITALG_NOVLX:       # %bb.0:
1563 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1564 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1565 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1566 ; BITALG_NOVLX-NEXT:    vzeroupper
1567 ; BITALG_NOVLX-NEXT:    retq
1569 ; BITALG-LABEL: ugt_1_v8i16:
1570 ; BITALG:       # %bb.0:
1571 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
1572 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1573 ; BITALG-NEXT:    retq
1574   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1575   %3 = icmp ugt <8 x i16> %2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1576   %4 = sext <8 x i1> %3 to <8 x i16>
1577   ret <8 x i16> %4
1580 define <8 x i16> @ult_2_v8i16(<8 x i16> %0) {
1581 ; SSE-LABEL: ult_2_v8i16:
1582 ; SSE:       # %bb.0:
1583 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
1584 ; SSE-NEXT:    paddw %xmm0, %xmm1
1585 ; SSE-NEXT:    pand %xmm1, %xmm0
1586 ; SSE-NEXT:    pxor %xmm1, %xmm1
1587 ; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
1588 ; SSE-NEXT:    retq
1590 ; AVX-LABEL: ult_2_v8i16:
1591 ; AVX:       # %bb.0:
1592 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1593 ; AVX-NEXT:    vpaddw %xmm1, %xmm0, %xmm1
1594 ; AVX-NEXT:    vpand %xmm1, %xmm0, %xmm0
1595 ; AVX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
1596 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
1597 ; AVX-NEXT:    retq
1599 ; BITALG_NOVLX-LABEL: ult_2_v8i16:
1600 ; BITALG_NOVLX:       # %bb.0:
1601 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1602 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1603 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2]
1604 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1605 ; BITALG_NOVLX-NEXT:    vzeroupper
1606 ; BITALG_NOVLX-NEXT:    retq
1608 ; BITALG-LABEL: ult_2_v8i16:
1609 ; BITALG:       # %bb.0:
1610 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
1611 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [2,2,2,2,2,2,2,2]
1612 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1613 ; BITALG-NEXT:    retq
1614   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1615   %3 = icmp ult <8 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1616   %4 = sext <8 x i1> %3 to <8 x i16>
1617   ret <8 x i16> %4
1620 define <8 x i16> @ugt_2_v8i16(<8 x i16> %0) {
1621 ; SSE2-LABEL: ugt_2_v8i16:
1622 ; SSE2:       # %bb.0:
1623 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1624 ; SSE2-NEXT:    psrlw $1, %xmm1
1625 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1626 ; SSE2-NEXT:    psubb %xmm1, %xmm0
1627 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1628 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1629 ; SSE2-NEXT:    pand %xmm1, %xmm2
1630 ; SSE2-NEXT:    psrlw $2, %xmm0
1631 ; SSE2-NEXT:    pand %xmm1, %xmm0
1632 ; SSE2-NEXT:    paddb %xmm2, %xmm0
1633 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1634 ; SSE2-NEXT:    psrlw $4, %xmm1
1635 ; SSE2-NEXT:    paddb %xmm1, %xmm0
1636 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1637 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1638 ; SSE2-NEXT:    psllw $8, %xmm1
1639 ; SSE2-NEXT:    paddb %xmm1, %xmm0
1640 ; SSE2-NEXT:    psrlw $8, %xmm0
1641 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1642 ; SSE2-NEXT:    retq
1644 ; SSE3-LABEL: ugt_2_v8i16:
1645 ; SSE3:       # %bb.0:
1646 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1647 ; SSE3-NEXT:    psrlw $1, %xmm1
1648 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1649 ; SSE3-NEXT:    psubb %xmm1, %xmm0
1650 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1651 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
1652 ; SSE3-NEXT:    pand %xmm1, %xmm2
1653 ; SSE3-NEXT:    psrlw $2, %xmm0
1654 ; SSE3-NEXT:    pand %xmm1, %xmm0
1655 ; SSE3-NEXT:    paddb %xmm2, %xmm0
1656 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1657 ; SSE3-NEXT:    psrlw $4, %xmm1
1658 ; SSE3-NEXT:    paddb %xmm1, %xmm0
1659 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1660 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1661 ; SSE3-NEXT:    psllw $8, %xmm1
1662 ; SSE3-NEXT:    paddb %xmm1, %xmm0
1663 ; SSE3-NEXT:    psrlw $8, %xmm0
1664 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1665 ; SSE3-NEXT:    retq
1667 ; SSSE3-LABEL: ugt_2_v8i16:
1668 ; SSSE3:       # %bb.0:
1669 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1670 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1671 ; SSSE3-NEXT:    pand %xmm1, %xmm2
1672 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1673 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
1674 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
1675 ; SSSE3-NEXT:    psrlw $4, %xmm0
1676 ; SSSE3-NEXT:    pand %xmm1, %xmm0
1677 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
1678 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
1679 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
1680 ; SSSE3-NEXT:    psllw $8, %xmm0
1681 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
1682 ; SSSE3-NEXT:    psrlw $8, %xmm0
1683 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1684 ; SSSE3-NEXT:    retq
1686 ; SSE41-LABEL: ugt_2_v8i16:
1687 ; SSE41:       # %bb.0:
1688 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1689 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
1690 ; SSE41-NEXT:    pand %xmm1, %xmm2
1691 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1692 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
1693 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
1694 ; SSE41-NEXT:    psrlw $4, %xmm0
1695 ; SSE41-NEXT:    pand %xmm1, %xmm0
1696 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
1697 ; SSE41-NEXT:    paddb %xmm4, %xmm3
1698 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
1699 ; SSE41-NEXT:    psllw $8, %xmm0
1700 ; SSE41-NEXT:    paddb %xmm3, %xmm0
1701 ; SSE41-NEXT:    psrlw $8, %xmm0
1702 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1703 ; SSE41-NEXT:    retq
1705 ; AVX1-LABEL: ugt_2_v8i16:
1706 ; AVX1:       # %bb.0:
1707 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1708 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1709 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1710 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1711 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1712 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1713 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1714 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1715 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1716 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1717 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1718 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1719 ; AVX1-NEXT:    retq
1721 ; AVX2-LABEL: ugt_2_v8i16:
1722 ; AVX2:       # %bb.0:
1723 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1724 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
1725 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1726 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1727 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
1728 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1729 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1730 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1731 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
1732 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1733 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
1734 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1735 ; AVX2-NEXT:    retq
1737 ; AVX512VPOPCNTDQ-LABEL: ugt_2_v8i16:
1738 ; AVX512VPOPCNTDQ:       # %bb.0:
1739 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1740 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1741 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1742 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1743 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
1744 ; AVX512VPOPCNTDQ-NEXT:    retq
1746 ; AVX512VPOPCNTDQVL-LABEL: ugt_2_v8i16:
1747 ; AVX512VPOPCNTDQVL:       # %bb.0:
1748 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1749 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
1750 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
1751 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1752 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
1753 ; AVX512VPOPCNTDQVL-NEXT:    retq
1755 ; BITALG_NOVLX-LABEL: ugt_2_v8i16:
1756 ; BITALG_NOVLX:       # %bb.0:
1757 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1758 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1759 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1760 ; BITALG_NOVLX-NEXT:    vzeroupper
1761 ; BITALG_NOVLX-NEXT:    retq
1763 ; BITALG-LABEL: ugt_2_v8i16:
1764 ; BITALG:       # %bb.0:
1765 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
1766 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1767 ; BITALG-NEXT:    retq
1768   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1769   %3 = icmp ugt <8 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1770   %4 = sext <8 x i1> %3 to <8 x i16>
1771   ret <8 x i16> %4
1774 define <8 x i16> @ult_3_v8i16(<8 x i16> %0) {
1775 ; SSE2-LABEL: ult_3_v8i16:
1776 ; SSE2:       # %bb.0:
1777 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1778 ; SSE2-NEXT:    psrlw $1, %xmm1
1779 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1780 ; SSE2-NEXT:    psubb %xmm1, %xmm0
1781 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1782 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1783 ; SSE2-NEXT:    pand %xmm1, %xmm2
1784 ; SSE2-NEXT:    psrlw $2, %xmm0
1785 ; SSE2-NEXT:    pand %xmm1, %xmm0
1786 ; SSE2-NEXT:    paddb %xmm2, %xmm0
1787 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1788 ; SSE2-NEXT:    psrlw $4, %xmm1
1789 ; SSE2-NEXT:    paddb %xmm0, %xmm1
1790 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1791 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1792 ; SSE2-NEXT:    psllw $8, %xmm2
1793 ; SSE2-NEXT:    paddb %xmm1, %xmm2
1794 ; SSE2-NEXT:    psrlw $8, %xmm2
1795 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3,3,3,3,3]
1796 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
1797 ; SSE2-NEXT:    retq
1799 ; SSE3-LABEL: ult_3_v8i16:
1800 ; SSE3:       # %bb.0:
1801 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1802 ; SSE3-NEXT:    psrlw $1, %xmm1
1803 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1804 ; SSE3-NEXT:    psubb %xmm1, %xmm0
1805 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1806 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
1807 ; SSE3-NEXT:    pand %xmm1, %xmm2
1808 ; SSE3-NEXT:    psrlw $2, %xmm0
1809 ; SSE3-NEXT:    pand %xmm1, %xmm0
1810 ; SSE3-NEXT:    paddb %xmm2, %xmm0
1811 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1812 ; SSE3-NEXT:    psrlw $4, %xmm1
1813 ; SSE3-NEXT:    paddb %xmm0, %xmm1
1814 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1815 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
1816 ; SSE3-NEXT:    psllw $8, %xmm2
1817 ; SSE3-NEXT:    paddb %xmm1, %xmm2
1818 ; SSE3-NEXT:    psrlw $8, %xmm2
1819 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3,3,3,3,3]
1820 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
1821 ; SSE3-NEXT:    retq
1823 ; SSSE3-LABEL: ult_3_v8i16:
1824 ; SSSE3:       # %bb.0:
1825 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1826 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1827 ; SSSE3-NEXT:    pand %xmm1, %xmm2
1828 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1829 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
1830 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
1831 ; SSSE3-NEXT:    psrlw $4, %xmm0
1832 ; SSSE3-NEXT:    pand %xmm1, %xmm0
1833 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
1834 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
1835 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
1836 ; SSSE3-NEXT:    psllw $8, %xmm1
1837 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
1838 ; SSSE3-NEXT:    psrlw $8, %xmm1
1839 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3,3,3,3,3]
1840 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
1841 ; SSSE3-NEXT:    retq
1843 ; SSE41-LABEL: ult_3_v8i16:
1844 ; SSE41:       # %bb.0:
1845 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1846 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
1847 ; SSE41-NEXT:    pand %xmm1, %xmm2
1848 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1849 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
1850 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
1851 ; SSE41-NEXT:    psrlw $4, %xmm0
1852 ; SSE41-NEXT:    pand %xmm1, %xmm0
1853 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
1854 ; SSE41-NEXT:    paddb %xmm4, %xmm3
1855 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
1856 ; SSE41-NEXT:    psllw $8, %xmm1
1857 ; SSE41-NEXT:    paddb %xmm3, %xmm1
1858 ; SSE41-NEXT:    psrlw $8, %xmm1
1859 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3,3,3,3,3]
1860 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
1861 ; SSE41-NEXT:    retq
1863 ; AVX1-LABEL: ult_3_v8i16:
1864 ; AVX1:       # %bb.0:
1865 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1866 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
1867 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1868 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1869 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
1870 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
1871 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1872 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1873 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
1874 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1875 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
1876 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]
1877 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1878 ; AVX1-NEXT:    retq
1880 ; AVX2-LABEL: ult_3_v8i16:
1881 ; AVX2:       # %bb.0:
1882 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1883 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
1884 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1885 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
1886 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
1887 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
1888 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
1889 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
1890 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
1891 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
1892 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
1893 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]
1894 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1895 ; AVX2-NEXT:    retq
1897 ; AVX512VPOPCNTDQ-LABEL: ult_3_v8i16:
1898 ; AVX512VPOPCNTDQ:       # %bb.0:
1899 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1900 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
1901 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
1902 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]
1903 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1904 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
1905 ; AVX512VPOPCNTDQ-NEXT:    retq
1907 ; AVX512VPOPCNTDQVL-LABEL: ult_3_v8i16:
1908 ; AVX512VPOPCNTDQVL:       # %bb.0:
1909 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1910 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
1911 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
1912 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]
1913 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1914 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
1915 ; AVX512VPOPCNTDQVL-NEXT:    retq
1917 ; BITALG_NOVLX-LABEL: ult_3_v8i16:
1918 ; BITALG_NOVLX:       # %bb.0:
1919 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
1920 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
1921 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]
1922 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1923 ; BITALG_NOVLX-NEXT:    vzeroupper
1924 ; BITALG_NOVLX-NEXT:    retq
1926 ; BITALG-LABEL: ult_3_v8i16:
1927 ; BITALG:       # %bb.0:
1928 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
1929 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [3,3,3,3,3,3,3,3]
1930 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
1931 ; BITALG-NEXT:    retq
1932   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1933   %3 = icmp ult <8 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1934   %4 = sext <8 x i1> %3 to <8 x i16>
1935   ret <8 x i16> %4
1938 define <8 x i16> @ugt_3_v8i16(<8 x i16> %0) {
1939 ; SSE2-LABEL: ugt_3_v8i16:
1940 ; SSE2:       # %bb.0:
1941 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1942 ; SSE2-NEXT:    psrlw $1, %xmm1
1943 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1944 ; SSE2-NEXT:    psubb %xmm1, %xmm0
1945 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1946 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1947 ; SSE2-NEXT:    pand %xmm1, %xmm2
1948 ; SSE2-NEXT:    psrlw $2, %xmm0
1949 ; SSE2-NEXT:    pand %xmm1, %xmm0
1950 ; SSE2-NEXT:    paddb %xmm2, %xmm0
1951 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1952 ; SSE2-NEXT:    psrlw $4, %xmm1
1953 ; SSE2-NEXT:    paddb %xmm1, %xmm0
1954 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1955 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
1956 ; SSE2-NEXT:    psllw $8, %xmm1
1957 ; SSE2-NEXT:    paddb %xmm1, %xmm0
1958 ; SSE2-NEXT:    psrlw $8, %xmm0
1959 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1960 ; SSE2-NEXT:    retq
1962 ; SSE3-LABEL: ugt_3_v8i16:
1963 ; SSE3:       # %bb.0:
1964 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1965 ; SSE3-NEXT:    psrlw $1, %xmm1
1966 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
1967 ; SSE3-NEXT:    psubb %xmm1, %xmm0
1968 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
1969 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
1970 ; SSE3-NEXT:    pand %xmm1, %xmm2
1971 ; SSE3-NEXT:    psrlw $2, %xmm0
1972 ; SSE3-NEXT:    pand %xmm1, %xmm0
1973 ; SSE3-NEXT:    paddb %xmm2, %xmm0
1974 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1975 ; SSE3-NEXT:    psrlw $4, %xmm1
1976 ; SSE3-NEXT:    paddb %xmm1, %xmm0
1977 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1978 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
1979 ; SSE3-NEXT:    psllw $8, %xmm1
1980 ; SSE3-NEXT:    paddb %xmm1, %xmm0
1981 ; SSE3-NEXT:    psrlw $8, %xmm0
1982 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1983 ; SSE3-NEXT:    retq
1985 ; SSSE3-LABEL: ugt_3_v8i16:
1986 ; SSSE3:       # %bb.0:
1987 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1988 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
1989 ; SSSE3-NEXT:    pand %xmm1, %xmm2
1990 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
1991 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
1992 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
1993 ; SSSE3-NEXT:    psrlw $4, %xmm0
1994 ; SSSE3-NEXT:    pand %xmm1, %xmm0
1995 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
1996 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
1997 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
1998 ; SSSE3-NEXT:    psllw $8, %xmm0
1999 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
2000 ; SSSE3-NEXT:    psrlw $8, %xmm0
2001 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2002 ; SSSE3-NEXT:    retq
2004 ; SSE41-LABEL: ugt_3_v8i16:
2005 ; SSE41:       # %bb.0:
2006 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2007 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
2008 ; SSE41-NEXT:    pand %xmm1, %xmm2
2009 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2010 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
2011 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
2012 ; SSE41-NEXT:    psrlw $4, %xmm0
2013 ; SSE41-NEXT:    pand %xmm1, %xmm0
2014 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
2015 ; SSE41-NEXT:    paddb %xmm4, %xmm3
2016 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
2017 ; SSE41-NEXT:    psllw $8, %xmm0
2018 ; SSE41-NEXT:    paddb %xmm3, %xmm0
2019 ; SSE41-NEXT:    psrlw $8, %xmm0
2020 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2021 ; SSE41-NEXT:    retq
2023 ; AVX1-LABEL: ugt_3_v8i16:
2024 ; AVX1:       # %bb.0:
2025 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2026 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2027 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2028 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2029 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2030 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2031 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2032 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2033 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2034 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2035 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2036 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2037 ; AVX1-NEXT:    retq
2039 ; AVX2-LABEL: ugt_3_v8i16:
2040 ; AVX2:       # %bb.0:
2041 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2042 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
2043 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2044 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2045 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
2046 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2047 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2048 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2049 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
2050 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2051 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
2052 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2053 ; AVX2-NEXT:    retq
2055 ; AVX512VPOPCNTDQ-LABEL: ugt_3_v8i16:
2056 ; AVX512VPOPCNTDQ:       # %bb.0:
2057 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2058 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2059 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2060 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2061 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
2062 ; AVX512VPOPCNTDQ-NEXT:    retq
2064 ; AVX512VPOPCNTDQVL-LABEL: ugt_3_v8i16:
2065 ; AVX512VPOPCNTDQVL:       # %bb.0:
2066 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2067 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
2068 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
2069 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2070 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
2071 ; AVX512VPOPCNTDQVL-NEXT:    retq
2073 ; BITALG_NOVLX-LABEL: ugt_3_v8i16:
2074 ; BITALG_NOVLX:       # %bb.0:
2075 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2076 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2077 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2078 ; BITALG_NOVLX-NEXT:    vzeroupper
2079 ; BITALG_NOVLX-NEXT:    retq
2081 ; BITALG-LABEL: ugt_3_v8i16:
2082 ; BITALG:       # %bb.0:
2083 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
2084 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2085 ; BITALG-NEXT:    retq
2086   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2087   %3 = icmp ugt <8 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
2088   %4 = sext <8 x i1> %3 to <8 x i16>
2089   ret <8 x i16> %4
2092 define <8 x i16> @ult_4_v8i16(<8 x i16> %0) {
2093 ; SSE2-LABEL: ult_4_v8i16:
2094 ; SSE2:       # %bb.0:
2095 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2096 ; SSE2-NEXT:    psrlw $1, %xmm1
2097 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2098 ; SSE2-NEXT:    psubb %xmm1, %xmm0
2099 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2100 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
2101 ; SSE2-NEXT:    pand %xmm1, %xmm2
2102 ; SSE2-NEXT:    psrlw $2, %xmm0
2103 ; SSE2-NEXT:    pand %xmm1, %xmm0
2104 ; SSE2-NEXT:    paddb %xmm2, %xmm0
2105 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2106 ; SSE2-NEXT:    psrlw $4, %xmm1
2107 ; SSE2-NEXT:    paddb %xmm0, %xmm1
2108 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2109 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2110 ; SSE2-NEXT:    psllw $8, %xmm2
2111 ; SSE2-NEXT:    paddb %xmm1, %xmm2
2112 ; SSE2-NEXT:    psrlw $8, %xmm2
2113 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4,4,4,4,4]
2114 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
2115 ; SSE2-NEXT:    retq
2117 ; SSE3-LABEL: ult_4_v8i16:
2118 ; SSE3:       # %bb.0:
2119 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2120 ; SSE3-NEXT:    psrlw $1, %xmm1
2121 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2122 ; SSE3-NEXT:    psubb %xmm1, %xmm0
2123 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2124 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
2125 ; SSE3-NEXT:    pand %xmm1, %xmm2
2126 ; SSE3-NEXT:    psrlw $2, %xmm0
2127 ; SSE3-NEXT:    pand %xmm1, %xmm0
2128 ; SSE3-NEXT:    paddb %xmm2, %xmm0
2129 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2130 ; SSE3-NEXT:    psrlw $4, %xmm1
2131 ; SSE3-NEXT:    paddb %xmm0, %xmm1
2132 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2133 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
2134 ; SSE3-NEXT:    psllw $8, %xmm2
2135 ; SSE3-NEXT:    paddb %xmm1, %xmm2
2136 ; SSE3-NEXT:    psrlw $8, %xmm2
2137 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4,4,4,4,4]
2138 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
2139 ; SSE3-NEXT:    retq
2141 ; SSSE3-LABEL: ult_4_v8i16:
2142 ; SSSE3:       # %bb.0:
2143 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2144 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
2145 ; SSSE3-NEXT:    pand %xmm1, %xmm2
2146 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2147 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
2148 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
2149 ; SSSE3-NEXT:    psrlw $4, %xmm0
2150 ; SSSE3-NEXT:    pand %xmm1, %xmm0
2151 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
2152 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
2153 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
2154 ; SSSE3-NEXT:    psllw $8, %xmm1
2155 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
2156 ; SSSE3-NEXT:    psrlw $8, %xmm1
2157 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4,4,4,4,4]
2158 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
2159 ; SSSE3-NEXT:    retq
2161 ; SSE41-LABEL: ult_4_v8i16:
2162 ; SSE41:       # %bb.0:
2163 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2164 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
2165 ; SSE41-NEXT:    pand %xmm1, %xmm2
2166 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2167 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
2168 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
2169 ; SSE41-NEXT:    psrlw $4, %xmm0
2170 ; SSE41-NEXT:    pand %xmm1, %xmm0
2171 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
2172 ; SSE41-NEXT:    paddb %xmm4, %xmm3
2173 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
2174 ; SSE41-NEXT:    psllw $8, %xmm1
2175 ; SSE41-NEXT:    paddb %xmm3, %xmm1
2176 ; SSE41-NEXT:    psrlw $8, %xmm1
2177 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4,4,4,4,4]
2178 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
2179 ; SSE41-NEXT:    retq
2181 ; AVX1-LABEL: ult_4_v8i16:
2182 ; AVX1:       # %bb.0:
2183 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2184 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2185 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2186 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2187 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2188 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2189 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2190 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2191 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2192 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2193 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2194 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]
2195 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2196 ; AVX1-NEXT:    retq
2198 ; AVX2-LABEL: ult_4_v8i16:
2199 ; AVX2:       # %bb.0:
2200 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2201 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
2202 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2203 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2204 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
2205 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2206 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2207 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2208 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
2209 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2210 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
2211 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]
2212 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2213 ; AVX2-NEXT:    retq
2215 ; AVX512VPOPCNTDQ-LABEL: ult_4_v8i16:
2216 ; AVX512VPOPCNTDQ:       # %bb.0:
2217 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2218 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2219 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2220 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]
2221 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2222 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
2223 ; AVX512VPOPCNTDQ-NEXT:    retq
2225 ; AVX512VPOPCNTDQVL-LABEL: ult_4_v8i16:
2226 ; AVX512VPOPCNTDQVL:       # %bb.0:
2227 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2228 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
2229 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
2230 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]
2231 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2232 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
2233 ; AVX512VPOPCNTDQVL-NEXT:    retq
2235 ; BITALG_NOVLX-LABEL: ult_4_v8i16:
2236 ; BITALG_NOVLX:       # %bb.0:
2237 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2238 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2239 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]
2240 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2241 ; BITALG_NOVLX-NEXT:    vzeroupper
2242 ; BITALG_NOVLX-NEXT:    retq
2244 ; BITALG-LABEL: ult_4_v8i16:
2245 ; BITALG:       # %bb.0:
2246 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
2247 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [4,4,4,4,4,4,4,4]
2248 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2249 ; BITALG-NEXT:    retq
2250   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2251   %3 = icmp ult <8 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
2252   %4 = sext <8 x i1> %3 to <8 x i16>
2253   ret <8 x i16> %4
2256 define <8 x i16> @ugt_4_v8i16(<8 x i16> %0) {
2257 ; SSE2-LABEL: ugt_4_v8i16:
2258 ; SSE2:       # %bb.0:
2259 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2260 ; SSE2-NEXT:    psrlw $1, %xmm1
2261 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2262 ; SSE2-NEXT:    psubb %xmm1, %xmm0
2263 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2264 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
2265 ; SSE2-NEXT:    pand %xmm1, %xmm2
2266 ; SSE2-NEXT:    psrlw $2, %xmm0
2267 ; SSE2-NEXT:    pand %xmm1, %xmm0
2268 ; SSE2-NEXT:    paddb %xmm2, %xmm0
2269 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2270 ; SSE2-NEXT:    psrlw $4, %xmm1
2271 ; SSE2-NEXT:    paddb %xmm1, %xmm0
2272 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2273 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2274 ; SSE2-NEXT:    psllw $8, %xmm1
2275 ; SSE2-NEXT:    paddb %xmm1, %xmm0
2276 ; SSE2-NEXT:    psrlw $8, %xmm0
2277 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2278 ; SSE2-NEXT:    retq
2280 ; SSE3-LABEL: ugt_4_v8i16:
2281 ; SSE3:       # %bb.0:
2282 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2283 ; SSE3-NEXT:    psrlw $1, %xmm1
2284 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2285 ; SSE3-NEXT:    psubb %xmm1, %xmm0
2286 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2287 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
2288 ; SSE3-NEXT:    pand %xmm1, %xmm2
2289 ; SSE3-NEXT:    psrlw $2, %xmm0
2290 ; SSE3-NEXT:    pand %xmm1, %xmm0
2291 ; SSE3-NEXT:    paddb %xmm2, %xmm0
2292 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2293 ; SSE3-NEXT:    psrlw $4, %xmm1
2294 ; SSE3-NEXT:    paddb %xmm1, %xmm0
2295 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2296 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2297 ; SSE3-NEXT:    psllw $8, %xmm1
2298 ; SSE3-NEXT:    paddb %xmm1, %xmm0
2299 ; SSE3-NEXT:    psrlw $8, %xmm0
2300 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2301 ; SSE3-NEXT:    retq
2303 ; SSSE3-LABEL: ugt_4_v8i16:
2304 ; SSSE3:       # %bb.0:
2305 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2306 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
2307 ; SSSE3-NEXT:    pand %xmm1, %xmm2
2308 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2309 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
2310 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
2311 ; SSSE3-NEXT:    psrlw $4, %xmm0
2312 ; SSSE3-NEXT:    pand %xmm1, %xmm0
2313 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
2314 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
2315 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
2316 ; SSSE3-NEXT:    psllw $8, %xmm0
2317 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
2318 ; SSSE3-NEXT:    psrlw $8, %xmm0
2319 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2320 ; SSSE3-NEXT:    retq
2322 ; SSE41-LABEL: ugt_4_v8i16:
2323 ; SSE41:       # %bb.0:
2324 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2325 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
2326 ; SSE41-NEXT:    pand %xmm1, %xmm2
2327 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2328 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
2329 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
2330 ; SSE41-NEXT:    psrlw $4, %xmm0
2331 ; SSE41-NEXT:    pand %xmm1, %xmm0
2332 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
2333 ; SSE41-NEXT:    paddb %xmm4, %xmm3
2334 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
2335 ; SSE41-NEXT:    psllw $8, %xmm0
2336 ; SSE41-NEXT:    paddb %xmm3, %xmm0
2337 ; SSE41-NEXT:    psrlw $8, %xmm0
2338 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2339 ; SSE41-NEXT:    retq
2341 ; AVX1-LABEL: ugt_4_v8i16:
2342 ; AVX1:       # %bb.0:
2343 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2344 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2345 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2346 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2347 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2348 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2349 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2350 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2351 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2352 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2353 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2354 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2355 ; AVX1-NEXT:    retq
2357 ; AVX2-LABEL: ugt_4_v8i16:
2358 ; AVX2:       # %bb.0:
2359 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2360 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
2361 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2362 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2363 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
2364 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2365 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2366 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2367 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
2368 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2369 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
2370 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2371 ; AVX2-NEXT:    retq
2373 ; AVX512VPOPCNTDQ-LABEL: ugt_4_v8i16:
2374 ; AVX512VPOPCNTDQ:       # %bb.0:
2375 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2376 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2377 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2378 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2379 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
2380 ; AVX512VPOPCNTDQ-NEXT:    retq
2382 ; AVX512VPOPCNTDQVL-LABEL: ugt_4_v8i16:
2383 ; AVX512VPOPCNTDQVL:       # %bb.0:
2384 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2385 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
2386 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
2387 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2388 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
2389 ; AVX512VPOPCNTDQVL-NEXT:    retq
2391 ; BITALG_NOVLX-LABEL: ugt_4_v8i16:
2392 ; BITALG_NOVLX:       # %bb.0:
2393 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2394 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2395 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2396 ; BITALG_NOVLX-NEXT:    vzeroupper
2397 ; BITALG_NOVLX-NEXT:    retq
2399 ; BITALG-LABEL: ugt_4_v8i16:
2400 ; BITALG:       # %bb.0:
2401 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
2402 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2403 ; BITALG-NEXT:    retq
2404   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2405   %3 = icmp ugt <8 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
2406   %4 = sext <8 x i1> %3 to <8 x i16>
2407   ret <8 x i16> %4
2410 define <8 x i16> @ult_5_v8i16(<8 x i16> %0) {
2411 ; SSE2-LABEL: ult_5_v8i16:
2412 ; SSE2:       # %bb.0:
2413 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2414 ; SSE2-NEXT:    psrlw $1, %xmm1
2415 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2416 ; SSE2-NEXT:    psubb %xmm1, %xmm0
2417 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2418 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
2419 ; SSE2-NEXT:    pand %xmm1, %xmm2
2420 ; SSE2-NEXT:    psrlw $2, %xmm0
2421 ; SSE2-NEXT:    pand %xmm1, %xmm0
2422 ; SSE2-NEXT:    paddb %xmm2, %xmm0
2423 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2424 ; SSE2-NEXT:    psrlw $4, %xmm1
2425 ; SSE2-NEXT:    paddb %xmm0, %xmm1
2426 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2427 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2428 ; SSE2-NEXT:    psllw $8, %xmm2
2429 ; SSE2-NEXT:    paddb %xmm1, %xmm2
2430 ; SSE2-NEXT:    psrlw $8, %xmm2
2431 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5,5,5,5,5]
2432 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
2433 ; SSE2-NEXT:    retq
2435 ; SSE3-LABEL: ult_5_v8i16:
2436 ; SSE3:       # %bb.0:
2437 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2438 ; SSE3-NEXT:    psrlw $1, %xmm1
2439 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2440 ; SSE3-NEXT:    psubb %xmm1, %xmm0
2441 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2442 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
2443 ; SSE3-NEXT:    pand %xmm1, %xmm2
2444 ; SSE3-NEXT:    psrlw $2, %xmm0
2445 ; SSE3-NEXT:    pand %xmm1, %xmm0
2446 ; SSE3-NEXT:    paddb %xmm2, %xmm0
2447 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2448 ; SSE3-NEXT:    psrlw $4, %xmm1
2449 ; SSE3-NEXT:    paddb %xmm0, %xmm1
2450 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2451 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
2452 ; SSE3-NEXT:    psllw $8, %xmm2
2453 ; SSE3-NEXT:    paddb %xmm1, %xmm2
2454 ; SSE3-NEXT:    psrlw $8, %xmm2
2455 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5,5,5,5,5]
2456 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
2457 ; SSE3-NEXT:    retq
2459 ; SSSE3-LABEL: ult_5_v8i16:
2460 ; SSSE3:       # %bb.0:
2461 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2462 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
2463 ; SSSE3-NEXT:    pand %xmm1, %xmm2
2464 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2465 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
2466 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
2467 ; SSSE3-NEXT:    psrlw $4, %xmm0
2468 ; SSSE3-NEXT:    pand %xmm1, %xmm0
2469 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
2470 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
2471 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
2472 ; SSSE3-NEXT:    psllw $8, %xmm1
2473 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
2474 ; SSSE3-NEXT:    psrlw $8, %xmm1
2475 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5,5,5,5,5]
2476 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
2477 ; SSSE3-NEXT:    retq
2479 ; SSE41-LABEL: ult_5_v8i16:
2480 ; SSE41:       # %bb.0:
2481 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2482 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
2483 ; SSE41-NEXT:    pand %xmm1, %xmm2
2484 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2485 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
2486 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
2487 ; SSE41-NEXT:    psrlw $4, %xmm0
2488 ; SSE41-NEXT:    pand %xmm1, %xmm0
2489 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
2490 ; SSE41-NEXT:    paddb %xmm4, %xmm3
2491 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
2492 ; SSE41-NEXT:    psllw $8, %xmm1
2493 ; SSE41-NEXT:    paddb %xmm3, %xmm1
2494 ; SSE41-NEXT:    psrlw $8, %xmm1
2495 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5,5,5,5,5]
2496 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
2497 ; SSE41-NEXT:    retq
2499 ; AVX1-LABEL: ult_5_v8i16:
2500 ; AVX1:       # %bb.0:
2501 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2502 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2503 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2504 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2505 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2506 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2507 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2508 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2509 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2510 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2511 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2512 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]
2513 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2514 ; AVX1-NEXT:    retq
2516 ; AVX2-LABEL: ult_5_v8i16:
2517 ; AVX2:       # %bb.0:
2518 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2519 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
2520 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2521 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2522 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
2523 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2524 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2525 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2526 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
2527 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2528 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
2529 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]
2530 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2531 ; AVX2-NEXT:    retq
2533 ; AVX512VPOPCNTDQ-LABEL: ult_5_v8i16:
2534 ; AVX512VPOPCNTDQ:       # %bb.0:
2535 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2536 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2537 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2538 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]
2539 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2540 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
2541 ; AVX512VPOPCNTDQ-NEXT:    retq
2543 ; AVX512VPOPCNTDQVL-LABEL: ult_5_v8i16:
2544 ; AVX512VPOPCNTDQVL:       # %bb.0:
2545 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2546 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
2547 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
2548 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]
2549 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2550 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
2551 ; AVX512VPOPCNTDQVL-NEXT:    retq
2553 ; BITALG_NOVLX-LABEL: ult_5_v8i16:
2554 ; BITALG_NOVLX:       # %bb.0:
2555 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2556 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2557 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]
2558 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2559 ; BITALG_NOVLX-NEXT:    vzeroupper
2560 ; BITALG_NOVLX-NEXT:    retq
2562 ; BITALG-LABEL: ult_5_v8i16:
2563 ; BITALG:       # %bb.0:
2564 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
2565 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [5,5,5,5,5,5,5,5]
2566 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2567 ; BITALG-NEXT:    retq
2568   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2569   %3 = icmp ult <8 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
2570   %4 = sext <8 x i1> %3 to <8 x i16>
2571   ret <8 x i16> %4
2574 define <8 x i16> @ugt_5_v8i16(<8 x i16> %0) {
2575 ; SSE2-LABEL: ugt_5_v8i16:
2576 ; SSE2:       # %bb.0:
2577 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2578 ; SSE2-NEXT:    psrlw $1, %xmm1
2579 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2580 ; SSE2-NEXT:    psubb %xmm1, %xmm0
2581 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2582 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
2583 ; SSE2-NEXT:    pand %xmm1, %xmm2
2584 ; SSE2-NEXT:    psrlw $2, %xmm0
2585 ; SSE2-NEXT:    pand %xmm1, %xmm0
2586 ; SSE2-NEXT:    paddb %xmm2, %xmm0
2587 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2588 ; SSE2-NEXT:    psrlw $4, %xmm1
2589 ; SSE2-NEXT:    paddb %xmm1, %xmm0
2590 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2591 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2592 ; SSE2-NEXT:    psllw $8, %xmm1
2593 ; SSE2-NEXT:    paddb %xmm1, %xmm0
2594 ; SSE2-NEXT:    psrlw $8, %xmm0
2595 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2596 ; SSE2-NEXT:    retq
2598 ; SSE3-LABEL: ugt_5_v8i16:
2599 ; SSE3:       # %bb.0:
2600 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2601 ; SSE3-NEXT:    psrlw $1, %xmm1
2602 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2603 ; SSE3-NEXT:    psubb %xmm1, %xmm0
2604 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2605 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
2606 ; SSE3-NEXT:    pand %xmm1, %xmm2
2607 ; SSE3-NEXT:    psrlw $2, %xmm0
2608 ; SSE3-NEXT:    pand %xmm1, %xmm0
2609 ; SSE3-NEXT:    paddb %xmm2, %xmm0
2610 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2611 ; SSE3-NEXT:    psrlw $4, %xmm1
2612 ; SSE3-NEXT:    paddb %xmm1, %xmm0
2613 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2614 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2615 ; SSE3-NEXT:    psllw $8, %xmm1
2616 ; SSE3-NEXT:    paddb %xmm1, %xmm0
2617 ; SSE3-NEXT:    psrlw $8, %xmm0
2618 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2619 ; SSE3-NEXT:    retq
2621 ; SSSE3-LABEL: ugt_5_v8i16:
2622 ; SSSE3:       # %bb.0:
2623 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2624 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
2625 ; SSSE3-NEXT:    pand %xmm1, %xmm2
2626 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2627 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
2628 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
2629 ; SSSE3-NEXT:    psrlw $4, %xmm0
2630 ; SSSE3-NEXT:    pand %xmm1, %xmm0
2631 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
2632 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
2633 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
2634 ; SSSE3-NEXT:    psllw $8, %xmm0
2635 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
2636 ; SSSE3-NEXT:    psrlw $8, %xmm0
2637 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2638 ; SSSE3-NEXT:    retq
2640 ; SSE41-LABEL: ugt_5_v8i16:
2641 ; SSE41:       # %bb.0:
2642 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2643 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
2644 ; SSE41-NEXT:    pand %xmm1, %xmm2
2645 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2646 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
2647 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
2648 ; SSE41-NEXT:    psrlw $4, %xmm0
2649 ; SSE41-NEXT:    pand %xmm1, %xmm0
2650 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
2651 ; SSE41-NEXT:    paddb %xmm4, %xmm3
2652 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
2653 ; SSE41-NEXT:    psllw $8, %xmm0
2654 ; SSE41-NEXT:    paddb %xmm3, %xmm0
2655 ; SSE41-NEXT:    psrlw $8, %xmm0
2656 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2657 ; SSE41-NEXT:    retq
2659 ; AVX1-LABEL: ugt_5_v8i16:
2660 ; AVX1:       # %bb.0:
2661 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2662 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2663 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2664 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2665 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2666 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2667 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2668 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2669 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2670 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2671 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2672 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2673 ; AVX1-NEXT:    retq
2675 ; AVX2-LABEL: ugt_5_v8i16:
2676 ; AVX2:       # %bb.0:
2677 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2678 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
2679 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2680 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2681 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
2682 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2683 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2684 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2685 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
2686 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2687 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
2688 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2689 ; AVX2-NEXT:    retq
2691 ; AVX512VPOPCNTDQ-LABEL: ugt_5_v8i16:
2692 ; AVX512VPOPCNTDQ:       # %bb.0:
2693 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2694 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2695 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2696 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2697 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
2698 ; AVX512VPOPCNTDQ-NEXT:    retq
2700 ; AVX512VPOPCNTDQVL-LABEL: ugt_5_v8i16:
2701 ; AVX512VPOPCNTDQVL:       # %bb.0:
2702 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2703 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
2704 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
2705 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2706 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
2707 ; AVX512VPOPCNTDQVL-NEXT:    retq
2709 ; BITALG_NOVLX-LABEL: ugt_5_v8i16:
2710 ; BITALG_NOVLX:       # %bb.0:
2711 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2712 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2713 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2714 ; BITALG_NOVLX-NEXT:    vzeroupper
2715 ; BITALG_NOVLX-NEXT:    retq
2717 ; BITALG-LABEL: ugt_5_v8i16:
2718 ; BITALG:       # %bb.0:
2719 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
2720 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2721 ; BITALG-NEXT:    retq
2722   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2723   %3 = icmp ugt <8 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
2724   %4 = sext <8 x i1> %3 to <8 x i16>
2725   ret <8 x i16> %4
2728 define <8 x i16> @ult_6_v8i16(<8 x i16> %0) {
2729 ; SSE2-LABEL: ult_6_v8i16:
2730 ; SSE2:       # %bb.0:
2731 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2732 ; SSE2-NEXT:    psrlw $1, %xmm1
2733 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2734 ; SSE2-NEXT:    psubb %xmm1, %xmm0
2735 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2736 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
2737 ; SSE2-NEXT:    pand %xmm1, %xmm2
2738 ; SSE2-NEXT:    psrlw $2, %xmm0
2739 ; SSE2-NEXT:    pand %xmm1, %xmm0
2740 ; SSE2-NEXT:    paddb %xmm2, %xmm0
2741 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2742 ; SSE2-NEXT:    psrlw $4, %xmm1
2743 ; SSE2-NEXT:    paddb %xmm0, %xmm1
2744 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2745 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2746 ; SSE2-NEXT:    psllw $8, %xmm2
2747 ; SSE2-NEXT:    paddb %xmm1, %xmm2
2748 ; SSE2-NEXT:    psrlw $8, %xmm2
2749 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6,6,6,6,6]
2750 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
2751 ; SSE2-NEXT:    retq
2753 ; SSE3-LABEL: ult_6_v8i16:
2754 ; SSE3:       # %bb.0:
2755 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2756 ; SSE3-NEXT:    psrlw $1, %xmm1
2757 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2758 ; SSE3-NEXT:    psubb %xmm1, %xmm0
2759 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2760 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
2761 ; SSE3-NEXT:    pand %xmm1, %xmm2
2762 ; SSE3-NEXT:    psrlw $2, %xmm0
2763 ; SSE3-NEXT:    pand %xmm1, %xmm0
2764 ; SSE3-NEXT:    paddb %xmm2, %xmm0
2765 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2766 ; SSE3-NEXT:    psrlw $4, %xmm1
2767 ; SSE3-NEXT:    paddb %xmm0, %xmm1
2768 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2769 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
2770 ; SSE3-NEXT:    psllw $8, %xmm2
2771 ; SSE3-NEXT:    paddb %xmm1, %xmm2
2772 ; SSE3-NEXT:    psrlw $8, %xmm2
2773 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6,6,6,6,6]
2774 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
2775 ; SSE3-NEXT:    retq
2777 ; SSSE3-LABEL: ult_6_v8i16:
2778 ; SSSE3:       # %bb.0:
2779 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2780 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
2781 ; SSSE3-NEXT:    pand %xmm1, %xmm2
2782 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2783 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
2784 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
2785 ; SSSE3-NEXT:    psrlw $4, %xmm0
2786 ; SSSE3-NEXT:    pand %xmm1, %xmm0
2787 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
2788 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
2789 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
2790 ; SSSE3-NEXT:    psllw $8, %xmm1
2791 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
2792 ; SSSE3-NEXT:    psrlw $8, %xmm1
2793 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6,6,6,6,6]
2794 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
2795 ; SSSE3-NEXT:    retq
2797 ; SSE41-LABEL: ult_6_v8i16:
2798 ; SSE41:       # %bb.0:
2799 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2800 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
2801 ; SSE41-NEXT:    pand %xmm1, %xmm2
2802 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2803 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
2804 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
2805 ; SSE41-NEXT:    psrlw $4, %xmm0
2806 ; SSE41-NEXT:    pand %xmm1, %xmm0
2807 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
2808 ; SSE41-NEXT:    paddb %xmm4, %xmm3
2809 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
2810 ; SSE41-NEXT:    psllw $8, %xmm1
2811 ; SSE41-NEXT:    paddb %xmm3, %xmm1
2812 ; SSE41-NEXT:    psrlw $8, %xmm1
2813 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6,6,6,6,6]
2814 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
2815 ; SSE41-NEXT:    retq
2817 ; AVX1-LABEL: ult_6_v8i16:
2818 ; AVX1:       # %bb.0:
2819 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2820 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2821 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2822 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2823 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2824 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2825 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2826 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2827 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2828 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2829 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2830 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]
2831 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2832 ; AVX1-NEXT:    retq
2834 ; AVX2-LABEL: ult_6_v8i16:
2835 ; AVX2:       # %bb.0:
2836 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2837 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
2838 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2839 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2840 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
2841 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
2842 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2843 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2844 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
2845 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2846 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
2847 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]
2848 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2849 ; AVX2-NEXT:    retq
2851 ; AVX512VPOPCNTDQ-LABEL: ult_6_v8i16:
2852 ; AVX512VPOPCNTDQ:       # %bb.0:
2853 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2854 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
2855 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
2856 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]
2857 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2858 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
2859 ; AVX512VPOPCNTDQ-NEXT:    retq
2861 ; AVX512VPOPCNTDQVL-LABEL: ult_6_v8i16:
2862 ; AVX512VPOPCNTDQVL:       # %bb.0:
2863 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
2864 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
2865 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
2866 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]
2867 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2868 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
2869 ; AVX512VPOPCNTDQVL-NEXT:    retq
2871 ; BITALG_NOVLX-LABEL: ult_6_v8i16:
2872 ; BITALG_NOVLX:       # %bb.0:
2873 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
2874 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
2875 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]
2876 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2877 ; BITALG_NOVLX-NEXT:    vzeroupper
2878 ; BITALG_NOVLX-NEXT:    retq
2880 ; BITALG-LABEL: ult_6_v8i16:
2881 ; BITALG:       # %bb.0:
2882 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
2883 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [6,6,6,6,6,6,6,6]
2884 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
2885 ; BITALG-NEXT:    retq
2886   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2887   %3 = icmp ult <8 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
2888   %4 = sext <8 x i1> %3 to <8 x i16>
2889   ret <8 x i16> %4
2892 define <8 x i16> @ugt_6_v8i16(<8 x i16> %0) {
2893 ; SSE2-LABEL: ugt_6_v8i16:
2894 ; SSE2:       # %bb.0:
2895 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2896 ; SSE2-NEXT:    psrlw $1, %xmm1
2897 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2898 ; SSE2-NEXT:    psubb %xmm1, %xmm0
2899 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2900 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
2901 ; SSE2-NEXT:    pand %xmm1, %xmm2
2902 ; SSE2-NEXT:    psrlw $2, %xmm0
2903 ; SSE2-NEXT:    pand %xmm1, %xmm0
2904 ; SSE2-NEXT:    paddb %xmm2, %xmm0
2905 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2906 ; SSE2-NEXT:    psrlw $4, %xmm1
2907 ; SSE2-NEXT:    paddb %xmm1, %xmm0
2908 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2909 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
2910 ; SSE2-NEXT:    psllw $8, %xmm1
2911 ; SSE2-NEXT:    paddb %xmm1, %xmm0
2912 ; SSE2-NEXT:    psrlw $8, %xmm0
2913 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2914 ; SSE2-NEXT:    retq
2916 ; SSE3-LABEL: ugt_6_v8i16:
2917 ; SSE3:       # %bb.0:
2918 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2919 ; SSE3-NEXT:    psrlw $1, %xmm1
2920 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
2921 ; SSE3-NEXT:    psubb %xmm1, %xmm0
2922 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
2923 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
2924 ; SSE3-NEXT:    pand %xmm1, %xmm2
2925 ; SSE3-NEXT:    psrlw $2, %xmm0
2926 ; SSE3-NEXT:    pand %xmm1, %xmm0
2927 ; SSE3-NEXT:    paddb %xmm2, %xmm0
2928 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2929 ; SSE3-NEXT:    psrlw $4, %xmm1
2930 ; SSE3-NEXT:    paddb %xmm1, %xmm0
2931 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2932 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
2933 ; SSE3-NEXT:    psllw $8, %xmm1
2934 ; SSE3-NEXT:    paddb %xmm1, %xmm0
2935 ; SSE3-NEXT:    psrlw $8, %xmm0
2936 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2937 ; SSE3-NEXT:    retq
2939 ; SSSE3-LABEL: ugt_6_v8i16:
2940 ; SSSE3:       # %bb.0:
2941 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2942 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
2943 ; SSSE3-NEXT:    pand %xmm1, %xmm2
2944 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2945 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
2946 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
2947 ; SSSE3-NEXT:    psrlw $4, %xmm0
2948 ; SSSE3-NEXT:    pand %xmm1, %xmm0
2949 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
2950 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
2951 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
2952 ; SSSE3-NEXT:    psllw $8, %xmm0
2953 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
2954 ; SSSE3-NEXT:    psrlw $8, %xmm0
2955 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2956 ; SSSE3-NEXT:    retq
2958 ; SSE41-LABEL: ugt_6_v8i16:
2959 ; SSE41:       # %bb.0:
2960 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2961 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
2962 ; SSE41-NEXT:    pand %xmm1, %xmm2
2963 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2964 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
2965 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
2966 ; SSE41-NEXT:    psrlw $4, %xmm0
2967 ; SSE41-NEXT:    pand %xmm1, %xmm0
2968 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
2969 ; SSE41-NEXT:    paddb %xmm4, %xmm3
2970 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
2971 ; SSE41-NEXT:    psllw $8, %xmm0
2972 ; SSE41-NEXT:    paddb %xmm3, %xmm0
2973 ; SSE41-NEXT:    psrlw $8, %xmm0
2974 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2975 ; SSE41-NEXT:    retq
2977 ; AVX1-LABEL: ugt_6_v8i16:
2978 ; AVX1:       # %bb.0:
2979 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2980 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
2981 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2982 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2983 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
2984 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
2985 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
2986 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
2987 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
2988 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
2989 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
2990 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2991 ; AVX1-NEXT:    retq
2993 ; AVX2-LABEL: ugt_6_v8i16:
2994 ; AVX2:       # %bb.0:
2995 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
2996 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
2997 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
2998 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
2999 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
3000 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3001 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3002 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3003 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
3004 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3005 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
3006 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3007 ; AVX2-NEXT:    retq
3009 ; AVX512VPOPCNTDQ-LABEL: ugt_6_v8i16:
3010 ; AVX512VPOPCNTDQ:       # %bb.0:
3011 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3012 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3013 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3014 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3015 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
3016 ; AVX512VPOPCNTDQ-NEXT:    retq
3018 ; AVX512VPOPCNTDQVL-LABEL: ugt_6_v8i16:
3019 ; AVX512VPOPCNTDQVL:       # %bb.0:
3020 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3021 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3022 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
3023 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3024 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
3025 ; AVX512VPOPCNTDQVL-NEXT:    retq
3027 ; BITALG_NOVLX-LABEL: ugt_6_v8i16:
3028 ; BITALG_NOVLX:       # %bb.0:
3029 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3030 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3031 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3032 ; BITALG_NOVLX-NEXT:    vzeroupper
3033 ; BITALG_NOVLX-NEXT:    retq
3035 ; BITALG-LABEL: ugt_6_v8i16:
3036 ; BITALG:       # %bb.0:
3037 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
3038 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3039 ; BITALG-NEXT:    retq
3040   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3041   %3 = icmp ugt <8 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
3042   %4 = sext <8 x i1> %3 to <8 x i16>
3043   ret <8 x i16> %4
3046 define <8 x i16> @ult_7_v8i16(<8 x i16> %0) {
3047 ; SSE2-LABEL: ult_7_v8i16:
3048 ; SSE2:       # %bb.0:
3049 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3050 ; SSE2-NEXT:    psrlw $1, %xmm1
3051 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3052 ; SSE2-NEXT:    psubb %xmm1, %xmm0
3053 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3054 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
3055 ; SSE2-NEXT:    pand %xmm1, %xmm2
3056 ; SSE2-NEXT:    psrlw $2, %xmm0
3057 ; SSE2-NEXT:    pand %xmm1, %xmm0
3058 ; SSE2-NEXT:    paddb %xmm2, %xmm0
3059 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3060 ; SSE2-NEXT:    psrlw $4, %xmm1
3061 ; SSE2-NEXT:    paddb %xmm0, %xmm1
3062 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3063 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
3064 ; SSE2-NEXT:    psllw $8, %xmm2
3065 ; SSE2-NEXT:    paddb %xmm1, %xmm2
3066 ; SSE2-NEXT:    psrlw $8, %xmm2
3067 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7,7,7,7,7]
3068 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
3069 ; SSE2-NEXT:    retq
3071 ; SSE3-LABEL: ult_7_v8i16:
3072 ; SSE3:       # %bb.0:
3073 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3074 ; SSE3-NEXT:    psrlw $1, %xmm1
3075 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3076 ; SSE3-NEXT:    psubb %xmm1, %xmm0
3077 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3078 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
3079 ; SSE3-NEXT:    pand %xmm1, %xmm2
3080 ; SSE3-NEXT:    psrlw $2, %xmm0
3081 ; SSE3-NEXT:    pand %xmm1, %xmm0
3082 ; SSE3-NEXT:    paddb %xmm2, %xmm0
3083 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3084 ; SSE3-NEXT:    psrlw $4, %xmm1
3085 ; SSE3-NEXT:    paddb %xmm0, %xmm1
3086 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3087 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
3088 ; SSE3-NEXT:    psllw $8, %xmm2
3089 ; SSE3-NEXT:    paddb %xmm1, %xmm2
3090 ; SSE3-NEXT:    psrlw $8, %xmm2
3091 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7,7,7,7,7]
3092 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
3093 ; SSE3-NEXT:    retq
3095 ; SSSE3-LABEL: ult_7_v8i16:
3096 ; SSSE3:       # %bb.0:
3097 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3098 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
3099 ; SSSE3-NEXT:    pand %xmm1, %xmm2
3100 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3101 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
3102 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
3103 ; SSSE3-NEXT:    psrlw $4, %xmm0
3104 ; SSSE3-NEXT:    pand %xmm1, %xmm0
3105 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
3106 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
3107 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
3108 ; SSSE3-NEXT:    psllw $8, %xmm1
3109 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
3110 ; SSSE3-NEXT:    psrlw $8, %xmm1
3111 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7,7,7,7,7]
3112 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
3113 ; SSSE3-NEXT:    retq
3115 ; SSE41-LABEL: ult_7_v8i16:
3116 ; SSE41:       # %bb.0:
3117 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3118 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
3119 ; SSE41-NEXT:    pand %xmm1, %xmm2
3120 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3121 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
3122 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
3123 ; SSE41-NEXT:    psrlw $4, %xmm0
3124 ; SSE41-NEXT:    pand %xmm1, %xmm0
3125 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
3126 ; SSE41-NEXT:    paddb %xmm4, %xmm3
3127 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
3128 ; SSE41-NEXT:    psllw $8, %xmm1
3129 ; SSE41-NEXT:    paddb %xmm3, %xmm1
3130 ; SSE41-NEXT:    psrlw $8, %xmm1
3131 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7,7,7,7,7]
3132 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
3133 ; SSE41-NEXT:    retq
3135 ; AVX1-LABEL: ult_7_v8i16:
3136 ; AVX1:       # %bb.0:
3137 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3138 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3139 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3140 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3141 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3142 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3143 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3144 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3145 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3146 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3147 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3148 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]
3149 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3150 ; AVX1-NEXT:    retq
3152 ; AVX2-LABEL: ult_7_v8i16:
3153 ; AVX2:       # %bb.0:
3154 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3155 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
3156 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3157 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3158 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
3159 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3160 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3161 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3162 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
3163 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3164 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
3165 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]
3166 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3167 ; AVX2-NEXT:    retq
3169 ; AVX512VPOPCNTDQ-LABEL: ult_7_v8i16:
3170 ; AVX512VPOPCNTDQ:       # %bb.0:
3171 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3172 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3173 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3174 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]
3175 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3176 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
3177 ; AVX512VPOPCNTDQ-NEXT:    retq
3179 ; AVX512VPOPCNTDQVL-LABEL: ult_7_v8i16:
3180 ; AVX512VPOPCNTDQVL:       # %bb.0:
3181 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3182 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3183 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
3184 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]
3185 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3186 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
3187 ; AVX512VPOPCNTDQVL-NEXT:    retq
3189 ; BITALG_NOVLX-LABEL: ult_7_v8i16:
3190 ; BITALG_NOVLX:       # %bb.0:
3191 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3192 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3193 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]
3194 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3195 ; BITALG_NOVLX-NEXT:    vzeroupper
3196 ; BITALG_NOVLX-NEXT:    retq
3198 ; BITALG-LABEL: ult_7_v8i16:
3199 ; BITALG:       # %bb.0:
3200 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
3201 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [7,7,7,7,7,7,7,7]
3202 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3203 ; BITALG-NEXT:    retq
3204   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3205   %3 = icmp ult <8 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
3206   %4 = sext <8 x i1> %3 to <8 x i16>
3207   ret <8 x i16> %4
3210 define <8 x i16> @ugt_7_v8i16(<8 x i16> %0) {
3211 ; SSE2-LABEL: ugt_7_v8i16:
3212 ; SSE2:       # %bb.0:
3213 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3214 ; SSE2-NEXT:    psrlw $1, %xmm1
3215 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3216 ; SSE2-NEXT:    psubb %xmm1, %xmm0
3217 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3218 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
3219 ; SSE2-NEXT:    pand %xmm1, %xmm2
3220 ; SSE2-NEXT:    psrlw $2, %xmm0
3221 ; SSE2-NEXT:    pand %xmm1, %xmm0
3222 ; SSE2-NEXT:    paddb %xmm2, %xmm0
3223 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3224 ; SSE2-NEXT:    psrlw $4, %xmm1
3225 ; SSE2-NEXT:    paddb %xmm1, %xmm0
3226 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3227 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3228 ; SSE2-NEXT:    psllw $8, %xmm1
3229 ; SSE2-NEXT:    paddb %xmm1, %xmm0
3230 ; SSE2-NEXT:    psrlw $8, %xmm0
3231 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3232 ; SSE2-NEXT:    retq
3234 ; SSE3-LABEL: ugt_7_v8i16:
3235 ; SSE3:       # %bb.0:
3236 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3237 ; SSE3-NEXT:    psrlw $1, %xmm1
3238 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3239 ; SSE3-NEXT:    psubb %xmm1, %xmm0
3240 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3241 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
3242 ; SSE3-NEXT:    pand %xmm1, %xmm2
3243 ; SSE3-NEXT:    psrlw $2, %xmm0
3244 ; SSE3-NEXT:    pand %xmm1, %xmm0
3245 ; SSE3-NEXT:    paddb %xmm2, %xmm0
3246 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3247 ; SSE3-NEXT:    psrlw $4, %xmm1
3248 ; SSE3-NEXT:    paddb %xmm1, %xmm0
3249 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3250 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3251 ; SSE3-NEXT:    psllw $8, %xmm1
3252 ; SSE3-NEXT:    paddb %xmm1, %xmm0
3253 ; SSE3-NEXT:    psrlw $8, %xmm0
3254 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3255 ; SSE3-NEXT:    retq
3257 ; SSSE3-LABEL: ugt_7_v8i16:
3258 ; SSSE3:       # %bb.0:
3259 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3260 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
3261 ; SSSE3-NEXT:    pand %xmm1, %xmm2
3262 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3263 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
3264 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
3265 ; SSSE3-NEXT:    psrlw $4, %xmm0
3266 ; SSSE3-NEXT:    pand %xmm1, %xmm0
3267 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
3268 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
3269 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
3270 ; SSSE3-NEXT:    psllw $8, %xmm0
3271 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
3272 ; SSSE3-NEXT:    psrlw $8, %xmm0
3273 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3274 ; SSSE3-NEXT:    retq
3276 ; SSE41-LABEL: ugt_7_v8i16:
3277 ; SSE41:       # %bb.0:
3278 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3279 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
3280 ; SSE41-NEXT:    pand %xmm1, %xmm2
3281 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3282 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
3283 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
3284 ; SSE41-NEXT:    psrlw $4, %xmm0
3285 ; SSE41-NEXT:    pand %xmm1, %xmm0
3286 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
3287 ; SSE41-NEXT:    paddb %xmm4, %xmm3
3288 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
3289 ; SSE41-NEXT:    psllw $8, %xmm0
3290 ; SSE41-NEXT:    paddb %xmm3, %xmm0
3291 ; SSE41-NEXT:    psrlw $8, %xmm0
3292 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3293 ; SSE41-NEXT:    retq
3295 ; AVX1-LABEL: ugt_7_v8i16:
3296 ; AVX1:       # %bb.0:
3297 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3298 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3299 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3300 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3301 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3302 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3303 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3304 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3305 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3306 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3307 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3308 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3309 ; AVX1-NEXT:    retq
3311 ; AVX2-LABEL: ugt_7_v8i16:
3312 ; AVX2:       # %bb.0:
3313 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3314 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
3315 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3316 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3317 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
3318 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3319 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3320 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3321 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
3322 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3323 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
3324 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3325 ; AVX2-NEXT:    retq
3327 ; AVX512VPOPCNTDQ-LABEL: ugt_7_v8i16:
3328 ; AVX512VPOPCNTDQ:       # %bb.0:
3329 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3330 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3331 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3332 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3333 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
3334 ; AVX512VPOPCNTDQ-NEXT:    retq
3336 ; AVX512VPOPCNTDQVL-LABEL: ugt_7_v8i16:
3337 ; AVX512VPOPCNTDQVL:       # %bb.0:
3338 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3339 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3340 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
3341 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3342 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
3343 ; AVX512VPOPCNTDQVL-NEXT:    retq
3345 ; BITALG_NOVLX-LABEL: ugt_7_v8i16:
3346 ; BITALG_NOVLX:       # %bb.0:
3347 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3348 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3349 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3350 ; BITALG_NOVLX-NEXT:    vzeroupper
3351 ; BITALG_NOVLX-NEXT:    retq
3353 ; BITALG-LABEL: ugt_7_v8i16:
3354 ; BITALG:       # %bb.0:
3355 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
3356 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3357 ; BITALG-NEXT:    retq
3358   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3359   %3 = icmp ugt <8 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
3360   %4 = sext <8 x i1> %3 to <8 x i16>
3361   ret <8 x i16> %4
3364 define <8 x i16> @ult_8_v8i16(<8 x i16> %0) {
3365 ; SSE2-LABEL: ult_8_v8i16:
3366 ; SSE2:       # %bb.0:
3367 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3368 ; SSE2-NEXT:    psrlw $1, %xmm1
3369 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3370 ; SSE2-NEXT:    psubb %xmm1, %xmm0
3371 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3372 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
3373 ; SSE2-NEXT:    pand %xmm1, %xmm2
3374 ; SSE2-NEXT:    psrlw $2, %xmm0
3375 ; SSE2-NEXT:    pand %xmm1, %xmm0
3376 ; SSE2-NEXT:    paddb %xmm2, %xmm0
3377 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3378 ; SSE2-NEXT:    psrlw $4, %xmm1
3379 ; SSE2-NEXT:    paddb %xmm0, %xmm1
3380 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3381 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
3382 ; SSE2-NEXT:    psllw $8, %xmm2
3383 ; SSE2-NEXT:    paddb %xmm1, %xmm2
3384 ; SSE2-NEXT:    psrlw $8, %xmm2
3385 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8,8,8,8,8]
3386 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
3387 ; SSE2-NEXT:    retq
3389 ; SSE3-LABEL: ult_8_v8i16:
3390 ; SSE3:       # %bb.0:
3391 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3392 ; SSE3-NEXT:    psrlw $1, %xmm1
3393 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3394 ; SSE3-NEXT:    psubb %xmm1, %xmm0
3395 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3396 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
3397 ; SSE3-NEXT:    pand %xmm1, %xmm2
3398 ; SSE3-NEXT:    psrlw $2, %xmm0
3399 ; SSE3-NEXT:    pand %xmm1, %xmm0
3400 ; SSE3-NEXT:    paddb %xmm2, %xmm0
3401 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3402 ; SSE3-NEXT:    psrlw $4, %xmm1
3403 ; SSE3-NEXT:    paddb %xmm0, %xmm1
3404 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3405 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
3406 ; SSE3-NEXT:    psllw $8, %xmm2
3407 ; SSE3-NEXT:    paddb %xmm1, %xmm2
3408 ; SSE3-NEXT:    psrlw $8, %xmm2
3409 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8,8,8,8,8]
3410 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
3411 ; SSE3-NEXT:    retq
3413 ; SSSE3-LABEL: ult_8_v8i16:
3414 ; SSSE3:       # %bb.0:
3415 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3416 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
3417 ; SSSE3-NEXT:    pand %xmm1, %xmm2
3418 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3419 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
3420 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
3421 ; SSSE3-NEXT:    psrlw $4, %xmm0
3422 ; SSSE3-NEXT:    pand %xmm1, %xmm0
3423 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
3424 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
3425 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
3426 ; SSSE3-NEXT:    psllw $8, %xmm1
3427 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
3428 ; SSSE3-NEXT:    psrlw $8, %xmm1
3429 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8,8,8,8,8]
3430 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
3431 ; SSSE3-NEXT:    retq
3433 ; SSE41-LABEL: ult_8_v8i16:
3434 ; SSE41:       # %bb.0:
3435 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3436 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
3437 ; SSE41-NEXT:    pand %xmm1, %xmm2
3438 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3439 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
3440 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
3441 ; SSE41-NEXT:    psrlw $4, %xmm0
3442 ; SSE41-NEXT:    pand %xmm1, %xmm0
3443 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
3444 ; SSE41-NEXT:    paddb %xmm4, %xmm3
3445 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
3446 ; SSE41-NEXT:    psllw $8, %xmm1
3447 ; SSE41-NEXT:    paddb %xmm3, %xmm1
3448 ; SSE41-NEXT:    psrlw $8, %xmm1
3449 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8,8,8,8,8]
3450 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
3451 ; SSE41-NEXT:    retq
3453 ; AVX1-LABEL: ult_8_v8i16:
3454 ; AVX1:       # %bb.0:
3455 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3456 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3457 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3458 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3459 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3460 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3461 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3462 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3463 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3464 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3465 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3466 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]
3467 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3468 ; AVX1-NEXT:    retq
3470 ; AVX2-LABEL: ult_8_v8i16:
3471 ; AVX2:       # %bb.0:
3472 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3473 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
3474 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3475 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3476 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
3477 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3478 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3479 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3480 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
3481 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3482 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
3483 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]
3484 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3485 ; AVX2-NEXT:    retq
3487 ; AVX512VPOPCNTDQ-LABEL: ult_8_v8i16:
3488 ; AVX512VPOPCNTDQ:       # %bb.0:
3489 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3490 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3491 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3492 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]
3493 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3494 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
3495 ; AVX512VPOPCNTDQ-NEXT:    retq
3497 ; AVX512VPOPCNTDQVL-LABEL: ult_8_v8i16:
3498 ; AVX512VPOPCNTDQVL:       # %bb.0:
3499 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3500 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3501 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
3502 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]
3503 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3504 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
3505 ; AVX512VPOPCNTDQVL-NEXT:    retq
3507 ; BITALG_NOVLX-LABEL: ult_8_v8i16:
3508 ; BITALG_NOVLX:       # %bb.0:
3509 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3510 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3511 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]
3512 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3513 ; BITALG_NOVLX-NEXT:    vzeroupper
3514 ; BITALG_NOVLX-NEXT:    retq
3516 ; BITALG-LABEL: ult_8_v8i16:
3517 ; BITALG:       # %bb.0:
3518 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
3519 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [8,8,8,8,8,8,8,8]
3520 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3521 ; BITALG-NEXT:    retq
3522   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3523   %3 = icmp ult <8 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
3524   %4 = sext <8 x i1> %3 to <8 x i16>
3525   ret <8 x i16> %4
3528 define <8 x i16> @ugt_8_v8i16(<8 x i16> %0) {
3529 ; SSE2-LABEL: ugt_8_v8i16:
3530 ; SSE2:       # %bb.0:
3531 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3532 ; SSE2-NEXT:    psrlw $1, %xmm1
3533 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3534 ; SSE2-NEXT:    psubb %xmm1, %xmm0
3535 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3536 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
3537 ; SSE2-NEXT:    pand %xmm1, %xmm2
3538 ; SSE2-NEXT:    psrlw $2, %xmm0
3539 ; SSE2-NEXT:    pand %xmm1, %xmm0
3540 ; SSE2-NEXT:    paddb %xmm2, %xmm0
3541 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3542 ; SSE2-NEXT:    psrlw $4, %xmm1
3543 ; SSE2-NEXT:    paddb %xmm1, %xmm0
3544 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3545 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3546 ; SSE2-NEXT:    psllw $8, %xmm1
3547 ; SSE2-NEXT:    paddb %xmm1, %xmm0
3548 ; SSE2-NEXT:    psrlw $8, %xmm0
3549 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3550 ; SSE2-NEXT:    retq
3552 ; SSE3-LABEL: ugt_8_v8i16:
3553 ; SSE3:       # %bb.0:
3554 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3555 ; SSE3-NEXT:    psrlw $1, %xmm1
3556 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3557 ; SSE3-NEXT:    psubb %xmm1, %xmm0
3558 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3559 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
3560 ; SSE3-NEXT:    pand %xmm1, %xmm2
3561 ; SSE3-NEXT:    psrlw $2, %xmm0
3562 ; SSE3-NEXT:    pand %xmm1, %xmm0
3563 ; SSE3-NEXT:    paddb %xmm2, %xmm0
3564 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3565 ; SSE3-NEXT:    psrlw $4, %xmm1
3566 ; SSE3-NEXT:    paddb %xmm1, %xmm0
3567 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3568 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3569 ; SSE3-NEXT:    psllw $8, %xmm1
3570 ; SSE3-NEXT:    paddb %xmm1, %xmm0
3571 ; SSE3-NEXT:    psrlw $8, %xmm0
3572 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3573 ; SSE3-NEXT:    retq
3575 ; SSSE3-LABEL: ugt_8_v8i16:
3576 ; SSSE3:       # %bb.0:
3577 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3578 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
3579 ; SSSE3-NEXT:    pand %xmm1, %xmm2
3580 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3581 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
3582 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
3583 ; SSSE3-NEXT:    psrlw $4, %xmm0
3584 ; SSSE3-NEXT:    pand %xmm1, %xmm0
3585 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
3586 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
3587 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
3588 ; SSSE3-NEXT:    psllw $8, %xmm0
3589 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
3590 ; SSSE3-NEXT:    psrlw $8, %xmm0
3591 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3592 ; SSSE3-NEXT:    retq
3594 ; SSE41-LABEL: ugt_8_v8i16:
3595 ; SSE41:       # %bb.0:
3596 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3597 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
3598 ; SSE41-NEXT:    pand %xmm1, %xmm2
3599 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3600 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
3601 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
3602 ; SSE41-NEXT:    psrlw $4, %xmm0
3603 ; SSE41-NEXT:    pand %xmm1, %xmm0
3604 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
3605 ; SSE41-NEXT:    paddb %xmm4, %xmm3
3606 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
3607 ; SSE41-NEXT:    psllw $8, %xmm0
3608 ; SSE41-NEXT:    paddb %xmm3, %xmm0
3609 ; SSE41-NEXT:    psrlw $8, %xmm0
3610 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3611 ; SSE41-NEXT:    retq
3613 ; AVX1-LABEL: ugt_8_v8i16:
3614 ; AVX1:       # %bb.0:
3615 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3616 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3617 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3618 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3619 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3620 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3621 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3622 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3623 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3624 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3625 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3626 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3627 ; AVX1-NEXT:    retq
3629 ; AVX2-LABEL: ugt_8_v8i16:
3630 ; AVX2:       # %bb.0:
3631 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3632 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
3633 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3634 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3635 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
3636 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3637 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3638 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3639 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
3640 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3641 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
3642 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3643 ; AVX2-NEXT:    retq
3645 ; AVX512VPOPCNTDQ-LABEL: ugt_8_v8i16:
3646 ; AVX512VPOPCNTDQ:       # %bb.0:
3647 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3648 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3649 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3650 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3651 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
3652 ; AVX512VPOPCNTDQ-NEXT:    retq
3654 ; AVX512VPOPCNTDQVL-LABEL: ugt_8_v8i16:
3655 ; AVX512VPOPCNTDQVL:       # %bb.0:
3656 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3657 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3658 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
3659 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3660 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
3661 ; AVX512VPOPCNTDQVL-NEXT:    retq
3663 ; BITALG_NOVLX-LABEL: ugt_8_v8i16:
3664 ; BITALG_NOVLX:       # %bb.0:
3665 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3666 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3667 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3668 ; BITALG_NOVLX-NEXT:    vzeroupper
3669 ; BITALG_NOVLX-NEXT:    retq
3671 ; BITALG-LABEL: ugt_8_v8i16:
3672 ; BITALG:       # %bb.0:
3673 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
3674 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3675 ; BITALG-NEXT:    retq
3676   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3677   %3 = icmp ugt <8 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
3678   %4 = sext <8 x i1> %3 to <8 x i16>
3679   ret <8 x i16> %4
3682 define <8 x i16> @ult_9_v8i16(<8 x i16> %0) {
3683 ; SSE2-LABEL: ult_9_v8i16:
3684 ; SSE2:       # %bb.0:
3685 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3686 ; SSE2-NEXT:    psrlw $1, %xmm1
3687 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3688 ; SSE2-NEXT:    psubb %xmm1, %xmm0
3689 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3690 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
3691 ; SSE2-NEXT:    pand %xmm1, %xmm2
3692 ; SSE2-NEXT:    psrlw $2, %xmm0
3693 ; SSE2-NEXT:    pand %xmm1, %xmm0
3694 ; SSE2-NEXT:    paddb %xmm2, %xmm0
3695 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3696 ; SSE2-NEXT:    psrlw $4, %xmm1
3697 ; SSE2-NEXT:    paddb %xmm0, %xmm1
3698 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3699 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
3700 ; SSE2-NEXT:    psllw $8, %xmm2
3701 ; SSE2-NEXT:    paddb %xmm1, %xmm2
3702 ; SSE2-NEXT:    psrlw $8, %xmm2
3703 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [9,9,9,9,9,9,9,9]
3704 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
3705 ; SSE2-NEXT:    retq
3707 ; SSE3-LABEL: ult_9_v8i16:
3708 ; SSE3:       # %bb.0:
3709 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3710 ; SSE3-NEXT:    psrlw $1, %xmm1
3711 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3712 ; SSE3-NEXT:    psubb %xmm1, %xmm0
3713 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3714 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
3715 ; SSE3-NEXT:    pand %xmm1, %xmm2
3716 ; SSE3-NEXT:    psrlw $2, %xmm0
3717 ; SSE3-NEXT:    pand %xmm1, %xmm0
3718 ; SSE3-NEXT:    paddb %xmm2, %xmm0
3719 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3720 ; SSE3-NEXT:    psrlw $4, %xmm1
3721 ; SSE3-NEXT:    paddb %xmm0, %xmm1
3722 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3723 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
3724 ; SSE3-NEXT:    psllw $8, %xmm2
3725 ; SSE3-NEXT:    paddb %xmm1, %xmm2
3726 ; SSE3-NEXT:    psrlw $8, %xmm2
3727 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [9,9,9,9,9,9,9,9]
3728 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
3729 ; SSE3-NEXT:    retq
3731 ; SSSE3-LABEL: ult_9_v8i16:
3732 ; SSSE3:       # %bb.0:
3733 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3734 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
3735 ; SSSE3-NEXT:    pand %xmm1, %xmm2
3736 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3737 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
3738 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
3739 ; SSSE3-NEXT:    psrlw $4, %xmm0
3740 ; SSSE3-NEXT:    pand %xmm1, %xmm0
3741 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
3742 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
3743 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
3744 ; SSSE3-NEXT:    psllw $8, %xmm1
3745 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
3746 ; SSSE3-NEXT:    psrlw $8, %xmm1
3747 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [9,9,9,9,9,9,9,9]
3748 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
3749 ; SSSE3-NEXT:    retq
3751 ; SSE41-LABEL: ult_9_v8i16:
3752 ; SSE41:       # %bb.0:
3753 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3754 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
3755 ; SSE41-NEXT:    pand %xmm1, %xmm2
3756 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3757 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
3758 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
3759 ; SSE41-NEXT:    psrlw $4, %xmm0
3760 ; SSE41-NEXT:    pand %xmm1, %xmm0
3761 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
3762 ; SSE41-NEXT:    paddb %xmm4, %xmm3
3763 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
3764 ; SSE41-NEXT:    psllw $8, %xmm1
3765 ; SSE41-NEXT:    paddb %xmm3, %xmm1
3766 ; SSE41-NEXT:    psrlw $8, %xmm1
3767 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [9,9,9,9,9,9,9,9]
3768 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
3769 ; SSE41-NEXT:    retq
3771 ; AVX1-LABEL: ult_9_v8i16:
3772 ; AVX1:       # %bb.0:
3773 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3774 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3775 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3776 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3777 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3778 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3779 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3780 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3781 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3782 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3783 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3784 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]
3785 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3786 ; AVX1-NEXT:    retq
3788 ; AVX2-LABEL: ult_9_v8i16:
3789 ; AVX2:       # %bb.0:
3790 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3791 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
3792 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3793 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3794 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
3795 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3796 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3797 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3798 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
3799 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3800 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
3801 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]
3802 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3803 ; AVX2-NEXT:    retq
3805 ; AVX512VPOPCNTDQ-LABEL: ult_9_v8i16:
3806 ; AVX512VPOPCNTDQ:       # %bb.0:
3807 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3808 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3809 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3810 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]
3811 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3812 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
3813 ; AVX512VPOPCNTDQ-NEXT:    retq
3815 ; AVX512VPOPCNTDQVL-LABEL: ult_9_v8i16:
3816 ; AVX512VPOPCNTDQVL:       # %bb.0:
3817 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3818 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3819 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
3820 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]
3821 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3822 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
3823 ; AVX512VPOPCNTDQVL-NEXT:    retq
3825 ; BITALG_NOVLX-LABEL: ult_9_v8i16:
3826 ; BITALG_NOVLX:       # %bb.0:
3827 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3828 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3829 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]
3830 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3831 ; BITALG_NOVLX-NEXT:    vzeroupper
3832 ; BITALG_NOVLX-NEXT:    retq
3834 ; BITALG-LABEL: ult_9_v8i16:
3835 ; BITALG:       # %bb.0:
3836 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
3837 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [9,9,9,9,9,9,9,9]
3838 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
3839 ; BITALG-NEXT:    retq
3840   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3841   %3 = icmp ult <8 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
3842   %4 = sext <8 x i1> %3 to <8 x i16>
3843   ret <8 x i16> %4
3846 define <8 x i16> @ugt_9_v8i16(<8 x i16> %0) {
3847 ; SSE2-LABEL: ugt_9_v8i16:
3848 ; SSE2:       # %bb.0:
3849 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3850 ; SSE2-NEXT:    psrlw $1, %xmm1
3851 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3852 ; SSE2-NEXT:    psubb %xmm1, %xmm0
3853 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3854 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
3855 ; SSE2-NEXT:    pand %xmm1, %xmm2
3856 ; SSE2-NEXT:    psrlw $2, %xmm0
3857 ; SSE2-NEXT:    pand %xmm1, %xmm0
3858 ; SSE2-NEXT:    paddb %xmm2, %xmm0
3859 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3860 ; SSE2-NEXT:    psrlw $4, %xmm1
3861 ; SSE2-NEXT:    paddb %xmm1, %xmm0
3862 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3863 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
3864 ; SSE2-NEXT:    psllw $8, %xmm1
3865 ; SSE2-NEXT:    paddb %xmm1, %xmm0
3866 ; SSE2-NEXT:    psrlw $8, %xmm0
3867 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3868 ; SSE2-NEXT:    retq
3870 ; SSE3-LABEL: ugt_9_v8i16:
3871 ; SSE3:       # %bb.0:
3872 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3873 ; SSE3-NEXT:    psrlw $1, %xmm1
3874 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
3875 ; SSE3-NEXT:    psubb %xmm1, %xmm0
3876 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
3877 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
3878 ; SSE3-NEXT:    pand %xmm1, %xmm2
3879 ; SSE3-NEXT:    psrlw $2, %xmm0
3880 ; SSE3-NEXT:    pand %xmm1, %xmm0
3881 ; SSE3-NEXT:    paddb %xmm2, %xmm0
3882 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3883 ; SSE3-NEXT:    psrlw $4, %xmm1
3884 ; SSE3-NEXT:    paddb %xmm1, %xmm0
3885 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3886 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
3887 ; SSE3-NEXT:    psllw $8, %xmm1
3888 ; SSE3-NEXT:    paddb %xmm1, %xmm0
3889 ; SSE3-NEXT:    psrlw $8, %xmm0
3890 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3891 ; SSE3-NEXT:    retq
3893 ; SSSE3-LABEL: ugt_9_v8i16:
3894 ; SSSE3:       # %bb.0:
3895 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3896 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
3897 ; SSSE3-NEXT:    pand %xmm1, %xmm2
3898 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3899 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
3900 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
3901 ; SSSE3-NEXT:    psrlw $4, %xmm0
3902 ; SSSE3-NEXT:    pand %xmm1, %xmm0
3903 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
3904 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
3905 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
3906 ; SSSE3-NEXT:    psllw $8, %xmm0
3907 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
3908 ; SSSE3-NEXT:    psrlw $8, %xmm0
3909 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3910 ; SSSE3-NEXT:    retq
3912 ; SSE41-LABEL: ugt_9_v8i16:
3913 ; SSE41:       # %bb.0:
3914 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3915 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
3916 ; SSE41-NEXT:    pand %xmm1, %xmm2
3917 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3918 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
3919 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
3920 ; SSE41-NEXT:    psrlw $4, %xmm0
3921 ; SSE41-NEXT:    pand %xmm1, %xmm0
3922 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
3923 ; SSE41-NEXT:    paddb %xmm4, %xmm3
3924 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
3925 ; SSE41-NEXT:    psllw $8, %xmm0
3926 ; SSE41-NEXT:    paddb %xmm3, %xmm0
3927 ; SSE41-NEXT:    psrlw $8, %xmm0
3928 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3929 ; SSE41-NEXT:    retq
3931 ; AVX1-LABEL: ugt_9_v8i16:
3932 ; AVX1:       # %bb.0:
3933 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3934 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
3935 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3936 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3937 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
3938 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
3939 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3940 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3941 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
3942 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3943 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
3944 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3945 ; AVX1-NEXT:    retq
3947 ; AVX2-LABEL: ugt_9_v8i16:
3948 ; AVX2:       # %bb.0:
3949 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
3950 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
3951 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
3952 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
3953 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
3954 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
3955 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
3956 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
3957 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
3958 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
3959 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
3960 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3961 ; AVX2-NEXT:    retq
3963 ; AVX512VPOPCNTDQ-LABEL: ugt_9_v8i16:
3964 ; AVX512VPOPCNTDQ:       # %bb.0:
3965 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3966 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
3967 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
3968 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3969 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
3970 ; AVX512VPOPCNTDQ-NEXT:    retq
3972 ; AVX512VPOPCNTDQVL-LABEL: ugt_9_v8i16:
3973 ; AVX512VPOPCNTDQVL:       # %bb.0:
3974 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
3975 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
3976 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
3977 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3978 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
3979 ; AVX512VPOPCNTDQVL-NEXT:    retq
3981 ; BITALG_NOVLX-LABEL: ugt_9_v8i16:
3982 ; BITALG_NOVLX:       # %bb.0:
3983 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
3984 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
3985 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3986 ; BITALG_NOVLX-NEXT:    vzeroupper
3987 ; BITALG_NOVLX-NEXT:    retq
3989 ; BITALG-LABEL: ugt_9_v8i16:
3990 ; BITALG:       # %bb.0:
3991 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
3992 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3993 ; BITALG-NEXT:    retq
3994   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3995   %3 = icmp ugt <8 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
3996   %4 = sext <8 x i1> %3 to <8 x i16>
3997   ret <8 x i16> %4
4000 define <8 x i16> @ult_10_v8i16(<8 x i16> %0) {
4001 ; SSE2-LABEL: ult_10_v8i16:
4002 ; SSE2:       # %bb.0:
4003 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4004 ; SSE2-NEXT:    psrlw $1, %xmm1
4005 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4006 ; SSE2-NEXT:    psubb %xmm1, %xmm0
4007 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4008 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
4009 ; SSE2-NEXT:    pand %xmm1, %xmm2
4010 ; SSE2-NEXT:    psrlw $2, %xmm0
4011 ; SSE2-NEXT:    pand %xmm1, %xmm0
4012 ; SSE2-NEXT:    paddb %xmm2, %xmm0
4013 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4014 ; SSE2-NEXT:    psrlw $4, %xmm1
4015 ; SSE2-NEXT:    paddb %xmm0, %xmm1
4016 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4017 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
4018 ; SSE2-NEXT:    psllw $8, %xmm2
4019 ; SSE2-NEXT:    paddb %xmm1, %xmm2
4020 ; SSE2-NEXT:    psrlw $8, %xmm2
4021 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [10,10,10,10,10,10,10,10]
4022 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
4023 ; SSE2-NEXT:    retq
4025 ; SSE3-LABEL: ult_10_v8i16:
4026 ; SSE3:       # %bb.0:
4027 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4028 ; SSE3-NEXT:    psrlw $1, %xmm1
4029 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4030 ; SSE3-NEXT:    psubb %xmm1, %xmm0
4031 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4032 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
4033 ; SSE3-NEXT:    pand %xmm1, %xmm2
4034 ; SSE3-NEXT:    psrlw $2, %xmm0
4035 ; SSE3-NEXT:    pand %xmm1, %xmm0
4036 ; SSE3-NEXT:    paddb %xmm2, %xmm0
4037 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4038 ; SSE3-NEXT:    psrlw $4, %xmm1
4039 ; SSE3-NEXT:    paddb %xmm0, %xmm1
4040 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4041 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
4042 ; SSE3-NEXT:    psllw $8, %xmm2
4043 ; SSE3-NEXT:    paddb %xmm1, %xmm2
4044 ; SSE3-NEXT:    psrlw $8, %xmm2
4045 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [10,10,10,10,10,10,10,10]
4046 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
4047 ; SSE3-NEXT:    retq
4049 ; SSSE3-LABEL: ult_10_v8i16:
4050 ; SSSE3:       # %bb.0:
4051 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4052 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
4053 ; SSSE3-NEXT:    pand %xmm1, %xmm2
4054 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4055 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
4056 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
4057 ; SSSE3-NEXT:    psrlw $4, %xmm0
4058 ; SSSE3-NEXT:    pand %xmm1, %xmm0
4059 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
4060 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
4061 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
4062 ; SSSE3-NEXT:    psllw $8, %xmm1
4063 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
4064 ; SSSE3-NEXT:    psrlw $8, %xmm1
4065 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [10,10,10,10,10,10,10,10]
4066 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
4067 ; SSSE3-NEXT:    retq
4069 ; SSE41-LABEL: ult_10_v8i16:
4070 ; SSE41:       # %bb.0:
4071 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4072 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
4073 ; SSE41-NEXT:    pand %xmm1, %xmm2
4074 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4075 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
4076 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
4077 ; SSE41-NEXT:    psrlw $4, %xmm0
4078 ; SSE41-NEXT:    pand %xmm1, %xmm0
4079 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
4080 ; SSE41-NEXT:    paddb %xmm4, %xmm3
4081 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
4082 ; SSE41-NEXT:    psllw $8, %xmm1
4083 ; SSE41-NEXT:    paddb %xmm3, %xmm1
4084 ; SSE41-NEXT:    psrlw $8, %xmm1
4085 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [10,10,10,10,10,10,10,10]
4086 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
4087 ; SSE41-NEXT:    retq
4089 ; AVX1-LABEL: ult_10_v8i16:
4090 ; AVX1:       # %bb.0:
4091 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4092 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4093 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4094 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4095 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4096 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4097 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4098 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4099 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
4100 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4101 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
4102 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]
4103 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4104 ; AVX1-NEXT:    retq
4106 ; AVX2-LABEL: ult_10_v8i16:
4107 ; AVX2:       # %bb.0:
4108 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4109 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
4110 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4111 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4112 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
4113 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
4114 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4115 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4116 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
4117 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4118 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
4119 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]
4120 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4121 ; AVX2-NEXT:    retq
4123 ; AVX512VPOPCNTDQ-LABEL: ult_10_v8i16:
4124 ; AVX512VPOPCNTDQ:       # %bb.0:
4125 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4126 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4127 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
4128 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]
4129 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4130 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
4131 ; AVX512VPOPCNTDQ-NEXT:    retq
4133 ; AVX512VPOPCNTDQVL-LABEL: ult_10_v8i16:
4134 ; AVX512VPOPCNTDQVL:       # %bb.0:
4135 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4136 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4137 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
4138 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]
4139 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4140 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
4141 ; AVX512VPOPCNTDQVL-NEXT:    retq
4143 ; BITALG_NOVLX-LABEL: ult_10_v8i16:
4144 ; BITALG_NOVLX:       # %bb.0:
4145 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4146 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
4147 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]
4148 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4149 ; BITALG_NOVLX-NEXT:    vzeroupper
4150 ; BITALG_NOVLX-NEXT:    retq
4152 ; BITALG-LABEL: ult_10_v8i16:
4153 ; BITALG:       # %bb.0:
4154 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
4155 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [10,10,10,10,10,10,10,10]
4156 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4157 ; BITALG-NEXT:    retq
4158   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
4159   %3 = icmp ult <8 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
4160   %4 = sext <8 x i1> %3 to <8 x i16>
4161   ret <8 x i16> %4
4164 define <8 x i16> @ugt_10_v8i16(<8 x i16> %0) {
4165 ; SSE2-LABEL: ugt_10_v8i16:
4166 ; SSE2:       # %bb.0:
4167 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4168 ; SSE2-NEXT:    psrlw $1, %xmm1
4169 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4170 ; SSE2-NEXT:    psubb %xmm1, %xmm0
4171 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4172 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
4173 ; SSE2-NEXT:    pand %xmm1, %xmm2
4174 ; SSE2-NEXT:    psrlw $2, %xmm0
4175 ; SSE2-NEXT:    pand %xmm1, %xmm0
4176 ; SSE2-NEXT:    paddb %xmm2, %xmm0
4177 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4178 ; SSE2-NEXT:    psrlw $4, %xmm1
4179 ; SSE2-NEXT:    paddb %xmm1, %xmm0
4180 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4181 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4182 ; SSE2-NEXT:    psllw $8, %xmm1
4183 ; SSE2-NEXT:    paddb %xmm1, %xmm0
4184 ; SSE2-NEXT:    psrlw $8, %xmm0
4185 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4186 ; SSE2-NEXT:    retq
4188 ; SSE3-LABEL: ugt_10_v8i16:
4189 ; SSE3:       # %bb.0:
4190 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4191 ; SSE3-NEXT:    psrlw $1, %xmm1
4192 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4193 ; SSE3-NEXT:    psubb %xmm1, %xmm0
4194 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4195 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
4196 ; SSE3-NEXT:    pand %xmm1, %xmm2
4197 ; SSE3-NEXT:    psrlw $2, %xmm0
4198 ; SSE3-NEXT:    pand %xmm1, %xmm0
4199 ; SSE3-NEXT:    paddb %xmm2, %xmm0
4200 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4201 ; SSE3-NEXT:    psrlw $4, %xmm1
4202 ; SSE3-NEXT:    paddb %xmm1, %xmm0
4203 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4204 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4205 ; SSE3-NEXT:    psllw $8, %xmm1
4206 ; SSE3-NEXT:    paddb %xmm1, %xmm0
4207 ; SSE3-NEXT:    psrlw $8, %xmm0
4208 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4209 ; SSE3-NEXT:    retq
4211 ; SSSE3-LABEL: ugt_10_v8i16:
4212 ; SSSE3:       # %bb.0:
4213 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4214 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
4215 ; SSSE3-NEXT:    pand %xmm1, %xmm2
4216 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4217 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
4218 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
4219 ; SSSE3-NEXT:    psrlw $4, %xmm0
4220 ; SSSE3-NEXT:    pand %xmm1, %xmm0
4221 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
4222 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
4223 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
4224 ; SSSE3-NEXT:    psllw $8, %xmm0
4225 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
4226 ; SSSE3-NEXT:    psrlw $8, %xmm0
4227 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4228 ; SSSE3-NEXT:    retq
4230 ; SSE41-LABEL: ugt_10_v8i16:
4231 ; SSE41:       # %bb.0:
4232 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4233 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
4234 ; SSE41-NEXT:    pand %xmm1, %xmm2
4235 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4236 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
4237 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
4238 ; SSE41-NEXT:    psrlw $4, %xmm0
4239 ; SSE41-NEXT:    pand %xmm1, %xmm0
4240 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
4241 ; SSE41-NEXT:    paddb %xmm4, %xmm3
4242 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
4243 ; SSE41-NEXT:    psllw $8, %xmm0
4244 ; SSE41-NEXT:    paddb %xmm3, %xmm0
4245 ; SSE41-NEXT:    psrlw $8, %xmm0
4246 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4247 ; SSE41-NEXT:    retq
4249 ; AVX1-LABEL: ugt_10_v8i16:
4250 ; AVX1:       # %bb.0:
4251 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4252 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4253 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4254 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4255 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4256 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4257 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4258 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4259 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
4260 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4261 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
4262 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4263 ; AVX1-NEXT:    retq
4265 ; AVX2-LABEL: ugt_10_v8i16:
4266 ; AVX2:       # %bb.0:
4267 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4268 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
4269 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4270 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4271 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
4272 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
4273 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4274 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4275 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
4276 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4277 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
4278 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4279 ; AVX2-NEXT:    retq
4281 ; AVX512VPOPCNTDQ-LABEL: ugt_10_v8i16:
4282 ; AVX512VPOPCNTDQ:       # %bb.0:
4283 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4284 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4285 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
4286 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4287 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
4288 ; AVX512VPOPCNTDQ-NEXT:    retq
4290 ; AVX512VPOPCNTDQVL-LABEL: ugt_10_v8i16:
4291 ; AVX512VPOPCNTDQVL:       # %bb.0:
4292 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4293 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4294 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
4295 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4296 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
4297 ; AVX512VPOPCNTDQVL-NEXT:    retq
4299 ; BITALG_NOVLX-LABEL: ugt_10_v8i16:
4300 ; BITALG_NOVLX:       # %bb.0:
4301 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4302 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
4303 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4304 ; BITALG_NOVLX-NEXT:    vzeroupper
4305 ; BITALG_NOVLX-NEXT:    retq
4307 ; BITALG-LABEL: ugt_10_v8i16:
4308 ; BITALG:       # %bb.0:
4309 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
4310 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4311 ; BITALG-NEXT:    retq
4312   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
4313   %3 = icmp ugt <8 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
4314   %4 = sext <8 x i1> %3 to <8 x i16>
4315   ret <8 x i16> %4
4318 define <8 x i16> @ult_11_v8i16(<8 x i16> %0) {
4319 ; SSE2-LABEL: ult_11_v8i16:
4320 ; SSE2:       # %bb.0:
4321 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4322 ; SSE2-NEXT:    psrlw $1, %xmm1
4323 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4324 ; SSE2-NEXT:    psubb %xmm1, %xmm0
4325 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4326 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
4327 ; SSE2-NEXT:    pand %xmm1, %xmm2
4328 ; SSE2-NEXT:    psrlw $2, %xmm0
4329 ; SSE2-NEXT:    pand %xmm1, %xmm0
4330 ; SSE2-NEXT:    paddb %xmm2, %xmm0
4331 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4332 ; SSE2-NEXT:    psrlw $4, %xmm1
4333 ; SSE2-NEXT:    paddb %xmm0, %xmm1
4334 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4335 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
4336 ; SSE2-NEXT:    psllw $8, %xmm2
4337 ; SSE2-NEXT:    paddb %xmm1, %xmm2
4338 ; SSE2-NEXT:    psrlw $8, %xmm2
4339 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [11,11,11,11,11,11,11,11]
4340 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
4341 ; SSE2-NEXT:    retq
4343 ; SSE3-LABEL: ult_11_v8i16:
4344 ; SSE3:       # %bb.0:
4345 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4346 ; SSE3-NEXT:    psrlw $1, %xmm1
4347 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4348 ; SSE3-NEXT:    psubb %xmm1, %xmm0
4349 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4350 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
4351 ; SSE3-NEXT:    pand %xmm1, %xmm2
4352 ; SSE3-NEXT:    psrlw $2, %xmm0
4353 ; SSE3-NEXT:    pand %xmm1, %xmm0
4354 ; SSE3-NEXT:    paddb %xmm2, %xmm0
4355 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4356 ; SSE3-NEXT:    psrlw $4, %xmm1
4357 ; SSE3-NEXT:    paddb %xmm0, %xmm1
4358 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4359 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
4360 ; SSE3-NEXT:    psllw $8, %xmm2
4361 ; SSE3-NEXT:    paddb %xmm1, %xmm2
4362 ; SSE3-NEXT:    psrlw $8, %xmm2
4363 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [11,11,11,11,11,11,11,11]
4364 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
4365 ; SSE3-NEXT:    retq
4367 ; SSSE3-LABEL: ult_11_v8i16:
4368 ; SSSE3:       # %bb.0:
4369 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4370 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
4371 ; SSSE3-NEXT:    pand %xmm1, %xmm2
4372 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4373 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
4374 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
4375 ; SSSE3-NEXT:    psrlw $4, %xmm0
4376 ; SSSE3-NEXT:    pand %xmm1, %xmm0
4377 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
4378 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
4379 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
4380 ; SSSE3-NEXT:    psllw $8, %xmm1
4381 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
4382 ; SSSE3-NEXT:    psrlw $8, %xmm1
4383 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [11,11,11,11,11,11,11,11]
4384 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
4385 ; SSSE3-NEXT:    retq
4387 ; SSE41-LABEL: ult_11_v8i16:
4388 ; SSE41:       # %bb.0:
4389 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4390 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
4391 ; SSE41-NEXT:    pand %xmm1, %xmm2
4392 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4393 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
4394 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
4395 ; SSE41-NEXT:    psrlw $4, %xmm0
4396 ; SSE41-NEXT:    pand %xmm1, %xmm0
4397 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
4398 ; SSE41-NEXT:    paddb %xmm4, %xmm3
4399 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
4400 ; SSE41-NEXT:    psllw $8, %xmm1
4401 ; SSE41-NEXT:    paddb %xmm3, %xmm1
4402 ; SSE41-NEXT:    psrlw $8, %xmm1
4403 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [11,11,11,11,11,11,11,11]
4404 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
4405 ; SSE41-NEXT:    retq
4407 ; AVX1-LABEL: ult_11_v8i16:
4408 ; AVX1:       # %bb.0:
4409 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4410 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4411 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4412 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4413 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4414 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4415 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4416 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4417 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
4418 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4419 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
4420 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]
4421 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4422 ; AVX1-NEXT:    retq
4424 ; AVX2-LABEL: ult_11_v8i16:
4425 ; AVX2:       # %bb.0:
4426 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4427 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
4428 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4429 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4430 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
4431 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
4432 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4433 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4434 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
4435 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4436 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
4437 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]
4438 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4439 ; AVX2-NEXT:    retq
4441 ; AVX512VPOPCNTDQ-LABEL: ult_11_v8i16:
4442 ; AVX512VPOPCNTDQ:       # %bb.0:
4443 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4444 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4445 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
4446 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]
4447 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4448 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
4449 ; AVX512VPOPCNTDQ-NEXT:    retq
4451 ; AVX512VPOPCNTDQVL-LABEL: ult_11_v8i16:
4452 ; AVX512VPOPCNTDQVL:       # %bb.0:
4453 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4454 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4455 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
4456 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]
4457 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4458 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
4459 ; AVX512VPOPCNTDQVL-NEXT:    retq
4461 ; BITALG_NOVLX-LABEL: ult_11_v8i16:
4462 ; BITALG_NOVLX:       # %bb.0:
4463 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4464 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
4465 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]
4466 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4467 ; BITALG_NOVLX-NEXT:    vzeroupper
4468 ; BITALG_NOVLX-NEXT:    retq
4470 ; BITALG-LABEL: ult_11_v8i16:
4471 ; BITALG:       # %bb.0:
4472 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
4473 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [11,11,11,11,11,11,11,11]
4474 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4475 ; BITALG-NEXT:    retq
4476   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
4477   %3 = icmp ult <8 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>
4478   %4 = sext <8 x i1> %3 to <8 x i16>
4479   ret <8 x i16> %4
4482 define <8 x i16> @ugt_11_v8i16(<8 x i16> %0) {
4483 ; SSE2-LABEL: ugt_11_v8i16:
4484 ; SSE2:       # %bb.0:
4485 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4486 ; SSE2-NEXT:    psrlw $1, %xmm1
4487 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4488 ; SSE2-NEXT:    psubb %xmm1, %xmm0
4489 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4490 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
4491 ; SSE2-NEXT:    pand %xmm1, %xmm2
4492 ; SSE2-NEXT:    psrlw $2, %xmm0
4493 ; SSE2-NEXT:    pand %xmm1, %xmm0
4494 ; SSE2-NEXT:    paddb %xmm2, %xmm0
4495 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4496 ; SSE2-NEXT:    psrlw $4, %xmm1
4497 ; SSE2-NEXT:    paddb %xmm1, %xmm0
4498 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4499 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4500 ; SSE2-NEXT:    psllw $8, %xmm1
4501 ; SSE2-NEXT:    paddb %xmm1, %xmm0
4502 ; SSE2-NEXT:    psrlw $8, %xmm0
4503 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4504 ; SSE2-NEXT:    retq
4506 ; SSE3-LABEL: ugt_11_v8i16:
4507 ; SSE3:       # %bb.0:
4508 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4509 ; SSE3-NEXT:    psrlw $1, %xmm1
4510 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4511 ; SSE3-NEXT:    psubb %xmm1, %xmm0
4512 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4513 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
4514 ; SSE3-NEXT:    pand %xmm1, %xmm2
4515 ; SSE3-NEXT:    psrlw $2, %xmm0
4516 ; SSE3-NEXT:    pand %xmm1, %xmm0
4517 ; SSE3-NEXT:    paddb %xmm2, %xmm0
4518 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4519 ; SSE3-NEXT:    psrlw $4, %xmm1
4520 ; SSE3-NEXT:    paddb %xmm1, %xmm0
4521 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4522 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4523 ; SSE3-NEXT:    psllw $8, %xmm1
4524 ; SSE3-NEXT:    paddb %xmm1, %xmm0
4525 ; SSE3-NEXT:    psrlw $8, %xmm0
4526 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4527 ; SSE3-NEXT:    retq
4529 ; SSSE3-LABEL: ugt_11_v8i16:
4530 ; SSSE3:       # %bb.0:
4531 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4532 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
4533 ; SSSE3-NEXT:    pand %xmm1, %xmm2
4534 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4535 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
4536 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
4537 ; SSSE3-NEXT:    psrlw $4, %xmm0
4538 ; SSSE3-NEXT:    pand %xmm1, %xmm0
4539 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
4540 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
4541 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
4542 ; SSSE3-NEXT:    psllw $8, %xmm0
4543 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
4544 ; SSSE3-NEXT:    psrlw $8, %xmm0
4545 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4546 ; SSSE3-NEXT:    retq
4548 ; SSE41-LABEL: ugt_11_v8i16:
4549 ; SSE41:       # %bb.0:
4550 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4551 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
4552 ; SSE41-NEXT:    pand %xmm1, %xmm2
4553 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4554 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
4555 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
4556 ; SSE41-NEXT:    psrlw $4, %xmm0
4557 ; SSE41-NEXT:    pand %xmm1, %xmm0
4558 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
4559 ; SSE41-NEXT:    paddb %xmm4, %xmm3
4560 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
4561 ; SSE41-NEXT:    psllw $8, %xmm0
4562 ; SSE41-NEXT:    paddb %xmm3, %xmm0
4563 ; SSE41-NEXT:    psrlw $8, %xmm0
4564 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4565 ; SSE41-NEXT:    retq
4567 ; AVX1-LABEL: ugt_11_v8i16:
4568 ; AVX1:       # %bb.0:
4569 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4570 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4571 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4572 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4573 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4574 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4575 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4576 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4577 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
4578 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4579 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
4580 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4581 ; AVX1-NEXT:    retq
4583 ; AVX2-LABEL: ugt_11_v8i16:
4584 ; AVX2:       # %bb.0:
4585 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4586 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
4587 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4588 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4589 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
4590 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
4591 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4592 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4593 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
4594 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4595 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
4596 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4597 ; AVX2-NEXT:    retq
4599 ; AVX512VPOPCNTDQ-LABEL: ugt_11_v8i16:
4600 ; AVX512VPOPCNTDQ:       # %bb.0:
4601 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4602 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4603 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
4604 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4605 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
4606 ; AVX512VPOPCNTDQ-NEXT:    retq
4608 ; AVX512VPOPCNTDQVL-LABEL: ugt_11_v8i16:
4609 ; AVX512VPOPCNTDQVL:       # %bb.0:
4610 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4611 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4612 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
4613 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4614 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
4615 ; AVX512VPOPCNTDQVL-NEXT:    retq
4617 ; BITALG_NOVLX-LABEL: ugt_11_v8i16:
4618 ; BITALG_NOVLX:       # %bb.0:
4619 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4620 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
4621 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4622 ; BITALG_NOVLX-NEXT:    vzeroupper
4623 ; BITALG_NOVLX-NEXT:    retq
4625 ; BITALG-LABEL: ugt_11_v8i16:
4626 ; BITALG:       # %bb.0:
4627 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
4628 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4629 ; BITALG-NEXT:    retq
4630   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
4631   %3 = icmp ugt <8 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>
4632   %4 = sext <8 x i1> %3 to <8 x i16>
4633   ret <8 x i16> %4
4636 define <8 x i16> @ult_12_v8i16(<8 x i16> %0) {
4637 ; SSE2-LABEL: ult_12_v8i16:
4638 ; SSE2:       # %bb.0:
4639 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4640 ; SSE2-NEXT:    psrlw $1, %xmm1
4641 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4642 ; SSE2-NEXT:    psubb %xmm1, %xmm0
4643 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4644 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
4645 ; SSE2-NEXT:    pand %xmm1, %xmm2
4646 ; SSE2-NEXT:    psrlw $2, %xmm0
4647 ; SSE2-NEXT:    pand %xmm1, %xmm0
4648 ; SSE2-NEXT:    paddb %xmm2, %xmm0
4649 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4650 ; SSE2-NEXT:    psrlw $4, %xmm1
4651 ; SSE2-NEXT:    paddb %xmm0, %xmm1
4652 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4653 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
4654 ; SSE2-NEXT:    psllw $8, %xmm2
4655 ; SSE2-NEXT:    paddb %xmm1, %xmm2
4656 ; SSE2-NEXT:    psrlw $8, %xmm2
4657 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [12,12,12,12,12,12,12,12]
4658 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
4659 ; SSE2-NEXT:    retq
4661 ; SSE3-LABEL: ult_12_v8i16:
4662 ; SSE3:       # %bb.0:
4663 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4664 ; SSE3-NEXT:    psrlw $1, %xmm1
4665 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4666 ; SSE3-NEXT:    psubb %xmm1, %xmm0
4667 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4668 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
4669 ; SSE3-NEXT:    pand %xmm1, %xmm2
4670 ; SSE3-NEXT:    psrlw $2, %xmm0
4671 ; SSE3-NEXT:    pand %xmm1, %xmm0
4672 ; SSE3-NEXT:    paddb %xmm2, %xmm0
4673 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4674 ; SSE3-NEXT:    psrlw $4, %xmm1
4675 ; SSE3-NEXT:    paddb %xmm0, %xmm1
4676 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4677 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
4678 ; SSE3-NEXT:    psllw $8, %xmm2
4679 ; SSE3-NEXT:    paddb %xmm1, %xmm2
4680 ; SSE3-NEXT:    psrlw $8, %xmm2
4681 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [12,12,12,12,12,12,12,12]
4682 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
4683 ; SSE3-NEXT:    retq
4685 ; SSSE3-LABEL: ult_12_v8i16:
4686 ; SSSE3:       # %bb.0:
4687 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4688 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
4689 ; SSSE3-NEXT:    pand %xmm1, %xmm2
4690 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4691 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
4692 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
4693 ; SSSE3-NEXT:    psrlw $4, %xmm0
4694 ; SSSE3-NEXT:    pand %xmm1, %xmm0
4695 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
4696 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
4697 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
4698 ; SSSE3-NEXT:    psllw $8, %xmm1
4699 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
4700 ; SSSE3-NEXT:    psrlw $8, %xmm1
4701 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [12,12,12,12,12,12,12,12]
4702 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
4703 ; SSSE3-NEXT:    retq
4705 ; SSE41-LABEL: ult_12_v8i16:
4706 ; SSE41:       # %bb.0:
4707 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4708 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
4709 ; SSE41-NEXT:    pand %xmm1, %xmm2
4710 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4711 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
4712 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
4713 ; SSE41-NEXT:    psrlw $4, %xmm0
4714 ; SSE41-NEXT:    pand %xmm1, %xmm0
4715 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
4716 ; SSE41-NEXT:    paddb %xmm4, %xmm3
4717 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
4718 ; SSE41-NEXT:    psllw $8, %xmm1
4719 ; SSE41-NEXT:    paddb %xmm3, %xmm1
4720 ; SSE41-NEXT:    psrlw $8, %xmm1
4721 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [12,12,12,12,12,12,12,12]
4722 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
4723 ; SSE41-NEXT:    retq
4725 ; AVX1-LABEL: ult_12_v8i16:
4726 ; AVX1:       # %bb.0:
4727 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4728 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4729 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4730 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4731 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4732 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4733 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4734 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4735 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
4736 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4737 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
4738 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]
4739 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4740 ; AVX1-NEXT:    retq
4742 ; AVX2-LABEL: ult_12_v8i16:
4743 ; AVX2:       # %bb.0:
4744 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4745 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
4746 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4747 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4748 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
4749 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
4750 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4751 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4752 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
4753 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4754 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
4755 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]
4756 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4757 ; AVX2-NEXT:    retq
4759 ; AVX512VPOPCNTDQ-LABEL: ult_12_v8i16:
4760 ; AVX512VPOPCNTDQ:       # %bb.0:
4761 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4762 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4763 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
4764 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]
4765 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4766 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
4767 ; AVX512VPOPCNTDQ-NEXT:    retq
4769 ; AVX512VPOPCNTDQVL-LABEL: ult_12_v8i16:
4770 ; AVX512VPOPCNTDQVL:       # %bb.0:
4771 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4772 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4773 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
4774 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]
4775 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4776 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
4777 ; AVX512VPOPCNTDQVL-NEXT:    retq
4779 ; BITALG_NOVLX-LABEL: ult_12_v8i16:
4780 ; BITALG_NOVLX:       # %bb.0:
4781 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4782 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
4783 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]
4784 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4785 ; BITALG_NOVLX-NEXT:    vzeroupper
4786 ; BITALG_NOVLX-NEXT:    retq
4788 ; BITALG-LABEL: ult_12_v8i16:
4789 ; BITALG:       # %bb.0:
4790 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
4791 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [12,12,12,12,12,12,12,12]
4792 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
4793 ; BITALG-NEXT:    retq
4794   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
4795   %3 = icmp ult <8 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>
4796   %4 = sext <8 x i1> %3 to <8 x i16>
4797   ret <8 x i16> %4
4800 define <8 x i16> @ugt_12_v8i16(<8 x i16> %0) {
4801 ; SSE2-LABEL: ugt_12_v8i16:
4802 ; SSE2:       # %bb.0:
4803 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4804 ; SSE2-NEXT:    psrlw $1, %xmm1
4805 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4806 ; SSE2-NEXT:    psubb %xmm1, %xmm0
4807 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4808 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
4809 ; SSE2-NEXT:    pand %xmm1, %xmm2
4810 ; SSE2-NEXT:    psrlw $2, %xmm0
4811 ; SSE2-NEXT:    pand %xmm1, %xmm0
4812 ; SSE2-NEXT:    paddb %xmm2, %xmm0
4813 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4814 ; SSE2-NEXT:    psrlw $4, %xmm1
4815 ; SSE2-NEXT:    paddb %xmm1, %xmm0
4816 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4817 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4818 ; SSE2-NEXT:    psllw $8, %xmm1
4819 ; SSE2-NEXT:    paddb %xmm1, %xmm0
4820 ; SSE2-NEXT:    psrlw $8, %xmm0
4821 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4822 ; SSE2-NEXT:    retq
4824 ; SSE3-LABEL: ugt_12_v8i16:
4825 ; SSE3:       # %bb.0:
4826 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4827 ; SSE3-NEXT:    psrlw $1, %xmm1
4828 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4829 ; SSE3-NEXT:    psubb %xmm1, %xmm0
4830 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4831 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
4832 ; SSE3-NEXT:    pand %xmm1, %xmm2
4833 ; SSE3-NEXT:    psrlw $2, %xmm0
4834 ; SSE3-NEXT:    pand %xmm1, %xmm0
4835 ; SSE3-NEXT:    paddb %xmm2, %xmm0
4836 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4837 ; SSE3-NEXT:    psrlw $4, %xmm1
4838 ; SSE3-NEXT:    paddb %xmm1, %xmm0
4839 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4840 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4841 ; SSE3-NEXT:    psllw $8, %xmm1
4842 ; SSE3-NEXT:    paddb %xmm1, %xmm0
4843 ; SSE3-NEXT:    psrlw $8, %xmm0
4844 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4845 ; SSE3-NEXT:    retq
4847 ; SSSE3-LABEL: ugt_12_v8i16:
4848 ; SSSE3:       # %bb.0:
4849 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4850 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
4851 ; SSSE3-NEXT:    pand %xmm1, %xmm2
4852 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4853 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
4854 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
4855 ; SSSE3-NEXT:    psrlw $4, %xmm0
4856 ; SSSE3-NEXT:    pand %xmm1, %xmm0
4857 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
4858 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
4859 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
4860 ; SSSE3-NEXT:    psllw $8, %xmm0
4861 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
4862 ; SSSE3-NEXT:    psrlw $8, %xmm0
4863 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4864 ; SSSE3-NEXT:    retq
4866 ; SSE41-LABEL: ugt_12_v8i16:
4867 ; SSE41:       # %bb.0:
4868 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4869 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
4870 ; SSE41-NEXT:    pand %xmm1, %xmm2
4871 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4872 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
4873 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
4874 ; SSE41-NEXT:    psrlw $4, %xmm0
4875 ; SSE41-NEXT:    pand %xmm1, %xmm0
4876 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
4877 ; SSE41-NEXT:    paddb %xmm4, %xmm3
4878 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
4879 ; SSE41-NEXT:    psllw $8, %xmm0
4880 ; SSE41-NEXT:    paddb %xmm3, %xmm0
4881 ; SSE41-NEXT:    psrlw $8, %xmm0
4882 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
4883 ; SSE41-NEXT:    retq
4885 ; AVX1-LABEL: ugt_12_v8i16:
4886 ; AVX1:       # %bb.0:
4887 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4888 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
4889 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4890 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4891 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
4892 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
4893 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4894 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4895 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
4896 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4897 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
4898 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4899 ; AVX1-NEXT:    retq
4901 ; AVX2-LABEL: ugt_12_v8i16:
4902 ; AVX2:       # %bb.0:
4903 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
4904 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
4905 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
4906 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
4907 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
4908 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
4909 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
4910 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
4911 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
4912 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
4913 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
4914 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4915 ; AVX2-NEXT:    retq
4917 ; AVX512VPOPCNTDQ-LABEL: ugt_12_v8i16:
4918 ; AVX512VPOPCNTDQ:       # %bb.0:
4919 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4920 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
4921 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
4922 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4923 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
4924 ; AVX512VPOPCNTDQ-NEXT:    retq
4926 ; AVX512VPOPCNTDQVL-LABEL: ugt_12_v8i16:
4927 ; AVX512VPOPCNTDQVL:       # %bb.0:
4928 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
4929 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
4930 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
4931 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4932 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
4933 ; AVX512VPOPCNTDQVL-NEXT:    retq
4935 ; BITALG_NOVLX-LABEL: ugt_12_v8i16:
4936 ; BITALG_NOVLX:       # %bb.0:
4937 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
4938 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
4939 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4940 ; BITALG_NOVLX-NEXT:    vzeroupper
4941 ; BITALG_NOVLX-NEXT:    retq
4943 ; BITALG-LABEL: ugt_12_v8i16:
4944 ; BITALG:       # %bb.0:
4945 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
4946 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4947 ; BITALG-NEXT:    retq
4948   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
4949   %3 = icmp ugt <8 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>
4950   %4 = sext <8 x i1> %3 to <8 x i16>
4951   ret <8 x i16> %4
4954 define <8 x i16> @ult_13_v8i16(<8 x i16> %0) {
4955 ; SSE2-LABEL: ult_13_v8i16:
4956 ; SSE2:       # %bb.0:
4957 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4958 ; SSE2-NEXT:    psrlw $1, %xmm1
4959 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4960 ; SSE2-NEXT:    psubb %xmm1, %xmm0
4961 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4962 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
4963 ; SSE2-NEXT:    pand %xmm1, %xmm2
4964 ; SSE2-NEXT:    psrlw $2, %xmm0
4965 ; SSE2-NEXT:    pand %xmm1, %xmm0
4966 ; SSE2-NEXT:    paddb %xmm2, %xmm0
4967 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
4968 ; SSE2-NEXT:    psrlw $4, %xmm1
4969 ; SSE2-NEXT:    paddb %xmm0, %xmm1
4970 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4971 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
4972 ; SSE2-NEXT:    psllw $8, %xmm2
4973 ; SSE2-NEXT:    paddb %xmm1, %xmm2
4974 ; SSE2-NEXT:    psrlw $8, %xmm2
4975 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [13,13,13,13,13,13,13,13]
4976 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
4977 ; SSE2-NEXT:    retq
4979 ; SSE3-LABEL: ult_13_v8i16:
4980 ; SSE3:       # %bb.0:
4981 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4982 ; SSE3-NEXT:    psrlw $1, %xmm1
4983 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4984 ; SSE3-NEXT:    psubb %xmm1, %xmm0
4985 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
4986 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
4987 ; SSE3-NEXT:    pand %xmm1, %xmm2
4988 ; SSE3-NEXT:    psrlw $2, %xmm0
4989 ; SSE3-NEXT:    pand %xmm1, %xmm0
4990 ; SSE3-NEXT:    paddb %xmm2, %xmm0
4991 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
4992 ; SSE3-NEXT:    psrlw $4, %xmm1
4993 ; SSE3-NEXT:    paddb %xmm0, %xmm1
4994 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
4995 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
4996 ; SSE3-NEXT:    psllw $8, %xmm2
4997 ; SSE3-NEXT:    paddb %xmm1, %xmm2
4998 ; SSE3-NEXT:    psrlw $8, %xmm2
4999 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [13,13,13,13,13,13,13,13]
5000 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
5001 ; SSE3-NEXT:    retq
5003 ; SSSE3-LABEL: ult_13_v8i16:
5004 ; SSSE3:       # %bb.0:
5005 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5006 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
5007 ; SSSE3-NEXT:    pand %xmm1, %xmm2
5008 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5009 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
5010 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
5011 ; SSSE3-NEXT:    psrlw $4, %xmm0
5012 ; SSSE3-NEXT:    pand %xmm1, %xmm0
5013 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
5014 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
5015 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
5016 ; SSSE3-NEXT:    psllw $8, %xmm1
5017 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
5018 ; SSSE3-NEXT:    psrlw $8, %xmm1
5019 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [13,13,13,13,13,13,13,13]
5020 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
5021 ; SSSE3-NEXT:    retq
5023 ; SSE41-LABEL: ult_13_v8i16:
5024 ; SSE41:       # %bb.0:
5025 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5026 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
5027 ; SSE41-NEXT:    pand %xmm1, %xmm2
5028 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5029 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
5030 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
5031 ; SSE41-NEXT:    psrlw $4, %xmm0
5032 ; SSE41-NEXT:    pand %xmm1, %xmm0
5033 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
5034 ; SSE41-NEXT:    paddb %xmm4, %xmm3
5035 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
5036 ; SSE41-NEXT:    psllw $8, %xmm1
5037 ; SSE41-NEXT:    paddb %xmm3, %xmm1
5038 ; SSE41-NEXT:    psrlw $8, %xmm1
5039 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [13,13,13,13,13,13,13,13]
5040 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
5041 ; SSE41-NEXT:    retq
5043 ; AVX1-LABEL: ult_13_v8i16:
5044 ; AVX1:       # %bb.0:
5045 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5046 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5047 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5048 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5049 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5050 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5051 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5052 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5053 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
5054 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5055 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
5056 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]
5057 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5058 ; AVX1-NEXT:    retq
5060 ; AVX2-LABEL: ult_13_v8i16:
5061 ; AVX2:       # %bb.0:
5062 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5063 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
5064 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5065 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5066 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
5067 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
5068 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5069 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5070 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
5071 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5072 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
5073 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]
5074 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5075 ; AVX2-NEXT:    retq
5077 ; AVX512VPOPCNTDQ-LABEL: ult_13_v8i16:
5078 ; AVX512VPOPCNTDQ:       # %bb.0:
5079 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5080 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5081 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
5082 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]
5083 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5084 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
5085 ; AVX512VPOPCNTDQ-NEXT:    retq
5087 ; AVX512VPOPCNTDQVL-LABEL: ult_13_v8i16:
5088 ; AVX512VPOPCNTDQVL:       # %bb.0:
5089 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5090 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5091 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
5092 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]
5093 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5094 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
5095 ; AVX512VPOPCNTDQVL-NEXT:    retq
5097 ; BITALG_NOVLX-LABEL: ult_13_v8i16:
5098 ; BITALG_NOVLX:       # %bb.0:
5099 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5100 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
5101 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]
5102 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5103 ; BITALG_NOVLX-NEXT:    vzeroupper
5104 ; BITALG_NOVLX-NEXT:    retq
5106 ; BITALG-LABEL: ult_13_v8i16:
5107 ; BITALG:       # %bb.0:
5108 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
5109 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [13,13,13,13,13,13,13,13]
5110 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5111 ; BITALG-NEXT:    retq
5112   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
5113   %3 = icmp ult <8 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>
5114   %4 = sext <8 x i1> %3 to <8 x i16>
5115   ret <8 x i16> %4
5118 define <8 x i16> @ugt_13_v8i16(<8 x i16> %0) {
5119 ; SSE2-LABEL: ugt_13_v8i16:
5120 ; SSE2:       # %bb.0:
5121 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5122 ; SSE2-NEXT:    psrlw $1, %xmm1
5123 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5124 ; SSE2-NEXT:    psubb %xmm1, %xmm0
5125 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5126 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
5127 ; SSE2-NEXT:    pand %xmm1, %xmm2
5128 ; SSE2-NEXT:    psrlw $2, %xmm0
5129 ; SSE2-NEXT:    pand %xmm1, %xmm0
5130 ; SSE2-NEXT:    paddb %xmm2, %xmm0
5131 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5132 ; SSE2-NEXT:    psrlw $4, %xmm1
5133 ; SSE2-NEXT:    paddb %xmm1, %xmm0
5134 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5135 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5136 ; SSE2-NEXT:    psllw $8, %xmm1
5137 ; SSE2-NEXT:    paddb %xmm1, %xmm0
5138 ; SSE2-NEXT:    psrlw $8, %xmm0
5139 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5140 ; SSE2-NEXT:    retq
5142 ; SSE3-LABEL: ugt_13_v8i16:
5143 ; SSE3:       # %bb.0:
5144 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5145 ; SSE3-NEXT:    psrlw $1, %xmm1
5146 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5147 ; SSE3-NEXT:    psubb %xmm1, %xmm0
5148 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5149 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
5150 ; SSE3-NEXT:    pand %xmm1, %xmm2
5151 ; SSE3-NEXT:    psrlw $2, %xmm0
5152 ; SSE3-NEXT:    pand %xmm1, %xmm0
5153 ; SSE3-NEXT:    paddb %xmm2, %xmm0
5154 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5155 ; SSE3-NEXT:    psrlw $4, %xmm1
5156 ; SSE3-NEXT:    paddb %xmm1, %xmm0
5157 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5158 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5159 ; SSE3-NEXT:    psllw $8, %xmm1
5160 ; SSE3-NEXT:    paddb %xmm1, %xmm0
5161 ; SSE3-NEXT:    psrlw $8, %xmm0
5162 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5163 ; SSE3-NEXT:    retq
5165 ; SSSE3-LABEL: ugt_13_v8i16:
5166 ; SSSE3:       # %bb.0:
5167 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5168 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
5169 ; SSSE3-NEXT:    pand %xmm1, %xmm2
5170 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5171 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
5172 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
5173 ; SSSE3-NEXT:    psrlw $4, %xmm0
5174 ; SSSE3-NEXT:    pand %xmm1, %xmm0
5175 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
5176 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
5177 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
5178 ; SSSE3-NEXT:    psllw $8, %xmm0
5179 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
5180 ; SSSE3-NEXT:    psrlw $8, %xmm0
5181 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5182 ; SSSE3-NEXT:    retq
5184 ; SSE41-LABEL: ugt_13_v8i16:
5185 ; SSE41:       # %bb.0:
5186 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5187 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
5188 ; SSE41-NEXT:    pand %xmm1, %xmm2
5189 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5190 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
5191 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
5192 ; SSE41-NEXT:    psrlw $4, %xmm0
5193 ; SSE41-NEXT:    pand %xmm1, %xmm0
5194 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
5195 ; SSE41-NEXT:    paddb %xmm4, %xmm3
5196 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
5197 ; SSE41-NEXT:    psllw $8, %xmm0
5198 ; SSE41-NEXT:    paddb %xmm3, %xmm0
5199 ; SSE41-NEXT:    psrlw $8, %xmm0
5200 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5201 ; SSE41-NEXT:    retq
5203 ; AVX1-LABEL: ugt_13_v8i16:
5204 ; AVX1:       # %bb.0:
5205 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5206 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5207 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5208 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5209 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5210 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5211 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5212 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5213 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
5214 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5215 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
5216 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5217 ; AVX1-NEXT:    retq
5219 ; AVX2-LABEL: ugt_13_v8i16:
5220 ; AVX2:       # %bb.0:
5221 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5222 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
5223 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5224 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5225 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
5226 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
5227 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5228 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5229 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
5230 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5231 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
5232 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5233 ; AVX2-NEXT:    retq
5235 ; AVX512VPOPCNTDQ-LABEL: ugt_13_v8i16:
5236 ; AVX512VPOPCNTDQ:       # %bb.0:
5237 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5238 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5239 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
5240 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5241 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
5242 ; AVX512VPOPCNTDQ-NEXT:    retq
5244 ; AVX512VPOPCNTDQVL-LABEL: ugt_13_v8i16:
5245 ; AVX512VPOPCNTDQVL:       # %bb.0:
5246 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5247 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5248 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
5249 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5250 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
5251 ; AVX512VPOPCNTDQVL-NEXT:    retq
5253 ; BITALG_NOVLX-LABEL: ugt_13_v8i16:
5254 ; BITALG_NOVLX:       # %bb.0:
5255 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5256 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
5257 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5258 ; BITALG_NOVLX-NEXT:    vzeroupper
5259 ; BITALG_NOVLX-NEXT:    retq
5261 ; BITALG-LABEL: ugt_13_v8i16:
5262 ; BITALG:       # %bb.0:
5263 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
5264 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5265 ; BITALG-NEXT:    retq
5266   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
5267   %3 = icmp ugt <8 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>
5268   %4 = sext <8 x i1> %3 to <8 x i16>
5269   ret <8 x i16> %4
5272 define <8 x i16> @ult_14_v8i16(<8 x i16> %0) {
5273 ; SSE2-LABEL: ult_14_v8i16:
5274 ; SSE2:       # %bb.0:
5275 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5276 ; SSE2-NEXT:    psrlw $1, %xmm1
5277 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5278 ; SSE2-NEXT:    psubb %xmm1, %xmm0
5279 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5280 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
5281 ; SSE2-NEXT:    pand %xmm1, %xmm2
5282 ; SSE2-NEXT:    psrlw $2, %xmm0
5283 ; SSE2-NEXT:    pand %xmm1, %xmm0
5284 ; SSE2-NEXT:    paddb %xmm2, %xmm0
5285 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5286 ; SSE2-NEXT:    psrlw $4, %xmm1
5287 ; SSE2-NEXT:    paddb %xmm0, %xmm1
5288 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5289 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
5290 ; SSE2-NEXT:    psllw $8, %xmm2
5291 ; SSE2-NEXT:    paddb %xmm1, %xmm2
5292 ; SSE2-NEXT:    psrlw $8, %xmm2
5293 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [14,14,14,14,14,14,14,14]
5294 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
5295 ; SSE2-NEXT:    retq
5297 ; SSE3-LABEL: ult_14_v8i16:
5298 ; SSE3:       # %bb.0:
5299 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5300 ; SSE3-NEXT:    psrlw $1, %xmm1
5301 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5302 ; SSE3-NEXT:    psubb %xmm1, %xmm0
5303 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5304 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
5305 ; SSE3-NEXT:    pand %xmm1, %xmm2
5306 ; SSE3-NEXT:    psrlw $2, %xmm0
5307 ; SSE3-NEXT:    pand %xmm1, %xmm0
5308 ; SSE3-NEXT:    paddb %xmm2, %xmm0
5309 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5310 ; SSE3-NEXT:    psrlw $4, %xmm1
5311 ; SSE3-NEXT:    paddb %xmm0, %xmm1
5312 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5313 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
5314 ; SSE3-NEXT:    psllw $8, %xmm2
5315 ; SSE3-NEXT:    paddb %xmm1, %xmm2
5316 ; SSE3-NEXT:    psrlw $8, %xmm2
5317 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [14,14,14,14,14,14,14,14]
5318 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
5319 ; SSE3-NEXT:    retq
5321 ; SSSE3-LABEL: ult_14_v8i16:
5322 ; SSSE3:       # %bb.0:
5323 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5324 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
5325 ; SSSE3-NEXT:    pand %xmm1, %xmm2
5326 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5327 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
5328 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
5329 ; SSSE3-NEXT:    psrlw $4, %xmm0
5330 ; SSSE3-NEXT:    pand %xmm1, %xmm0
5331 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
5332 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
5333 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
5334 ; SSSE3-NEXT:    psllw $8, %xmm1
5335 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
5336 ; SSSE3-NEXT:    psrlw $8, %xmm1
5337 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [14,14,14,14,14,14,14,14]
5338 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
5339 ; SSSE3-NEXT:    retq
5341 ; SSE41-LABEL: ult_14_v8i16:
5342 ; SSE41:       # %bb.0:
5343 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5344 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
5345 ; SSE41-NEXT:    pand %xmm1, %xmm2
5346 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5347 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
5348 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
5349 ; SSE41-NEXT:    psrlw $4, %xmm0
5350 ; SSE41-NEXT:    pand %xmm1, %xmm0
5351 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
5352 ; SSE41-NEXT:    paddb %xmm4, %xmm3
5353 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
5354 ; SSE41-NEXT:    psllw $8, %xmm1
5355 ; SSE41-NEXT:    paddb %xmm3, %xmm1
5356 ; SSE41-NEXT:    psrlw $8, %xmm1
5357 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [14,14,14,14,14,14,14,14]
5358 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
5359 ; SSE41-NEXT:    retq
5361 ; AVX1-LABEL: ult_14_v8i16:
5362 ; AVX1:       # %bb.0:
5363 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5364 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5365 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5366 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5367 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5368 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5369 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5370 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5371 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
5372 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5373 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
5374 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]
5375 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5376 ; AVX1-NEXT:    retq
5378 ; AVX2-LABEL: ult_14_v8i16:
5379 ; AVX2:       # %bb.0:
5380 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5381 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
5382 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5383 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5384 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
5385 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
5386 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5387 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5388 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
5389 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5390 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
5391 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]
5392 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5393 ; AVX2-NEXT:    retq
5395 ; AVX512VPOPCNTDQ-LABEL: ult_14_v8i16:
5396 ; AVX512VPOPCNTDQ:       # %bb.0:
5397 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5398 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5399 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
5400 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]
5401 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5402 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
5403 ; AVX512VPOPCNTDQ-NEXT:    retq
5405 ; AVX512VPOPCNTDQVL-LABEL: ult_14_v8i16:
5406 ; AVX512VPOPCNTDQVL:       # %bb.0:
5407 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5408 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5409 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
5410 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]
5411 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5412 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
5413 ; AVX512VPOPCNTDQVL-NEXT:    retq
5415 ; BITALG_NOVLX-LABEL: ult_14_v8i16:
5416 ; BITALG_NOVLX:       # %bb.0:
5417 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5418 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
5419 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]
5420 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5421 ; BITALG_NOVLX-NEXT:    vzeroupper
5422 ; BITALG_NOVLX-NEXT:    retq
5424 ; BITALG-LABEL: ult_14_v8i16:
5425 ; BITALG:       # %bb.0:
5426 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
5427 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [14,14,14,14,14,14,14,14]
5428 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5429 ; BITALG-NEXT:    retq
5430   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
5431   %3 = icmp ult <8 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>
5432   %4 = sext <8 x i1> %3 to <8 x i16>
5433   ret <8 x i16> %4
5436 define <8 x i16> @ugt_14_v8i16(<8 x i16> %0) {
5437 ; SSE2-LABEL: ugt_14_v8i16:
5438 ; SSE2:       # %bb.0:
5439 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5440 ; SSE2-NEXT:    psrlw $1, %xmm1
5441 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5442 ; SSE2-NEXT:    psubb %xmm1, %xmm0
5443 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5444 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
5445 ; SSE2-NEXT:    pand %xmm1, %xmm2
5446 ; SSE2-NEXT:    psrlw $2, %xmm0
5447 ; SSE2-NEXT:    pand %xmm1, %xmm0
5448 ; SSE2-NEXT:    paddb %xmm2, %xmm0
5449 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5450 ; SSE2-NEXT:    psrlw $4, %xmm1
5451 ; SSE2-NEXT:    paddb %xmm1, %xmm0
5452 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5453 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5454 ; SSE2-NEXT:    psllw $8, %xmm1
5455 ; SSE2-NEXT:    paddb %xmm1, %xmm0
5456 ; SSE2-NEXT:    psrlw $8, %xmm0
5457 ; SSE2-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5458 ; SSE2-NEXT:    retq
5460 ; SSE3-LABEL: ugt_14_v8i16:
5461 ; SSE3:       # %bb.0:
5462 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5463 ; SSE3-NEXT:    psrlw $1, %xmm1
5464 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5465 ; SSE3-NEXT:    psubb %xmm1, %xmm0
5466 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5467 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
5468 ; SSE3-NEXT:    pand %xmm1, %xmm2
5469 ; SSE3-NEXT:    psrlw $2, %xmm0
5470 ; SSE3-NEXT:    pand %xmm1, %xmm0
5471 ; SSE3-NEXT:    paddb %xmm2, %xmm0
5472 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5473 ; SSE3-NEXT:    psrlw $4, %xmm1
5474 ; SSE3-NEXT:    paddb %xmm1, %xmm0
5475 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5476 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5477 ; SSE3-NEXT:    psllw $8, %xmm1
5478 ; SSE3-NEXT:    paddb %xmm1, %xmm0
5479 ; SSE3-NEXT:    psrlw $8, %xmm0
5480 ; SSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5481 ; SSE3-NEXT:    retq
5483 ; SSSE3-LABEL: ugt_14_v8i16:
5484 ; SSSE3:       # %bb.0:
5485 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5486 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
5487 ; SSSE3-NEXT:    pand %xmm1, %xmm2
5488 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5489 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
5490 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
5491 ; SSSE3-NEXT:    psrlw $4, %xmm0
5492 ; SSSE3-NEXT:    pand %xmm1, %xmm0
5493 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
5494 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
5495 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
5496 ; SSSE3-NEXT:    psllw $8, %xmm0
5497 ; SSSE3-NEXT:    paddb %xmm3, %xmm0
5498 ; SSSE3-NEXT:    psrlw $8, %xmm0
5499 ; SSSE3-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5500 ; SSSE3-NEXT:    retq
5502 ; SSE41-LABEL: ugt_14_v8i16:
5503 ; SSE41:       # %bb.0:
5504 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5505 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
5506 ; SSE41-NEXT:    pand %xmm1, %xmm2
5507 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5508 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
5509 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
5510 ; SSE41-NEXT:    psrlw $4, %xmm0
5511 ; SSE41-NEXT:    pand %xmm1, %xmm0
5512 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
5513 ; SSE41-NEXT:    paddb %xmm4, %xmm3
5514 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
5515 ; SSE41-NEXT:    psllw $8, %xmm0
5516 ; SSE41-NEXT:    paddb %xmm3, %xmm0
5517 ; SSE41-NEXT:    psrlw $8, %xmm0
5518 ; SSE41-NEXT:    pcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5519 ; SSE41-NEXT:    retq
5521 ; AVX1-LABEL: ugt_14_v8i16:
5522 ; AVX1:       # %bb.0:
5523 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5524 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5525 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5526 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5527 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5528 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5529 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5530 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5531 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
5532 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5533 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
5534 ; AVX1-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5535 ; AVX1-NEXT:    retq
5537 ; AVX2-LABEL: ugt_14_v8i16:
5538 ; AVX2:       # %bb.0:
5539 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5540 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
5541 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5542 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5543 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
5544 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
5545 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5546 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5547 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
5548 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5549 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
5550 ; AVX2-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5551 ; AVX2-NEXT:    retq
5553 ; AVX512VPOPCNTDQ-LABEL: ugt_14_v8i16:
5554 ; AVX512VPOPCNTDQ:       # %bb.0:
5555 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5556 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5557 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
5558 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5559 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
5560 ; AVX512VPOPCNTDQ-NEXT:    retq
5562 ; AVX512VPOPCNTDQVL-LABEL: ugt_14_v8i16:
5563 ; AVX512VPOPCNTDQVL:       # %bb.0:
5564 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5565 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5566 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
5567 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5568 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
5569 ; AVX512VPOPCNTDQVL-NEXT:    retq
5571 ; BITALG_NOVLX-LABEL: ugt_14_v8i16:
5572 ; BITALG_NOVLX:       # %bb.0:
5573 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5574 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
5575 ; BITALG_NOVLX-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5576 ; BITALG_NOVLX-NEXT:    vzeroupper
5577 ; BITALG_NOVLX-NEXT:    retq
5579 ; BITALG-LABEL: ugt_14_v8i16:
5580 ; BITALG:       # %bb.0:
5581 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
5582 ; BITALG-NEXT:    vpcmpgtw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
5583 ; BITALG-NEXT:    retq
5584   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
5585   %3 = icmp ugt <8 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>
5586   %4 = sext <8 x i1> %3 to <8 x i16>
5587   ret <8 x i16> %4
5590 define <8 x i16> @ult_15_v8i16(<8 x i16> %0) {
5591 ; SSE2-LABEL: ult_15_v8i16:
5592 ; SSE2:       # %bb.0:
5593 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5594 ; SSE2-NEXT:    psrlw $1, %xmm1
5595 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5596 ; SSE2-NEXT:    psubb %xmm1, %xmm0
5597 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5598 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
5599 ; SSE2-NEXT:    pand %xmm1, %xmm2
5600 ; SSE2-NEXT:    psrlw $2, %xmm0
5601 ; SSE2-NEXT:    pand %xmm1, %xmm0
5602 ; SSE2-NEXT:    paddb %xmm2, %xmm0
5603 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5604 ; SSE2-NEXT:    psrlw $4, %xmm1
5605 ; SSE2-NEXT:    paddb %xmm0, %xmm1
5606 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5607 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
5608 ; SSE2-NEXT:    psllw $8, %xmm2
5609 ; SSE2-NEXT:    paddb %xmm1, %xmm2
5610 ; SSE2-NEXT:    psrlw $8, %xmm2
5611 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [15,15,15,15,15,15,15,15]
5612 ; SSE2-NEXT:    pcmpgtw %xmm2, %xmm0
5613 ; SSE2-NEXT:    retq
5615 ; SSE3-LABEL: ult_15_v8i16:
5616 ; SSE3:       # %bb.0:
5617 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5618 ; SSE3-NEXT:    psrlw $1, %xmm1
5619 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5620 ; SSE3-NEXT:    psubb %xmm1, %xmm0
5621 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5622 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
5623 ; SSE3-NEXT:    pand %xmm1, %xmm2
5624 ; SSE3-NEXT:    psrlw $2, %xmm0
5625 ; SSE3-NEXT:    pand %xmm1, %xmm0
5626 ; SSE3-NEXT:    paddb %xmm2, %xmm0
5627 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5628 ; SSE3-NEXT:    psrlw $4, %xmm1
5629 ; SSE3-NEXT:    paddb %xmm0, %xmm1
5630 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5631 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
5632 ; SSE3-NEXT:    psllw $8, %xmm2
5633 ; SSE3-NEXT:    paddb %xmm1, %xmm2
5634 ; SSE3-NEXT:    psrlw $8, %xmm2
5635 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [15,15,15,15,15,15,15,15]
5636 ; SSE3-NEXT:    pcmpgtw %xmm2, %xmm0
5637 ; SSE3-NEXT:    retq
5639 ; SSSE3-LABEL: ult_15_v8i16:
5640 ; SSSE3:       # %bb.0:
5641 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5642 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
5643 ; SSSE3-NEXT:    pand %xmm1, %xmm2
5644 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5645 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
5646 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
5647 ; SSSE3-NEXT:    psrlw $4, %xmm0
5648 ; SSSE3-NEXT:    pand %xmm1, %xmm0
5649 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
5650 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
5651 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
5652 ; SSSE3-NEXT:    psllw $8, %xmm1
5653 ; SSSE3-NEXT:    paddb %xmm3, %xmm1
5654 ; SSSE3-NEXT:    psrlw $8, %xmm1
5655 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [15,15,15,15,15,15,15,15]
5656 ; SSSE3-NEXT:    pcmpgtw %xmm1, %xmm0
5657 ; SSSE3-NEXT:    retq
5659 ; SSE41-LABEL: ult_15_v8i16:
5660 ; SSE41:       # %bb.0:
5661 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5662 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
5663 ; SSE41-NEXT:    pand %xmm1, %xmm2
5664 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5665 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
5666 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
5667 ; SSE41-NEXT:    psrlw $4, %xmm0
5668 ; SSE41-NEXT:    pand %xmm1, %xmm0
5669 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
5670 ; SSE41-NEXT:    paddb %xmm4, %xmm3
5671 ; SSE41-NEXT:    movdqa %xmm3, %xmm1
5672 ; SSE41-NEXT:    psllw $8, %xmm1
5673 ; SSE41-NEXT:    paddb %xmm3, %xmm1
5674 ; SSE41-NEXT:    psrlw $8, %xmm1
5675 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [15,15,15,15,15,15,15,15]
5676 ; SSE41-NEXT:    pcmpgtw %xmm1, %xmm0
5677 ; SSE41-NEXT:    retq
5679 ; AVX1-LABEL: ult_15_v8i16:
5680 ; AVX1:       # %bb.0:
5681 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5682 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5683 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5684 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5685 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
5686 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5687 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5688 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5689 ; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
5690 ; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5691 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
5692 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15]
5693 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5694 ; AVX1-NEXT:    retq
5696 ; AVX2-LABEL: ult_15_v8i16:
5697 ; AVX2:       # %bb.0:
5698 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5699 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
5700 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5701 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5702 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
5703 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
5704 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
5705 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
5706 ; AVX2-NEXT:    vpsllw $8, %xmm0, %xmm1
5707 ; AVX2-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
5708 ; AVX2-NEXT:    vpsrlw $8, %xmm0, %xmm0
5709 ; AVX2-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15]
5710 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5711 ; AVX2-NEXT:    retq
5713 ; AVX512VPOPCNTDQ-LABEL: ult_15_v8i16:
5714 ; AVX512VPOPCNTDQ:       # %bb.0:
5715 ; AVX512VPOPCNTDQ-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5716 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5717 ; AVX512VPOPCNTDQ-NEXT:    vpmovdw %zmm0, %ymm0
5718 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15]
5719 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5720 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
5721 ; AVX512VPOPCNTDQ-NEXT:    retq
5723 ; AVX512VPOPCNTDQVL-LABEL: ult_15_v8i16:
5724 ; AVX512VPOPCNTDQVL:       # %bb.0:
5725 ; AVX512VPOPCNTDQVL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
5726 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %ymm0, %ymm0
5727 ; AVX512VPOPCNTDQVL-NEXT:    vpmovdw %ymm0, %xmm0
5728 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15]
5729 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5730 ; AVX512VPOPCNTDQVL-NEXT:    vzeroupper
5731 ; AVX512VPOPCNTDQVL-NEXT:    retq
5733 ; BITALG_NOVLX-LABEL: ult_15_v8i16:
5734 ; BITALG_NOVLX:       # %bb.0:
5735 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5736 ; BITALG_NOVLX-NEXT:    vpopcntw %zmm0, %zmm0
5737 ; BITALG_NOVLX-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15]
5738 ; BITALG_NOVLX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5739 ; BITALG_NOVLX-NEXT:    vzeroupper
5740 ; BITALG_NOVLX-NEXT:    retq
5742 ; BITALG-LABEL: ult_15_v8i16:
5743 ; BITALG:       # %bb.0:
5744 ; BITALG-NEXT:    vpopcntw %xmm0, %xmm0
5745 ; BITALG-NEXT:    vpbroadcastw {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15]
5746 ; BITALG-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
5747 ; BITALG-NEXT:    retq
5748   %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
5749   %3 = icmp ult <8 x i16> %2, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
5750   %4 = sext <8 x i1> %3 to <8 x i16>
5751   ret <8 x i16> %4
5754 define <4 x i32> @ugt_1_v4i32(<4 x i32> %0) {
5755 ; SSE-LABEL: ugt_1_v4i32:
5756 ; SSE:       # %bb.0:
5757 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
5758 ; SSE-NEXT:    movdqa %xmm0, %xmm2
5759 ; SSE-NEXT:    paddd %xmm1, %xmm2
5760 ; SSE-NEXT:    pand %xmm2, %xmm0
5761 ; SSE-NEXT:    pxor %xmm2, %xmm2
5762 ; SSE-NEXT:    pcmpeqd %xmm2, %xmm0
5763 ; SSE-NEXT:    pxor %xmm1, %xmm0
5764 ; SSE-NEXT:    retq
5766 ; AVX1-LABEL: ugt_1_v4i32:
5767 ; AVX1:       # %bb.0:
5768 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
5769 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm2
5770 ; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
5771 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5772 ; AVX1-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
5773 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
5774 ; AVX1-NEXT:    retq
5776 ; AVX2-LABEL: ugt_1_v4i32:
5777 ; AVX2:       # %bb.0:
5778 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
5779 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm2
5780 ; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0
5781 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
5782 ; AVX2-NEXT:    vpcmpeqd %xmm2, %xmm0, %xmm0
5783 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
5784 ; AVX2-NEXT:    retq
5786 ; AVX512VPOPCNTDQ-LABEL: ugt_1_v4i32:
5787 ; AVX512VPOPCNTDQ:       # %bb.0:
5788 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5789 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5790 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]
5791 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
5792 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
5793 ; AVX512VPOPCNTDQ-NEXT:    retq
5795 ; AVX512VPOPCNTDQVL-LABEL: ugt_1_v4i32:
5796 ; AVX512VPOPCNTDQVL:       # %bb.0:
5797 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
5798 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [1,1,1,1]
5799 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
5800 ; AVX512VPOPCNTDQVL-NEXT:    retq
5802 ; BITALG_NOVLX-LABEL: ugt_1_v4i32:
5803 ; BITALG_NOVLX:       # %bb.0:
5804 ; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
5805 ; BITALG_NOVLX-NEXT:    vpaddd %xmm1, %xmm0, %xmm1
5806 ; BITALG_NOVLX-NEXT:    vpand %xmm1, %xmm0, %xmm0
5807 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5808 ; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
5809 ; BITALG_NOVLX-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
5810 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
5811 ; BITALG_NOVLX-NEXT:    vzeroupper
5812 ; BITALG_NOVLX-NEXT:    retq
5814 ; BITALG-LABEL: ugt_1_v4i32:
5815 ; BITALG:       # %bb.0:
5816 ; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
5817 ; BITALG-NEXT:    vpaddd %xmm1, %xmm0, %xmm1
5818 ; BITALG-NEXT:    vpand %xmm1, %xmm0, %xmm0
5819 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5820 ; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
5821 ; BITALG-NEXT:    vpternlogq $15, %xmm0, %xmm0, %xmm0
5822 ; BITALG-NEXT:    retq
5823   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5824   %3 = icmp ugt <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>
5825   %4 = sext <4 x i1> %3 to <4 x i32>
5826   ret <4 x i32> %4
5829 define <4 x i32> @ult_2_v4i32(<4 x i32> %0) {
5830 ; SSE-LABEL: ult_2_v4i32:
5831 ; SSE:       # %bb.0:
5832 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
5833 ; SSE-NEXT:    paddd %xmm0, %xmm1
5834 ; SSE-NEXT:    pand %xmm1, %xmm0
5835 ; SSE-NEXT:    pxor %xmm1, %xmm1
5836 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm0
5837 ; SSE-NEXT:    retq
5839 ; AVX1-LABEL: ult_2_v4i32:
5840 ; AVX1:       # %bb.0:
5841 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
5842 ; AVX1-NEXT:    vpaddd %xmm1, %xmm0, %xmm1
5843 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
5844 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5845 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
5846 ; AVX1-NEXT:    retq
5848 ; AVX2-LABEL: ult_2_v4i32:
5849 ; AVX2:       # %bb.0:
5850 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
5851 ; AVX2-NEXT:    vpaddd %xmm1, %xmm0, %xmm1
5852 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
5853 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5854 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
5855 ; AVX2-NEXT:    retq
5857 ; AVX512VPOPCNTDQ-LABEL: ult_2_v4i32:
5858 ; AVX512VPOPCNTDQ:       # %bb.0:
5859 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
5860 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
5861 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
5862 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
5863 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
5864 ; AVX512VPOPCNTDQ-NEXT:    retq
5866 ; AVX512VPOPCNTDQVL-LABEL: ult_2_v4i32:
5867 ; AVX512VPOPCNTDQVL:       # %bb.0:
5868 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
5869 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
5870 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
5871 ; AVX512VPOPCNTDQVL-NEXT:    retq
5873 ; BITALG_NOVLX-LABEL: ult_2_v4i32:
5874 ; BITALG_NOVLX:       # %bb.0:
5875 ; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
5876 ; BITALG_NOVLX-NEXT:    vpaddd %xmm1, %xmm0, %xmm1
5877 ; BITALG_NOVLX-NEXT:    vpand %xmm1, %xmm0, %xmm0
5878 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5879 ; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
5880 ; BITALG_NOVLX-NEXT:    retq
5882 ; BITALG-LABEL: ult_2_v4i32:
5883 ; BITALG:       # %bb.0:
5884 ; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
5885 ; BITALG-NEXT:    vpaddd %xmm1, %xmm0, %xmm1
5886 ; BITALG-NEXT:    vpand %xmm1, %xmm0, %xmm0
5887 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
5888 ; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
5889 ; BITALG-NEXT:    retq
5890   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5891   %3 = icmp ult <4 x i32> %2, <i32 2, i32 2, i32 2, i32 2>
5892   %4 = sext <4 x i1> %3 to <4 x i32>
5893   ret <4 x i32> %4
5896 define <4 x i32> @ugt_2_v4i32(<4 x i32> %0) {
5897 ; SSE2-LABEL: ugt_2_v4i32:
5898 ; SSE2:       # %bb.0:
5899 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5900 ; SSE2-NEXT:    psrlw $1, %xmm1
5901 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5902 ; SSE2-NEXT:    psubb %xmm1, %xmm0
5903 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5904 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
5905 ; SSE2-NEXT:    pand %xmm1, %xmm2
5906 ; SSE2-NEXT:    psrlw $2, %xmm0
5907 ; SSE2-NEXT:    pand %xmm1, %xmm0
5908 ; SSE2-NEXT:    paddb %xmm2, %xmm0
5909 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
5910 ; SSE2-NEXT:    psrlw $4, %xmm1
5911 ; SSE2-NEXT:    paddb %xmm1, %xmm0
5912 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5913 ; SSE2-NEXT:    pxor %xmm1, %xmm1
5914 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
5915 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
5916 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
5917 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
5918 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
5919 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
5920 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5921 ; SSE2-NEXT:    retq
5923 ; SSE3-LABEL: ugt_2_v4i32:
5924 ; SSE3:       # %bb.0:
5925 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5926 ; SSE3-NEXT:    psrlw $1, %xmm1
5927 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5928 ; SSE3-NEXT:    psubb %xmm1, %xmm0
5929 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
5930 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
5931 ; SSE3-NEXT:    pand %xmm1, %xmm2
5932 ; SSE3-NEXT:    psrlw $2, %xmm0
5933 ; SSE3-NEXT:    pand %xmm1, %xmm0
5934 ; SSE3-NEXT:    paddb %xmm2, %xmm0
5935 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
5936 ; SSE3-NEXT:    psrlw $4, %xmm1
5937 ; SSE3-NEXT:    paddb %xmm1, %xmm0
5938 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5939 ; SSE3-NEXT:    pxor %xmm1, %xmm1
5940 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
5941 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
5942 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
5943 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
5944 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
5945 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
5946 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5947 ; SSE3-NEXT:    retq
5949 ; SSSE3-LABEL: ugt_2_v4i32:
5950 ; SSSE3:       # %bb.0:
5951 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5952 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
5953 ; SSSE3-NEXT:    pand %xmm2, %xmm3
5954 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5955 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
5956 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
5957 ; SSSE3-NEXT:    psrlw $4, %xmm0
5958 ; SSSE3-NEXT:    pand %xmm2, %xmm0
5959 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
5960 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
5961 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
5962 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
5963 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
5964 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
5965 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
5966 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
5967 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
5968 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
5969 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
5970 ; SSSE3-NEXT:    retq
5972 ; SSE41-LABEL: ugt_2_v4i32:
5973 ; SSE41:       # %bb.0:
5974 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5975 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
5976 ; SSE41-NEXT:    pand %xmm1, %xmm2
5977 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5978 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
5979 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
5980 ; SSE41-NEXT:    psrlw $4, %xmm0
5981 ; SSE41-NEXT:    pand %xmm1, %xmm0
5982 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
5983 ; SSE41-NEXT:    paddb %xmm4, %xmm3
5984 ; SSE41-NEXT:    pxor %xmm1, %xmm1
5985 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
5986 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
5987 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
5988 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
5989 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
5990 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
5991 ; SSE41-NEXT:    retq
5993 ; AVX1-LABEL: ugt_2_v4i32:
5994 ; AVX1:       # %bb.0:
5995 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
5996 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
5997 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
5998 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
5999 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6000 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6001 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6002 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6003 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6004 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6005 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6006 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6007 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6008 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6009 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
6010 ; AVX1-NEXT:    retq
6012 ; AVX2-LABEL: ugt_2_v4i32:
6013 ; AVX2:       # %bb.0:
6014 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6015 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
6016 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6017 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6018 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
6019 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
6020 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6021 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6022 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6023 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6024 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6025 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6026 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6027 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6028 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
6029 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6030 ; AVX2-NEXT:    retq
6032 ; AVX512VPOPCNTDQ-LABEL: ugt_2_v4i32:
6033 ; AVX512VPOPCNTDQ:       # %bb.0:
6034 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6035 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6036 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
6037 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6038 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
6039 ; AVX512VPOPCNTDQ-NEXT:    retq
6041 ; AVX512VPOPCNTDQVL-LABEL: ugt_2_v4i32:
6042 ; AVX512VPOPCNTDQVL:       # %bb.0:
6043 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
6044 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
6045 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6046 ; AVX512VPOPCNTDQVL-NEXT:    retq
6048 ; BITALG_NOVLX-LABEL: ugt_2_v4i32:
6049 ; BITALG_NOVLX:       # %bb.0:
6050 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6051 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6052 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6053 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6054 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6055 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6056 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6057 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6058 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
6059 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6060 ; BITALG_NOVLX-NEXT:    vzeroupper
6061 ; BITALG_NOVLX-NEXT:    retq
6063 ; BITALG-LABEL: ugt_2_v4i32:
6064 ; BITALG:       # %bb.0:
6065 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
6066 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6067 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6068 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6069 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6070 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6071 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6072 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [2,2,2,2]
6073 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6074 ; BITALG-NEXT:    retq
6075   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6076   %3 = icmp ugt <4 x i32> %2, <i32 2, i32 2, i32 2, i32 2>
6077   %4 = sext <4 x i1> %3 to <4 x i32>
6078   ret <4 x i32> %4
6081 define <4 x i32> @ult_3_v4i32(<4 x i32> %0) {
6082 ; SSE2-LABEL: ult_3_v4i32:
6083 ; SSE2:       # %bb.0:
6084 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6085 ; SSE2-NEXT:    psrlw $1, %xmm1
6086 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6087 ; SSE2-NEXT:    psubb %xmm1, %xmm0
6088 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6089 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
6090 ; SSE2-NEXT:    pand %xmm1, %xmm2
6091 ; SSE2-NEXT:    psrlw $2, %xmm0
6092 ; SSE2-NEXT:    pand %xmm1, %xmm0
6093 ; SSE2-NEXT:    paddb %xmm2, %xmm0
6094 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6095 ; SSE2-NEXT:    psrlw $4, %xmm1
6096 ; SSE2-NEXT:    paddb %xmm0, %xmm1
6097 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6098 ; SSE2-NEXT:    pxor %xmm0, %xmm0
6099 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
6100 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
6101 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
6102 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6103 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
6104 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
6105 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3]
6106 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6107 ; SSE2-NEXT:    retq
6109 ; SSE3-LABEL: ult_3_v4i32:
6110 ; SSE3:       # %bb.0:
6111 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6112 ; SSE3-NEXT:    psrlw $1, %xmm1
6113 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6114 ; SSE3-NEXT:    psubb %xmm1, %xmm0
6115 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6116 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
6117 ; SSE3-NEXT:    pand %xmm1, %xmm2
6118 ; SSE3-NEXT:    psrlw $2, %xmm0
6119 ; SSE3-NEXT:    pand %xmm1, %xmm0
6120 ; SSE3-NEXT:    paddb %xmm2, %xmm0
6121 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6122 ; SSE3-NEXT:    psrlw $4, %xmm1
6123 ; SSE3-NEXT:    paddb %xmm0, %xmm1
6124 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6125 ; SSE3-NEXT:    pxor %xmm0, %xmm0
6126 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
6127 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
6128 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
6129 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6130 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
6131 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
6132 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3]
6133 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
6134 ; SSE3-NEXT:    retq
6136 ; SSSE3-LABEL: ult_3_v4i32:
6137 ; SSSE3:       # %bb.0:
6138 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6139 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
6140 ; SSSE3-NEXT:    pand %xmm1, %xmm2
6141 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6142 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
6143 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
6144 ; SSSE3-NEXT:    psrlw $4, %xmm0
6145 ; SSSE3-NEXT:    pand %xmm1, %xmm0
6146 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
6147 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
6148 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
6149 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
6150 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
6151 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
6152 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
6153 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
6154 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
6155 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3]
6156 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
6157 ; SSSE3-NEXT:    retq
6159 ; SSE41-LABEL: ult_3_v4i32:
6160 ; SSE41:       # %bb.0:
6161 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6162 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
6163 ; SSE41-NEXT:    pand %xmm1, %xmm2
6164 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6165 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
6166 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
6167 ; SSE41-NEXT:    psrlw $4, %xmm0
6168 ; SSE41-NEXT:    pand %xmm1, %xmm0
6169 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
6170 ; SSE41-NEXT:    paddb %xmm4, %xmm3
6171 ; SSE41-NEXT:    pxor %xmm0, %xmm0
6172 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
6173 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
6174 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
6175 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
6176 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
6177 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [3,3,3,3]
6178 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
6179 ; SSE41-NEXT:    retq
6181 ; AVX1-LABEL: ult_3_v4i32:
6182 ; AVX1:       # %bb.0:
6183 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6184 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6185 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6186 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6187 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6188 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6189 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6190 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6191 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6192 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6193 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6194 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6195 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6196 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6197 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [3,3,3,3]
6198 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6199 ; AVX1-NEXT:    retq
6201 ; AVX2-LABEL: ult_3_v4i32:
6202 ; AVX2:       # %bb.0:
6203 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6204 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
6205 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6206 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6207 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
6208 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
6209 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6210 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6211 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6212 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6213 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6214 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6215 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6216 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6217 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6218 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6219 ; AVX2-NEXT:    retq
6221 ; AVX512VPOPCNTDQ-LABEL: ult_3_v4i32:
6222 ; AVX512VPOPCNTDQ:       # %bb.0:
6223 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6224 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6225 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6226 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6227 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
6228 ; AVX512VPOPCNTDQ-NEXT:    retq
6230 ; AVX512VPOPCNTDQVL-LABEL: ult_3_v4i32:
6231 ; AVX512VPOPCNTDQVL:       # %bb.0:
6232 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
6233 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6234 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6235 ; AVX512VPOPCNTDQVL-NEXT:    retq
6237 ; BITALG_NOVLX-LABEL: ult_3_v4i32:
6238 ; BITALG_NOVLX:       # %bb.0:
6239 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6240 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6241 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6242 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6243 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6244 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6245 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6246 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6247 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6248 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6249 ; BITALG_NOVLX-NEXT:    vzeroupper
6250 ; BITALG_NOVLX-NEXT:    retq
6252 ; BITALG-LABEL: ult_3_v4i32:
6253 ; BITALG:       # %bb.0:
6254 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
6255 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6256 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6257 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6258 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6259 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6260 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6261 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6262 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6263 ; BITALG-NEXT:    retq
6264   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6265   %3 = icmp ult <4 x i32> %2, <i32 3, i32 3, i32 3, i32 3>
6266   %4 = sext <4 x i1> %3 to <4 x i32>
6267   ret <4 x i32> %4
6270 define <4 x i32> @ugt_3_v4i32(<4 x i32> %0) {
6271 ; SSE2-LABEL: ugt_3_v4i32:
6272 ; SSE2:       # %bb.0:
6273 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6274 ; SSE2-NEXT:    psrlw $1, %xmm1
6275 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6276 ; SSE2-NEXT:    psubb %xmm1, %xmm0
6277 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6278 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
6279 ; SSE2-NEXT:    pand %xmm1, %xmm2
6280 ; SSE2-NEXT:    psrlw $2, %xmm0
6281 ; SSE2-NEXT:    pand %xmm1, %xmm0
6282 ; SSE2-NEXT:    paddb %xmm2, %xmm0
6283 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6284 ; SSE2-NEXT:    psrlw $4, %xmm1
6285 ; SSE2-NEXT:    paddb %xmm1, %xmm0
6286 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6287 ; SSE2-NEXT:    pxor %xmm1, %xmm1
6288 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
6289 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
6290 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
6291 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
6292 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
6293 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
6294 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6295 ; SSE2-NEXT:    retq
6297 ; SSE3-LABEL: ugt_3_v4i32:
6298 ; SSE3:       # %bb.0:
6299 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6300 ; SSE3-NEXT:    psrlw $1, %xmm1
6301 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6302 ; SSE3-NEXT:    psubb %xmm1, %xmm0
6303 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6304 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
6305 ; SSE3-NEXT:    pand %xmm1, %xmm2
6306 ; SSE3-NEXT:    psrlw $2, %xmm0
6307 ; SSE3-NEXT:    pand %xmm1, %xmm0
6308 ; SSE3-NEXT:    paddb %xmm2, %xmm0
6309 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6310 ; SSE3-NEXT:    psrlw $4, %xmm1
6311 ; SSE3-NEXT:    paddb %xmm1, %xmm0
6312 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6313 ; SSE3-NEXT:    pxor %xmm1, %xmm1
6314 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
6315 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
6316 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
6317 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
6318 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
6319 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
6320 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6321 ; SSE3-NEXT:    retq
6323 ; SSSE3-LABEL: ugt_3_v4i32:
6324 ; SSSE3:       # %bb.0:
6325 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6326 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
6327 ; SSSE3-NEXT:    pand %xmm2, %xmm3
6328 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6329 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
6330 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
6331 ; SSSE3-NEXT:    psrlw $4, %xmm0
6332 ; SSSE3-NEXT:    pand %xmm2, %xmm0
6333 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
6334 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
6335 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
6336 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
6337 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
6338 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
6339 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6340 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
6341 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
6342 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6343 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
6344 ; SSSE3-NEXT:    retq
6346 ; SSE41-LABEL: ugt_3_v4i32:
6347 ; SSE41:       # %bb.0:
6348 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6349 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
6350 ; SSE41-NEXT:    pand %xmm1, %xmm2
6351 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6352 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
6353 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
6354 ; SSE41-NEXT:    psrlw $4, %xmm0
6355 ; SSE41-NEXT:    pand %xmm1, %xmm0
6356 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
6357 ; SSE41-NEXT:    paddb %xmm4, %xmm3
6358 ; SSE41-NEXT:    pxor %xmm1, %xmm1
6359 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
6360 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
6361 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
6362 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
6363 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
6364 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6365 ; SSE41-NEXT:    retq
6367 ; AVX1-LABEL: ugt_3_v4i32:
6368 ; AVX1:       # %bb.0:
6369 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6370 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6371 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6372 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6373 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6374 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6375 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6376 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6377 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6378 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6379 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6380 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6381 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6382 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6383 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
6384 ; AVX1-NEXT:    retq
6386 ; AVX2-LABEL: ugt_3_v4i32:
6387 ; AVX2:       # %bb.0:
6388 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6389 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
6390 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6391 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6392 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
6393 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
6394 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6395 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6396 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6397 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6398 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6399 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6400 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6401 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6402 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6403 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6404 ; AVX2-NEXT:    retq
6406 ; AVX512VPOPCNTDQ-LABEL: ugt_3_v4i32:
6407 ; AVX512VPOPCNTDQ:       # %bb.0:
6408 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6409 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6410 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6411 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6412 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
6413 ; AVX512VPOPCNTDQ-NEXT:    retq
6415 ; AVX512VPOPCNTDQVL-LABEL: ugt_3_v4i32:
6416 ; AVX512VPOPCNTDQVL:       # %bb.0:
6417 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
6418 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6419 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6420 ; AVX512VPOPCNTDQVL-NEXT:    retq
6422 ; BITALG_NOVLX-LABEL: ugt_3_v4i32:
6423 ; BITALG_NOVLX:       # %bb.0:
6424 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6425 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6426 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6427 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6428 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6429 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6430 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6431 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6432 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6433 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6434 ; BITALG_NOVLX-NEXT:    vzeroupper
6435 ; BITALG_NOVLX-NEXT:    retq
6437 ; BITALG-LABEL: ugt_3_v4i32:
6438 ; BITALG:       # %bb.0:
6439 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
6440 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6441 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6442 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6443 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6444 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6445 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6446 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [3,3,3,3]
6447 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6448 ; BITALG-NEXT:    retq
6449   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6450   %3 = icmp ugt <4 x i32> %2, <i32 3, i32 3, i32 3, i32 3>
6451   %4 = sext <4 x i1> %3 to <4 x i32>
6452   ret <4 x i32> %4
6455 define <4 x i32> @ult_4_v4i32(<4 x i32> %0) {
6456 ; SSE2-LABEL: ult_4_v4i32:
6457 ; SSE2:       # %bb.0:
6458 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6459 ; SSE2-NEXT:    psrlw $1, %xmm1
6460 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6461 ; SSE2-NEXT:    psubb %xmm1, %xmm0
6462 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6463 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
6464 ; SSE2-NEXT:    pand %xmm1, %xmm2
6465 ; SSE2-NEXT:    psrlw $2, %xmm0
6466 ; SSE2-NEXT:    pand %xmm1, %xmm0
6467 ; SSE2-NEXT:    paddb %xmm2, %xmm0
6468 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6469 ; SSE2-NEXT:    psrlw $4, %xmm1
6470 ; SSE2-NEXT:    paddb %xmm0, %xmm1
6471 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6472 ; SSE2-NEXT:    pxor %xmm0, %xmm0
6473 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
6474 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
6475 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
6476 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6477 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
6478 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
6479 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4]
6480 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6481 ; SSE2-NEXT:    retq
6483 ; SSE3-LABEL: ult_4_v4i32:
6484 ; SSE3:       # %bb.0:
6485 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6486 ; SSE3-NEXT:    psrlw $1, %xmm1
6487 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6488 ; SSE3-NEXT:    psubb %xmm1, %xmm0
6489 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6490 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
6491 ; SSE3-NEXT:    pand %xmm1, %xmm2
6492 ; SSE3-NEXT:    psrlw $2, %xmm0
6493 ; SSE3-NEXT:    pand %xmm1, %xmm0
6494 ; SSE3-NEXT:    paddb %xmm2, %xmm0
6495 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6496 ; SSE3-NEXT:    psrlw $4, %xmm1
6497 ; SSE3-NEXT:    paddb %xmm0, %xmm1
6498 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6499 ; SSE3-NEXT:    pxor %xmm0, %xmm0
6500 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
6501 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
6502 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
6503 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6504 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
6505 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
6506 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4]
6507 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
6508 ; SSE3-NEXT:    retq
6510 ; SSSE3-LABEL: ult_4_v4i32:
6511 ; SSSE3:       # %bb.0:
6512 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6513 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
6514 ; SSSE3-NEXT:    pand %xmm1, %xmm2
6515 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6516 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
6517 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
6518 ; SSSE3-NEXT:    psrlw $4, %xmm0
6519 ; SSSE3-NEXT:    pand %xmm1, %xmm0
6520 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
6521 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
6522 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
6523 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
6524 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
6525 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
6526 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
6527 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
6528 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
6529 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4]
6530 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
6531 ; SSSE3-NEXT:    retq
6533 ; SSE41-LABEL: ult_4_v4i32:
6534 ; SSE41:       # %bb.0:
6535 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6536 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
6537 ; SSE41-NEXT:    pand %xmm1, %xmm2
6538 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6539 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
6540 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
6541 ; SSE41-NEXT:    psrlw $4, %xmm0
6542 ; SSE41-NEXT:    pand %xmm1, %xmm0
6543 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
6544 ; SSE41-NEXT:    paddb %xmm4, %xmm3
6545 ; SSE41-NEXT:    pxor %xmm0, %xmm0
6546 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
6547 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
6548 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
6549 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
6550 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
6551 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [4,4,4,4]
6552 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
6553 ; SSE41-NEXT:    retq
6555 ; AVX1-LABEL: ult_4_v4i32:
6556 ; AVX1:       # %bb.0:
6557 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6558 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6559 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6560 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6561 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6562 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6563 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6564 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6565 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6566 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6567 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6568 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6569 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6570 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6571 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [4,4,4,4]
6572 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6573 ; AVX1-NEXT:    retq
6575 ; AVX2-LABEL: ult_4_v4i32:
6576 ; AVX2:       # %bb.0:
6577 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6578 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
6579 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6580 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6581 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
6582 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
6583 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6584 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6585 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6586 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6587 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6588 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6589 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6590 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6591 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6592 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6593 ; AVX2-NEXT:    retq
6595 ; AVX512VPOPCNTDQ-LABEL: ult_4_v4i32:
6596 ; AVX512VPOPCNTDQ:       # %bb.0:
6597 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6598 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6599 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6600 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6601 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
6602 ; AVX512VPOPCNTDQ-NEXT:    retq
6604 ; AVX512VPOPCNTDQVL-LABEL: ult_4_v4i32:
6605 ; AVX512VPOPCNTDQVL:       # %bb.0:
6606 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
6607 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6608 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6609 ; AVX512VPOPCNTDQVL-NEXT:    retq
6611 ; BITALG_NOVLX-LABEL: ult_4_v4i32:
6612 ; BITALG_NOVLX:       # %bb.0:
6613 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6614 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6615 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6616 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6617 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6618 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6619 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6620 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6621 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6622 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6623 ; BITALG_NOVLX-NEXT:    vzeroupper
6624 ; BITALG_NOVLX-NEXT:    retq
6626 ; BITALG-LABEL: ult_4_v4i32:
6627 ; BITALG:       # %bb.0:
6628 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
6629 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6630 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6631 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6632 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6633 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6634 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6635 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6636 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6637 ; BITALG-NEXT:    retq
6638   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6639   %3 = icmp ult <4 x i32> %2, <i32 4, i32 4, i32 4, i32 4>
6640   %4 = sext <4 x i1> %3 to <4 x i32>
6641   ret <4 x i32> %4
6644 define <4 x i32> @ugt_4_v4i32(<4 x i32> %0) {
6645 ; SSE2-LABEL: ugt_4_v4i32:
6646 ; SSE2:       # %bb.0:
6647 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6648 ; SSE2-NEXT:    psrlw $1, %xmm1
6649 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6650 ; SSE2-NEXT:    psubb %xmm1, %xmm0
6651 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6652 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
6653 ; SSE2-NEXT:    pand %xmm1, %xmm2
6654 ; SSE2-NEXT:    psrlw $2, %xmm0
6655 ; SSE2-NEXT:    pand %xmm1, %xmm0
6656 ; SSE2-NEXT:    paddb %xmm2, %xmm0
6657 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6658 ; SSE2-NEXT:    psrlw $4, %xmm1
6659 ; SSE2-NEXT:    paddb %xmm1, %xmm0
6660 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6661 ; SSE2-NEXT:    pxor %xmm1, %xmm1
6662 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
6663 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
6664 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
6665 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
6666 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
6667 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
6668 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6669 ; SSE2-NEXT:    retq
6671 ; SSE3-LABEL: ugt_4_v4i32:
6672 ; SSE3:       # %bb.0:
6673 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6674 ; SSE3-NEXT:    psrlw $1, %xmm1
6675 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6676 ; SSE3-NEXT:    psubb %xmm1, %xmm0
6677 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6678 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
6679 ; SSE3-NEXT:    pand %xmm1, %xmm2
6680 ; SSE3-NEXT:    psrlw $2, %xmm0
6681 ; SSE3-NEXT:    pand %xmm1, %xmm0
6682 ; SSE3-NEXT:    paddb %xmm2, %xmm0
6683 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6684 ; SSE3-NEXT:    psrlw $4, %xmm1
6685 ; SSE3-NEXT:    paddb %xmm1, %xmm0
6686 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6687 ; SSE3-NEXT:    pxor %xmm1, %xmm1
6688 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
6689 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
6690 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
6691 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
6692 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
6693 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
6694 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6695 ; SSE3-NEXT:    retq
6697 ; SSSE3-LABEL: ugt_4_v4i32:
6698 ; SSSE3:       # %bb.0:
6699 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6700 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
6701 ; SSSE3-NEXT:    pand %xmm2, %xmm3
6702 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6703 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
6704 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
6705 ; SSSE3-NEXT:    psrlw $4, %xmm0
6706 ; SSSE3-NEXT:    pand %xmm2, %xmm0
6707 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
6708 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
6709 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
6710 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
6711 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
6712 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
6713 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6714 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
6715 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
6716 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6717 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
6718 ; SSSE3-NEXT:    retq
6720 ; SSE41-LABEL: ugt_4_v4i32:
6721 ; SSE41:       # %bb.0:
6722 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6723 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
6724 ; SSE41-NEXT:    pand %xmm1, %xmm2
6725 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6726 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
6727 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
6728 ; SSE41-NEXT:    psrlw $4, %xmm0
6729 ; SSE41-NEXT:    pand %xmm1, %xmm0
6730 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
6731 ; SSE41-NEXT:    paddb %xmm4, %xmm3
6732 ; SSE41-NEXT:    pxor %xmm1, %xmm1
6733 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
6734 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
6735 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
6736 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
6737 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
6738 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
6739 ; SSE41-NEXT:    retq
6741 ; AVX1-LABEL: ugt_4_v4i32:
6742 ; AVX1:       # %bb.0:
6743 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6744 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6745 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6746 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6747 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6748 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6749 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6750 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6751 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6752 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6753 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6754 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6755 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6756 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6757 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
6758 ; AVX1-NEXT:    retq
6760 ; AVX2-LABEL: ugt_4_v4i32:
6761 ; AVX2:       # %bb.0:
6762 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6763 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
6764 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6765 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6766 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
6767 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
6768 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6769 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6770 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6771 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6772 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6773 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6774 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6775 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6776 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6777 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6778 ; AVX2-NEXT:    retq
6780 ; AVX512VPOPCNTDQ-LABEL: ugt_4_v4i32:
6781 ; AVX512VPOPCNTDQ:       # %bb.0:
6782 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6783 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6784 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6785 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6786 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
6787 ; AVX512VPOPCNTDQ-NEXT:    retq
6789 ; AVX512VPOPCNTDQVL-LABEL: ugt_4_v4i32:
6790 ; AVX512VPOPCNTDQVL:       # %bb.0:
6791 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
6792 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6793 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6794 ; AVX512VPOPCNTDQVL-NEXT:    retq
6796 ; BITALG_NOVLX-LABEL: ugt_4_v4i32:
6797 ; BITALG_NOVLX:       # %bb.0:
6798 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6799 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6800 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6801 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6802 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6803 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6804 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6805 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6806 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6807 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6808 ; BITALG_NOVLX-NEXT:    vzeroupper
6809 ; BITALG_NOVLX-NEXT:    retq
6811 ; BITALG-LABEL: ugt_4_v4i32:
6812 ; BITALG:       # %bb.0:
6813 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
6814 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6815 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6816 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6817 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6818 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6819 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6820 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [4,4,4,4]
6821 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
6822 ; BITALG-NEXT:    retq
6823   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6824   %3 = icmp ugt <4 x i32> %2, <i32 4, i32 4, i32 4, i32 4>
6825   %4 = sext <4 x i1> %3 to <4 x i32>
6826   ret <4 x i32> %4
6829 define <4 x i32> @ult_5_v4i32(<4 x i32> %0) {
6830 ; SSE2-LABEL: ult_5_v4i32:
6831 ; SSE2:       # %bb.0:
6832 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6833 ; SSE2-NEXT:    psrlw $1, %xmm1
6834 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6835 ; SSE2-NEXT:    psubb %xmm1, %xmm0
6836 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6837 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
6838 ; SSE2-NEXT:    pand %xmm1, %xmm2
6839 ; SSE2-NEXT:    psrlw $2, %xmm0
6840 ; SSE2-NEXT:    pand %xmm1, %xmm0
6841 ; SSE2-NEXT:    paddb %xmm2, %xmm0
6842 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
6843 ; SSE2-NEXT:    psrlw $4, %xmm1
6844 ; SSE2-NEXT:    paddb %xmm0, %xmm1
6845 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6846 ; SSE2-NEXT:    pxor %xmm0, %xmm0
6847 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
6848 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
6849 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
6850 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6851 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
6852 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
6853 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5]
6854 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6855 ; SSE2-NEXT:    retq
6857 ; SSE3-LABEL: ult_5_v4i32:
6858 ; SSE3:       # %bb.0:
6859 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6860 ; SSE3-NEXT:    psrlw $1, %xmm1
6861 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6862 ; SSE3-NEXT:    psubb %xmm1, %xmm0
6863 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
6864 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
6865 ; SSE3-NEXT:    pand %xmm1, %xmm2
6866 ; SSE3-NEXT:    psrlw $2, %xmm0
6867 ; SSE3-NEXT:    pand %xmm1, %xmm0
6868 ; SSE3-NEXT:    paddb %xmm2, %xmm0
6869 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
6870 ; SSE3-NEXT:    psrlw $4, %xmm1
6871 ; SSE3-NEXT:    paddb %xmm0, %xmm1
6872 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
6873 ; SSE3-NEXT:    pxor %xmm0, %xmm0
6874 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
6875 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
6876 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
6877 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
6878 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
6879 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
6880 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5]
6881 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
6882 ; SSE3-NEXT:    retq
6884 ; SSSE3-LABEL: ult_5_v4i32:
6885 ; SSSE3:       # %bb.0:
6886 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6887 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
6888 ; SSSE3-NEXT:    pand %xmm1, %xmm2
6889 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6890 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
6891 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
6892 ; SSSE3-NEXT:    psrlw $4, %xmm0
6893 ; SSSE3-NEXT:    pand %xmm1, %xmm0
6894 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
6895 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
6896 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
6897 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
6898 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
6899 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
6900 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
6901 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
6902 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
6903 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5]
6904 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
6905 ; SSSE3-NEXT:    retq
6907 ; SSE41-LABEL: ult_5_v4i32:
6908 ; SSE41:       # %bb.0:
6909 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6910 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
6911 ; SSE41-NEXT:    pand %xmm1, %xmm2
6912 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6913 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
6914 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
6915 ; SSE41-NEXT:    psrlw $4, %xmm0
6916 ; SSE41-NEXT:    pand %xmm1, %xmm0
6917 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
6918 ; SSE41-NEXT:    paddb %xmm4, %xmm3
6919 ; SSE41-NEXT:    pxor %xmm0, %xmm0
6920 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
6921 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
6922 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
6923 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
6924 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
6925 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [5,5,5,5]
6926 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
6927 ; SSE41-NEXT:    retq
6929 ; AVX1-LABEL: ult_5_v4i32:
6930 ; AVX1:       # %bb.0:
6931 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6932 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
6933 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6934 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6935 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
6936 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
6937 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6938 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6939 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6940 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6941 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6942 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6943 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6944 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6945 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [5,5,5,5]
6946 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6947 ; AVX1-NEXT:    retq
6949 ; AVX2-LABEL: ult_5_v4i32:
6950 ; AVX2:       # %bb.0:
6951 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
6952 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
6953 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
6954 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
6955 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
6956 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
6957 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
6958 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
6959 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6960 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6961 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6962 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6963 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6964 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6965 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
6966 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6967 ; AVX2-NEXT:    retq
6969 ; AVX512VPOPCNTDQ-LABEL: ult_5_v4i32:
6970 ; AVX512VPOPCNTDQ:       # %bb.0:
6971 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6972 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
6973 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
6974 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6975 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
6976 ; AVX512VPOPCNTDQ-NEXT:    retq
6978 ; AVX512VPOPCNTDQVL-LABEL: ult_5_v4i32:
6979 ; AVX512VPOPCNTDQVL:       # %bb.0:
6980 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
6981 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
6982 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6983 ; AVX512VPOPCNTDQVL-NEXT:    retq
6985 ; BITALG_NOVLX-LABEL: ult_5_v4i32:
6986 ; BITALG_NOVLX:       # %bb.0:
6987 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
6988 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
6989 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
6990 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
6991 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
6992 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
6993 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
6994 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
6995 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
6996 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
6997 ; BITALG_NOVLX-NEXT:    vzeroupper
6998 ; BITALG_NOVLX-NEXT:    retq
7000 ; BITALG-LABEL: ult_5_v4i32:
7001 ; BITALG:       # %bb.0:
7002 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
7003 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7004 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7005 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7006 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7007 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7008 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7009 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
7010 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7011 ; BITALG-NEXT:    retq
7012   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7013   %3 = icmp ult <4 x i32> %2, <i32 5, i32 5, i32 5, i32 5>
7014   %4 = sext <4 x i1> %3 to <4 x i32>
7015   ret <4 x i32> %4
7018 define <4 x i32> @ugt_5_v4i32(<4 x i32> %0) {
7019 ; SSE2-LABEL: ugt_5_v4i32:
7020 ; SSE2:       # %bb.0:
7021 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7022 ; SSE2-NEXT:    psrlw $1, %xmm1
7023 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7024 ; SSE2-NEXT:    psubb %xmm1, %xmm0
7025 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7026 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7027 ; SSE2-NEXT:    pand %xmm1, %xmm2
7028 ; SSE2-NEXT:    psrlw $2, %xmm0
7029 ; SSE2-NEXT:    pand %xmm1, %xmm0
7030 ; SSE2-NEXT:    paddb %xmm2, %xmm0
7031 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7032 ; SSE2-NEXT:    psrlw $4, %xmm1
7033 ; SSE2-NEXT:    paddb %xmm1, %xmm0
7034 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7035 ; SSE2-NEXT:    pxor %xmm1, %xmm1
7036 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7037 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
7038 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
7039 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
7040 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
7041 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
7042 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7043 ; SSE2-NEXT:    retq
7045 ; SSE3-LABEL: ugt_5_v4i32:
7046 ; SSE3:       # %bb.0:
7047 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7048 ; SSE3-NEXT:    psrlw $1, %xmm1
7049 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7050 ; SSE3-NEXT:    psubb %xmm1, %xmm0
7051 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7052 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7053 ; SSE3-NEXT:    pand %xmm1, %xmm2
7054 ; SSE3-NEXT:    psrlw $2, %xmm0
7055 ; SSE3-NEXT:    pand %xmm1, %xmm0
7056 ; SSE3-NEXT:    paddb %xmm2, %xmm0
7057 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7058 ; SSE3-NEXT:    psrlw $4, %xmm1
7059 ; SSE3-NEXT:    paddb %xmm1, %xmm0
7060 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7061 ; SSE3-NEXT:    pxor %xmm1, %xmm1
7062 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7063 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
7064 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
7065 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
7066 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
7067 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
7068 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7069 ; SSE3-NEXT:    retq
7071 ; SSSE3-LABEL: ugt_5_v4i32:
7072 ; SSSE3:       # %bb.0:
7073 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7074 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
7075 ; SSSE3-NEXT:    pand %xmm2, %xmm3
7076 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7077 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
7078 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
7079 ; SSSE3-NEXT:    psrlw $4, %xmm0
7080 ; SSSE3-NEXT:    pand %xmm2, %xmm0
7081 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
7082 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
7083 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
7084 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
7085 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7086 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
7087 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
7088 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
7089 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
7090 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7091 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
7092 ; SSSE3-NEXT:    retq
7094 ; SSE41-LABEL: ugt_5_v4i32:
7095 ; SSE41:       # %bb.0:
7096 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7097 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
7098 ; SSE41-NEXT:    pand %xmm1, %xmm2
7099 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7100 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
7101 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
7102 ; SSE41-NEXT:    psrlw $4, %xmm0
7103 ; SSE41-NEXT:    pand %xmm1, %xmm0
7104 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
7105 ; SSE41-NEXT:    paddb %xmm4, %xmm3
7106 ; SSE41-NEXT:    pxor %xmm1, %xmm1
7107 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
7108 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
7109 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
7110 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
7111 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
7112 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7113 ; SSE41-NEXT:    retq
7115 ; AVX1-LABEL: ugt_5_v4i32:
7116 ; AVX1:       # %bb.0:
7117 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7118 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7119 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7120 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7121 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7122 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7123 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7124 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7125 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7126 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7127 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7128 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7129 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7130 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7131 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
7132 ; AVX1-NEXT:    retq
7134 ; AVX2-LABEL: ugt_5_v4i32:
7135 ; AVX2:       # %bb.0:
7136 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7137 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
7138 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7139 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7140 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
7141 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
7142 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7143 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7144 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7145 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7146 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7147 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7148 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7149 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7150 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
7151 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7152 ; AVX2-NEXT:    retq
7154 ; AVX512VPOPCNTDQ-LABEL: ugt_5_v4i32:
7155 ; AVX512VPOPCNTDQ:       # %bb.0:
7156 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7157 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7158 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
7159 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7160 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
7161 ; AVX512VPOPCNTDQ-NEXT:    retq
7163 ; AVX512VPOPCNTDQVL-LABEL: ugt_5_v4i32:
7164 ; AVX512VPOPCNTDQVL:       # %bb.0:
7165 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
7166 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
7167 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7168 ; AVX512VPOPCNTDQVL-NEXT:    retq
7170 ; BITALG_NOVLX-LABEL: ugt_5_v4i32:
7171 ; BITALG_NOVLX:       # %bb.0:
7172 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7173 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7174 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7175 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7176 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7177 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7178 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7179 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7180 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
7181 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7182 ; BITALG_NOVLX-NEXT:    vzeroupper
7183 ; BITALG_NOVLX-NEXT:    retq
7185 ; BITALG-LABEL: ugt_5_v4i32:
7186 ; BITALG:       # %bb.0:
7187 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
7188 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7189 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7190 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7191 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7192 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7193 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7194 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [5,5,5,5]
7195 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7196 ; BITALG-NEXT:    retq
7197   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7198   %3 = icmp ugt <4 x i32> %2, <i32 5, i32 5, i32 5, i32 5>
7199   %4 = sext <4 x i1> %3 to <4 x i32>
7200   ret <4 x i32> %4
7203 define <4 x i32> @ult_6_v4i32(<4 x i32> %0) {
7204 ; SSE2-LABEL: ult_6_v4i32:
7205 ; SSE2:       # %bb.0:
7206 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7207 ; SSE2-NEXT:    psrlw $1, %xmm1
7208 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7209 ; SSE2-NEXT:    psubb %xmm1, %xmm0
7210 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7211 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7212 ; SSE2-NEXT:    pand %xmm1, %xmm2
7213 ; SSE2-NEXT:    psrlw $2, %xmm0
7214 ; SSE2-NEXT:    pand %xmm1, %xmm0
7215 ; SSE2-NEXT:    paddb %xmm2, %xmm0
7216 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7217 ; SSE2-NEXT:    psrlw $4, %xmm1
7218 ; SSE2-NEXT:    paddb %xmm0, %xmm1
7219 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7220 ; SSE2-NEXT:    pxor %xmm0, %xmm0
7221 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
7222 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7223 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
7224 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
7225 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
7226 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
7227 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6]
7228 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
7229 ; SSE2-NEXT:    retq
7231 ; SSE3-LABEL: ult_6_v4i32:
7232 ; SSE3:       # %bb.0:
7233 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7234 ; SSE3-NEXT:    psrlw $1, %xmm1
7235 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7236 ; SSE3-NEXT:    psubb %xmm1, %xmm0
7237 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7238 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7239 ; SSE3-NEXT:    pand %xmm1, %xmm2
7240 ; SSE3-NEXT:    psrlw $2, %xmm0
7241 ; SSE3-NEXT:    pand %xmm1, %xmm0
7242 ; SSE3-NEXT:    paddb %xmm2, %xmm0
7243 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7244 ; SSE3-NEXT:    psrlw $4, %xmm1
7245 ; SSE3-NEXT:    paddb %xmm0, %xmm1
7246 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7247 ; SSE3-NEXT:    pxor %xmm0, %xmm0
7248 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
7249 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7250 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
7251 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
7252 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
7253 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
7254 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6]
7255 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
7256 ; SSE3-NEXT:    retq
7258 ; SSSE3-LABEL: ult_6_v4i32:
7259 ; SSSE3:       # %bb.0:
7260 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7261 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
7262 ; SSSE3-NEXT:    pand %xmm1, %xmm2
7263 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7264 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
7265 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
7266 ; SSSE3-NEXT:    psrlw $4, %xmm0
7267 ; SSSE3-NEXT:    pand %xmm1, %xmm0
7268 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
7269 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
7270 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
7271 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
7272 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
7273 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
7274 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
7275 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
7276 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
7277 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6]
7278 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
7279 ; SSSE3-NEXT:    retq
7281 ; SSE41-LABEL: ult_6_v4i32:
7282 ; SSE41:       # %bb.0:
7283 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7284 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
7285 ; SSE41-NEXT:    pand %xmm1, %xmm2
7286 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7287 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
7288 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
7289 ; SSE41-NEXT:    psrlw $4, %xmm0
7290 ; SSE41-NEXT:    pand %xmm1, %xmm0
7291 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
7292 ; SSE41-NEXT:    paddb %xmm4, %xmm3
7293 ; SSE41-NEXT:    pxor %xmm0, %xmm0
7294 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
7295 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
7296 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
7297 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
7298 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
7299 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [6,6,6,6]
7300 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
7301 ; SSE41-NEXT:    retq
7303 ; AVX1-LABEL: ult_6_v4i32:
7304 ; AVX1:       # %bb.0:
7305 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7306 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7307 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7308 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7309 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7310 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7311 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7312 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7313 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7314 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7315 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7316 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7317 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7318 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7319 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [6,6,6,6]
7320 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7321 ; AVX1-NEXT:    retq
7323 ; AVX2-LABEL: ult_6_v4i32:
7324 ; AVX2:       # %bb.0:
7325 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7326 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
7327 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7328 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7329 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
7330 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
7331 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7332 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7333 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7334 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7335 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7336 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7337 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7338 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7339 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7340 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7341 ; AVX2-NEXT:    retq
7343 ; AVX512VPOPCNTDQ-LABEL: ult_6_v4i32:
7344 ; AVX512VPOPCNTDQ:       # %bb.0:
7345 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7346 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7347 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7348 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7349 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
7350 ; AVX512VPOPCNTDQ-NEXT:    retq
7352 ; AVX512VPOPCNTDQVL-LABEL: ult_6_v4i32:
7353 ; AVX512VPOPCNTDQVL:       # %bb.0:
7354 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
7355 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7356 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7357 ; AVX512VPOPCNTDQVL-NEXT:    retq
7359 ; BITALG_NOVLX-LABEL: ult_6_v4i32:
7360 ; BITALG_NOVLX:       # %bb.0:
7361 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7362 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7363 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7364 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7365 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7366 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7367 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7368 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7369 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7370 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7371 ; BITALG_NOVLX-NEXT:    vzeroupper
7372 ; BITALG_NOVLX-NEXT:    retq
7374 ; BITALG-LABEL: ult_6_v4i32:
7375 ; BITALG:       # %bb.0:
7376 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
7377 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7378 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7379 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7380 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7381 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7382 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7383 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7384 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7385 ; BITALG-NEXT:    retq
7386   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7387   %3 = icmp ult <4 x i32> %2, <i32 6, i32 6, i32 6, i32 6>
7388   %4 = sext <4 x i1> %3 to <4 x i32>
7389   ret <4 x i32> %4
7392 define <4 x i32> @ugt_6_v4i32(<4 x i32> %0) {
7393 ; SSE2-LABEL: ugt_6_v4i32:
7394 ; SSE2:       # %bb.0:
7395 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7396 ; SSE2-NEXT:    psrlw $1, %xmm1
7397 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7398 ; SSE2-NEXT:    psubb %xmm1, %xmm0
7399 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7400 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7401 ; SSE2-NEXT:    pand %xmm1, %xmm2
7402 ; SSE2-NEXT:    psrlw $2, %xmm0
7403 ; SSE2-NEXT:    pand %xmm1, %xmm0
7404 ; SSE2-NEXT:    paddb %xmm2, %xmm0
7405 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7406 ; SSE2-NEXT:    psrlw $4, %xmm1
7407 ; SSE2-NEXT:    paddb %xmm1, %xmm0
7408 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7409 ; SSE2-NEXT:    pxor %xmm1, %xmm1
7410 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7411 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
7412 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
7413 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
7414 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
7415 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
7416 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7417 ; SSE2-NEXT:    retq
7419 ; SSE3-LABEL: ugt_6_v4i32:
7420 ; SSE3:       # %bb.0:
7421 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7422 ; SSE3-NEXT:    psrlw $1, %xmm1
7423 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7424 ; SSE3-NEXT:    psubb %xmm1, %xmm0
7425 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7426 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7427 ; SSE3-NEXT:    pand %xmm1, %xmm2
7428 ; SSE3-NEXT:    psrlw $2, %xmm0
7429 ; SSE3-NEXT:    pand %xmm1, %xmm0
7430 ; SSE3-NEXT:    paddb %xmm2, %xmm0
7431 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7432 ; SSE3-NEXT:    psrlw $4, %xmm1
7433 ; SSE3-NEXT:    paddb %xmm1, %xmm0
7434 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7435 ; SSE3-NEXT:    pxor %xmm1, %xmm1
7436 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7437 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
7438 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
7439 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
7440 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
7441 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
7442 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7443 ; SSE3-NEXT:    retq
7445 ; SSSE3-LABEL: ugt_6_v4i32:
7446 ; SSSE3:       # %bb.0:
7447 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7448 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
7449 ; SSSE3-NEXT:    pand %xmm2, %xmm3
7450 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7451 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
7452 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
7453 ; SSSE3-NEXT:    psrlw $4, %xmm0
7454 ; SSSE3-NEXT:    pand %xmm2, %xmm0
7455 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
7456 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
7457 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
7458 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
7459 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7460 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
7461 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
7462 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
7463 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
7464 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7465 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
7466 ; SSSE3-NEXT:    retq
7468 ; SSE41-LABEL: ugt_6_v4i32:
7469 ; SSE41:       # %bb.0:
7470 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7471 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
7472 ; SSE41-NEXT:    pand %xmm1, %xmm2
7473 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7474 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
7475 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
7476 ; SSE41-NEXT:    psrlw $4, %xmm0
7477 ; SSE41-NEXT:    pand %xmm1, %xmm0
7478 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
7479 ; SSE41-NEXT:    paddb %xmm4, %xmm3
7480 ; SSE41-NEXT:    pxor %xmm1, %xmm1
7481 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
7482 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
7483 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
7484 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
7485 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
7486 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7487 ; SSE41-NEXT:    retq
7489 ; AVX1-LABEL: ugt_6_v4i32:
7490 ; AVX1:       # %bb.0:
7491 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7492 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7493 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7494 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7495 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7496 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7497 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7498 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7499 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7500 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7501 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7502 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7503 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7504 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7505 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
7506 ; AVX1-NEXT:    retq
7508 ; AVX2-LABEL: ugt_6_v4i32:
7509 ; AVX2:       # %bb.0:
7510 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7511 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
7512 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7513 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7514 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
7515 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
7516 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7517 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7518 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7519 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7520 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7521 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7522 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7523 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7524 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7525 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7526 ; AVX2-NEXT:    retq
7528 ; AVX512VPOPCNTDQ-LABEL: ugt_6_v4i32:
7529 ; AVX512VPOPCNTDQ:       # %bb.0:
7530 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7531 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7532 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7533 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7534 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
7535 ; AVX512VPOPCNTDQ-NEXT:    retq
7537 ; AVX512VPOPCNTDQVL-LABEL: ugt_6_v4i32:
7538 ; AVX512VPOPCNTDQVL:       # %bb.0:
7539 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
7540 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7541 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7542 ; AVX512VPOPCNTDQVL-NEXT:    retq
7544 ; BITALG_NOVLX-LABEL: ugt_6_v4i32:
7545 ; BITALG_NOVLX:       # %bb.0:
7546 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7547 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7548 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7549 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7550 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7551 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7552 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7553 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7554 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7555 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7556 ; BITALG_NOVLX-NEXT:    vzeroupper
7557 ; BITALG_NOVLX-NEXT:    retq
7559 ; BITALG-LABEL: ugt_6_v4i32:
7560 ; BITALG:       # %bb.0:
7561 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
7562 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7563 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7564 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7565 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7566 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7567 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7568 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [6,6,6,6]
7569 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7570 ; BITALG-NEXT:    retq
7571   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7572   %3 = icmp ugt <4 x i32> %2, <i32 6, i32 6, i32 6, i32 6>
7573   %4 = sext <4 x i1> %3 to <4 x i32>
7574   ret <4 x i32> %4
7577 define <4 x i32> @ult_7_v4i32(<4 x i32> %0) {
7578 ; SSE2-LABEL: ult_7_v4i32:
7579 ; SSE2:       # %bb.0:
7580 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7581 ; SSE2-NEXT:    psrlw $1, %xmm1
7582 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7583 ; SSE2-NEXT:    psubb %xmm1, %xmm0
7584 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7585 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7586 ; SSE2-NEXT:    pand %xmm1, %xmm2
7587 ; SSE2-NEXT:    psrlw $2, %xmm0
7588 ; SSE2-NEXT:    pand %xmm1, %xmm0
7589 ; SSE2-NEXT:    paddb %xmm2, %xmm0
7590 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7591 ; SSE2-NEXT:    psrlw $4, %xmm1
7592 ; SSE2-NEXT:    paddb %xmm0, %xmm1
7593 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7594 ; SSE2-NEXT:    pxor %xmm0, %xmm0
7595 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
7596 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7597 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
7598 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
7599 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
7600 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
7601 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7]
7602 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
7603 ; SSE2-NEXT:    retq
7605 ; SSE3-LABEL: ult_7_v4i32:
7606 ; SSE3:       # %bb.0:
7607 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7608 ; SSE3-NEXT:    psrlw $1, %xmm1
7609 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7610 ; SSE3-NEXT:    psubb %xmm1, %xmm0
7611 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7612 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7613 ; SSE3-NEXT:    pand %xmm1, %xmm2
7614 ; SSE3-NEXT:    psrlw $2, %xmm0
7615 ; SSE3-NEXT:    pand %xmm1, %xmm0
7616 ; SSE3-NEXT:    paddb %xmm2, %xmm0
7617 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7618 ; SSE3-NEXT:    psrlw $4, %xmm1
7619 ; SSE3-NEXT:    paddb %xmm0, %xmm1
7620 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7621 ; SSE3-NEXT:    pxor %xmm0, %xmm0
7622 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
7623 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7624 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
7625 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
7626 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
7627 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
7628 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7]
7629 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
7630 ; SSE3-NEXT:    retq
7632 ; SSSE3-LABEL: ult_7_v4i32:
7633 ; SSSE3:       # %bb.0:
7634 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7635 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
7636 ; SSSE3-NEXT:    pand %xmm1, %xmm2
7637 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7638 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
7639 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
7640 ; SSSE3-NEXT:    psrlw $4, %xmm0
7641 ; SSSE3-NEXT:    pand %xmm1, %xmm0
7642 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
7643 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
7644 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
7645 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
7646 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
7647 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
7648 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
7649 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
7650 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
7651 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7]
7652 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
7653 ; SSSE3-NEXT:    retq
7655 ; SSE41-LABEL: ult_7_v4i32:
7656 ; SSE41:       # %bb.0:
7657 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7658 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
7659 ; SSE41-NEXT:    pand %xmm1, %xmm2
7660 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7661 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
7662 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
7663 ; SSE41-NEXT:    psrlw $4, %xmm0
7664 ; SSE41-NEXT:    pand %xmm1, %xmm0
7665 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
7666 ; SSE41-NEXT:    paddb %xmm4, %xmm3
7667 ; SSE41-NEXT:    pxor %xmm0, %xmm0
7668 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
7669 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
7670 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
7671 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
7672 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
7673 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [7,7,7,7]
7674 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
7675 ; SSE41-NEXT:    retq
7677 ; AVX1-LABEL: ult_7_v4i32:
7678 ; AVX1:       # %bb.0:
7679 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7680 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7681 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7682 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7683 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7684 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7685 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7686 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7687 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7688 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7689 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7690 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7691 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7692 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7693 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [7,7,7,7]
7694 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7695 ; AVX1-NEXT:    retq
7697 ; AVX2-LABEL: ult_7_v4i32:
7698 ; AVX2:       # %bb.0:
7699 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7700 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
7701 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7702 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7703 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
7704 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
7705 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7706 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7707 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7708 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7709 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7710 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7711 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7712 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7713 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7714 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7715 ; AVX2-NEXT:    retq
7717 ; AVX512VPOPCNTDQ-LABEL: ult_7_v4i32:
7718 ; AVX512VPOPCNTDQ:       # %bb.0:
7719 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7720 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7721 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7722 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7723 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
7724 ; AVX512VPOPCNTDQ-NEXT:    retq
7726 ; AVX512VPOPCNTDQVL-LABEL: ult_7_v4i32:
7727 ; AVX512VPOPCNTDQVL:       # %bb.0:
7728 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
7729 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7730 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7731 ; AVX512VPOPCNTDQVL-NEXT:    retq
7733 ; BITALG_NOVLX-LABEL: ult_7_v4i32:
7734 ; BITALG_NOVLX:       # %bb.0:
7735 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7736 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7737 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7738 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7739 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7740 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7741 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7742 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7743 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7744 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7745 ; BITALG_NOVLX-NEXT:    vzeroupper
7746 ; BITALG_NOVLX-NEXT:    retq
7748 ; BITALG-LABEL: ult_7_v4i32:
7749 ; BITALG:       # %bb.0:
7750 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
7751 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7752 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7753 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7754 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7755 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7756 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7757 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7758 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
7759 ; BITALG-NEXT:    retq
7760   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7761   %3 = icmp ult <4 x i32> %2, <i32 7, i32 7, i32 7, i32 7>
7762   %4 = sext <4 x i1> %3 to <4 x i32>
7763   ret <4 x i32> %4
7766 define <4 x i32> @ugt_7_v4i32(<4 x i32> %0) {
7767 ; SSE2-LABEL: ugt_7_v4i32:
7768 ; SSE2:       # %bb.0:
7769 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7770 ; SSE2-NEXT:    psrlw $1, %xmm1
7771 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7772 ; SSE2-NEXT:    psubb %xmm1, %xmm0
7773 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7774 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7775 ; SSE2-NEXT:    pand %xmm1, %xmm2
7776 ; SSE2-NEXT:    psrlw $2, %xmm0
7777 ; SSE2-NEXT:    pand %xmm1, %xmm0
7778 ; SSE2-NEXT:    paddb %xmm2, %xmm0
7779 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7780 ; SSE2-NEXT:    psrlw $4, %xmm1
7781 ; SSE2-NEXT:    paddb %xmm1, %xmm0
7782 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7783 ; SSE2-NEXT:    pxor %xmm1, %xmm1
7784 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7785 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
7786 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
7787 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
7788 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
7789 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
7790 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7791 ; SSE2-NEXT:    retq
7793 ; SSE3-LABEL: ugt_7_v4i32:
7794 ; SSE3:       # %bb.0:
7795 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7796 ; SSE3-NEXT:    psrlw $1, %xmm1
7797 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7798 ; SSE3-NEXT:    psubb %xmm1, %xmm0
7799 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7800 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7801 ; SSE3-NEXT:    pand %xmm1, %xmm2
7802 ; SSE3-NEXT:    psrlw $2, %xmm0
7803 ; SSE3-NEXT:    pand %xmm1, %xmm0
7804 ; SSE3-NEXT:    paddb %xmm2, %xmm0
7805 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7806 ; SSE3-NEXT:    psrlw $4, %xmm1
7807 ; SSE3-NEXT:    paddb %xmm1, %xmm0
7808 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7809 ; SSE3-NEXT:    pxor %xmm1, %xmm1
7810 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7811 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
7812 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
7813 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
7814 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
7815 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
7816 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7817 ; SSE3-NEXT:    retq
7819 ; SSSE3-LABEL: ugt_7_v4i32:
7820 ; SSSE3:       # %bb.0:
7821 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7822 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
7823 ; SSSE3-NEXT:    pand %xmm2, %xmm3
7824 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7825 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
7826 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
7827 ; SSSE3-NEXT:    psrlw $4, %xmm0
7828 ; SSSE3-NEXT:    pand %xmm2, %xmm0
7829 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
7830 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
7831 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
7832 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
7833 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7834 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
7835 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
7836 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
7837 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
7838 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7839 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
7840 ; SSSE3-NEXT:    retq
7842 ; SSE41-LABEL: ugt_7_v4i32:
7843 ; SSE41:       # %bb.0:
7844 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7845 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
7846 ; SSE41-NEXT:    pand %xmm1, %xmm2
7847 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7848 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
7849 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
7850 ; SSE41-NEXT:    psrlw $4, %xmm0
7851 ; SSE41-NEXT:    pand %xmm1, %xmm0
7852 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
7853 ; SSE41-NEXT:    paddb %xmm4, %xmm3
7854 ; SSE41-NEXT:    pxor %xmm1, %xmm1
7855 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
7856 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
7857 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
7858 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
7859 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
7860 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
7861 ; SSE41-NEXT:    retq
7863 ; AVX1-LABEL: ugt_7_v4i32:
7864 ; AVX1:       # %bb.0:
7865 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7866 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
7867 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7868 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7869 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
7870 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
7871 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7872 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7873 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7874 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7875 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7876 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7877 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7878 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7879 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
7880 ; AVX1-NEXT:    retq
7882 ; AVX2-LABEL: ugt_7_v4i32:
7883 ; AVX2:       # %bb.0:
7884 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
7885 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
7886 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
7887 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
7888 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
7889 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
7890 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
7891 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
7892 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7893 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7894 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7895 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7896 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7897 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7898 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7899 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7900 ; AVX2-NEXT:    retq
7902 ; AVX512VPOPCNTDQ-LABEL: ugt_7_v4i32:
7903 ; AVX512VPOPCNTDQ:       # %bb.0:
7904 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7905 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
7906 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7907 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7908 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
7909 ; AVX512VPOPCNTDQ-NEXT:    retq
7911 ; AVX512VPOPCNTDQVL-LABEL: ugt_7_v4i32:
7912 ; AVX512VPOPCNTDQVL:       # %bb.0:
7913 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
7914 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7915 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7916 ; AVX512VPOPCNTDQVL-NEXT:    retq
7918 ; BITALG_NOVLX-LABEL: ugt_7_v4i32:
7919 ; BITALG_NOVLX:       # %bb.0:
7920 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
7921 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
7922 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7923 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7924 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7925 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7926 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7927 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7928 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7929 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7930 ; BITALG_NOVLX-NEXT:    vzeroupper
7931 ; BITALG_NOVLX-NEXT:    retq
7933 ; BITALG-LABEL: ugt_7_v4i32:
7934 ; BITALG:       # %bb.0:
7935 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
7936 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
7937 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
7938 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
7939 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
7940 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
7941 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
7942 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [7,7,7,7]
7943 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
7944 ; BITALG-NEXT:    retq
7945   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7946   %3 = icmp ugt <4 x i32> %2, <i32 7, i32 7, i32 7, i32 7>
7947   %4 = sext <4 x i1> %3 to <4 x i32>
7948   ret <4 x i32> %4
7951 define <4 x i32> @ult_8_v4i32(<4 x i32> %0) {
7952 ; SSE2-LABEL: ult_8_v4i32:
7953 ; SSE2:       # %bb.0:
7954 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7955 ; SSE2-NEXT:    psrlw $1, %xmm1
7956 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7957 ; SSE2-NEXT:    psubb %xmm1, %xmm0
7958 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7959 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
7960 ; SSE2-NEXT:    pand %xmm1, %xmm2
7961 ; SSE2-NEXT:    psrlw $2, %xmm0
7962 ; SSE2-NEXT:    pand %xmm1, %xmm0
7963 ; SSE2-NEXT:    paddb %xmm2, %xmm0
7964 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
7965 ; SSE2-NEXT:    psrlw $4, %xmm1
7966 ; SSE2-NEXT:    paddb %xmm0, %xmm1
7967 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7968 ; SSE2-NEXT:    pxor %xmm0, %xmm0
7969 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
7970 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7971 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
7972 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
7973 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
7974 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
7975 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8]
7976 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
7977 ; SSE2-NEXT:    retq
7979 ; SSE3-LABEL: ult_8_v4i32:
7980 ; SSE3:       # %bb.0:
7981 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7982 ; SSE3-NEXT:    psrlw $1, %xmm1
7983 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7984 ; SSE3-NEXT:    psubb %xmm1, %xmm0
7985 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
7986 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
7987 ; SSE3-NEXT:    pand %xmm1, %xmm2
7988 ; SSE3-NEXT:    psrlw $2, %xmm0
7989 ; SSE3-NEXT:    pand %xmm1, %xmm0
7990 ; SSE3-NEXT:    paddb %xmm2, %xmm0
7991 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
7992 ; SSE3-NEXT:    psrlw $4, %xmm1
7993 ; SSE3-NEXT:    paddb %xmm0, %xmm1
7994 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
7995 ; SSE3-NEXT:    pxor %xmm0, %xmm0
7996 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
7997 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
7998 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
7999 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
8000 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
8001 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
8002 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8]
8003 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
8004 ; SSE3-NEXT:    retq
8006 ; SSSE3-LABEL: ult_8_v4i32:
8007 ; SSSE3:       # %bb.0:
8008 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8009 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
8010 ; SSSE3-NEXT:    pand %xmm1, %xmm2
8011 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8012 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
8013 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
8014 ; SSSE3-NEXT:    psrlw $4, %xmm0
8015 ; SSSE3-NEXT:    pand %xmm1, %xmm0
8016 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
8017 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
8018 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
8019 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
8020 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
8021 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
8022 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
8023 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
8024 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
8025 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8]
8026 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
8027 ; SSSE3-NEXT:    retq
8029 ; SSE41-LABEL: ult_8_v4i32:
8030 ; SSE41:       # %bb.0:
8031 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8032 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
8033 ; SSE41-NEXT:    pand %xmm1, %xmm2
8034 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8035 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
8036 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
8037 ; SSE41-NEXT:    psrlw $4, %xmm0
8038 ; SSE41-NEXT:    pand %xmm1, %xmm0
8039 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
8040 ; SSE41-NEXT:    paddb %xmm4, %xmm3
8041 ; SSE41-NEXT:    pxor %xmm0, %xmm0
8042 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
8043 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
8044 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
8045 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
8046 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
8047 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [8,8,8,8]
8048 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
8049 ; SSE41-NEXT:    retq
8051 ; AVX1-LABEL: ult_8_v4i32:
8052 ; AVX1:       # %bb.0:
8053 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8054 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8055 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8056 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8057 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8058 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8059 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8060 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8061 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8062 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8063 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8064 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8065 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8066 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8067 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [8,8,8,8]
8068 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8069 ; AVX1-NEXT:    retq
8071 ; AVX2-LABEL: ult_8_v4i32:
8072 ; AVX2:       # %bb.0:
8073 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8074 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
8075 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8076 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8077 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
8078 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
8079 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8080 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8081 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8082 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8083 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8084 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8085 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8086 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8087 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8088 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8089 ; AVX2-NEXT:    retq
8091 ; AVX512VPOPCNTDQ-LABEL: ult_8_v4i32:
8092 ; AVX512VPOPCNTDQ:       # %bb.0:
8093 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8094 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8095 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8096 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8097 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
8098 ; AVX512VPOPCNTDQ-NEXT:    retq
8100 ; AVX512VPOPCNTDQVL-LABEL: ult_8_v4i32:
8101 ; AVX512VPOPCNTDQVL:       # %bb.0:
8102 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
8103 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8104 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8105 ; AVX512VPOPCNTDQVL-NEXT:    retq
8107 ; BITALG_NOVLX-LABEL: ult_8_v4i32:
8108 ; BITALG_NOVLX:       # %bb.0:
8109 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8110 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8111 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8112 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8113 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8114 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8115 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8116 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8117 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8118 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8119 ; BITALG_NOVLX-NEXT:    vzeroupper
8120 ; BITALG_NOVLX-NEXT:    retq
8122 ; BITALG-LABEL: ult_8_v4i32:
8123 ; BITALG:       # %bb.0:
8124 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
8125 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8126 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8127 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8128 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8129 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8130 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8131 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8132 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8133 ; BITALG-NEXT:    retq
8134   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8135   %3 = icmp ult <4 x i32> %2, <i32 8, i32 8, i32 8, i32 8>
8136   %4 = sext <4 x i1> %3 to <4 x i32>
8137   ret <4 x i32> %4
8140 define <4 x i32> @ugt_8_v4i32(<4 x i32> %0) {
8141 ; SSE2-LABEL: ugt_8_v4i32:
8142 ; SSE2:       # %bb.0:
8143 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8144 ; SSE2-NEXT:    psrlw $1, %xmm1
8145 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8146 ; SSE2-NEXT:    psubb %xmm1, %xmm0
8147 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8148 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
8149 ; SSE2-NEXT:    pand %xmm1, %xmm2
8150 ; SSE2-NEXT:    psrlw $2, %xmm0
8151 ; SSE2-NEXT:    pand %xmm1, %xmm0
8152 ; SSE2-NEXT:    paddb %xmm2, %xmm0
8153 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8154 ; SSE2-NEXT:    psrlw $4, %xmm1
8155 ; SSE2-NEXT:    paddb %xmm1, %xmm0
8156 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8157 ; SSE2-NEXT:    pxor %xmm1, %xmm1
8158 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
8159 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
8160 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
8161 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
8162 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
8163 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
8164 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8165 ; SSE2-NEXT:    retq
8167 ; SSE3-LABEL: ugt_8_v4i32:
8168 ; SSE3:       # %bb.0:
8169 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8170 ; SSE3-NEXT:    psrlw $1, %xmm1
8171 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8172 ; SSE3-NEXT:    psubb %xmm1, %xmm0
8173 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8174 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
8175 ; SSE3-NEXT:    pand %xmm1, %xmm2
8176 ; SSE3-NEXT:    psrlw $2, %xmm0
8177 ; SSE3-NEXT:    pand %xmm1, %xmm0
8178 ; SSE3-NEXT:    paddb %xmm2, %xmm0
8179 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8180 ; SSE3-NEXT:    psrlw $4, %xmm1
8181 ; SSE3-NEXT:    paddb %xmm1, %xmm0
8182 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8183 ; SSE3-NEXT:    pxor %xmm1, %xmm1
8184 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
8185 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
8186 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
8187 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
8188 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
8189 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
8190 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8191 ; SSE3-NEXT:    retq
8193 ; SSSE3-LABEL: ugt_8_v4i32:
8194 ; SSSE3:       # %bb.0:
8195 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8196 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
8197 ; SSSE3-NEXT:    pand %xmm2, %xmm3
8198 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8199 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
8200 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
8201 ; SSSE3-NEXT:    psrlw $4, %xmm0
8202 ; SSSE3-NEXT:    pand %xmm2, %xmm0
8203 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
8204 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
8205 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
8206 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
8207 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
8208 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
8209 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
8210 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
8211 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
8212 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8213 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
8214 ; SSSE3-NEXT:    retq
8216 ; SSE41-LABEL: ugt_8_v4i32:
8217 ; SSE41:       # %bb.0:
8218 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8219 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
8220 ; SSE41-NEXT:    pand %xmm1, %xmm2
8221 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8222 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
8223 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
8224 ; SSE41-NEXT:    psrlw $4, %xmm0
8225 ; SSE41-NEXT:    pand %xmm1, %xmm0
8226 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
8227 ; SSE41-NEXT:    paddb %xmm4, %xmm3
8228 ; SSE41-NEXT:    pxor %xmm1, %xmm1
8229 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
8230 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
8231 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
8232 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
8233 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
8234 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8235 ; SSE41-NEXT:    retq
8237 ; AVX1-LABEL: ugt_8_v4i32:
8238 ; AVX1:       # %bb.0:
8239 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8240 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8241 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8242 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8243 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8244 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8245 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8246 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8247 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8248 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8249 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8250 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8251 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8252 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8253 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
8254 ; AVX1-NEXT:    retq
8256 ; AVX2-LABEL: ugt_8_v4i32:
8257 ; AVX2:       # %bb.0:
8258 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8259 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
8260 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8261 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8262 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
8263 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
8264 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8265 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8266 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8267 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8268 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8269 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8270 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8271 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8272 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8273 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8274 ; AVX2-NEXT:    retq
8276 ; AVX512VPOPCNTDQ-LABEL: ugt_8_v4i32:
8277 ; AVX512VPOPCNTDQ:       # %bb.0:
8278 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8279 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8280 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8281 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8282 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
8283 ; AVX512VPOPCNTDQ-NEXT:    retq
8285 ; AVX512VPOPCNTDQVL-LABEL: ugt_8_v4i32:
8286 ; AVX512VPOPCNTDQVL:       # %bb.0:
8287 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
8288 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8289 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8290 ; AVX512VPOPCNTDQVL-NEXT:    retq
8292 ; BITALG_NOVLX-LABEL: ugt_8_v4i32:
8293 ; BITALG_NOVLX:       # %bb.0:
8294 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8295 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8296 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8297 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8298 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8299 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8300 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8301 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8302 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8303 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8304 ; BITALG_NOVLX-NEXT:    vzeroupper
8305 ; BITALG_NOVLX-NEXT:    retq
8307 ; BITALG-LABEL: ugt_8_v4i32:
8308 ; BITALG:       # %bb.0:
8309 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
8310 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8311 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8312 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8313 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8314 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8315 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8316 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [8,8,8,8]
8317 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8318 ; BITALG-NEXT:    retq
8319   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8320   %3 = icmp ugt <4 x i32> %2, <i32 8, i32 8, i32 8, i32 8>
8321   %4 = sext <4 x i1> %3 to <4 x i32>
8322   ret <4 x i32> %4
8325 define <4 x i32> @ult_9_v4i32(<4 x i32> %0) {
8326 ; SSE2-LABEL: ult_9_v4i32:
8327 ; SSE2:       # %bb.0:
8328 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8329 ; SSE2-NEXT:    psrlw $1, %xmm1
8330 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8331 ; SSE2-NEXT:    psubb %xmm1, %xmm0
8332 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8333 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
8334 ; SSE2-NEXT:    pand %xmm1, %xmm2
8335 ; SSE2-NEXT:    psrlw $2, %xmm0
8336 ; SSE2-NEXT:    pand %xmm1, %xmm0
8337 ; SSE2-NEXT:    paddb %xmm2, %xmm0
8338 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8339 ; SSE2-NEXT:    psrlw $4, %xmm1
8340 ; SSE2-NEXT:    paddb %xmm0, %xmm1
8341 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8342 ; SSE2-NEXT:    pxor %xmm0, %xmm0
8343 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8344 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
8345 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
8346 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
8347 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
8348 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
8349 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [9,9,9,9]
8350 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
8351 ; SSE2-NEXT:    retq
8353 ; SSE3-LABEL: ult_9_v4i32:
8354 ; SSE3:       # %bb.0:
8355 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8356 ; SSE3-NEXT:    psrlw $1, %xmm1
8357 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8358 ; SSE3-NEXT:    psubb %xmm1, %xmm0
8359 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8360 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
8361 ; SSE3-NEXT:    pand %xmm1, %xmm2
8362 ; SSE3-NEXT:    psrlw $2, %xmm0
8363 ; SSE3-NEXT:    pand %xmm1, %xmm0
8364 ; SSE3-NEXT:    paddb %xmm2, %xmm0
8365 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8366 ; SSE3-NEXT:    psrlw $4, %xmm1
8367 ; SSE3-NEXT:    paddb %xmm0, %xmm1
8368 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8369 ; SSE3-NEXT:    pxor %xmm0, %xmm0
8370 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
8371 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
8372 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
8373 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
8374 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
8375 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
8376 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [9,9,9,9]
8377 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
8378 ; SSE3-NEXT:    retq
8380 ; SSSE3-LABEL: ult_9_v4i32:
8381 ; SSSE3:       # %bb.0:
8382 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8383 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
8384 ; SSSE3-NEXT:    pand %xmm1, %xmm2
8385 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8386 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
8387 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
8388 ; SSSE3-NEXT:    psrlw $4, %xmm0
8389 ; SSSE3-NEXT:    pand %xmm1, %xmm0
8390 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
8391 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
8392 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
8393 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
8394 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
8395 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
8396 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
8397 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
8398 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
8399 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [9,9,9,9]
8400 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
8401 ; SSSE3-NEXT:    retq
8403 ; SSE41-LABEL: ult_9_v4i32:
8404 ; SSE41:       # %bb.0:
8405 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8406 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
8407 ; SSE41-NEXT:    pand %xmm1, %xmm2
8408 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8409 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
8410 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
8411 ; SSE41-NEXT:    psrlw $4, %xmm0
8412 ; SSE41-NEXT:    pand %xmm1, %xmm0
8413 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
8414 ; SSE41-NEXT:    paddb %xmm4, %xmm3
8415 ; SSE41-NEXT:    pxor %xmm0, %xmm0
8416 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
8417 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
8418 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
8419 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
8420 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
8421 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [9,9,9,9]
8422 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
8423 ; SSE41-NEXT:    retq
8425 ; AVX1-LABEL: ult_9_v4i32:
8426 ; AVX1:       # %bb.0:
8427 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8428 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8429 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8430 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8431 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8432 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8433 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8434 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8435 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8436 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8437 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8438 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8439 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8440 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8441 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [9,9,9,9]
8442 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8443 ; AVX1-NEXT:    retq
8445 ; AVX2-LABEL: ult_9_v4i32:
8446 ; AVX2:       # %bb.0:
8447 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8448 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
8449 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8450 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8451 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
8452 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
8453 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8454 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8455 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8456 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8457 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8458 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8459 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8460 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8461 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8462 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8463 ; AVX2-NEXT:    retq
8465 ; AVX512VPOPCNTDQ-LABEL: ult_9_v4i32:
8466 ; AVX512VPOPCNTDQ:       # %bb.0:
8467 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8468 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8469 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8470 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8471 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
8472 ; AVX512VPOPCNTDQ-NEXT:    retq
8474 ; AVX512VPOPCNTDQVL-LABEL: ult_9_v4i32:
8475 ; AVX512VPOPCNTDQVL:       # %bb.0:
8476 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
8477 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8478 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8479 ; AVX512VPOPCNTDQVL-NEXT:    retq
8481 ; BITALG_NOVLX-LABEL: ult_9_v4i32:
8482 ; BITALG_NOVLX:       # %bb.0:
8483 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8484 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8485 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8486 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8487 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8488 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8489 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8490 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8491 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8492 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8493 ; BITALG_NOVLX-NEXT:    vzeroupper
8494 ; BITALG_NOVLX-NEXT:    retq
8496 ; BITALG-LABEL: ult_9_v4i32:
8497 ; BITALG:       # %bb.0:
8498 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
8499 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8500 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8501 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8502 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8503 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8504 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8505 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8506 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8507 ; BITALG-NEXT:    retq
8508   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8509   %3 = icmp ult <4 x i32> %2, <i32 9, i32 9, i32 9, i32 9>
8510   %4 = sext <4 x i1> %3 to <4 x i32>
8511   ret <4 x i32> %4
8514 define <4 x i32> @ugt_9_v4i32(<4 x i32> %0) {
8515 ; SSE2-LABEL: ugt_9_v4i32:
8516 ; SSE2:       # %bb.0:
8517 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8518 ; SSE2-NEXT:    psrlw $1, %xmm1
8519 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8520 ; SSE2-NEXT:    psubb %xmm1, %xmm0
8521 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8522 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
8523 ; SSE2-NEXT:    pand %xmm1, %xmm2
8524 ; SSE2-NEXT:    psrlw $2, %xmm0
8525 ; SSE2-NEXT:    pand %xmm1, %xmm0
8526 ; SSE2-NEXT:    paddb %xmm2, %xmm0
8527 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8528 ; SSE2-NEXT:    psrlw $4, %xmm1
8529 ; SSE2-NEXT:    paddb %xmm1, %xmm0
8530 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8531 ; SSE2-NEXT:    pxor %xmm1, %xmm1
8532 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
8533 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
8534 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
8535 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
8536 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
8537 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
8538 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8539 ; SSE2-NEXT:    retq
8541 ; SSE3-LABEL: ugt_9_v4i32:
8542 ; SSE3:       # %bb.0:
8543 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8544 ; SSE3-NEXT:    psrlw $1, %xmm1
8545 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8546 ; SSE3-NEXT:    psubb %xmm1, %xmm0
8547 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8548 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
8549 ; SSE3-NEXT:    pand %xmm1, %xmm2
8550 ; SSE3-NEXT:    psrlw $2, %xmm0
8551 ; SSE3-NEXT:    pand %xmm1, %xmm0
8552 ; SSE3-NEXT:    paddb %xmm2, %xmm0
8553 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8554 ; SSE3-NEXT:    psrlw $4, %xmm1
8555 ; SSE3-NEXT:    paddb %xmm1, %xmm0
8556 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8557 ; SSE3-NEXT:    pxor %xmm1, %xmm1
8558 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
8559 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
8560 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
8561 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
8562 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
8563 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
8564 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8565 ; SSE3-NEXT:    retq
8567 ; SSSE3-LABEL: ugt_9_v4i32:
8568 ; SSSE3:       # %bb.0:
8569 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8570 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
8571 ; SSSE3-NEXT:    pand %xmm2, %xmm3
8572 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8573 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
8574 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
8575 ; SSSE3-NEXT:    psrlw $4, %xmm0
8576 ; SSSE3-NEXT:    pand %xmm2, %xmm0
8577 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
8578 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
8579 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
8580 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
8581 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
8582 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
8583 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
8584 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
8585 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
8586 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8587 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
8588 ; SSSE3-NEXT:    retq
8590 ; SSE41-LABEL: ugt_9_v4i32:
8591 ; SSE41:       # %bb.0:
8592 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8593 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
8594 ; SSE41-NEXT:    pand %xmm1, %xmm2
8595 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8596 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
8597 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
8598 ; SSE41-NEXT:    psrlw $4, %xmm0
8599 ; SSE41-NEXT:    pand %xmm1, %xmm0
8600 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
8601 ; SSE41-NEXT:    paddb %xmm4, %xmm3
8602 ; SSE41-NEXT:    pxor %xmm1, %xmm1
8603 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
8604 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
8605 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
8606 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
8607 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
8608 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8609 ; SSE41-NEXT:    retq
8611 ; AVX1-LABEL: ugt_9_v4i32:
8612 ; AVX1:       # %bb.0:
8613 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8614 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8615 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8616 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8617 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8618 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8619 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8620 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8621 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8622 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8623 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8624 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8625 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8626 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8627 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
8628 ; AVX1-NEXT:    retq
8630 ; AVX2-LABEL: ugt_9_v4i32:
8631 ; AVX2:       # %bb.0:
8632 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8633 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
8634 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8635 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8636 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
8637 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
8638 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8639 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8640 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8641 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8642 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8643 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8644 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8645 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8646 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8647 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8648 ; AVX2-NEXT:    retq
8650 ; AVX512VPOPCNTDQ-LABEL: ugt_9_v4i32:
8651 ; AVX512VPOPCNTDQ:       # %bb.0:
8652 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8653 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8654 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8655 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8656 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
8657 ; AVX512VPOPCNTDQ-NEXT:    retq
8659 ; AVX512VPOPCNTDQVL-LABEL: ugt_9_v4i32:
8660 ; AVX512VPOPCNTDQVL:       # %bb.0:
8661 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
8662 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8663 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8664 ; AVX512VPOPCNTDQVL-NEXT:    retq
8666 ; BITALG_NOVLX-LABEL: ugt_9_v4i32:
8667 ; BITALG_NOVLX:       # %bb.0:
8668 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8669 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8670 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8671 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8672 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8673 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8674 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8675 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8676 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8677 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8678 ; BITALG_NOVLX-NEXT:    vzeroupper
8679 ; BITALG_NOVLX-NEXT:    retq
8681 ; BITALG-LABEL: ugt_9_v4i32:
8682 ; BITALG:       # %bb.0:
8683 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
8684 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8685 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8686 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8687 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8688 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8689 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8690 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [9,9,9,9]
8691 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
8692 ; BITALG-NEXT:    retq
8693   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8694   %3 = icmp ugt <4 x i32> %2, <i32 9, i32 9, i32 9, i32 9>
8695   %4 = sext <4 x i1> %3 to <4 x i32>
8696   ret <4 x i32> %4
8699 define <4 x i32> @ult_10_v4i32(<4 x i32> %0) {
8700 ; SSE2-LABEL: ult_10_v4i32:
8701 ; SSE2:       # %bb.0:
8702 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8703 ; SSE2-NEXT:    psrlw $1, %xmm1
8704 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8705 ; SSE2-NEXT:    psubb %xmm1, %xmm0
8706 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8707 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
8708 ; SSE2-NEXT:    pand %xmm1, %xmm2
8709 ; SSE2-NEXT:    psrlw $2, %xmm0
8710 ; SSE2-NEXT:    pand %xmm1, %xmm0
8711 ; SSE2-NEXT:    paddb %xmm2, %xmm0
8712 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8713 ; SSE2-NEXT:    psrlw $4, %xmm1
8714 ; SSE2-NEXT:    paddb %xmm0, %xmm1
8715 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8716 ; SSE2-NEXT:    pxor %xmm0, %xmm0
8717 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8718 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
8719 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
8720 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
8721 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
8722 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
8723 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [10,10,10,10]
8724 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
8725 ; SSE2-NEXT:    retq
8727 ; SSE3-LABEL: ult_10_v4i32:
8728 ; SSE3:       # %bb.0:
8729 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8730 ; SSE3-NEXT:    psrlw $1, %xmm1
8731 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8732 ; SSE3-NEXT:    psubb %xmm1, %xmm0
8733 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8734 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
8735 ; SSE3-NEXT:    pand %xmm1, %xmm2
8736 ; SSE3-NEXT:    psrlw $2, %xmm0
8737 ; SSE3-NEXT:    pand %xmm1, %xmm0
8738 ; SSE3-NEXT:    paddb %xmm2, %xmm0
8739 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8740 ; SSE3-NEXT:    psrlw $4, %xmm1
8741 ; SSE3-NEXT:    paddb %xmm0, %xmm1
8742 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8743 ; SSE3-NEXT:    pxor %xmm0, %xmm0
8744 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
8745 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
8746 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
8747 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
8748 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
8749 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
8750 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [10,10,10,10]
8751 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
8752 ; SSE3-NEXT:    retq
8754 ; SSSE3-LABEL: ult_10_v4i32:
8755 ; SSSE3:       # %bb.0:
8756 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8757 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
8758 ; SSSE3-NEXT:    pand %xmm1, %xmm2
8759 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8760 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
8761 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
8762 ; SSSE3-NEXT:    psrlw $4, %xmm0
8763 ; SSSE3-NEXT:    pand %xmm1, %xmm0
8764 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
8765 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
8766 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
8767 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
8768 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
8769 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
8770 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
8771 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
8772 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
8773 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [10,10,10,10]
8774 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
8775 ; SSSE3-NEXT:    retq
8777 ; SSE41-LABEL: ult_10_v4i32:
8778 ; SSE41:       # %bb.0:
8779 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8780 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
8781 ; SSE41-NEXT:    pand %xmm1, %xmm2
8782 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8783 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
8784 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
8785 ; SSE41-NEXT:    psrlw $4, %xmm0
8786 ; SSE41-NEXT:    pand %xmm1, %xmm0
8787 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
8788 ; SSE41-NEXT:    paddb %xmm4, %xmm3
8789 ; SSE41-NEXT:    pxor %xmm0, %xmm0
8790 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
8791 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
8792 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
8793 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
8794 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
8795 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [10,10,10,10]
8796 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
8797 ; SSE41-NEXT:    retq
8799 ; AVX1-LABEL: ult_10_v4i32:
8800 ; AVX1:       # %bb.0:
8801 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8802 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8803 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8804 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8805 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8806 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8807 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8808 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8809 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8810 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8811 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8812 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8813 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8814 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8815 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [10,10,10,10]
8816 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8817 ; AVX1-NEXT:    retq
8819 ; AVX2-LABEL: ult_10_v4i32:
8820 ; AVX2:       # %bb.0:
8821 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8822 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
8823 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8824 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8825 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
8826 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
8827 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8828 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8829 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8830 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8831 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8832 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8833 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8834 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8835 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
8836 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8837 ; AVX2-NEXT:    retq
8839 ; AVX512VPOPCNTDQ-LABEL: ult_10_v4i32:
8840 ; AVX512VPOPCNTDQ:       # %bb.0:
8841 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8842 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
8843 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
8844 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8845 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
8846 ; AVX512VPOPCNTDQ-NEXT:    retq
8848 ; AVX512VPOPCNTDQVL-LABEL: ult_10_v4i32:
8849 ; AVX512VPOPCNTDQVL:       # %bb.0:
8850 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
8851 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
8852 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8853 ; AVX512VPOPCNTDQVL-NEXT:    retq
8855 ; BITALG_NOVLX-LABEL: ult_10_v4i32:
8856 ; BITALG_NOVLX:       # %bb.0:
8857 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
8858 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
8859 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8860 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8861 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8862 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8863 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8864 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8865 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
8866 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8867 ; BITALG_NOVLX-NEXT:    vzeroupper
8868 ; BITALG_NOVLX-NEXT:    retq
8870 ; BITALG-LABEL: ult_10_v4i32:
8871 ; BITALG:       # %bb.0:
8872 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
8873 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8874 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8875 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8876 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8877 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
8878 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
8879 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
8880 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
8881 ; BITALG-NEXT:    retq
8882   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8883   %3 = icmp ult <4 x i32> %2, <i32 10, i32 10, i32 10, i32 10>
8884   %4 = sext <4 x i1> %3 to <4 x i32>
8885   ret <4 x i32> %4
8888 define <4 x i32> @ugt_10_v4i32(<4 x i32> %0) {
8889 ; SSE2-LABEL: ugt_10_v4i32:
8890 ; SSE2:       # %bb.0:
8891 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8892 ; SSE2-NEXT:    psrlw $1, %xmm1
8893 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8894 ; SSE2-NEXT:    psubb %xmm1, %xmm0
8895 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8896 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
8897 ; SSE2-NEXT:    pand %xmm1, %xmm2
8898 ; SSE2-NEXT:    psrlw $2, %xmm0
8899 ; SSE2-NEXT:    pand %xmm1, %xmm0
8900 ; SSE2-NEXT:    paddb %xmm2, %xmm0
8901 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
8902 ; SSE2-NEXT:    psrlw $4, %xmm1
8903 ; SSE2-NEXT:    paddb %xmm1, %xmm0
8904 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8905 ; SSE2-NEXT:    pxor %xmm1, %xmm1
8906 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
8907 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
8908 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
8909 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
8910 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
8911 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
8912 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8913 ; SSE2-NEXT:    retq
8915 ; SSE3-LABEL: ugt_10_v4i32:
8916 ; SSE3:       # %bb.0:
8917 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8918 ; SSE3-NEXT:    psrlw $1, %xmm1
8919 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8920 ; SSE3-NEXT:    psubb %xmm1, %xmm0
8921 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
8922 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
8923 ; SSE3-NEXT:    pand %xmm1, %xmm2
8924 ; SSE3-NEXT:    psrlw $2, %xmm0
8925 ; SSE3-NEXT:    pand %xmm1, %xmm0
8926 ; SSE3-NEXT:    paddb %xmm2, %xmm0
8927 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
8928 ; SSE3-NEXT:    psrlw $4, %xmm1
8929 ; SSE3-NEXT:    paddb %xmm1, %xmm0
8930 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8931 ; SSE3-NEXT:    pxor %xmm1, %xmm1
8932 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
8933 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
8934 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
8935 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
8936 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
8937 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
8938 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8939 ; SSE3-NEXT:    retq
8941 ; SSSE3-LABEL: ugt_10_v4i32:
8942 ; SSSE3:       # %bb.0:
8943 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8944 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
8945 ; SSSE3-NEXT:    pand %xmm2, %xmm3
8946 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8947 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
8948 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
8949 ; SSSE3-NEXT:    psrlw $4, %xmm0
8950 ; SSSE3-NEXT:    pand %xmm2, %xmm0
8951 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
8952 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
8953 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
8954 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
8955 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
8956 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
8957 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
8958 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
8959 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
8960 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
8961 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
8962 ; SSSE3-NEXT:    retq
8964 ; SSE41-LABEL: ugt_10_v4i32:
8965 ; SSE41:       # %bb.0:
8966 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8967 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
8968 ; SSE41-NEXT:    pand %xmm1, %xmm2
8969 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8970 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
8971 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
8972 ; SSE41-NEXT:    psrlw $4, %xmm0
8973 ; SSE41-NEXT:    pand %xmm1, %xmm0
8974 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
8975 ; SSE41-NEXT:    paddb %xmm4, %xmm3
8976 ; SSE41-NEXT:    pxor %xmm1, %xmm1
8977 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
8978 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
8979 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
8980 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
8981 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
8982 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
8983 ; SSE41-NEXT:    retq
8985 ; AVX1-LABEL: ugt_10_v4i32:
8986 ; AVX1:       # %bb.0:
8987 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
8988 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
8989 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
8990 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
8991 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
8992 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
8993 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
8994 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
8995 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
8996 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
8997 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
8998 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
8999 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9000 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9001 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
9002 ; AVX1-NEXT:    retq
9004 ; AVX2-LABEL: ugt_10_v4i32:
9005 ; AVX2:       # %bb.0:
9006 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9007 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
9008 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9009 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9010 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
9011 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
9012 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9013 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9014 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9015 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9016 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9017 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9018 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9019 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9020 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
9021 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9022 ; AVX2-NEXT:    retq
9024 ; AVX512VPOPCNTDQ-LABEL: ugt_10_v4i32:
9025 ; AVX512VPOPCNTDQ:       # %bb.0:
9026 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9027 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9028 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
9029 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9030 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
9031 ; AVX512VPOPCNTDQ-NEXT:    retq
9033 ; AVX512VPOPCNTDQVL-LABEL: ugt_10_v4i32:
9034 ; AVX512VPOPCNTDQVL:       # %bb.0:
9035 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
9036 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
9037 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9038 ; AVX512VPOPCNTDQVL-NEXT:    retq
9040 ; BITALG_NOVLX-LABEL: ugt_10_v4i32:
9041 ; BITALG_NOVLX:       # %bb.0:
9042 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9043 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9044 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9045 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9046 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9047 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9048 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9049 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9050 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
9051 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9052 ; BITALG_NOVLX-NEXT:    vzeroupper
9053 ; BITALG_NOVLX-NEXT:    retq
9055 ; BITALG-LABEL: ugt_10_v4i32:
9056 ; BITALG:       # %bb.0:
9057 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
9058 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9059 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9060 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9061 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9062 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9063 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9064 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [10,10,10,10]
9065 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9066 ; BITALG-NEXT:    retq
9067   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9068   %3 = icmp ugt <4 x i32> %2, <i32 10, i32 10, i32 10, i32 10>
9069   %4 = sext <4 x i1> %3 to <4 x i32>
9070   ret <4 x i32> %4
9073 define <4 x i32> @ult_11_v4i32(<4 x i32> %0) {
9074 ; SSE2-LABEL: ult_11_v4i32:
9075 ; SSE2:       # %bb.0:
9076 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9077 ; SSE2-NEXT:    psrlw $1, %xmm1
9078 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9079 ; SSE2-NEXT:    psubb %xmm1, %xmm0
9080 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9081 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
9082 ; SSE2-NEXT:    pand %xmm1, %xmm2
9083 ; SSE2-NEXT:    psrlw $2, %xmm0
9084 ; SSE2-NEXT:    pand %xmm1, %xmm0
9085 ; SSE2-NEXT:    paddb %xmm2, %xmm0
9086 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9087 ; SSE2-NEXT:    psrlw $4, %xmm1
9088 ; SSE2-NEXT:    paddb %xmm0, %xmm1
9089 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9090 ; SSE2-NEXT:    pxor %xmm0, %xmm0
9091 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
9092 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
9093 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
9094 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
9095 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
9096 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
9097 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [11,11,11,11]
9098 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
9099 ; SSE2-NEXT:    retq
9101 ; SSE3-LABEL: ult_11_v4i32:
9102 ; SSE3:       # %bb.0:
9103 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9104 ; SSE3-NEXT:    psrlw $1, %xmm1
9105 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9106 ; SSE3-NEXT:    psubb %xmm1, %xmm0
9107 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9108 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
9109 ; SSE3-NEXT:    pand %xmm1, %xmm2
9110 ; SSE3-NEXT:    psrlw $2, %xmm0
9111 ; SSE3-NEXT:    pand %xmm1, %xmm0
9112 ; SSE3-NEXT:    paddb %xmm2, %xmm0
9113 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9114 ; SSE3-NEXT:    psrlw $4, %xmm1
9115 ; SSE3-NEXT:    paddb %xmm0, %xmm1
9116 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9117 ; SSE3-NEXT:    pxor %xmm0, %xmm0
9118 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
9119 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
9120 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
9121 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
9122 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
9123 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
9124 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [11,11,11,11]
9125 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
9126 ; SSE3-NEXT:    retq
9128 ; SSSE3-LABEL: ult_11_v4i32:
9129 ; SSSE3:       # %bb.0:
9130 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9131 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
9132 ; SSSE3-NEXT:    pand %xmm1, %xmm2
9133 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9134 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
9135 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
9136 ; SSSE3-NEXT:    psrlw $4, %xmm0
9137 ; SSSE3-NEXT:    pand %xmm1, %xmm0
9138 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
9139 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
9140 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
9141 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
9142 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
9143 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
9144 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
9145 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
9146 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
9147 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [11,11,11,11]
9148 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
9149 ; SSSE3-NEXT:    retq
9151 ; SSE41-LABEL: ult_11_v4i32:
9152 ; SSE41:       # %bb.0:
9153 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9154 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
9155 ; SSE41-NEXT:    pand %xmm1, %xmm2
9156 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9157 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
9158 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
9159 ; SSE41-NEXT:    psrlw $4, %xmm0
9160 ; SSE41-NEXT:    pand %xmm1, %xmm0
9161 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
9162 ; SSE41-NEXT:    paddb %xmm4, %xmm3
9163 ; SSE41-NEXT:    pxor %xmm0, %xmm0
9164 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
9165 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
9166 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
9167 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
9168 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
9169 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [11,11,11,11]
9170 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
9171 ; SSE41-NEXT:    retq
9173 ; AVX1-LABEL: ult_11_v4i32:
9174 ; AVX1:       # %bb.0:
9175 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9176 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9177 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9178 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9179 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9180 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9181 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9182 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9183 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9184 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9185 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9186 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9187 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9188 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9189 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [11,11,11,11]
9190 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9191 ; AVX1-NEXT:    retq
9193 ; AVX2-LABEL: ult_11_v4i32:
9194 ; AVX2:       # %bb.0:
9195 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9196 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
9197 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9198 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9199 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
9200 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
9201 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9202 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9203 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9204 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9205 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9206 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9207 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9208 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9209 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9210 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9211 ; AVX2-NEXT:    retq
9213 ; AVX512VPOPCNTDQ-LABEL: ult_11_v4i32:
9214 ; AVX512VPOPCNTDQ:       # %bb.0:
9215 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9216 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9217 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9218 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9219 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
9220 ; AVX512VPOPCNTDQ-NEXT:    retq
9222 ; AVX512VPOPCNTDQVL-LABEL: ult_11_v4i32:
9223 ; AVX512VPOPCNTDQVL:       # %bb.0:
9224 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
9225 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9226 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9227 ; AVX512VPOPCNTDQVL-NEXT:    retq
9229 ; BITALG_NOVLX-LABEL: ult_11_v4i32:
9230 ; BITALG_NOVLX:       # %bb.0:
9231 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9232 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9233 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9234 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9235 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9236 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9237 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9238 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9239 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9240 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9241 ; BITALG_NOVLX-NEXT:    vzeroupper
9242 ; BITALG_NOVLX-NEXT:    retq
9244 ; BITALG-LABEL: ult_11_v4i32:
9245 ; BITALG:       # %bb.0:
9246 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
9247 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9248 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9249 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9250 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9251 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9252 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9253 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9254 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9255 ; BITALG-NEXT:    retq
9256   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9257   %3 = icmp ult <4 x i32> %2, <i32 11, i32 11, i32 11, i32 11>
9258   %4 = sext <4 x i1> %3 to <4 x i32>
9259   ret <4 x i32> %4
9262 define <4 x i32> @ugt_11_v4i32(<4 x i32> %0) {
9263 ; SSE2-LABEL: ugt_11_v4i32:
9264 ; SSE2:       # %bb.0:
9265 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9266 ; SSE2-NEXT:    psrlw $1, %xmm1
9267 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9268 ; SSE2-NEXT:    psubb %xmm1, %xmm0
9269 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9270 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
9271 ; SSE2-NEXT:    pand %xmm1, %xmm2
9272 ; SSE2-NEXT:    psrlw $2, %xmm0
9273 ; SSE2-NEXT:    pand %xmm1, %xmm0
9274 ; SSE2-NEXT:    paddb %xmm2, %xmm0
9275 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9276 ; SSE2-NEXT:    psrlw $4, %xmm1
9277 ; SSE2-NEXT:    paddb %xmm1, %xmm0
9278 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9279 ; SSE2-NEXT:    pxor %xmm1, %xmm1
9280 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
9281 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
9282 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
9283 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
9284 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
9285 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
9286 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9287 ; SSE2-NEXT:    retq
9289 ; SSE3-LABEL: ugt_11_v4i32:
9290 ; SSE3:       # %bb.0:
9291 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9292 ; SSE3-NEXT:    psrlw $1, %xmm1
9293 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9294 ; SSE3-NEXT:    psubb %xmm1, %xmm0
9295 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9296 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
9297 ; SSE3-NEXT:    pand %xmm1, %xmm2
9298 ; SSE3-NEXT:    psrlw $2, %xmm0
9299 ; SSE3-NEXT:    pand %xmm1, %xmm0
9300 ; SSE3-NEXT:    paddb %xmm2, %xmm0
9301 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9302 ; SSE3-NEXT:    psrlw $4, %xmm1
9303 ; SSE3-NEXT:    paddb %xmm1, %xmm0
9304 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9305 ; SSE3-NEXT:    pxor %xmm1, %xmm1
9306 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
9307 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
9308 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
9309 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
9310 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
9311 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
9312 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9313 ; SSE3-NEXT:    retq
9315 ; SSSE3-LABEL: ugt_11_v4i32:
9316 ; SSSE3:       # %bb.0:
9317 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9318 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
9319 ; SSSE3-NEXT:    pand %xmm2, %xmm3
9320 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9321 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
9322 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
9323 ; SSSE3-NEXT:    psrlw $4, %xmm0
9324 ; SSSE3-NEXT:    pand %xmm2, %xmm0
9325 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
9326 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
9327 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
9328 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
9329 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
9330 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
9331 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
9332 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
9333 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
9334 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9335 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
9336 ; SSSE3-NEXT:    retq
9338 ; SSE41-LABEL: ugt_11_v4i32:
9339 ; SSE41:       # %bb.0:
9340 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9341 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
9342 ; SSE41-NEXT:    pand %xmm1, %xmm2
9343 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9344 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
9345 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
9346 ; SSE41-NEXT:    psrlw $4, %xmm0
9347 ; SSE41-NEXT:    pand %xmm1, %xmm0
9348 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
9349 ; SSE41-NEXT:    paddb %xmm4, %xmm3
9350 ; SSE41-NEXT:    pxor %xmm1, %xmm1
9351 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
9352 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
9353 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
9354 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
9355 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
9356 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9357 ; SSE41-NEXT:    retq
9359 ; AVX1-LABEL: ugt_11_v4i32:
9360 ; AVX1:       # %bb.0:
9361 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9362 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9363 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9364 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9365 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9366 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9367 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9368 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9369 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9370 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9371 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9372 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9373 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9374 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9375 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
9376 ; AVX1-NEXT:    retq
9378 ; AVX2-LABEL: ugt_11_v4i32:
9379 ; AVX2:       # %bb.0:
9380 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9381 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
9382 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9383 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9384 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
9385 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
9386 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9387 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9388 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9389 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9390 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9391 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9392 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9393 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9394 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9395 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9396 ; AVX2-NEXT:    retq
9398 ; AVX512VPOPCNTDQ-LABEL: ugt_11_v4i32:
9399 ; AVX512VPOPCNTDQ:       # %bb.0:
9400 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9401 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9402 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9403 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9404 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
9405 ; AVX512VPOPCNTDQ-NEXT:    retq
9407 ; AVX512VPOPCNTDQVL-LABEL: ugt_11_v4i32:
9408 ; AVX512VPOPCNTDQVL:       # %bb.0:
9409 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
9410 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9411 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9412 ; AVX512VPOPCNTDQVL-NEXT:    retq
9414 ; BITALG_NOVLX-LABEL: ugt_11_v4i32:
9415 ; BITALG_NOVLX:       # %bb.0:
9416 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9417 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9418 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9419 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9420 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9421 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9422 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9423 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9424 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9425 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9426 ; BITALG_NOVLX-NEXT:    vzeroupper
9427 ; BITALG_NOVLX-NEXT:    retq
9429 ; BITALG-LABEL: ugt_11_v4i32:
9430 ; BITALG:       # %bb.0:
9431 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
9432 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9433 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9434 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9435 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9436 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9437 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9438 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [11,11,11,11]
9439 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9440 ; BITALG-NEXT:    retq
9441   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9442   %3 = icmp ugt <4 x i32> %2, <i32 11, i32 11, i32 11, i32 11>
9443   %4 = sext <4 x i1> %3 to <4 x i32>
9444   ret <4 x i32> %4
9447 define <4 x i32> @ult_12_v4i32(<4 x i32> %0) {
9448 ; SSE2-LABEL: ult_12_v4i32:
9449 ; SSE2:       # %bb.0:
9450 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9451 ; SSE2-NEXT:    psrlw $1, %xmm1
9452 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9453 ; SSE2-NEXT:    psubb %xmm1, %xmm0
9454 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9455 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
9456 ; SSE2-NEXT:    pand %xmm1, %xmm2
9457 ; SSE2-NEXT:    psrlw $2, %xmm0
9458 ; SSE2-NEXT:    pand %xmm1, %xmm0
9459 ; SSE2-NEXT:    paddb %xmm2, %xmm0
9460 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9461 ; SSE2-NEXT:    psrlw $4, %xmm1
9462 ; SSE2-NEXT:    paddb %xmm0, %xmm1
9463 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9464 ; SSE2-NEXT:    pxor %xmm0, %xmm0
9465 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
9466 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
9467 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
9468 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
9469 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
9470 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
9471 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [12,12,12,12]
9472 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
9473 ; SSE2-NEXT:    retq
9475 ; SSE3-LABEL: ult_12_v4i32:
9476 ; SSE3:       # %bb.0:
9477 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9478 ; SSE3-NEXT:    psrlw $1, %xmm1
9479 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9480 ; SSE3-NEXT:    psubb %xmm1, %xmm0
9481 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9482 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
9483 ; SSE3-NEXT:    pand %xmm1, %xmm2
9484 ; SSE3-NEXT:    psrlw $2, %xmm0
9485 ; SSE3-NEXT:    pand %xmm1, %xmm0
9486 ; SSE3-NEXT:    paddb %xmm2, %xmm0
9487 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9488 ; SSE3-NEXT:    psrlw $4, %xmm1
9489 ; SSE3-NEXT:    paddb %xmm0, %xmm1
9490 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9491 ; SSE3-NEXT:    pxor %xmm0, %xmm0
9492 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
9493 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
9494 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
9495 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
9496 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
9497 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
9498 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [12,12,12,12]
9499 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
9500 ; SSE3-NEXT:    retq
9502 ; SSSE3-LABEL: ult_12_v4i32:
9503 ; SSSE3:       # %bb.0:
9504 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9505 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
9506 ; SSSE3-NEXT:    pand %xmm1, %xmm2
9507 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9508 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
9509 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
9510 ; SSSE3-NEXT:    psrlw $4, %xmm0
9511 ; SSSE3-NEXT:    pand %xmm1, %xmm0
9512 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
9513 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
9514 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
9515 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
9516 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
9517 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
9518 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
9519 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
9520 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
9521 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [12,12,12,12]
9522 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
9523 ; SSSE3-NEXT:    retq
9525 ; SSE41-LABEL: ult_12_v4i32:
9526 ; SSE41:       # %bb.0:
9527 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9528 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
9529 ; SSE41-NEXT:    pand %xmm1, %xmm2
9530 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9531 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
9532 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
9533 ; SSE41-NEXT:    psrlw $4, %xmm0
9534 ; SSE41-NEXT:    pand %xmm1, %xmm0
9535 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
9536 ; SSE41-NEXT:    paddb %xmm4, %xmm3
9537 ; SSE41-NEXT:    pxor %xmm0, %xmm0
9538 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
9539 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
9540 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
9541 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
9542 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
9543 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [12,12,12,12]
9544 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
9545 ; SSE41-NEXT:    retq
9547 ; AVX1-LABEL: ult_12_v4i32:
9548 ; AVX1:       # %bb.0:
9549 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9550 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9551 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9552 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9553 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9554 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9555 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9556 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9557 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9558 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9559 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9560 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9561 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9562 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9563 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [12,12,12,12]
9564 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9565 ; AVX1-NEXT:    retq
9567 ; AVX2-LABEL: ult_12_v4i32:
9568 ; AVX2:       # %bb.0:
9569 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9570 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
9571 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9572 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9573 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
9574 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
9575 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9576 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9577 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9578 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9579 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9580 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9581 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9582 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9583 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9584 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9585 ; AVX2-NEXT:    retq
9587 ; AVX512VPOPCNTDQ-LABEL: ult_12_v4i32:
9588 ; AVX512VPOPCNTDQ:       # %bb.0:
9589 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9590 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9591 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9592 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9593 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
9594 ; AVX512VPOPCNTDQ-NEXT:    retq
9596 ; AVX512VPOPCNTDQVL-LABEL: ult_12_v4i32:
9597 ; AVX512VPOPCNTDQVL:       # %bb.0:
9598 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
9599 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9600 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9601 ; AVX512VPOPCNTDQVL-NEXT:    retq
9603 ; BITALG_NOVLX-LABEL: ult_12_v4i32:
9604 ; BITALG_NOVLX:       # %bb.0:
9605 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9606 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9607 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9608 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9609 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9610 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9611 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9612 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9613 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9614 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9615 ; BITALG_NOVLX-NEXT:    vzeroupper
9616 ; BITALG_NOVLX-NEXT:    retq
9618 ; BITALG-LABEL: ult_12_v4i32:
9619 ; BITALG:       # %bb.0:
9620 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
9621 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9622 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9623 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9624 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9625 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9626 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9627 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9628 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9629 ; BITALG-NEXT:    retq
9630   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9631   %3 = icmp ult <4 x i32> %2, <i32 12, i32 12, i32 12, i32 12>
9632   %4 = sext <4 x i1> %3 to <4 x i32>
9633   ret <4 x i32> %4
9636 define <4 x i32> @ugt_12_v4i32(<4 x i32> %0) {
9637 ; SSE2-LABEL: ugt_12_v4i32:
9638 ; SSE2:       # %bb.0:
9639 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9640 ; SSE2-NEXT:    psrlw $1, %xmm1
9641 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9642 ; SSE2-NEXT:    psubb %xmm1, %xmm0
9643 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9644 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
9645 ; SSE2-NEXT:    pand %xmm1, %xmm2
9646 ; SSE2-NEXT:    psrlw $2, %xmm0
9647 ; SSE2-NEXT:    pand %xmm1, %xmm0
9648 ; SSE2-NEXT:    paddb %xmm2, %xmm0
9649 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9650 ; SSE2-NEXT:    psrlw $4, %xmm1
9651 ; SSE2-NEXT:    paddb %xmm1, %xmm0
9652 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9653 ; SSE2-NEXT:    pxor %xmm1, %xmm1
9654 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
9655 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
9656 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
9657 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
9658 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
9659 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
9660 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9661 ; SSE2-NEXT:    retq
9663 ; SSE3-LABEL: ugt_12_v4i32:
9664 ; SSE3:       # %bb.0:
9665 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9666 ; SSE3-NEXT:    psrlw $1, %xmm1
9667 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9668 ; SSE3-NEXT:    psubb %xmm1, %xmm0
9669 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9670 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
9671 ; SSE3-NEXT:    pand %xmm1, %xmm2
9672 ; SSE3-NEXT:    psrlw $2, %xmm0
9673 ; SSE3-NEXT:    pand %xmm1, %xmm0
9674 ; SSE3-NEXT:    paddb %xmm2, %xmm0
9675 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9676 ; SSE3-NEXT:    psrlw $4, %xmm1
9677 ; SSE3-NEXT:    paddb %xmm1, %xmm0
9678 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9679 ; SSE3-NEXT:    pxor %xmm1, %xmm1
9680 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
9681 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
9682 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
9683 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
9684 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
9685 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
9686 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9687 ; SSE3-NEXT:    retq
9689 ; SSSE3-LABEL: ugt_12_v4i32:
9690 ; SSSE3:       # %bb.0:
9691 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9692 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
9693 ; SSSE3-NEXT:    pand %xmm2, %xmm3
9694 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9695 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
9696 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
9697 ; SSSE3-NEXT:    psrlw $4, %xmm0
9698 ; SSSE3-NEXT:    pand %xmm2, %xmm0
9699 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
9700 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
9701 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
9702 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
9703 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
9704 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
9705 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
9706 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
9707 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
9708 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9709 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
9710 ; SSSE3-NEXT:    retq
9712 ; SSE41-LABEL: ugt_12_v4i32:
9713 ; SSE41:       # %bb.0:
9714 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9715 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
9716 ; SSE41-NEXT:    pand %xmm1, %xmm2
9717 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9718 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
9719 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
9720 ; SSE41-NEXT:    psrlw $4, %xmm0
9721 ; SSE41-NEXT:    pand %xmm1, %xmm0
9722 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
9723 ; SSE41-NEXT:    paddb %xmm4, %xmm3
9724 ; SSE41-NEXT:    pxor %xmm1, %xmm1
9725 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
9726 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
9727 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
9728 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
9729 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
9730 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
9731 ; SSE41-NEXT:    retq
9733 ; AVX1-LABEL: ugt_12_v4i32:
9734 ; AVX1:       # %bb.0:
9735 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9736 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9737 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9738 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9739 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9740 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9741 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9742 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9743 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9744 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9745 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9746 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9747 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9748 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9749 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
9750 ; AVX1-NEXT:    retq
9752 ; AVX2-LABEL: ugt_12_v4i32:
9753 ; AVX2:       # %bb.0:
9754 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9755 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
9756 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9757 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9758 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
9759 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
9760 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9761 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9762 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9763 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9764 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9765 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9766 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9767 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9768 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9769 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9770 ; AVX2-NEXT:    retq
9772 ; AVX512VPOPCNTDQ-LABEL: ugt_12_v4i32:
9773 ; AVX512VPOPCNTDQ:       # %bb.0:
9774 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9775 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9776 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9777 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9778 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
9779 ; AVX512VPOPCNTDQ-NEXT:    retq
9781 ; AVX512VPOPCNTDQVL-LABEL: ugt_12_v4i32:
9782 ; AVX512VPOPCNTDQVL:       # %bb.0:
9783 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
9784 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9785 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9786 ; AVX512VPOPCNTDQVL-NEXT:    retq
9788 ; BITALG_NOVLX-LABEL: ugt_12_v4i32:
9789 ; BITALG_NOVLX:       # %bb.0:
9790 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9791 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9792 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9793 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9794 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9795 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9796 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9797 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9798 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9799 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9800 ; BITALG_NOVLX-NEXT:    vzeroupper
9801 ; BITALG_NOVLX-NEXT:    retq
9803 ; BITALG-LABEL: ugt_12_v4i32:
9804 ; BITALG:       # %bb.0:
9805 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
9806 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9807 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9808 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9809 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9810 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9811 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9812 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [12,12,12,12]
9813 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
9814 ; BITALG-NEXT:    retq
9815   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9816   %3 = icmp ugt <4 x i32> %2, <i32 12, i32 12, i32 12, i32 12>
9817   %4 = sext <4 x i1> %3 to <4 x i32>
9818   ret <4 x i32> %4
9821 define <4 x i32> @ult_13_v4i32(<4 x i32> %0) {
9822 ; SSE2-LABEL: ult_13_v4i32:
9823 ; SSE2:       # %bb.0:
9824 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9825 ; SSE2-NEXT:    psrlw $1, %xmm1
9826 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9827 ; SSE2-NEXT:    psubb %xmm1, %xmm0
9828 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9829 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
9830 ; SSE2-NEXT:    pand %xmm1, %xmm2
9831 ; SSE2-NEXT:    psrlw $2, %xmm0
9832 ; SSE2-NEXT:    pand %xmm1, %xmm0
9833 ; SSE2-NEXT:    paddb %xmm2, %xmm0
9834 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
9835 ; SSE2-NEXT:    psrlw $4, %xmm1
9836 ; SSE2-NEXT:    paddb %xmm0, %xmm1
9837 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9838 ; SSE2-NEXT:    pxor %xmm0, %xmm0
9839 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
9840 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
9841 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
9842 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
9843 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
9844 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
9845 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [13,13,13,13]
9846 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
9847 ; SSE2-NEXT:    retq
9849 ; SSE3-LABEL: ult_13_v4i32:
9850 ; SSE3:       # %bb.0:
9851 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9852 ; SSE3-NEXT:    psrlw $1, %xmm1
9853 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9854 ; SSE3-NEXT:    psubb %xmm1, %xmm0
9855 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
9856 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
9857 ; SSE3-NEXT:    pand %xmm1, %xmm2
9858 ; SSE3-NEXT:    psrlw $2, %xmm0
9859 ; SSE3-NEXT:    pand %xmm1, %xmm0
9860 ; SSE3-NEXT:    paddb %xmm2, %xmm0
9861 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
9862 ; SSE3-NEXT:    psrlw $4, %xmm1
9863 ; SSE3-NEXT:    paddb %xmm0, %xmm1
9864 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
9865 ; SSE3-NEXT:    pxor %xmm0, %xmm0
9866 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
9867 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
9868 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
9869 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
9870 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
9871 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
9872 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [13,13,13,13]
9873 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
9874 ; SSE3-NEXT:    retq
9876 ; SSSE3-LABEL: ult_13_v4i32:
9877 ; SSSE3:       # %bb.0:
9878 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9879 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
9880 ; SSSE3-NEXT:    pand %xmm1, %xmm2
9881 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9882 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
9883 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
9884 ; SSSE3-NEXT:    psrlw $4, %xmm0
9885 ; SSSE3-NEXT:    pand %xmm1, %xmm0
9886 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
9887 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
9888 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
9889 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
9890 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
9891 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
9892 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
9893 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
9894 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
9895 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [13,13,13,13]
9896 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
9897 ; SSSE3-NEXT:    retq
9899 ; SSE41-LABEL: ult_13_v4i32:
9900 ; SSE41:       # %bb.0:
9901 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9902 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
9903 ; SSE41-NEXT:    pand %xmm1, %xmm2
9904 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9905 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
9906 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
9907 ; SSE41-NEXT:    psrlw $4, %xmm0
9908 ; SSE41-NEXT:    pand %xmm1, %xmm0
9909 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
9910 ; SSE41-NEXT:    paddb %xmm4, %xmm3
9911 ; SSE41-NEXT:    pxor %xmm0, %xmm0
9912 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
9913 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
9914 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
9915 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
9916 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
9917 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [13,13,13,13]
9918 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
9919 ; SSE41-NEXT:    retq
9921 ; AVX1-LABEL: ult_13_v4i32:
9922 ; AVX1:       # %bb.0:
9923 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9924 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
9925 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9926 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9927 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
9928 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
9929 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9930 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9931 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9932 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9933 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9934 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9935 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9936 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9937 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [13,13,13,13]
9938 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9939 ; AVX1-NEXT:    retq
9941 ; AVX2-LABEL: ult_13_v4i32:
9942 ; AVX2:       # %bb.0:
9943 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
9944 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
9945 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
9946 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
9947 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
9948 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
9949 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
9950 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
9951 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9952 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9953 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9954 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9955 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9956 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9957 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
9958 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9959 ; AVX2-NEXT:    retq
9961 ; AVX512VPOPCNTDQ-LABEL: ult_13_v4i32:
9962 ; AVX512VPOPCNTDQ:       # %bb.0:
9963 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9964 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
9965 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
9966 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9967 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
9968 ; AVX512VPOPCNTDQ-NEXT:    retq
9970 ; AVX512VPOPCNTDQVL-LABEL: ult_13_v4i32:
9971 ; AVX512VPOPCNTDQVL:       # %bb.0:
9972 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
9973 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
9974 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9975 ; AVX512VPOPCNTDQVL-NEXT:    retq
9977 ; BITALG_NOVLX-LABEL: ult_13_v4i32:
9978 ; BITALG_NOVLX:       # %bb.0:
9979 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9980 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
9981 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9982 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9983 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9984 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9985 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
9986 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
9987 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
9988 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
9989 ; BITALG_NOVLX-NEXT:    vzeroupper
9990 ; BITALG_NOVLX-NEXT:    retq
9992 ; BITALG-LABEL: ult_13_v4i32:
9993 ; BITALG:       # %bb.0:
9994 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
9995 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
9996 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
9997 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
9998 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
9999 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10000 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10001 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
10002 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10003 ; BITALG-NEXT:    retq
10004   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10005   %3 = icmp ult <4 x i32> %2, <i32 13, i32 13, i32 13, i32 13>
10006   %4 = sext <4 x i1> %3 to <4 x i32>
10007   ret <4 x i32> %4
10010 define <4 x i32> @ugt_13_v4i32(<4 x i32> %0) {
10011 ; SSE2-LABEL: ugt_13_v4i32:
10012 ; SSE2:       # %bb.0:
10013 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10014 ; SSE2-NEXT:    psrlw $1, %xmm1
10015 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10016 ; SSE2-NEXT:    psubb %xmm1, %xmm0
10017 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10018 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10019 ; SSE2-NEXT:    pand %xmm1, %xmm2
10020 ; SSE2-NEXT:    psrlw $2, %xmm0
10021 ; SSE2-NEXT:    pand %xmm1, %xmm0
10022 ; SSE2-NEXT:    paddb %xmm2, %xmm0
10023 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10024 ; SSE2-NEXT:    psrlw $4, %xmm1
10025 ; SSE2-NEXT:    paddb %xmm1, %xmm0
10026 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10027 ; SSE2-NEXT:    pxor %xmm1, %xmm1
10028 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10029 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
10030 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
10031 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
10032 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
10033 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
10034 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10035 ; SSE2-NEXT:    retq
10037 ; SSE3-LABEL: ugt_13_v4i32:
10038 ; SSE3:       # %bb.0:
10039 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10040 ; SSE3-NEXT:    psrlw $1, %xmm1
10041 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10042 ; SSE3-NEXT:    psubb %xmm1, %xmm0
10043 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10044 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10045 ; SSE3-NEXT:    pand %xmm1, %xmm2
10046 ; SSE3-NEXT:    psrlw $2, %xmm0
10047 ; SSE3-NEXT:    pand %xmm1, %xmm0
10048 ; SSE3-NEXT:    paddb %xmm2, %xmm0
10049 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10050 ; SSE3-NEXT:    psrlw $4, %xmm1
10051 ; SSE3-NEXT:    paddb %xmm1, %xmm0
10052 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10053 ; SSE3-NEXT:    pxor %xmm1, %xmm1
10054 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10055 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
10056 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
10057 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
10058 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
10059 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
10060 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10061 ; SSE3-NEXT:    retq
10063 ; SSSE3-LABEL: ugt_13_v4i32:
10064 ; SSSE3:       # %bb.0:
10065 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10066 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
10067 ; SSSE3-NEXT:    pand %xmm2, %xmm3
10068 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10069 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
10070 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
10071 ; SSSE3-NEXT:    psrlw $4, %xmm0
10072 ; SSSE3-NEXT:    pand %xmm2, %xmm0
10073 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
10074 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
10075 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
10076 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
10077 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10078 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
10079 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10080 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
10081 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
10082 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10083 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
10084 ; SSSE3-NEXT:    retq
10086 ; SSE41-LABEL: ugt_13_v4i32:
10087 ; SSE41:       # %bb.0:
10088 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10089 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
10090 ; SSE41-NEXT:    pand %xmm1, %xmm2
10091 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10092 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
10093 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
10094 ; SSE41-NEXT:    psrlw $4, %xmm0
10095 ; SSE41-NEXT:    pand %xmm1, %xmm0
10096 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
10097 ; SSE41-NEXT:    paddb %xmm4, %xmm3
10098 ; SSE41-NEXT:    pxor %xmm1, %xmm1
10099 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
10100 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
10101 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
10102 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
10103 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
10104 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10105 ; SSE41-NEXT:    retq
10107 ; AVX1-LABEL: ugt_13_v4i32:
10108 ; AVX1:       # %bb.0:
10109 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10110 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10111 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10112 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10113 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10114 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10115 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10116 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10117 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10118 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10119 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10120 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10121 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10122 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10123 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
10124 ; AVX1-NEXT:    retq
10126 ; AVX2-LABEL: ugt_13_v4i32:
10127 ; AVX2:       # %bb.0:
10128 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10129 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
10130 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10131 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10132 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
10133 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
10134 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10135 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10136 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10137 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10138 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10139 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10140 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10141 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10142 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
10143 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10144 ; AVX2-NEXT:    retq
10146 ; AVX512VPOPCNTDQ-LABEL: ugt_13_v4i32:
10147 ; AVX512VPOPCNTDQ:       # %bb.0:
10148 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10149 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
10150 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
10151 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10152 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
10153 ; AVX512VPOPCNTDQ-NEXT:    retq
10155 ; AVX512VPOPCNTDQVL-LABEL: ugt_13_v4i32:
10156 ; AVX512VPOPCNTDQVL:       # %bb.0:
10157 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
10158 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
10159 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10160 ; AVX512VPOPCNTDQVL-NEXT:    retq
10162 ; BITALG_NOVLX-LABEL: ugt_13_v4i32:
10163 ; BITALG_NOVLX:       # %bb.0:
10164 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10165 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10166 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10167 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10168 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10169 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10170 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10171 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10172 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
10173 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10174 ; BITALG_NOVLX-NEXT:    vzeroupper
10175 ; BITALG_NOVLX-NEXT:    retq
10177 ; BITALG-LABEL: ugt_13_v4i32:
10178 ; BITALG:       # %bb.0:
10179 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
10180 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10181 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10182 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10183 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10184 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10185 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10186 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [13,13,13,13]
10187 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10188 ; BITALG-NEXT:    retq
10189   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10190   %3 = icmp ugt <4 x i32> %2, <i32 13, i32 13, i32 13, i32 13>
10191   %4 = sext <4 x i1> %3 to <4 x i32>
10192   ret <4 x i32> %4
10195 define <4 x i32> @ult_14_v4i32(<4 x i32> %0) {
10196 ; SSE2-LABEL: ult_14_v4i32:
10197 ; SSE2:       # %bb.0:
10198 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10199 ; SSE2-NEXT:    psrlw $1, %xmm1
10200 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10201 ; SSE2-NEXT:    psubb %xmm1, %xmm0
10202 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10203 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10204 ; SSE2-NEXT:    pand %xmm1, %xmm2
10205 ; SSE2-NEXT:    psrlw $2, %xmm0
10206 ; SSE2-NEXT:    pand %xmm1, %xmm0
10207 ; SSE2-NEXT:    paddb %xmm2, %xmm0
10208 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10209 ; SSE2-NEXT:    psrlw $4, %xmm1
10210 ; SSE2-NEXT:    paddb %xmm0, %xmm1
10211 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10212 ; SSE2-NEXT:    pxor %xmm0, %xmm0
10213 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
10214 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10215 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
10216 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10217 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
10218 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
10219 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [14,14,14,14]
10220 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
10221 ; SSE2-NEXT:    retq
10223 ; SSE3-LABEL: ult_14_v4i32:
10224 ; SSE3:       # %bb.0:
10225 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10226 ; SSE3-NEXT:    psrlw $1, %xmm1
10227 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10228 ; SSE3-NEXT:    psubb %xmm1, %xmm0
10229 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10230 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10231 ; SSE3-NEXT:    pand %xmm1, %xmm2
10232 ; SSE3-NEXT:    psrlw $2, %xmm0
10233 ; SSE3-NEXT:    pand %xmm1, %xmm0
10234 ; SSE3-NEXT:    paddb %xmm2, %xmm0
10235 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10236 ; SSE3-NEXT:    psrlw $4, %xmm1
10237 ; SSE3-NEXT:    paddb %xmm0, %xmm1
10238 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10239 ; SSE3-NEXT:    pxor %xmm0, %xmm0
10240 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
10241 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10242 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
10243 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10244 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
10245 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
10246 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [14,14,14,14]
10247 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
10248 ; SSE3-NEXT:    retq
10250 ; SSSE3-LABEL: ult_14_v4i32:
10251 ; SSSE3:       # %bb.0:
10252 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10253 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
10254 ; SSSE3-NEXT:    pand %xmm1, %xmm2
10255 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10256 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
10257 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
10258 ; SSSE3-NEXT:    psrlw $4, %xmm0
10259 ; SSSE3-NEXT:    pand %xmm1, %xmm0
10260 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
10261 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
10262 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
10263 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
10264 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
10265 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
10266 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
10267 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
10268 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
10269 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [14,14,14,14]
10270 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
10271 ; SSSE3-NEXT:    retq
10273 ; SSE41-LABEL: ult_14_v4i32:
10274 ; SSE41:       # %bb.0:
10275 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10276 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
10277 ; SSE41-NEXT:    pand %xmm1, %xmm2
10278 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10279 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
10280 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
10281 ; SSE41-NEXT:    psrlw $4, %xmm0
10282 ; SSE41-NEXT:    pand %xmm1, %xmm0
10283 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
10284 ; SSE41-NEXT:    paddb %xmm4, %xmm3
10285 ; SSE41-NEXT:    pxor %xmm0, %xmm0
10286 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
10287 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
10288 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
10289 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
10290 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
10291 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [14,14,14,14]
10292 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
10293 ; SSE41-NEXT:    retq
10295 ; AVX1-LABEL: ult_14_v4i32:
10296 ; AVX1:       # %bb.0:
10297 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10298 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10299 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10300 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10301 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10302 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10303 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10304 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10305 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10306 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10307 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10308 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10309 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10310 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10311 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [14,14,14,14]
10312 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10313 ; AVX1-NEXT:    retq
10315 ; AVX2-LABEL: ult_14_v4i32:
10316 ; AVX2:       # %bb.0:
10317 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10318 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
10319 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10320 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10321 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
10322 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
10323 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10324 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10325 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10326 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10327 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10328 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10329 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10330 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10331 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10332 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10333 ; AVX2-NEXT:    retq
10335 ; AVX512VPOPCNTDQ-LABEL: ult_14_v4i32:
10336 ; AVX512VPOPCNTDQ:       # %bb.0:
10337 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10338 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
10339 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10340 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10341 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
10342 ; AVX512VPOPCNTDQ-NEXT:    retq
10344 ; AVX512VPOPCNTDQVL-LABEL: ult_14_v4i32:
10345 ; AVX512VPOPCNTDQVL:       # %bb.0:
10346 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
10347 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10348 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10349 ; AVX512VPOPCNTDQVL-NEXT:    retq
10351 ; BITALG_NOVLX-LABEL: ult_14_v4i32:
10352 ; BITALG_NOVLX:       # %bb.0:
10353 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10354 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10355 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10356 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10357 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10358 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10359 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10360 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10361 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10362 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10363 ; BITALG_NOVLX-NEXT:    vzeroupper
10364 ; BITALG_NOVLX-NEXT:    retq
10366 ; BITALG-LABEL: ult_14_v4i32:
10367 ; BITALG:       # %bb.0:
10368 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
10369 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10370 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10371 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10372 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10373 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10374 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10375 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10376 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10377 ; BITALG-NEXT:    retq
10378   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10379   %3 = icmp ult <4 x i32> %2, <i32 14, i32 14, i32 14, i32 14>
10380   %4 = sext <4 x i1> %3 to <4 x i32>
10381   ret <4 x i32> %4
10384 define <4 x i32> @ugt_14_v4i32(<4 x i32> %0) {
10385 ; SSE2-LABEL: ugt_14_v4i32:
10386 ; SSE2:       # %bb.0:
10387 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10388 ; SSE2-NEXT:    psrlw $1, %xmm1
10389 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10390 ; SSE2-NEXT:    psubb %xmm1, %xmm0
10391 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10392 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10393 ; SSE2-NEXT:    pand %xmm1, %xmm2
10394 ; SSE2-NEXT:    psrlw $2, %xmm0
10395 ; SSE2-NEXT:    pand %xmm1, %xmm0
10396 ; SSE2-NEXT:    paddb %xmm2, %xmm0
10397 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10398 ; SSE2-NEXT:    psrlw $4, %xmm1
10399 ; SSE2-NEXT:    paddb %xmm1, %xmm0
10400 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10401 ; SSE2-NEXT:    pxor %xmm1, %xmm1
10402 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10403 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
10404 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
10405 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
10406 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
10407 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
10408 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10409 ; SSE2-NEXT:    retq
10411 ; SSE3-LABEL: ugt_14_v4i32:
10412 ; SSE3:       # %bb.0:
10413 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10414 ; SSE3-NEXT:    psrlw $1, %xmm1
10415 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10416 ; SSE3-NEXT:    psubb %xmm1, %xmm0
10417 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10418 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10419 ; SSE3-NEXT:    pand %xmm1, %xmm2
10420 ; SSE3-NEXT:    psrlw $2, %xmm0
10421 ; SSE3-NEXT:    pand %xmm1, %xmm0
10422 ; SSE3-NEXT:    paddb %xmm2, %xmm0
10423 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10424 ; SSE3-NEXT:    psrlw $4, %xmm1
10425 ; SSE3-NEXT:    paddb %xmm1, %xmm0
10426 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10427 ; SSE3-NEXT:    pxor %xmm1, %xmm1
10428 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10429 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
10430 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
10431 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
10432 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
10433 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
10434 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10435 ; SSE3-NEXT:    retq
10437 ; SSSE3-LABEL: ugt_14_v4i32:
10438 ; SSSE3:       # %bb.0:
10439 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10440 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
10441 ; SSSE3-NEXT:    pand %xmm2, %xmm3
10442 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10443 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
10444 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
10445 ; SSSE3-NEXT:    psrlw $4, %xmm0
10446 ; SSSE3-NEXT:    pand %xmm2, %xmm0
10447 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
10448 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
10449 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
10450 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
10451 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10452 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
10453 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10454 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
10455 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
10456 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10457 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
10458 ; SSSE3-NEXT:    retq
10460 ; SSE41-LABEL: ugt_14_v4i32:
10461 ; SSE41:       # %bb.0:
10462 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10463 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
10464 ; SSE41-NEXT:    pand %xmm1, %xmm2
10465 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10466 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
10467 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
10468 ; SSE41-NEXT:    psrlw $4, %xmm0
10469 ; SSE41-NEXT:    pand %xmm1, %xmm0
10470 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
10471 ; SSE41-NEXT:    paddb %xmm4, %xmm3
10472 ; SSE41-NEXT:    pxor %xmm1, %xmm1
10473 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
10474 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
10475 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
10476 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
10477 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
10478 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10479 ; SSE41-NEXT:    retq
10481 ; AVX1-LABEL: ugt_14_v4i32:
10482 ; AVX1:       # %bb.0:
10483 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10484 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10485 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10486 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10487 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10488 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10489 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10490 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10491 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10492 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10493 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10494 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10495 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10496 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10497 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
10498 ; AVX1-NEXT:    retq
10500 ; AVX2-LABEL: ugt_14_v4i32:
10501 ; AVX2:       # %bb.0:
10502 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10503 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
10504 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10505 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10506 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
10507 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
10508 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10509 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10510 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10511 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10512 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10513 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10514 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10515 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10516 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10517 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10518 ; AVX2-NEXT:    retq
10520 ; AVX512VPOPCNTDQ-LABEL: ugt_14_v4i32:
10521 ; AVX512VPOPCNTDQ:       # %bb.0:
10522 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10523 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
10524 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10525 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10526 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
10527 ; AVX512VPOPCNTDQ-NEXT:    retq
10529 ; AVX512VPOPCNTDQVL-LABEL: ugt_14_v4i32:
10530 ; AVX512VPOPCNTDQVL:       # %bb.0:
10531 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
10532 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10533 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10534 ; AVX512VPOPCNTDQVL-NEXT:    retq
10536 ; BITALG_NOVLX-LABEL: ugt_14_v4i32:
10537 ; BITALG_NOVLX:       # %bb.0:
10538 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10539 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10540 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10541 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10542 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10543 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10544 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10545 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10546 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10547 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10548 ; BITALG_NOVLX-NEXT:    vzeroupper
10549 ; BITALG_NOVLX-NEXT:    retq
10551 ; BITALG-LABEL: ugt_14_v4i32:
10552 ; BITALG:       # %bb.0:
10553 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
10554 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10555 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10556 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10557 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10558 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10559 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10560 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [14,14,14,14]
10561 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10562 ; BITALG-NEXT:    retq
10563   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10564   %3 = icmp ugt <4 x i32> %2, <i32 14, i32 14, i32 14, i32 14>
10565   %4 = sext <4 x i1> %3 to <4 x i32>
10566   ret <4 x i32> %4
10569 define <4 x i32> @ult_15_v4i32(<4 x i32> %0) {
10570 ; SSE2-LABEL: ult_15_v4i32:
10571 ; SSE2:       # %bb.0:
10572 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10573 ; SSE2-NEXT:    psrlw $1, %xmm1
10574 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10575 ; SSE2-NEXT:    psubb %xmm1, %xmm0
10576 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10577 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10578 ; SSE2-NEXT:    pand %xmm1, %xmm2
10579 ; SSE2-NEXT:    psrlw $2, %xmm0
10580 ; SSE2-NEXT:    pand %xmm1, %xmm0
10581 ; SSE2-NEXT:    paddb %xmm2, %xmm0
10582 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10583 ; SSE2-NEXT:    psrlw $4, %xmm1
10584 ; SSE2-NEXT:    paddb %xmm0, %xmm1
10585 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10586 ; SSE2-NEXT:    pxor %xmm0, %xmm0
10587 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
10588 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10589 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
10590 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10591 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
10592 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
10593 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [15,15,15,15]
10594 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
10595 ; SSE2-NEXT:    retq
10597 ; SSE3-LABEL: ult_15_v4i32:
10598 ; SSE3:       # %bb.0:
10599 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10600 ; SSE3-NEXT:    psrlw $1, %xmm1
10601 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10602 ; SSE3-NEXT:    psubb %xmm1, %xmm0
10603 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10604 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10605 ; SSE3-NEXT:    pand %xmm1, %xmm2
10606 ; SSE3-NEXT:    psrlw $2, %xmm0
10607 ; SSE3-NEXT:    pand %xmm1, %xmm0
10608 ; SSE3-NEXT:    paddb %xmm2, %xmm0
10609 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10610 ; SSE3-NEXT:    psrlw $4, %xmm1
10611 ; SSE3-NEXT:    paddb %xmm0, %xmm1
10612 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10613 ; SSE3-NEXT:    pxor %xmm0, %xmm0
10614 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
10615 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10616 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
10617 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10618 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
10619 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
10620 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [15,15,15,15]
10621 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
10622 ; SSE3-NEXT:    retq
10624 ; SSSE3-LABEL: ult_15_v4i32:
10625 ; SSSE3:       # %bb.0:
10626 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10627 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
10628 ; SSSE3-NEXT:    pand %xmm1, %xmm2
10629 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10630 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
10631 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
10632 ; SSSE3-NEXT:    psrlw $4, %xmm0
10633 ; SSSE3-NEXT:    pand %xmm1, %xmm0
10634 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
10635 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
10636 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
10637 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
10638 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
10639 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
10640 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
10641 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
10642 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
10643 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [15,15,15,15]
10644 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
10645 ; SSSE3-NEXT:    retq
10647 ; SSE41-LABEL: ult_15_v4i32:
10648 ; SSE41:       # %bb.0:
10649 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10650 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
10651 ; SSE41-NEXT:    pand %xmm1, %xmm2
10652 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10653 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
10654 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
10655 ; SSE41-NEXT:    psrlw $4, %xmm0
10656 ; SSE41-NEXT:    pand %xmm1, %xmm0
10657 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
10658 ; SSE41-NEXT:    paddb %xmm4, %xmm3
10659 ; SSE41-NEXT:    pxor %xmm0, %xmm0
10660 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
10661 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
10662 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
10663 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
10664 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
10665 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [15,15,15,15]
10666 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
10667 ; SSE41-NEXT:    retq
10669 ; AVX1-LABEL: ult_15_v4i32:
10670 ; AVX1:       # %bb.0:
10671 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10672 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10673 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10674 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10675 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10676 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10677 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10678 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10679 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10680 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10681 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10682 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10683 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10684 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10685 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15]
10686 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10687 ; AVX1-NEXT:    retq
10689 ; AVX2-LABEL: ult_15_v4i32:
10690 ; AVX2:       # %bb.0:
10691 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10692 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
10693 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10694 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10695 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
10696 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
10697 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10698 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10699 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10700 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10701 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10702 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10703 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10704 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10705 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10706 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10707 ; AVX2-NEXT:    retq
10709 ; AVX512VPOPCNTDQ-LABEL: ult_15_v4i32:
10710 ; AVX512VPOPCNTDQ:       # %bb.0:
10711 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10712 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
10713 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10714 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10715 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
10716 ; AVX512VPOPCNTDQ-NEXT:    retq
10718 ; AVX512VPOPCNTDQVL-LABEL: ult_15_v4i32:
10719 ; AVX512VPOPCNTDQVL:       # %bb.0:
10720 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
10721 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10722 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10723 ; AVX512VPOPCNTDQVL-NEXT:    retq
10725 ; BITALG_NOVLX-LABEL: ult_15_v4i32:
10726 ; BITALG_NOVLX:       # %bb.0:
10727 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10728 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10729 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10730 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10731 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10732 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10733 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10734 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10735 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10736 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10737 ; BITALG_NOVLX-NEXT:    vzeroupper
10738 ; BITALG_NOVLX-NEXT:    retq
10740 ; BITALG-LABEL: ult_15_v4i32:
10741 ; BITALG:       # %bb.0:
10742 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
10743 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10744 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10745 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10746 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10747 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10748 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10749 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10750 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
10751 ; BITALG-NEXT:    retq
10752   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10753   %3 = icmp ult <4 x i32> %2, <i32 15, i32 15, i32 15, i32 15>
10754   %4 = sext <4 x i1> %3 to <4 x i32>
10755   ret <4 x i32> %4
10758 define <4 x i32> @ugt_15_v4i32(<4 x i32> %0) {
10759 ; SSE2-LABEL: ugt_15_v4i32:
10760 ; SSE2:       # %bb.0:
10761 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10762 ; SSE2-NEXT:    psrlw $1, %xmm1
10763 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10764 ; SSE2-NEXT:    psubb %xmm1, %xmm0
10765 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10766 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10767 ; SSE2-NEXT:    pand %xmm1, %xmm2
10768 ; SSE2-NEXT:    psrlw $2, %xmm0
10769 ; SSE2-NEXT:    pand %xmm1, %xmm0
10770 ; SSE2-NEXT:    paddb %xmm2, %xmm0
10771 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10772 ; SSE2-NEXT:    psrlw $4, %xmm1
10773 ; SSE2-NEXT:    paddb %xmm1, %xmm0
10774 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10775 ; SSE2-NEXT:    pxor %xmm1, %xmm1
10776 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10777 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
10778 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
10779 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
10780 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
10781 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
10782 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10783 ; SSE2-NEXT:    retq
10785 ; SSE3-LABEL: ugt_15_v4i32:
10786 ; SSE3:       # %bb.0:
10787 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10788 ; SSE3-NEXT:    psrlw $1, %xmm1
10789 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10790 ; SSE3-NEXT:    psubb %xmm1, %xmm0
10791 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10792 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10793 ; SSE3-NEXT:    pand %xmm1, %xmm2
10794 ; SSE3-NEXT:    psrlw $2, %xmm0
10795 ; SSE3-NEXT:    pand %xmm1, %xmm0
10796 ; SSE3-NEXT:    paddb %xmm2, %xmm0
10797 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10798 ; SSE3-NEXT:    psrlw $4, %xmm1
10799 ; SSE3-NEXT:    paddb %xmm1, %xmm0
10800 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10801 ; SSE3-NEXT:    pxor %xmm1, %xmm1
10802 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10803 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
10804 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
10805 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
10806 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
10807 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
10808 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10809 ; SSE3-NEXT:    retq
10811 ; SSSE3-LABEL: ugt_15_v4i32:
10812 ; SSSE3:       # %bb.0:
10813 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10814 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
10815 ; SSSE3-NEXT:    pand %xmm2, %xmm3
10816 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10817 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
10818 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
10819 ; SSSE3-NEXT:    psrlw $4, %xmm0
10820 ; SSSE3-NEXT:    pand %xmm2, %xmm0
10821 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
10822 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
10823 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
10824 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
10825 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10826 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
10827 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10828 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
10829 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
10830 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10831 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
10832 ; SSSE3-NEXT:    retq
10834 ; SSE41-LABEL: ugt_15_v4i32:
10835 ; SSE41:       # %bb.0:
10836 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10837 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
10838 ; SSE41-NEXT:    pand %xmm1, %xmm2
10839 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10840 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
10841 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
10842 ; SSE41-NEXT:    psrlw $4, %xmm0
10843 ; SSE41-NEXT:    pand %xmm1, %xmm0
10844 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
10845 ; SSE41-NEXT:    paddb %xmm4, %xmm3
10846 ; SSE41-NEXT:    pxor %xmm1, %xmm1
10847 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
10848 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
10849 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
10850 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
10851 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
10852 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
10853 ; SSE41-NEXT:    retq
10855 ; AVX1-LABEL: ugt_15_v4i32:
10856 ; AVX1:       # %bb.0:
10857 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10858 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
10859 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10860 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10861 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
10862 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
10863 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10864 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10865 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10866 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10867 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10868 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10869 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10870 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10871 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
10872 ; AVX1-NEXT:    retq
10874 ; AVX2-LABEL: ugt_15_v4i32:
10875 ; AVX2:       # %bb.0:
10876 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
10877 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
10878 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
10879 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
10880 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
10881 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
10882 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
10883 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
10884 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10885 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10886 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10887 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10888 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10889 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10890 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10891 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10892 ; AVX2-NEXT:    retq
10894 ; AVX512VPOPCNTDQ-LABEL: ugt_15_v4i32:
10895 ; AVX512VPOPCNTDQ:       # %bb.0:
10896 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10897 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
10898 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10899 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10900 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
10901 ; AVX512VPOPCNTDQ-NEXT:    retq
10903 ; AVX512VPOPCNTDQVL-LABEL: ugt_15_v4i32:
10904 ; AVX512VPOPCNTDQVL:       # %bb.0:
10905 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
10906 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10907 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10908 ; AVX512VPOPCNTDQVL-NEXT:    retq
10910 ; BITALG_NOVLX-LABEL: ugt_15_v4i32:
10911 ; BITALG_NOVLX:       # %bb.0:
10912 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10913 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
10914 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10915 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10916 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10917 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10918 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10919 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10920 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10921 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10922 ; BITALG_NOVLX-NEXT:    vzeroupper
10923 ; BITALG_NOVLX-NEXT:    retq
10925 ; BITALG-LABEL: ugt_15_v4i32:
10926 ; BITALG:       # %bb.0:
10927 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
10928 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
10929 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
10930 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
10931 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
10932 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
10933 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
10934 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [15,15,15,15]
10935 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
10936 ; BITALG-NEXT:    retq
10937   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10938   %3 = icmp ugt <4 x i32> %2, <i32 15, i32 15, i32 15, i32 15>
10939   %4 = sext <4 x i1> %3 to <4 x i32>
10940   ret <4 x i32> %4
10943 define <4 x i32> @ult_16_v4i32(<4 x i32> %0) {
10944 ; SSE2-LABEL: ult_16_v4i32:
10945 ; SSE2:       # %bb.0:
10946 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10947 ; SSE2-NEXT:    psrlw $1, %xmm1
10948 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10949 ; SSE2-NEXT:    psubb %xmm1, %xmm0
10950 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10951 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
10952 ; SSE2-NEXT:    pand %xmm1, %xmm2
10953 ; SSE2-NEXT:    psrlw $2, %xmm0
10954 ; SSE2-NEXT:    pand %xmm1, %xmm0
10955 ; SSE2-NEXT:    paddb %xmm2, %xmm0
10956 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
10957 ; SSE2-NEXT:    psrlw $4, %xmm1
10958 ; SSE2-NEXT:    paddb %xmm0, %xmm1
10959 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10960 ; SSE2-NEXT:    pxor %xmm0, %xmm0
10961 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
10962 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10963 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
10964 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10965 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
10966 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
10967 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [16,16,16,16]
10968 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
10969 ; SSE2-NEXT:    retq
10971 ; SSE3-LABEL: ult_16_v4i32:
10972 ; SSE3:       # %bb.0:
10973 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10974 ; SSE3-NEXT:    psrlw $1, %xmm1
10975 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10976 ; SSE3-NEXT:    psubb %xmm1, %xmm0
10977 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
10978 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
10979 ; SSE3-NEXT:    pand %xmm1, %xmm2
10980 ; SSE3-NEXT:    psrlw $2, %xmm0
10981 ; SSE3-NEXT:    pand %xmm1, %xmm0
10982 ; SSE3-NEXT:    paddb %xmm2, %xmm0
10983 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
10984 ; SSE3-NEXT:    psrlw $4, %xmm1
10985 ; SSE3-NEXT:    paddb %xmm0, %xmm1
10986 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
10987 ; SSE3-NEXT:    pxor %xmm0, %xmm0
10988 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
10989 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
10990 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
10991 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
10992 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
10993 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
10994 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [16,16,16,16]
10995 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
10996 ; SSE3-NEXT:    retq
10998 ; SSSE3-LABEL: ult_16_v4i32:
10999 ; SSSE3:       # %bb.0:
11000 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11001 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
11002 ; SSSE3-NEXT:    pand %xmm1, %xmm2
11003 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11004 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
11005 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
11006 ; SSSE3-NEXT:    psrlw $4, %xmm0
11007 ; SSSE3-NEXT:    pand %xmm1, %xmm0
11008 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
11009 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
11010 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
11011 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
11012 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
11013 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
11014 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
11015 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
11016 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
11017 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [16,16,16,16]
11018 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
11019 ; SSSE3-NEXT:    retq
11021 ; SSE41-LABEL: ult_16_v4i32:
11022 ; SSE41:       # %bb.0:
11023 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11024 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
11025 ; SSE41-NEXT:    pand %xmm1, %xmm2
11026 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11027 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
11028 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
11029 ; SSE41-NEXT:    psrlw $4, %xmm0
11030 ; SSE41-NEXT:    pand %xmm1, %xmm0
11031 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
11032 ; SSE41-NEXT:    paddb %xmm4, %xmm3
11033 ; SSE41-NEXT:    pxor %xmm0, %xmm0
11034 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
11035 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
11036 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
11037 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
11038 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
11039 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [16,16,16,16]
11040 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
11041 ; SSE41-NEXT:    retq
11043 ; AVX1-LABEL: ult_16_v4i32:
11044 ; AVX1:       # %bb.0:
11045 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11046 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11047 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11048 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11049 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11050 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11051 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11052 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11053 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11054 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11055 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11056 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11057 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11058 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11059 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [16,16,16,16]
11060 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11061 ; AVX1-NEXT:    retq
11063 ; AVX2-LABEL: ult_16_v4i32:
11064 ; AVX2:       # %bb.0:
11065 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11066 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
11067 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11068 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11069 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
11070 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
11071 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11072 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11073 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11074 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11075 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11076 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11077 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11078 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11079 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11080 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11081 ; AVX2-NEXT:    retq
11083 ; AVX512VPOPCNTDQ-LABEL: ult_16_v4i32:
11084 ; AVX512VPOPCNTDQ:       # %bb.0:
11085 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11086 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
11087 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11088 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11089 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
11090 ; AVX512VPOPCNTDQ-NEXT:    retq
11092 ; AVX512VPOPCNTDQVL-LABEL: ult_16_v4i32:
11093 ; AVX512VPOPCNTDQVL:       # %bb.0:
11094 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
11095 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11096 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11097 ; AVX512VPOPCNTDQVL-NEXT:    retq
11099 ; BITALG_NOVLX-LABEL: ult_16_v4i32:
11100 ; BITALG_NOVLX:       # %bb.0:
11101 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11102 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11103 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11104 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11105 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11106 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11107 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11108 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11109 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11110 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11111 ; BITALG_NOVLX-NEXT:    vzeroupper
11112 ; BITALG_NOVLX-NEXT:    retq
11114 ; BITALG-LABEL: ult_16_v4i32:
11115 ; BITALG:       # %bb.0:
11116 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
11117 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11118 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11119 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11120 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11121 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11122 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11123 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11124 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11125 ; BITALG-NEXT:    retq
11126   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11127   %3 = icmp ult <4 x i32> %2, <i32 16, i32 16, i32 16, i32 16>
11128   %4 = sext <4 x i1> %3 to <4 x i32>
11129   ret <4 x i32> %4
11132 define <4 x i32> @ugt_16_v4i32(<4 x i32> %0) {
11133 ; SSE2-LABEL: ugt_16_v4i32:
11134 ; SSE2:       # %bb.0:
11135 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11136 ; SSE2-NEXT:    psrlw $1, %xmm1
11137 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11138 ; SSE2-NEXT:    psubb %xmm1, %xmm0
11139 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11140 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
11141 ; SSE2-NEXT:    pand %xmm1, %xmm2
11142 ; SSE2-NEXT:    psrlw $2, %xmm0
11143 ; SSE2-NEXT:    pand %xmm1, %xmm0
11144 ; SSE2-NEXT:    paddb %xmm2, %xmm0
11145 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11146 ; SSE2-NEXT:    psrlw $4, %xmm1
11147 ; SSE2-NEXT:    paddb %xmm1, %xmm0
11148 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11149 ; SSE2-NEXT:    pxor %xmm1, %xmm1
11150 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
11151 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
11152 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
11153 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
11154 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
11155 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
11156 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11157 ; SSE2-NEXT:    retq
11159 ; SSE3-LABEL: ugt_16_v4i32:
11160 ; SSE3:       # %bb.0:
11161 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11162 ; SSE3-NEXT:    psrlw $1, %xmm1
11163 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11164 ; SSE3-NEXT:    psubb %xmm1, %xmm0
11165 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11166 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
11167 ; SSE3-NEXT:    pand %xmm1, %xmm2
11168 ; SSE3-NEXT:    psrlw $2, %xmm0
11169 ; SSE3-NEXT:    pand %xmm1, %xmm0
11170 ; SSE3-NEXT:    paddb %xmm2, %xmm0
11171 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11172 ; SSE3-NEXT:    psrlw $4, %xmm1
11173 ; SSE3-NEXT:    paddb %xmm1, %xmm0
11174 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11175 ; SSE3-NEXT:    pxor %xmm1, %xmm1
11176 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
11177 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
11178 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
11179 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
11180 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
11181 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
11182 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11183 ; SSE3-NEXT:    retq
11185 ; SSSE3-LABEL: ugt_16_v4i32:
11186 ; SSSE3:       # %bb.0:
11187 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11188 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
11189 ; SSSE3-NEXT:    pand %xmm2, %xmm3
11190 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11191 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
11192 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
11193 ; SSSE3-NEXT:    psrlw $4, %xmm0
11194 ; SSSE3-NEXT:    pand %xmm2, %xmm0
11195 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
11196 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
11197 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
11198 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
11199 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
11200 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
11201 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
11202 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
11203 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
11204 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11205 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
11206 ; SSSE3-NEXT:    retq
11208 ; SSE41-LABEL: ugt_16_v4i32:
11209 ; SSE41:       # %bb.0:
11210 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11211 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
11212 ; SSE41-NEXT:    pand %xmm1, %xmm2
11213 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11214 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
11215 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
11216 ; SSE41-NEXT:    psrlw $4, %xmm0
11217 ; SSE41-NEXT:    pand %xmm1, %xmm0
11218 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
11219 ; SSE41-NEXT:    paddb %xmm4, %xmm3
11220 ; SSE41-NEXT:    pxor %xmm1, %xmm1
11221 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
11222 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
11223 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
11224 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
11225 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
11226 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11227 ; SSE41-NEXT:    retq
11229 ; AVX1-LABEL: ugt_16_v4i32:
11230 ; AVX1:       # %bb.0:
11231 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11232 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11233 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11234 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11235 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11236 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11237 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11238 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11239 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11240 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11241 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11242 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11243 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11244 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11245 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
11246 ; AVX1-NEXT:    retq
11248 ; AVX2-LABEL: ugt_16_v4i32:
11249 ; AVX2:       # %bb.0:
11250 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11251 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
11252 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11253 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11254 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
11255 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
11256 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11257 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11258 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11259 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11260 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11261 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11262 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11263 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11264 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11265 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11266 ; AVX2-NEXT:    retq
11268 ; AVX512VPOPCNTDQ-LABEL: ugt_16_v4i32:
11269 ; AVX512VPOPCNTDQ:       # %bb.0:
11270 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11271 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
11272 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11273 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11274 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
11275 ; AVX512VPOPCNTDQ-NEXT:    retq
11277 ; AVX512VPOPCNTDQVL-LABEL: ugt_16_v4i32:
11278 ; AVX512VPOPCNTDQVL:       # %bb.0:
11279 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
11280 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11281 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11282 ; AVX512VPOPCNTDQVL-NEXT:    retq
11284 ; BITALG_NOVLX-LABEL: ugt_16_v4i32:
11285 ; BITALG_NOVLX:       # %bb.0:
11286 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11287 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11288 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11289 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11290 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11291 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11292 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11293 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11294 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11295 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11296 ; BITALG_NOVLX-NEXT:    vzeroupper
11297 ; BITALG_NOVLX-NEXT:    retq
11299 ; BITALG-LABEL: ugt_16_v4i32:
11300 ; BITALG:       # %bb.0:
11301 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
11302 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11303 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11304 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11305 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11306 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11307 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11308 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [16,16,16,16]
11309 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11310 ; BITALG-NEXT:    retq
11311   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11312   %3 = icmp ugt <4 x i32> %2, <i32 16, i32 16, i32 16, i32 16>
11313   %4 = sext <4 x i1> %3 to <4 x i32>
11314   ret <4 x i32> %4
11317 define <4 x i32> @ult_17_v4i32(<4 x i32> %0) {
11318 ; SSE2-LABEL: ult_17_v4i32:
11319 ; SSE2:       # %bb.0:
11320 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11321 ; SSE2-NEXT:    psrlw $1, %xmm1
11322 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11323 ; SSE2-NEXT:    psubb %xmm1, %xmm0
11324 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11325 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
11326 ; SSE2-NEXT:    pand %xmm1, %xmm2
11327 ; SSE2-NEXT:    psrlw $2, %xmm0
11328 ; SSE2-NEXT:    pand %xmm1, %xmm0
11329 ; SSE2-NEXT:    paddb %xmm2, %xmm0
11330 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11331 ; SSE2-NEXT:    psrlw $4, %xmm1
11332 ; SSE2-NEXT:    paddb %xmm0, %xmm1
11333 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11334 ; SSE2-NEXT:    pxor %xmm0, %xmm0
11335 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
11336 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
11337 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
11338 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
11339 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
11340 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
11341 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [17,17,17,17]
11342 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
11343 ; SSE2-NEXT:    retq
11345 ; SSE3-LABEL: ult_17_v4i32:
11346 ; SSE3:       # %bb.0:
11347 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11348 ; SSE3-NEXT:    psrlw $1, %xmm1
11349 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11350 ; SSE3-NEXT:    psubb %xmm1, %xmm0
11351 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11352 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
11353 ; SSE3-NEXT:    pand %xmm1, %xmm2
11354 ; SSE3-NEXT:    psrlw $2, %xmm0
11355 ; SSE3-NEXT:    pand %xmm1, %xmm0
11356 ; SSE3-NEXT:    paddb %xmm2, %xmm0
11357 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11358 ; SSE3-NEXT:    psrlw $4, %xmm1
11359 ; SSE3-NEXT:    paddb %xmm0, %xmm1
11360 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11361 ; SSE3-NEXT:    pxor %xmm0, %xmm0
11362 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
11363 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
11364 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
11365 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
11366 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
11367 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
11368 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [17,17,17,17]
11369 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
11370 ; SSE3-NEXT:    retq
11372 ; SSSE3-LABEL: ult_17_v4i32:
11373 ; SSSE3:       # %bb.0:
11374 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11375 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
11376 ; SSSE3-NEXT:    pand %xmm1, %xmm2
11377 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11378 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
11379 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
11380 ; SSSE3-NEXT:    psrlw $4, %xmm0
11381 ; SSSE3-NEXT:    pand %xmm1, %xmm0
11382 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
11383 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
11384 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
11385 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
11386 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
11387 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
11388 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
11389 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
11390 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
11391 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [17,17,17,17]
11392 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
11393 ; SSSE3-NEXT:    retq
11395 ; SSE41-LABEL: ult_17_v4i32:
11396 ; SSE41:       # %bb.0:
11397 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11398 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
11399 ; SSE41-NEXT:    pand %xmm1, %xmm2
11400 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11401 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
11402 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
11403 ; SSE41-NEXT:    psrlw $4, %xmm0
11404 ; SSE41-NEXT:    pand %xmm1, %xmm0
11405 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
11406 ; SSE41-NEXT:    paddb %xmm4, %xmm3
11407 ; SSE41-NEXT:    pxor %xmm0, %xmm0
11408 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
11409 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
11410 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
11411 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
11412 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
11413 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [17,17,17,17]
11414 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
11415 ; SSE41-NEXT:    retq
11417 ; AVX1-LABEL: ult_17_v4i32:
11418 ; AVX1:       # %bb.0:
11419 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11420 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11421 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11422 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11423 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11424 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11425 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11426 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11427 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11428 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11429 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11430 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11431 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11432 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11433 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [17,17,17,17]
11434 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11435 ; AVX1-NEXT:    retq
11437 ; AVX2-LABEL: ult_17_v4i32:
11438 ; AVX2:       # %bb.0:
11439 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11440 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
11441 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11442 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11443 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
11444 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
11445 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11446 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11447 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11448 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11449 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11450 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11451 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11452 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11453 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11454 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11455 ; AVX2-NEXT:    retq
11457 ; AVX512VPOPCNTDQ-LABEL: ult_17_v4i32:
11458 ; AVX512VPOPCNTDQ:       # %bb.0:
11459 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11460 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
11461 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11462 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11463 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
11464 ; AVX512VPOPCNTDQ-NEXT:    retq
11466 ; AVX512VPOPCNTDQVL-LABEL: ult_17_v4i32:
11467 ; AVX512VPOPCNTDQVL:       # %bb.0:
11468 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
11469 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11470 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11471 ; AVX512VPOPCNTDQVL-NEXT:    retq
11473 ; BITALG_NOVLX-LABEL: ult_17_v4i32:
11474 ; BITALG_NOVLX:       # %bb.0:
11475 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11476 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11477 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11478 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11479 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11480 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11481 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11482 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11483 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11484 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11485 ; BITALG_NOVLX-NEXT:    vzeroupper
11486 ; BITALG_NOVLX-NEXT:    retq
11488 ; BITALG-LABEL: ult_17_v4i32:
11489 ; BITALG:       # %bb.0:
11490 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
11491 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11492 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11493 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11494 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11495 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11496 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11497 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11498 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11499 ; BITALG-NEXT:    retq
11500   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11501   %3 = icmp ult <4 x i32> %2, <i32 17, i32 17, i32 17, i32 17>
11502   %4 = sext <4 x i1> %3 to <4 x i32>
11503   ret <4 x i32> %4
11506 define <4 x i32> @ugt_17_v4i32(<4 x i32> %0) {
11507 ; SSE2-LABEL: ugt_17_v4i32:
11508 ; SSE2:       # %bb.0:
11509 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11510 ; SSE2-NEXT:    psrlw $1, %xmm1
11511 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11512 ; SSE2-NEXT:    psubb %xmm1, %xmm0
11513 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11514 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
11515 ; SSE2-NEXT:    pand %xmm1, %xmm2
11516 ; SSE2-NEXT:    psrlw $2, %xmm0
11517 ; SSE2-NEXT:    pand %xmm1, %xmm0
11518 ; SSE2-NEXT:    paddb %xmm2, %xmm0
11519 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11520 ; SSE2-NEXT:    psrlw $4, %xmm1
11521 ; SSE2-NEXT:    paddb %xmm1, %xmm0
11522 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11523 ; SSE2-NEXT:    pxor %xmm1, %xmm1
11524 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
11525 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
11526 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
11527 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
11528 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
11529 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
11530 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11531 ; SSE2-NEXT:    retq
11533 ; SSE3-LABEL: ugt_17_v4i32:
11534 ; SSE3:       # %bb.0:
11535 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11536 ; SSE3-NEXT:    psrlw $1, %xmm1
11537 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11538 ; SSE3-NEXT:    psubb %xmm1, %xmm0
11539 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11540 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
11541 ; SSE3-NEXT:    pand %xmm1, %xmm2
11542 ; SSE3-NEXT:    psrlw $2, %xmm0
11543 ; SSE3-NEXT:    pand %xmm1, %xmm0
11544 ; SSE3-NEXT:    paddb %xmm2, %xmm0
11545 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11546 ; SSE3-NEXT:    psrlw $4, %xmm1
11547 ; SSE3-NEXT:    paddb %xmm1, %xmm0
11548 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11549 ; SSE3-NEXT:    pxor %xmm1, %xmm1
11550 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
11551 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
11552 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
11553 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
11554 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
11555 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
11556 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11557 ; SSE3-NEXT:    retq
11559 ; SSSE3-LABEL: ugt_17_v4i32:
11560 ; SSSE3:       # %bb.0:
11561 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11562 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
11563 ; SSSE3-NEXT:    pand %xmm2, %xmm3
11564 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11565 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
11566 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
11567 ; SSSE3-NEXT:    psrlw $4, %xmm0
11568 ; SSSE3-NEXT:    pand %xmm2, %xmm0
11569 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
11570 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
11571 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
11572 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
11573 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
11574 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
11575 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
11576 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
11577 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
11578 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11579 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
11580 ; SSSE3-NEXT:    retq
11582 ; SSE41-LABEL: ugt_17_v4i32:
11583 ; SSE41:       # %bb.0:
11584 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11585 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
11586 ; SSE41-NEXT:    pand %xmm1, %xmm2
11587 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11588 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
11589 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
11590 ; SSE41-NEXT:    psrlw $4, %xmm0
11591 ; SSE41-NEXT:    pand %xmm1, %xmm0
11592 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
11593 ; SSE41-NEXT:    paddb %xmm4, %xmm3
11594 ; SSE41-NEXT:    pxor %xmm1, %xmm1
11595 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
11596 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
11597 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
11598 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
11599 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
11600 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11601 ; SSE41-NEXT:    retq
11603 ; AVX1-LABEL: ugt_17_v4i32:
11604 ; AVX1:       # %bb.0:
11605 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11606 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11607 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11608 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11609 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11610 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11611 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11612 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11613 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11614 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11615 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11616 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11617 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11618 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11619 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
11620 ; AVX1-NEXT:    retq
11622 ; AVX2-LABEL: ugt_17_v4i32:
11623 ; AVX2:       # %bb.0:
11624 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11625 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
11626 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11627 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11628 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
11629 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
11630 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11631 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11632 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11633 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11634 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11635 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11636 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11637 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11638 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11639 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11640 ; AVX2-NEXT:    retq
11642 ; AVX512VPOPCNTDQ-LABEL: ugt_17_v4i32:
11643 ; AVX512VPOPCNTDQ:       # %bb.0:
11644 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11645 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
11646 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11647 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11648 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
11649 ; AVX512VPOPCNTDQ-NEXT:    retq
11651 ; AVX512VPOPCNTDQVL-LABEL: ugt_17_v4i32:
11652 ; AVX512VPOPCNTDQVL:       # %bb.0:
11653 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
11654 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11655 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11656 ; AVX512VPOPCNTDQVL-NEXT:    retq
11658 ; BITALG_NOVLX-LABEL: ugt_17_v4i32:
11659 ; BITALG_NOVLX:       # %bb.0:
11660 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11661 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11662 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11663 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11664 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11665 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11666 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11667 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11668 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11669 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11670 ; BITALG_NOVLX-NEXT:    vzeroupper
11671 ; BITALG_NOVLX-NEXT:    retq
11673 ; BITALG-LABEL: ugt_17_v4i32:
11674 ; BITALG:       # %bb.0:
11675 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
11676 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11677 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11678 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11679 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11680 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11681 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11682 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [17,17,17,17]
11683 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
11684 ; BITALG-NEXT:    retq
11685   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11686   %3 = icmp ugt <4 x i32> %2, <i32 17, i32 17, i32 17, i32 17>
11687   %4 = sext <4 x i1> %3 to <4 x i32>
11688   ret <4 x i32> %4
11691 define <4 x i32> @ult_18_v4i32(<4 x i32> %0) {
11692 ; SSE2-LABEL: ult_18_v4i32:
11693 ; SSE2:       # %bb.0:
11694 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11695 ; SSE2-NEXT:    psrlw $1, %xmm1
11696 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11697 ; SSE2-NEXT:    psubb %xmm1, %xmm0
11698 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11699 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
11700 ; SSE2-NEXT:    pand %xmm1, %xmm2
11701 ; SSE2-NEXT:    psrlw $2, %xmm0
11702 ; SSE2-NEXT:    pand %xmm1, %xmm0
11703 ; SSE2-NEXT:    paddb %xmm2, %xmm0
11704 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11705 ; SSE2-NEXT:    psrlw $4, %xmm1
11706 ; SSE2-NEXT:    paddb %xmm0, %xmm1
11707 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11708 ; SSE2-NEXT:    pxor %xmm0, %xmm0
11709 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
11710 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
11711 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
11712 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
11713 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
11714 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
11715 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [18,18,18,18]
11716 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
11717 ; SSE2-NEXT:    retq
11719 ; SSE3-LABEL: ult_18_v4i32:
11720 ; SSE3:       # %bb.0:
11721 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11722 ; SSE3-NEXT:    psrlw $1, %xmm1
11723 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11724 ; SSE3-NEXT:    psubb %xmm1, %xmm0
11725 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11726 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
11727 ; SSE3-NEXT:    pand %xmm1, %xmm2
11728 ; SSE3-NEXT:    psrlw $2, %xmm0
11729 ; SSE3-NEXT:    pand %xmm1, %xmm0
11730 ; SSE3-NEXT:    paddb %xmm2, %xmm0
11731 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11732 ; SSE3-NEXT:    psrlw $4, %xmm1
11733 ; SSE3-NEXT:    paddb %xmm0, %xmm1
11734 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11735 ; SSE3-NEXT:    pxor %xmm0, %xmm0
11736 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
11737 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
11738 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
11739 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
11740 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
11741 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
11742 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [18,18,18,18]
11743 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
11744 ; SSE3-NEXT:    retq
11746 ; SSSE3-LABEL: ult_18_v4i32:
11747 ; SSSE3:       # %bb.0:
11748 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11749 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
11750 ; SSSE3-NEXT:    pand %xmm1, %xmm2
11751 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11752 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
11753 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
11754 ; SSSE3-NEXT:    psrlw $4, %xmm0
11755 ; SSSE3-NEXT:    pand %xmm1, %xmm0
11756 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
11757 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
11758 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
11759 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
11760 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
11761 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
11762 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
11763 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
11764 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
11765 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [18,18,18,18]
11766 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
11767 ; SSSE3-NEXT:    retq
11769 ; SSE41-LABEL: ult_18_v4i32:
11770 ; SSE41:       # %bb.0:
11771 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11772 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
11773 ; SSE41-NEXT:    pand %xmm1, %xmm2
11774 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11775 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
11776 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
11777 ; SSE41-NEXT:    psrlw $4, %xmm0
11778 ; SSE41-NEXT:    pand %xmm1, %xmm0
11779 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
11780 ; SSE41-NEXT:    paddb %xmm4, %xmm3
11781 ; SSE41-NEXT:    pxor %xmm0, %xmm0
11782 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
11783 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
11784 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
11785 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
11786 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
11787 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [18,18,18,18]
11788 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
11789 ; SSE41-NEXT:    retq
11791 ; AVX1-LABEL: ult_18_v4i32:
11792 ; AVX1:       # %bb.0:
11793 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11794 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11795 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11796 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
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 %xmm2, %xmm0, %xmm0
11801 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11802 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11803 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11804 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11805 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11806 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11807 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [18,18,18,18]
11808 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11809 ; AVX1-NEXT:    retq
11811 ; AVX2-LABEL: ult_18_v4i32:
11812 ; AVX2:       # %bb.0:
11813 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11814 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
11815 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11816 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11817 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
11818 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
11819 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11820 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11821 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11822 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11823 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11824 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11825 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11826 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11827 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
11828 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11829 ; AVX2-NEXT:    retq
11831 ; AVX512VPOPCNTDQ-LABEL: ult_18_v4i32:
11832 ; AVX512VPOPCNTDQ:       # %bb.0:
11833 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11834 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
11835 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
11836 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11837 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
11838 ; AVX512VPOPCNTDQ-NEXT:    retq
11840 ; AVX512VPOPCNTDQVL-LABEL: ult_18_v4i32:
11841 ; AVX512VPOPCNTDQVL:       # %bb.0:
11842 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
11843 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
11844 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11845 ; AVX512VPOPCNTDQVL-NEXT:    retq
11847 ; BITALG_NOVLX-LABEL: ult_18_v4i32:
11848 ; BITALG_NOVLX:       # %bb.0:
11849 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
11850 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
11851 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11852 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11853 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11854 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11855 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11856 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11857 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
11858 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11859 ; BITALG_NOVLX-NEXT:    vzeroupper
11860 ; BITALG_NOVLX-NEXT:    retq
11862 ; BITALG-LABEL: ult_18_v4i32:
11863 ; BITALG:       # %bb.0:
11864 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
11865 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11866 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11867 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11868 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11869 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11870 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11871 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
11872 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
11873 ; BITALG-NEXT:    retq
11874   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11875   %3 = icmp ult <4 x i32> %2, <i32 18, i32 18, i32 18, i32 18>
11876   %4 = sext <4 x i1> %3 to <4 x i32>
11877   ret <4 x i32> %4
11880 define <4 x i32> @ugt_18_v4i32(<4 x i32> %0) {
11881 ; SSE2-LABEL: ugt_18_v4i32:
11882 ; SSE2:       # %bb.0:
11883 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11884 ; SSE2-NEXT:    psrlw $1, %xmm1
11885 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11886 ; SSE2-NEXT:    psubb %xmm1, %xmm0
11887 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11888 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
11889 ; SSE2-NEXT:    pand %xmm1, %xmm2
11890 ; SSE2-NEXT:    psrlw $2, %xmm0
11891 ; SSE2-NEXT:    pand %xmm1, %xmm0
11892 ; SSE2-NEXT:    paddb %xmm2, %xmm0
11893 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
11894 ; SSE2-NEXT:    psrlw $4, %xmm1
11895 ; SSE2-NEXT:    paddb %xmm1, %xmm0
11896 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11897 ; SSE2-NEXT:    pxor %xmm1, %xmm1
11898 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
11899 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
11900 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
11901 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
11902 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
11903 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
11904 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11905 ; SSE2-NEXT:    retq
11907 ; SSE3-LABEL: ugt_18_v4i32:
11908 ; SSE3:       # %bb.0:
11909 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11910 ; SSE3-NEXT:    psrlw $1, %xmm1
11911 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11912 ; SSE3-NEXT:    psubb %xmm1, %xmm0
11913 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
11914 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
11915 ; SSE3-NEXT:    pand %xmm1, %xmm2
11916 ; SSE3-NEXT:    psrlw $2, %xmm0
11917 ; SSE3-NEXT:    pand %xmm1, %xmm0
11918 ; SSE3-NEXT:    paddb %xmm2, %xmm0
11919 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
11920 ; SSE3-NEXT:    psrlw $4, %xmm1
11921 ; SSE3-NEXT:    paddb %xmm1, %xmm0
11922 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11923 ; SSE3-NEXT:    pxor %xmm1, %xmm1
11924 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
11925 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
11926 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
11927 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
11928 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
11929 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
11930 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11931 ; SSE3-NEXT:    retq
11933 ; SSSE3-LABEL: ugt_18_v4i32:
11934 ; SSSE3:       # %bb.0:
11935 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11936 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
11937 ; SSSE3-NEXT:    pand %xmm2, %xmm3
11938 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11939 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
11940 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
11941 ; SSSE3-NEXT:    psrlw $4, %xmm0
11942 ; SSSE3-NEXT:    pand %xmm2, %xmm0
11943 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
11944 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
11945 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
11946 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
11947 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
11948 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
11949 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
11950 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
11951 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
11952 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
11953 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
11954 ; SSSE3-NEXT:    retq
11956 ; SSE41-LABEL: ugt_18_v4i32:
11957 ; SSE41:       # %bb.0:
11958 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11959 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
11960 ; SSE41-NEXT:    pand %xmm1, %xmm2
11961 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11962 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
11963 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
11964 ; SSE41-NEXT:    psrlw $4, %xmm0
11965 ; SSE41-NEXT:    pand %xmm1, %xmm0
11966 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
11967 ; SSE41-NEXT:    paddb %xmm4, %xmm3
11968 ; SSE41-NEXT:    pxor %xmm1, %xmm1
11969 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
11970 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
11971 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
11972 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
11973 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
11974 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
11975 ; SSE41-NEXT:    retq
11977 ; AVX1-LABEL: ugt_18_v4i32:
11978 ; AVX1:       # %bb.0:
11979 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11980 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
11981 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
11982 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
11983 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
11984 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
11985 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
11986 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
11987 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
11988 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
11989 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
11990 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
11991 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
11992 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
11993 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
11994 ; AVX1-NEXT:    retq
11996 ; AVX2-LABEL: ugt_18_v4i32:
11997 ; AVX2:       # %bb.0:
11998 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
11999 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
12000 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12001 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12002 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
12003 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
12004 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12005 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12006 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12007 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12008 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12009 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12010 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12011 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12012 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
12013 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12014 ; AVX2-NEXT:    retq
12016 ; AVX512VPOPCNTDQ-LABEL: ugt_18_v4i32:
12017 ; AVX512VPOPCNTDQ:       # %bb.0:
12018 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12019 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
12020 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
12021 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12022 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
12023 ; AVX512VPOPCNTDQ-NEXT:    retq
12025 ; AVX512VPOPCNTDQVL-LABEL: ugt_18_v4i32:
12026 ; AVX512VPOPCNTDQVL:       # %bb.0:
12027 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
12028 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
12029 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12030 ; AVX512VPOPCNTDQVL-NEXT:    retq
12032 ; BITALG_NOVLX-LABEL: ugt_18_v4i32:
12033 ; BITALG_NOVLX:       # %bb.0:
12034 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12035 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12036 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12037 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12038 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12039 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12040 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12041 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12042 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
12043 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12044 ; BITALG_NOVLX-NEXT:    vzeroupper
12045 ; BITALG_NOVLX-NEXT:    retq
12047 ; BITALG-LABEL: ugt_18_v4i32:
12048 ; BITALG:       # %bb.0:
12049 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
12050 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12051 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12052 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12053 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12054 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12055 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12056 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [18,18,18,18]
12057 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12058 ; BITALG-NEXT:    retq
12059   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
12060   %3 = icmp ugt <4 x i32> %2, <i32 18, i32 18, i32 18, i32 18>
12061   %4 = sext <4 x i1> %3 to <4 x i32>
12062   ret <4 x i32> %4
12065 define <4 x i32> @ult_19_v4i32(<4 x i32> %0) {
12066 ; SSE2-LABEL: ult_19_v4i32:
12067 ; SSE2:       # %bb.0:
12068 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12069 ; SSE2-NEXT:    psrlw $1, %xmm1
12070 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12071 ; SSE2-NEXT:    psubb %xmm1, %xmm0
12072 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12073 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
12074 ; SSE2-NEXT:    pand %xmm1, %xmm2
12075 ; SSE2-NEXT:    psrlw $2, %xmm0
12076 ; SSE2-NEXT:    pand %xmm1, %xmm0
12077 ; SSE2-NEXT:    paddb %xmm2, %xmm0
12078 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12079 ; SSE2-NEXT:    psrlw $4, %xmm1
12080 ; SSE2-NEXT:    paddb %xmm0, %xmm1
12081 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12082 ; SSE2-NEXT:    pxor %xmm0, %xmm0
12083 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
12084 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
12085 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
12086 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
12087 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
12088 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
12089 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [19,19,19,19]
12090 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
12091 ; SSE2-NEXT:    retq
12093 ; SSE3-LABEL: ult_19_v4i32:
12094 ; SSE3:       # %bb.0:
12095 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12096 ; SSE3-NEXT:    psrlw $1, %xmm1
12097 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12098 ; SSE3-NEXT:    psubb %xmm1, %xmm0
12099 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12100 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
12101 ; SSE3-NEXT:    pand %xmm1, %xmm2
12102 ; SSE3-NEXT:    psrlw $2, %xmm0
12103 ; SSE3-NEXT:    pand %xmm1, %xmm0
12104 ; SSE3-NEXT:    paddb %xmm2, %xmm0
12105 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12106 ; SSE3-NEXT:    psrlw $4, %xmm1
12107 ; SSE3-NEXT:    paddb %xmm0, %xmm1
12108 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12109 ; SSE3-NEXT:    pxor %xmm0, %xmm0
12110 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
12111 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
12112 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
12113 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
12114 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
12115 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
12116 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [19,19,19,19]
12117 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
12118 ; SSE3-NEXT:    retq
12120 ; SSSE3-LABEL: ult_19_v4i32:
12121 ; SSSE3:       # %bb.0:
12122 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12123 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
12124 ; SSSE3-NEXT:    pand %xmm1, %xmm2
12125 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12126 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
12127 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
12128 ; SSSE3-NEXT:    psrlw $4, %xmm0
12129 ; SSSE3-NEXT:    pand %xmm1, %xmm0
12130 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
12131 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
12132 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
12133 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
12134 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
12135 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
12136 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
12137 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
12138 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
12139 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [19,19,19,19]
12140 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
12141 ; SSSE3-NEXT:    retq
12143 ; SSE41-LABEL: ult_19_v4i32:
12144 ; SSE41:       # %bb.0:
12145 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12146 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
12147 ; SSE41-NEXT:    pand %xmm1, %xmm2
12148 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12149 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
12150 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
12151 ; SSE41-NEXT:    psrlw $4, %xmm0
12152 ; SSE41-NEXT:    pand %xmm1, %xmm0
12153 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
12154 ; SSE41-NEXT:    paddb %xmm4, %xmm3
12155 ; SSE41-NEXT:    pxor %xmm0, %xmm0
12156 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
12157 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
12158 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
12159 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
12160 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
12161 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [19,19,19,19]
12162 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
12163 ; SSE41-NEXT:    retq
12165 ; AVX1-LABEL: ult_19_v4i32:
12166 ; AVX1:       # %bb.0:
12167 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12168 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12169 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12170 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12171 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12172 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12173 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12174 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12175 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12176 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12177 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12178 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12179 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12180 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12181 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [19,19,19,19]
12182 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12183 ; AVX1-NEXT:    retq
12185 ; AVX2-LABEL: ult_19_v4i32:
12186 ; AVX2:       # %bb.0:
12187 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12188 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
12189 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12190 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12191 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
12192 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
12193 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12194 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12195 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12196 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12197 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12198 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12199 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12200 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12201 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12202 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12203 ; AVX2-NEXT:    retq
12205 ; AVX512VPOPCNTDQ-LABEL: ult_19_v4i32:
12206 ; AVX512VPOPCNTDQ:       # %bb.0:
12207 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12208 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
12209 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12210 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12211 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
12212 ; AVX512VPOPCNTDQ-NEXT:    retq
12214 ; AVX512VPOPCNTDQVL-LABEL: ult_19_v4i32:
12215 ; AVX512VPOPCNTDQVL:       # %bb.0:
12216 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
12217 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12218 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12219 ; AVX512VPOPCNTDQVL-NEXT:    retq
12221 ; BITALG_NOVLX-LABEL: ult_19_v4i32:
12222 ; BITALG_NOVLX:       # %bb.0:
12223 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12224 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12225 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12226 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12227 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12228 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12229 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12230 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12231 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12232 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12233 ; BITALG_NOVLX-NEXT:    vzeroupper
12234 ; BITALG_NOVLX-NEXT:    retq
12236 ; BITALG-LABEL: ult_19_v4i32:
12237 ; BITALG:       # %bb.0:
12238 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
12239 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12240 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12241 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12242 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12243 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12244 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12245 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12246 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12247 ; BITALG-NEXT:    retq
12248   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
12249   %3 = icmp ult <4 x i32> %2, <i32 19, i32 19, i32 19, i32 19>
12250   %4 = sext <4 x i1> %3 to <4 x i32>
12251   ret <4 x i32> %4
12254 define <4 x i32> @ugt_19_v4i32(<4 x i32> %0) {
12255 ; SSE2-LABEL: ugt_19_v4i32:
12256 ; SSE2:       # %bb.0:
12257 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12258 ; SSE2-NEXT:    psrlw $1, %xmm1
12259 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12260 ; SSE2-NEXT:    psubb %xmm1, %xmm0
12261 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12262 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
12263 ; SSE2-NEXT:    pand %xmm1, %xmm2
12264 ; SSE2-NEXT:    psrlw $2, %xmm0
12265 ; SSE2-NEXT:    pand %xmm1, %xmm0
12266 ; SSE2-NEXT:    paddb %xmm2, %xmm0
12267 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12268 ; SSE2-NEXT:    psrlw $4, %xmm1
12269 ; SSE2-NEXT:    paddb %xmm1, %xmm0
12270 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12271 ; SSE2-NEXT:    pxor %xmm1, %xmm1
12272 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
12273 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
12274 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
12275 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
12276 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
12277 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
12278 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12279 ; SSE2-NEXT:    retq
12281 ; SSE3-LABEL: ugt_19_v4i32:
12282 ; SSE3:       # %bb.0:
12283 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12284 ; SSE3-NEXT:    psrlw $1, %xmm1
12285 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12286 ; SSE3-NEXT:    psubb %xmm1, %xmm0
12287 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12288 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
12289 ; SSE3-NEXT:    pand %xmm1, %xmm2
12290 ; SSE3-NEXT:    psrlw $2, %xmm0
12291 ; SSE3-NEXT:    pand %xmm1, %xmm0
12292 ; SSE3-NEXT:    paddb %xmm2, %xmm0
12293 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12294 ; SSE3-NEXT:    psrlw $4, %xmm1
12295 ; SSE3-NEXT:    paddb %xmm1, %xmm0
12296 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12297 ; SSE3-NEXT:    pxor %xmm1, %xmm1
12298 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
12299 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
12300 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
12301 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
12302 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
12303 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
12304 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12305 ; SSE3-NEXT:    retq
12307 ; SSSE3-LABEL: ugt_19_v4i32:
12308 ; SSSE3:       # %bb.0:
12309 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12310 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
12311 ; SSSE3-NEXT:    pand %xmm2, %xmm3
12312 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12313 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
12314 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
12315 ; SSSE3-NEXT:    psrlw $4, %xmm0
12316 ; SSSE3-NEXT:    pand %xmm2, %xmm0
12317 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
12318 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
12319 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
12320 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
12321 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
12322 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
12323 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
12324 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
12325 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
12326 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12327 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
12328 ; SSSE3-NEXT:    retq
12330 ; SSE41-LABEL: ugt_19_v4i32:
12331 ; SSE41:       # %bb.0:
12332 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12333 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
12334 ; SSE41-NEXT:    pand %xmm1, %xmm2
12335 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12336 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
12337 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
12338 ; SSE41-NEXT:    psrlw $4, %xmm0
12339 ; SSE41-NEXT:    pand %xmm1, %xmm0
12340 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
12341 ; SSE41-NEXT:    paddb %xmm4, %xmm3
12342 ; SSE41-NEXT:    pxor %xmm1, %xmm1
12343 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
12344 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
12345 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
12346 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
12347 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
12348 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12349 ; SSE41-NEXT:    retq
12351 ; AVX1-LABEL: ugt_19_v4i32:
12352 ; AVX1:       # %bb.0:
12353 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12354 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12355 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12356 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12357 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12358 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12359 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12360 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12361 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12362 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12363 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12364 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12365 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12366 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12367 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
12368 ; AVX1-NEXT:    retq
12370 ; AVX2-LABEL: ugt_19_v4i32:
12371 ; AVX2:       # %bb.0:
12372 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12373 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
12374 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12375 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12376 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
12377 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
12378 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12379 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12380 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12381 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12382 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12383 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12384 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12385 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12386 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12387 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12388 ; AVX2-NEXT:    retq
12390 ; AVX512VPOPCNTDQ-LABEL: ugt_19_v4i32:
12391 ; AVX512VPOPCNTDQ:       # %bb.0:
12392 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12393 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
12394 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12395 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12396 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
12397 ; AVX512VPOPCNTDQ-NEXT:    retq
12399 ; AVX512VPOPCNTDQVL-LABEL: ugt_19_v4i32:
12400 ; AVX512VPOPCNTDQVL:       # %bb.0:
12401 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
12402 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12403 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12404 ; AVX512VPOPCNTDQVL-NEXT:    retq
12406 ; BITALG_NOVLX-LABEL: ugt_19_v4i32:
12407 ; BITALG_NOVLX:       # %bb.0:
12408 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12409 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12410 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12411 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12412 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12413 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12414 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12415 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12416 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12417 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12418 ; BITALG_NOVLX-NEXT:    vzeroupper
12419 ; BITALG_NOVLX-NEXT:    retq
12421 ; BITALG-LABEL: ugt_19_v4i32:
12422 ; BITALG:       # %bb.0:
12423 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
12424 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12425 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12426 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12427 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12428 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12429 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12430 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [19,19,19,19]
12431 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12432 ; BITALG-NEXT:    retq
12433   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
12434   %3 = icmp ugt <4 x i32> %2, <i32 19, i32 19, i32 19, i32 19>
12435   %4 = sext <4 x i1> %3 to <4 x i32>
12436   ret <4 x i32> %4
12439 define <4 x i32> @ult_20_v4i32(<4 x i32> %0) {
12440 ; SSE2-LABEL: ult_20_v4i32:
12441 ; SSE2:       # %bb.0:
12442 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12443 ; SSE2-NEXT:    psrlw $1, %xmm1
12444 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12445 ; SSE2-NEXT:    psubb %xmm1, %xmm0
12446 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12447 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
12448 ; SSE2-NEXT:    pand %xmm1, %xmm2
12449 ; SSE2-NEXT:    psrlw $2, %xmm0
12450 ; SSE2-NEXT:    pand %xmm1, %xmm0
12451 ; SSE2-NEXT:    paddb %xmm2, %xmm0
12452 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12453 ; SSE2-NEXT:    psrlw $4, %xmm1
12454 ; SSE2-NEXT:    paddb %xmm0, %xmm1
12455 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12456 ; SSE2-NEXT:    pxor %xmm0, %xmm0
12457 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
12458 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
12459 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
12460 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
12461 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
12462 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
12463 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [20,20,20,20]
12464 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
12465 ; SSE2-NEXT:    retq
12467 ; SSE3-LABEL: ult_20_v4i32:
12468 ; SSE3:       # %bb.0:
12469 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12470 ; SSE3-NEXT:    psrlw $1, %xmm1
12471 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12472 ; SSE3-NEXT:    psubb %xmm1, %xmm0
12473 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12474 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
12475 ; SSE3-NEXT:    pand %xmm1, %xmm2
12476 ; SSE3-NEXT:    psrlw $2, %xmm0
12477 ; SSE3-NEXT:    pand %xmm1, %xmm0
12478 ; SSE3-NEXT:    paddb %xmm2, %xmm0
12479 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12480 ; SSE3-NEXT:    psrlw $4, %xmm1
12481 ; SSE3-NEXT:    paddb %xmm0, %xmm1
12482 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12483 ; SSE3-NEXT:    pxor %xmm0, %xmm0
12484 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
12485 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
12486 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
12487 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
12488 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
12489 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
12490 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [20,20,20,20]
12491 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
12492 ; SSE3-NEXT:    retq
12494 ; SSSE3-LABEL: ult_20_v4i32:
12495 ; SSSE3:       # %bb.0:
12496 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12497 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
12498 ; SSSE3-NEXT:    pand %xmm1, %xmm2
12499 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12500 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
12501 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
12502 ; SSSE3-NEXT:    psrlw $4, %xmm0
12503 ; SSSE3-NEXT:    pand %xmm1, %xmm0
12504 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
12505 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
12506 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
12507 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
12508 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
12509 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
12510 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
12511 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
12512 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
12513 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [20,20,20,20]
12514 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
12515 ; SSSE3-NEXT:    retq
12517 ; SSE41-LABEL: ult_20_v4i32:
12518 ; SSE41:       # %bb.0:
12519 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12520 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
12521 ; SSE41-NEXT:    pand %xmm1, %xmm2
12522 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12523 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
12524 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
12525 ; SSE41-NEXT:    psrlw $4, %xmm0
12526 ; SSE41-NEXT:    pand %xmm1, %xmm0
12527 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
12528 ; SSE41-NEXT:    paddb %xmm4, %xmm3
12529 ; SSE41-NEXT:    pxor %xmm0, %xmm0
12530 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
12531 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
12532 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
12533 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
12534 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
12535 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [20,20,20,20]
12536 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
12537 ; SSE41-NEXT:    retq
12539 ; AVX1-LABEL: ult_20_v4i32:
12540 ; AVX1:       # %bb.0:
12541 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12542 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12543 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12544 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12545 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12546 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12547 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12548 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12549 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12550 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12551 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12552 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12553 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12554 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12555 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [20,20,20,20]
12556 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12557 ; AVX1-NEXT:    retq
12559 ; AVX2-LABEL: ult_20_v4i32:
12560 ; AVX2:       # %bb.0:
12561 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12562 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
12563 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12564 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12565 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
12566 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
12567 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12568 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12569 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12570 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12571 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12572 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12573 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12574 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12575 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12576 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12577 ; AVX2-NEXT:    retq
12579 ; AVX512VPOPCNTDQ-LABEL: ult_20_v4i32:
12580 ; AVX512VPOPCNTDQ:       # %bb.0:
12581 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12582 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
12583 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12584 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12585 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
12586 ; AVX512VPOPCNTDQ-NEXT:    retq
12588 ; AVX512VPOPCNTDQVL-LABEL: ult_20_v4i32:
12589 ; AVX512VPOPCNTDQVL:       # %bb.0:
12590 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
12591 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12592 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12593 ; AVX512VPOPCNTDQVL-NEXT:    retq
12595 ; BITALG_NOVLX-LABEL: ult_20_v4i32:
12596 ; BITALG_NOVLX:       # %bb.0:
12597 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12598 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12599 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12600 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12601 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12602 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12603 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12604 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12605 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12606 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12607 ; BITALG_NOVLX-NEXT:    vzeroupper
12608 ; BITALG_NOVLX-NEXT:    retq
12610 ; BITALG-LABEL: ult_20_v4i32:
12611 ; BITALG:       # %bb.0:
12612 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
12613 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12614 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12615 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12616 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12617 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12618 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12619 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12620 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12621 ; BITALG-NEXT:    retq
12622   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
12623   %3 = icmp ult <4 x i32> %2, <i32 20, i32 20, i32 20, i32 20>
12624   %4 = sext <4 x i1> %3 to <4 x i32>
12625   ret <4 x i32> %4
12628 define <4 x i32> @ugt_20_v4i32(<4 x i32> %0) {
12629 ; SSE2-LABEL: ugt_20_v4i32:
12630 ; SSE2:       # %bb.0:
12631 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12632 ; SSE2-NEXT:    psrlw $1, %xmm1
12633 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12634 ; SSE2-NEXT:    psubb %xmm1, %xmm0
12635 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12636 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
12637 ; SSE2-NEXT:    pand %xmm1, %xmm2
12638 ; SSE2-NEXT:    psrlw $2, %xmm0
12639 ; SSE2-NEXT:    pand %xmm1, %xmm0
12640 ; SSE2-NEXT:    paddb %xmm2, %xmm0
12641 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12642 ; SSE2-NEXT:    psrlw $4, %xmm1
12643 ; SSE2-NEXT:    paddb %xmm1, %xmm0
12644 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12645 ; SSE2-NEXT:    pxor %xmm1, %xmm1
12646 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
12647 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
12648 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
12649 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
12650 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
12651 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
12652 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12653 ; SSE2-NEXT:    retq
12655 ; SSE3-LABEL: ugt_20_v4i32:
12656 ; SSE3:       # %bb.0:
12657 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12658 ; SSE3-NEXT:    psrlw $1, %xmm1
12659 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12660 ; SSE3-NEXT:    psubb %xmm1, %xmm0
12661 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12662 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
12663 ; SSE3-NEXT:    pand %xmm1, %xmm2
12664 ; SSE3-NEXT:    psrlw $2, %xmm0
12665 ; SSE3-NEXT:    pand %xmm1, %xmm0
12666 ; SSE3-NEXT:    paddb %xmm2, %xmm0
12667 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12668 ; SSE3-NEXT:    psrlw $4, %xmm1
12669 ; SSE3-NEXT:    paddb %xmm1, %xmm0
12670 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12671 ; SSE3-NEXT:    pxor %xmm1, %xmm1
12672 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
12673 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
12674 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
12675 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
12676 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
12677 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
12678 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12679 ; SSE3-NEXT:    retq
12681 ; SSSE3-LABEL: ugt_20_v4i32:
12682 ; SSSE3:       # %bb.0:
12683 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12684 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
12685 ; SSSE3-NEXT:    pand %xmm2, %xmm3
12686 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12687 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
12688 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
12689 ; SSSE3-NEXT:    psrlw $4, %xmm0
12690 ; SSSE3-NEXT:    pand %xmm2, %xmm0
12691 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
12692 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
12693 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
12694 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
12695 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
12696 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
12697 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
12698 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
12699 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
12700 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12701 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
12702 ; SSSE3-NEXT:    retq
12704 ; SSE41-LABEL: ugt_20_v4i32:
12705 ; SSE41:       # %bb.0:
12706 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12707 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
12708 ; SSE41-NEXT:    pand %xmm1, %xmm2
12709 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12710 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
12711 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
12712 ; SSE41-NEXT:    psrlw $4, %xmm0
12713 ; SSE41-NEXT:    pand %xmm1, %xmm0
12714 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
12715 ; SSE41-NEXT:    paddb %xmm4, %xmm3
12716 ; SSE41-NEXT:    pxor %xmm1, %xmm1
12717 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
12718 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
12719 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
12720 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
12721 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
12722 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
12723 ; SSE41-NEXT:    retq
12725 ; AVX1-LABEL: ugt_20_v4i32:
12726 ; AVX1:       # %bb.0:
12727 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12728 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12729 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12730 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12731 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12732 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12733 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12734 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12735 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12736 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12737 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12738 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12739 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12740 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12741 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
12742 ; AVX1-NEXT:    retq
12744 ; AVX2-LABEL: ugt_20_v4i32:
12745 ; AVX2:       # %bb.0:
12746 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12747 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
12748 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12749 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12750 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
12751 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
12752 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12753 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12754 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12755 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12756 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12757 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12758 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12759 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12760 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12761 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12762 ; AVX2-NEXT:    retq
12764 ; AVX512VPOPCNTDQ-LABEL: ugt_20_v4i32:
12765 ; AVX512VPOPCNTDQ:       # %bb.0:
12766 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12767 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
12768 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12769 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12770 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
12771 ; AVX512VPOPCNTDQ-NEXT:    retq
12773 ; AVX512VPOPCNTDQVL-LABEL: ugt_20_v4i32:
12774 ; AVX512VPOPCNTDQVL:       # %bb.0:
12775 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
12776 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12777 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12778 ; AVX512VPOPCNTDQVL-NEXT:    retq
12780 ; BITALG_NOVLX-LABEL: ugt_20_v4i32:
12781 ; BITALG_NOVLX:       # %bb.0:
12782 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12783 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12784 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12785 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12786 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12787 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12788 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12789 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12790 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12791 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12792 ; BITALG_NOVLX-NEXT:    vzeroupper
12793 ; BITALG_NOVLX-NEXT:    retq
12795 ; BITALG-LABEL: ugt_20_v4i32:
12796 ; BITALG:       # %bb.0:
12797 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
12798 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12799 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12800 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12801 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12802 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12803 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12804 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [20,20,20,20]
12805 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
12806 ; BITALG-NEXT:    retq
12807   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
12808   %3 = icmp ugt <4 x i32> %2, <i32 20, i32 20, i32 20, i32 20>
12809   %4 = sext <4 x i1> %3 to <4 x i32>
12810   ret <4 x i32> %4
12813 define <4 x i32> @ult_21_v4i32(<4 x i32> %0) {
12814 ; SSE2-LABEL: ult_21_v4i32:
12815 ; SSE2:       # %bb.0:
12816 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12817 ; SSE2-NEXT:    psrlw $1, %xmm1
12818 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12819 ; SSE2-NEXT:    psubb %xmm1, %xmm0
12820 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12821 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
12822 ; SSE2-NEXT:    pand %xmm1, %xmm2
12823 ; SSE2-NEXT:    psrlw $2, %xmm0
12824 ; SSE2-NEXT:    pand %xmm1, %xmm0
12825 ; SSE2-NEXT:    paddb %xmm2, %xmm0
12826 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
12827 ; SSE2-NEXT:    psrlw $4, %xmm1
12828 ; SSE2-NEXT:    paddb %xmm0, %xmm1
12829 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12830 ; SSE2-NEXT:    pxor %xmm0, %xmm0
12831 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
12832 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
12833 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
12834 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
12835 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
12836 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
12837 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [21,21,21,21]
12838 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
12839 ; SSE2-NEXT:    retq
12841 ; SSE3-LABEL: ult_21_v4i32:
12842 ; SSE3:       # %bb.0:
12843 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12844 ; SSE3-NEXT:    psrlw $1, %xmm1
12845 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12846 ; SSE3-NEXT:    psubb %xmm1, %xmm0
12847 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
12848 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
12849 ; SSE3-NEXT:    pand %xmm1, %xmm2
12850 ; SSE3-NEXT:    psrlw $2, %xmm0
12851 ; SSE3-NEXT:    pand %xmm1, %xmm0
12852 ; SSE3-NEXT:    paddb %xmm2, %xmm0
12853 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
12854 ; SSE3-NEXT:    psrlw $4, %xmm1
12855 ; SSE3-NEXT:    paddb %xmm0, %xmm1
12856 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
12857 ; SSE3-NEXT:    pxor %xmm0, %xmm0
12858 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
12859 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
12860 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
12861 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
12862 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
12863 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
12864 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [21,21,21,21]
12865 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
12866 ; SSE3-NEXT:    retq
12868 ; SSSE3-LABEL: ult_21_v4i32:
12869 ; SSSE3:       # %bb.0:
12870 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12871 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
12872 ; SSSE3-NEXT:    pand %xmm1, %xmm2
12873 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12874 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
12875 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
12876 ; SSSE3-NEXT:    psrlw $4, %xmm0
12877 ; SSSE3-NEXT:    pand %xmm1, %xmm0
12878 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
12879 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
12880 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
12881 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
12882 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
12883 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
12884 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
12885 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
12886 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
12887 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [21,21,21,21]
12888 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
12889 ; SSSE3-NEXT:    retq
12891 ; SSE41-LABEL: ult_21_v4i32:
12892 ; SSE41:       # %bb.0:
12893 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12894 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
12895 ; SSE41-NEXT:    pand %xmm1, %xmm2
12896 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12897 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
12898 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
12899 ; SSE41-NEXT:    psrlw $4, %xmm0
12900 ; SSE41-NEXT:    pand %xmm1, %xmm0
12901 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
12902 ; SSE41-NEXT:    paddb %xmm4, %xmm3
12903 ; SSE41-NEXT:    pxor %xmm0, %xmm0
12904 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
12905 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
12906 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
12907 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
12908 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
12909 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [21,21,21,21]
12910 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
12911 ; SSE41-NEXT:    retq
12913 ; AVX1-LABEL: ult_21_v4i32:
12914 ; AVX1:       # %bb.0:
12915 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12916 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
12917 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12918 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12919 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
12920 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
12921 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12922 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12923 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12924 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12925 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12926 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12927 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12928 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12929 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [21,21,21,21]
12930 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12931 ; AVX1-NEXT:    retq
12933 ; AVX2-LABEL: ult_21_v4i32:
12934 ; AVX2:       # %bb.0:
12935 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
12936 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
12937 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
12938 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
12939 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
12940 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
12941 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
12942 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
12943 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12944 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12945 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12946 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12947 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12948 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12949 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
12950 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12951 ; AVX2-NEXT:    retq
12953 ; AVX512VPOPCNTDQ-LABEL: ult_21_v4i32:
12954 ; AVX512VPOPCNTDQ:       # %bb.0:
12955 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12956 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
12957 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
12958 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12959 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
12960 ; AVX512VPOPCNTDQ-NEXT:    retq
12962 ; AVX512VPOPCNTDQVL-LABEL: ult_21_v4i32:
12963 ; AVX512VPOPCNTDQVL:       # %bb.0:
12964 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
12965 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
12966 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12967 ; AVX512VPOPCNTDQVL-NEXT:    retq
12969 ; BITALG_NOVLX-LABEL: ult_21_v4i32:
12970 ; BITALG_NOVLX:       # %bb.0:
12971 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
12972 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
12973 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12974 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12975 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12976 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12977 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12978 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12979 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
12980 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12981 ; BITALG_NOVLX-NEXT:    vzeroupper
12982 ; BITALG_NOVLX-NEXT:    retq
12984 ; BITALG-LABEL: ult_21_v4i32:
12985 ; BITALG:       # %bb.0:
12986 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
12987 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
12988 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
12989 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
12990 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
12991 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
12992 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
12993 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
12994 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
12995 ; BITALG-NEXT:    retq
12996   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
12997   %3 = icmp ult <4 x i32> %2, <i32 21, i32 21, i32 21, i32 21>
12998   %4 = sext <4 x i1> %3 to <4 x i32>
12999   ret <4 x i32> %4
13002 define <4 x i32> @ugt_21_v4i32(<4 x i32> %0) {
13003 ; SSE2-LABEL: ugt_21_v4i32:
13004 ; SSE2:       # %bb.0:
13005 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13006 ; SSE2-NEXT:    psrlw $1, %xmm1
13007 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13008 ; SSE2-NEXT:    psubb %xmm1, %xmm0
13009 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13010 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13011 ; SSE2-NEXT:    pand %xmm1, %xmm2
13012 ; SSE2-NEXT:    psrlw $2, %xmm0
13013 ; SSE2-NEXT:    pand %xmm1, %xmm0
13014 ; SSE2-NEXT:    paddb %xmm2, %xmm0
13015 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13016 ; SSE2-NEXT:    psrlw $4, %xmm1
13017 ; SSE2-NEXT:    paddb %xmm1, %xmm0
13018 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13019 ; SSE2-NEXT:    pxor %xmm1, %xmm1
13020 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13021 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
13022 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
13023 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
13024 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
13025 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
13026 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13027 ; SSE2-NEXT:    retq
13029 ; SSE3-LABEL: ugt_21_v4i32:
13030 ; SSE3:       # %bb.0:
13031 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13032 ; SSE3-NEXT:    psrlw $1, %xmm1
13033 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13034 ; SSE3-NEXT:    psubb %xmm1, %xmm0
13035 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13036 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13037 ; SSE3-NEXT:    pand %xmm1, %xmm2
13038 ; SSE3-NEXT:    psrlw $2, %xmm0
13039 ; SSE3-NEXT:    pand %xmm1, %xmm0
13040 ; SSE3-NEXT:    paddb %xmm2, %xmm0
13041 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13042 ; SSE3-NEXT:    psrlw $4, %xmm1
13043 ; SSE3-NEXT:    paddb %xmm1, %xmm0
13044 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13045 ; SSE3-NEXT:    pxor %xmm1, %xmm1
13046 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13047 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
13048 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
13049 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
13050 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
13051 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
13052 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13053 ; SSE3-NEXT:    retq
13055 ; SSSE3-LABEL: ugt_21_v4i32:
13056 ; SSSE3:       # %bb.0:
13057 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13058 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
13059 ; SSSE3-NEXT:    pand %xmm2, %xmm3
13060 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13061 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
13062 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
13063 ; SSSE3-NEXT:    psrlw $4, %xmm0
13064 ; SSSE3-NEXT:    pand %xmm2, %xmm0
13065 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
13066 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
13067 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
13068 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
13069 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13070 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
13071 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13072 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
13073 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
13074 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13075 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
13076 ; SSSE3-NEXT:    retq
13078 ; SSE41-LABEL: ugt_21_v4i32:
13079 ; SSE41:       # %bb.0:
13080 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13081 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
13082 ; SSE41-NEXT:    pand %xmm1, %xmm2
13083 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13084 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
13085 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
13086 ; SSE41-NEXT:    psrlw $4, %xmm0
13087 ; SSE41-NEXT:    pand %xmm1, %xmm0
13088 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
13089 ; SSE41-NEXT:    paddb %xmm4, %xmm3
13090 ; SSE41-NEXT:    pxor %xmm1, %xmm1
13091 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
13092 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
13093 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
13094 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
13095 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
13096 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13097 ; SSE41-NEXT:    retq
13099 ; AVX1-LABEL: ugt_21_v4i32:
13100 ; AVX1:       # %bb.0:
13101 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13102 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13103 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13104 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13105 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13106 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13107 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13108 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13109 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13110 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13111 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13112 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13113 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13114 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13115 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
13116 ; AVX1-NEXT:    retq
13118 ; AVX2-LABEL: ugt_21_v4i32:
13119 ; AVX2:       # %bb.0:
13120 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13121 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
13122 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13123 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13124 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
13125 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
13126 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13127 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13128 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13129 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13130 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13131 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13132 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13133 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13134 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
13135 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13136 ; AVX2-NEXT:    retq
13138 ; AVX512VPOPCNTDQ-LABEL: ugt_21_v4i32:
13139 ; AVX512VPOPCNTDQ:       # %bb.0:
13140 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13141 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
13142 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
13143 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13144 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
13145 ; AVX512VPOPCNTDQ-NEXT:    retq
13147 ; AVX512VPOPCNTDQVL-LABEL: ugt_21_v4i32:
13148 ; AVX512VPOPCNTDQVL:       # %bb.0:
13149 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
13150 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
13151 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13152 ; AVX512VPOPCNTDQVL-NEXT:    retq
13154 ; BITALG_NOVLX-LABEL: ugt_21_v4i32:
13155 ; BITALG_NOVLX:       # %bb.0:
13156 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13157 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13158 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13159 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13160 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13161 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13162 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13163 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13164 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
13165 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13166 ; BITALG_NOVLX-NEXT:    vzeroupper
13167 ; BITALG_NOVLX-NEXT:    retq
13169 ; BITALG-LABEL: ugt_21_v4i32:
13170 ; BITALG:       # %bb.0:
13171 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
13172 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13173 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13174 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13175 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13176 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13177 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13178 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [21,21,21,21]
13179 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13180 ; BITALG-NEXT:    retq
13181   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
13182   %3 = icmp ugt <4 x i32> %2, <i32 21, i32 21, i32 21, i32 21>
13183   %4 = sext <4 x i1> %3 to <4 x i32>
13184   ret <4 x i32> %4
13187 define <4 x i32> @ult_22_v4i32(<4 x i32> %0) {
13188 ; SSE2-LABEL: ult_22_v4i32:
13189 ; SSE2:       # %bb.0:
13190 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13191 ; SSE2-NEXT:    psrlw $1, %xmm1
13192 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13193 ; SSE2-NEXT:    psubb %xmm1, %xmm0
13194 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13195 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13196 ; SSE2-NEXT:    pand %xmm1, %xmm2
13197 ; SSE2-NEXT:    psrlw $2, %xmm0
13198 ; SSE2-NEXT:    pand %xmm1, %xmm0
13199 ; SSE2-NEXT:    paddb %xmm2, %xmm0
13200 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13201 ; SSE2-NEXT:    psrlw $4, %xmm1
13202 ; SSE2-NEXT:    paddb %xmm0, %xmm1
13203 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13204 ; SSE2-NEXT:    pxor %xmm0, %xmm0
13205 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
13206 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13207 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
13208 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13209 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
13210 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
13211 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [22,22,22,22]
13212 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
13213 ; SSE2-NEXT:    retq
13215 ; SSE3-LABEL: ult_22_v4i32:
13216 ; SSE3:       # %bb.0:
13217 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13218 ; SSE3-NEXT:    psrlw $1, %xmm1
13219 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13220 ; SSE3-NEXT:    psubb %xmm1, %xmm0
13221 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13222 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13223 ; SSE3-NEXT:    pand %xmm1, %xmm2
13224 ; SSE3-NEXT:    psrlw $2, %xmm0
13225 ; SSE3-NEXT:    pand %xmm1, %xmm0
13226 ; SSE3-NEXT:    paddb %xmm2, %xmm0
13227 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13228 ; SSE3-NEXT:    psrlw $4, %xmm1
13229 ; SSE3-NEXT:    paddb %xmm0, %xmm1
13230 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13231 ; SSE3-NEXT:    pxor %xmm0, %xmm0
13232 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
13233 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13234 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
13235 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13236 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
13237 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
13238 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [22,22,22,22]
13239 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
13240 ; SSE3-NEXT:    retq
13242 ; SSSE3-LABEL: ult_22_v4i32:
13243 ; SSSE3:       # %bb.0:
13244 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13245 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
13246 ; SSSE3-NEXT:    pand %xmm1, %xmm2
13247 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13248 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
13249 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
13250 ; SSSE3-NEXT:    psrlw $4, %xmm0
13251 ; SSSE3-NEXT:    pand %xmm1, %xmm0
13252 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
13253 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
13254 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
13255 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
13256 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
13257 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
13258 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
13259 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
13260 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
13261 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [22,22,22,22]
13262 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
13263 ; SSSE3-NEXT:    retq
13265 ; SSE41-LABEL: ult_22_v4i32:
13266 ; SSE41:       # %bb.0:
13267 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13268 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
13269 ; SSE41-NEXT:    pand %xmm1, %xmm2
13270 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13271 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
13272 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
13273 ; SSE41-NEXT:    psrlw $4, %xmm0
13274 ; SSE41-NEXT:    pand %xmm1, %xmm0
13275 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
13276 ; SSE41-NEXT:    paddb %xmm4, %xmm3
13277 ; SSE41-NEXT:    pxor %xmm0, %xmm0
13278 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
13279 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
13280 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
13281 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
13282 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
13283 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [22,22,22,22]
13284 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
13285 ; SSE41-NEXT:    retq
13287 ; AVX1-LABEL: ult_22_v4i32:
13288 ; AVX1:       # %bb.0:
13289 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13290 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13291 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13292 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13293 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13294 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13295 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13296 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13297 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13298 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13299 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13300 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13301 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13302 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13303 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [22,22,22,22]
13304 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13305 ; AVX1-NEXT:    retq
13307 ; AVX2-LABEL: ult_22_v4i32:
13308 ; AVX2:       # %bb.0:
13309 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13310 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
13311 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13312 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13313 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
13314 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
13315 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13316 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13317 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13318 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13319 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13320 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13321 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13322 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13323 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13324 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13325 ; AVX2-NEXT:    retq
13327 ; AVX512VPOPCNTDQ-LABEL: ult_22_v4i32:
13328 ; AVX512VPOPCNTDQ:       # %bb.0:
13329 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13330 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
13331 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13332 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13333 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
13334 ; AVX512VPOPCNTDQ-NEXT:    retq
13336 ; AVX512VPOPCNTDQVL-LABEL: ult_22_v4i32:
13337 ; AVX512VPOPCNTDQVL:       # %bb.0:
13338 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
13339 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13340 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13341 ; AVX512VPOPCNTDQVL-NEXT:    retq
13343 ; BITALG_NOVLX-LABEL: ult_22_v4i32:
13344 ; BITALG_NOVLX:       # %bb.0:
13345 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13346 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13347 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13348 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13349 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13350 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13351 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13352 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13353 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13354 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13355 ; BITALG_NOVLX-NEXT:    vzeroupper
13356 ; BITALG_NOVLX-NEXT:    retq
13358 ; BITALG-LABEL: ult_22_v4i32:
13359 ; BITALG:       # %bb.0:
13360 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
13361 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13362 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13363 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13364 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13365 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13366 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13367 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13368 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13369 ; BITALG-NEXT:    retq
13370   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
13371   %3 = icmp ult <4 x i32> %2, <i32 22, i32 22, i32 22, i32 22>
13372   %4 = sext <4 x i1> %3 to <4 x i32>
13373   ret <4 x i32> %4
13376 define <4 x i32> @ugt_22_v4i32(<4 x i32> %0) {
13377 ; SSE2-LABEL: ugt_22_v4i32:
13378 ; SSE2:       # %bb.0:
13379 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13380 ; SSE2-NEXT:    psrlw $1, %xmm1
13381 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13382 ; SSE2-NEXT:    psubb %xmm1, %xmm0
13383 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13384 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13385 ; SSE2-NEXT:    pand %xmm1, %xmm2
13386 ; SSE2-NEXT:    psrlw $2, %xmm0
13387 ; SSE2-NEXT:    pand %xmm1, %xmm0
13388 ; SSE2-NEXT:    paddb %xmm2, %xmm0
13389 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13390 ; SSE2-NEXT:    psrlw $4, %xmm1
13391 ; SSE2-NEXT:    paddb %xmm1, %xmm0
13392 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13393 ; SSE2-NEXT:    pxor %xmm1, %xmm1
13394 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13395 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
13396 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
13397 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
13398 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
13399 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
13400 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13401 ; SSE2-NEXT:    retq
13403 ; SSE3-LABEL: ugt_22_v4i32:
13404 ; SSE3:       # %bb.0:
13405 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13406 ; SSE3-NEXT:    psrlw $1, %xmm1
13407 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13408 ; SSE3-NEXT:    psubb %xmm1, %xmm0
13409 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13410 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13411 ; SSE3-NEXT:    pand %xmm1, %xmm2
13412 ; SSE3-NEXT:    psrlw $2, %xmm0
13413 ; SSE3-NEXT:    pand %xmm1, %xmm0
13414 ; SSE3-NEXT:    paddb %xmm2, %xmm0
13415 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13416 ; SSE3-NEXT:    psrlw $4, %xmm1
13417 ; SSE3-NEXT:    paddb %xmm1, %xmm0
13418 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13419 ; SSE3-NEXT:    pxor %xmm1, %xmm1
13420 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13421 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
13422 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
13423 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
13424 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
13425 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
13426 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13427 ; SSE3-NEXT:    retq
13429 ; SSSE3-LABEL: ugt_22_v4i32:
13430 ; SSSE3:       # %bb.0:
13431 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13432 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
13433 ; SSSE3-NEXT:    pand %xmm2, %xmm3
13434 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13435 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
13436 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
13437 ; SSSE3-NEXT:    psrlw $4, %xmm0
13438 ; SSSE3-NEXT:    pand %xmm2, %xmm0
13439 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
13440 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
13441 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
13442 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
13443 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13444 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
13445 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13446 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
13447 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
13448 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13449 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
13450 ; SSSE3-NEXT:    retq
13452 ; SSE41-LABEL: ugt_22_v4i32:
13453 ; SSE41:       # %bb.0:
13454 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13455 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
13456 ; SSE41-NEXT:    pand %xmm1, %xmm2
13457 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13458 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
13459 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
13460 ; SSE41-NEXT:    psrlw $4, %xmm0
13461 ; SSE41-NEXT:    pand %xmm1, %xmm0
13462 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
13463 ; SSE41-NEXT:    paddb %xmm4, %xmm3
13464 ; SSE41-NEXT:    pxor %xmm1, %xmm1
13465 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
13466 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
13467 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
13468 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
13469 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
13470 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13471 ; SSE41-NEXT:    retq
13473 ; AVX1-LABEL: ugt_22_v4i32:
13474 ; AVX1:       # %bb.0:
13475 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13476 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13477 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13478 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13479 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13480 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13481 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13482 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13483 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13484 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13485 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13486 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13487 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13488 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13489 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
13490 ; AVX1-NEXT:    retq
13492 ; AVX2-LABEL: ugt_22_v4i32:
13493 ; AVX2:       # %bb.0:
13494 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13495 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
13496 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13497 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13498 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
13499 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
13500 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13501 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13502 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13503 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13504 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13505 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13506 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13507 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13508 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13509 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13510 ; AVX2-NEXT:    retq
13512 ; AVX512VPOPCNTDQ-LABEL: ugt_22_v4i32:
13513 ; AVX512VPOPCNTDQ:       # %bb.0:
13514 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13515 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
13516 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13517 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13518 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
13519 ; AVX512VPOPCNTDQ-NEXT:    retq
13521 ; AVX512VPOPCNTDQVL-LABEL: ugt_22_v4i32:
13522 ; AVX512VPOPCNTDQVL:       # %bb.0:
13523 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
13524 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13525 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13526 ; AVX512VPOPCNTDQVL-NEXT:    retq
13528 ; BITALG_NOVLX-LABEL: ugt_22_v4i32:
13529 ; BITALG_NOVLX:       # %bb.0:
13530 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13531 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13532 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13533 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13534 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13535 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13536 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13537 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13538 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13539 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13540 ; BITALG_NOVLX-NEXT:    vzeroupper
13541 ; BITALG_NOVLX-NEXT:    retq
13543 ; BITALG-LABEL: ugt_22_v4i32:
13544 ; BITALG:       # %bb.0:
13545 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
13546 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13547 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13548 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13549 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13550 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13551 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13552 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [22,22,22,22]
13553 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13554 ; BITALG-NEXT:    retq
13555   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
13556   %3 = icmp ugt <4 x i32> %2, <i32 22, i32 22, i32 22, i32 22>
13557   %4 = sext <4 x i1> %3 to <4 x i32>
13558   ret <4 x i32> %4
13561 define <4 x i32> @ult_23_v4i32(<4 x i32> %0) {
13562 ; SSE2-LABEL: ult_23_v4i32:
13563 ; SSE2:       # %bb.0:
13564 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13565 ; SSE2-NEXT:    psrlw $1, %xmm1
13566 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13567 ; SSE2-NEXT:    psubb %xmm1, %xmm0
13568 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13569 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13570 ; SSE2-NEXT:    pand %xmm1, %xmm2
13571 ; SSE2-NEXT:    psrlw $2, %xmm0
13572 ; SSE2-NEXT:    pand %xmm1, %xmm0
13573 ; SSE2-NEXT:    paddb %xmm2, %xmm0
13574 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13575 ; SSE2-NEXT:    psrlw $4, %xmm1
13576 ; SSE2-NEXT:    paddb %xmm0, %xmm1
13577 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13578 ; SSE2-NEXT:    pxor %xmm0, %xmm0
13579 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
13580 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13581 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
13582 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13583 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
13584 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
13585 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [23,23,23,23]
13586 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
13587 ; SSE2-NEXT:    retq
13589 ; SSE3-LABEL: ult_23_v4i32:
13590 ; SSE3:       # %bb.0:
13591 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13592 ; SSE3-NEXT:    psrlw $1, %xmm1
13593 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13594 ; SSE3-NEXT:    psubb %xmm1, %xmm0
13595 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13596 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13597 ; SSE3-NEXT:    pand %xmm1, %xmm2
13598 ; SSE3-NEXT:    psrlw $2, %xmm0
13599 ; SSE3-NEXT:    pand %xmm1, %xmm0
13600 ; SSE3-NEXT:    paddb %xmm2, %xmm0
13601 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13602 ; SSE3-NEXT:    psrlw $4, %xmm1
13603 ; SSE3-NEXT:    paddb %xmm0, %xmm1
13604 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13605 ; SSE3-NEXT:    pxor %xmm0, %xmm0
13606 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
13607 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13608 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
13609 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13610 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
13611 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
13612 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [23,23,23,23]
13613 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
13614 ; SSE3-NEXT:    retq
13616 ; SSSE3-LABEL: ult_23_v4i32:
13617 ; SSSE3:       # %bb.0:
13618 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13619 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
13620 ; SSSE3-NEXT:    pand %xmm1, %xmm2
13621 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13622 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
13623 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
13624 ; SSSE3-NEXT:    psrlw $4, %xmm0
13625 ; SSSE3-NEXT:    pand %xmm1, %xmm0
13626 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
13627 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
13628 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
13629 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
13630 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
13631 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
13632 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
13633 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
13634 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
13635 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [23,23,23,23]
13636 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
13637 ; SSSE3-NEXT:    retq
13639 ; SSE41-LABEL: ult_23_v4i32:
13640 ; SSE41:       # %bb.0:
13641 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13642 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
13643 ; SSE41-NEXT:    pand %xmm1, %xmm2
13644 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13645 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
13646 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
13647 ; SSE41-NEXT:    psrlw $4, %xmm0
13648 ; SSE41-NEXT:    pand %xmm1, %xmm0
13649 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
13650 ; SSE41-NEXT:    paddb %xmm4, %xmm3
13651 ; SSE41-NEXT:    pxor %xmm0, %xmm0
13652 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
13653 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
13654 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
13655 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
13656 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
13657 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [23,23,23,23]
13658 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
13659 ; SSE41-NEXT:    retq
13661 ; AVX1-LABEL: ult_23_v4i32:
13662 ; AVX1:       # %bb.0:
13663 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13664 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13665 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13666 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13667 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13668 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13669 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13670 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13671 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13672 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13673 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13674 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13675 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13676 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13677 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [23,23,23,23]
13678 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13679 ; AVX1-NEXT:    retq
13681 ; AVX2-LABEL: ult_23_v4i32:
13682 ; AVX2:       # %bb.0:
13683 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13684 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
13685 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13686 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13687 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
13688 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
13689 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13690 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13691 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13692 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13693 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13694 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13695 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13696 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13697 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13698 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13699 ; AVX2-NEXT:    retq
13701 ; AVX512VPOPCNTDQ-LABEL: ult_23_v4i32:
13702 ; AVX512VPOPCNTDQ:       # %bb.0:
13703 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13704 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
13705 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13706 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13707 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
13708 ; AVX512VPOPCNTDQ-NEXT:    retq
13710 ; AVX512VPOPCNTDQVL-LABEL: ult_23_v4i32:
13711 ; AVX512VPOPCNTDQVL:       # %bb.0:
13712 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
13713 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13714 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13715 ; AVX512VPOPCNTDQVL-NEXT:    retq
13717 ; BITALG_NOVLX-LABEL: ult_23_v4i32:
13718 ; BITALG_NOVLX:       # %bb.0:
13719 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13720 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13721 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13722 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13723 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13724 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13725 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13726 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13727 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13728 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13729 ; BITALG_NOVLX-NEXT:    vzeroupper
13730 ; BITALG_NOVLX-NEXT:    retq
13732 ; BITALG-LABEL: ult_23_v4i32:
13733 ; BITALG:       # %bb.0:
13734 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
13735 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13736 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13737 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13738 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13739 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13740 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13741 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13742 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
13743 ; BITALG-NEXT:    retq
13744   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
13745   %3 = icmp ult <4 x i32> %2, <i32 23, i32 23, i32 23, i32 23>
13746   %4 = sext <4 x i1> %3 to <4 x i32>
13747   ret <4 x i32> %4
13750 define <4 x i32> @ugt_23_v4i32(<4 x i32> %0) {
13751 ; SSE2-LABEL: ugt_23_v4i32:
13752 ; SSE2:       # %bb.0:
13753 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13754 ; SSE2-NEXT:    psrlw $1, %xmm1
13755 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13756 ; SSE2-NEXT:    psubb %xmm1, %xmm0
13757 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13758 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13759 ; SSE2-NEXT:    pand %xmm1, %xmm2
13760 ; SSE2-NEXT:    psrlw $2, %xmm0
13761 ; SSE2-NEXT:    pand %xmm1, %xmm0
13762 ; SSE2-NEXT:    paddb %xmm2, %xmm0
13763 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13764 ; SSE2-NEXT:    psrlw $4, %xmm1
13765 ; SSE2-NEXT:    paddb %xmm1, %xmm0
13766 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13767 ; SSE2-NEXT:    pxor %xmm1, %xmm1
13768 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13769 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
13770 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
13771 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
13772 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
13773 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
13774 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13775 ; SSE2-NEXT:    retq
13777 ; SSE3-LABEL: ugt_23_v4i32:
13778 ; SSE3:       # %bb.0:
13779 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13780 ; SSE3-NEXT:    psrlw $1, %xmm1
13781 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13782 ; SSE3-NEXT:    psubb %xmm1, %xmm0
13783 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13784 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13785 ; SSE3-NEXT:    pand %xmm1, %xmm2
13786 ; SSE3-NEXT:    psrlw $2, %xmm0
13787 ; SSE3-NEXT:    pand %xmm1, %xmm0
13788 ; SSE3-NEXT:    paddb %xmm2, %xmm0
13789 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13790 ; SSE3-NEXT:    psrlw $4, %xmm1
13791 ; SSE3-NEXT:    paddb %xmm1, %xmm0
13792 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13793 ; SSE3-NEXT:    pxor %xmm1, %xmm1
13794 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13795 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
13796 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
13797 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
13798 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
13799 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
13800 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13801 ; SSE3-NEXT:    retq
13803 ; SSSE3-LABEL: ugt_23_v4i32:
13804 ; SSSE3:       # %bb.0:
13805 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13806 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
13807 ; SSSE3-NEXT:    pand %xmm2, %xmm3
13808 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13809 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
13810 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
13811 ; SSSE3-NEXT:    psrlw $4, %xmm0
13812 ; SSSE3-NEXT:    pand %xmm2, %xmm0
13813 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
13814 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
13815 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
13816 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
13817 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13818 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
13819 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13820 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
13821 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
13822 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13823 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
13824 ; SSSE3-NEXT:    retq
13826 ; SSE41-LABEL: ugt_23_v4i32:
13827 ; SSE41:       # %bb.0:
13828 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13829 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
13830 ; SSE41-NEXT:    pand %xmm1, %xmm2
13831 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13832 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
13833 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
13834 ; SSE41-NEXT:    psrlw $4, %xmm0
13835 ; SSE41-NEXT:    pand %xmm1, %xmm0
13836 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
13837 ; SSE41-NEXT:    paddb %xmm4, %xmm3
13838 ; SSE41-NEXT:    pxor %xmm1, %xmm1
13839 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
13840 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
13841 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
13842 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
13843 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
13844 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
13845 ; SSE41-NEXT:    retq
13847 ; AVX1-LABEL: ugt_23_v4i32:
13848 ; AVX1:       # %bb.0:
13849 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13850 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
13851 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13852 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13853 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
13854 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
13855 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13856 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13857 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13858 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13859 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13860 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13861 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13862 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13863 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
13864 ; AVX1-NEXT:    retq
13866 ; AVX2-LABEL: ugt_23_v4i32:
13867 ; AVX2:       # %bb.0:
13868 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13869 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
13870 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13871 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
13872 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
13873 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
13874 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
13875 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
13876 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13877 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13878 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13879 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13880 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13881 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13882 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13883 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13884 ; AVX2-NEXT:    retq
13886 ; AVX512VPOPCNTDQ-LABEL: ugt_23_v4i32:
13887 ; AVX512VPOPCNTDQ:       # %bb.0:
13888 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13889 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
13890 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13891 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13892 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
13893 ; AVX512VPOPCNTDQ-NEXT:    retq
13895 ; AVX512VPOPCNTDQVL-LABEL: ugt_23_v4i32:
13896 ; AVX512VPOPCNTDQVL:       # %bb.0:
13897 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
13898 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13899 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13900 ; AVX512VPOPCNTDQVL-NEXT:    retq
13902 ; BITALG_NOVLX-LABEL: ugt_23_v4i32:
13903 ; BITALG_NOVLX:       # %bb.0:
13904 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
13905 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
13906 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13907 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13908 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13909 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13910 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13911 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13912 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13913 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13914 ; BITALG_NOVLX-NEXT:    vzeroupper
13915 ; BITALG_NOVLX-NEXT:    retq
13917 ; BITALG-LABEL: ugt_23_v4i32:
13918 ; BITALG:       # %bb.0:
13919 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
13920 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
13921 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
13922 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
13923 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
13924 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
13925 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
13926 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [23,23,23,23]
13927 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
13928 ; BITALG-NEXT:    retq
13929   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
13930   %3 = icmp ugt <4 x i32> %2, <i32 23, i32 23, i32 23, i32 23>
13931   %4 = sext <4 x i1> %3 to <4 x i32>
13932   ret <4 x i32> %4
13935 define <4 x i32> @ult_24_v4i32(<4 x i32> %0) {
13936 ; SSE2-LABEL: ult_24_v4i32:
13937 ; SSE2:       # %bb.0:
13938 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13939 ; SSE2-NEXT:    psrlw $1, %xmm1
13940 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13941 ; SSE2-NEXT:    psubb %xmm1, %xmm0
13942 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13943 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
13944 ; SSE2-NEXT:    pand %xmm1, %xmm2
13945 ; SSE2-NEXT:    psrlw $2, %xmm0
13946 ; SSE2-NEXT:    pand %xmm1, %xmm0
13947 ; SSE2-NEXT:    paddb %xmm2, %xmm0
13948 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
13949 ; SSE2-NEXT:    psrlw $4, %xmm1
13950 ; SSE2-NEXT:    paddb %xmm0, %xmm1
13951 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13952 ; SSE2-NEXT:    pxor %xmm0, %xmm0
13953 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
13954 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13955 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
13956 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13957 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
13958 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
13959 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [24,24,24,24]
13960 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
13961 ; SSE2-NEXT:    retq
13963 ; SSE3-LABEL: ult_24_v4i32:
13964 ; SSE3:       # %bb.0:
13965 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13966 ; SSE3-NEXT:    psrlw $1, %xmm1
13967 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13968 ; SSE3-NEXT:    psubb %xmm1, %xmm0
13969 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
13970 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
13971 ; SSE3-NEXT:    pand %xmm1, %xmm2
13972 ; SSE3-NEXT:    psrlw $2, %xmm0
13973 ; SSE3-NEXT:    pand %xmm1, %xmm0
13974 ; SSE3-NEXT:    paddb %xmm2, %xmm0
13975 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
13976 ; SSE3-NEXT:    psrlw $4, %xmm1
13977 ; SSE3-NEXT:    paddb %xmm0, %xmm1
13978 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
13979 ; SSE3-NEXT:    pxor %xmm0, %xmm0
13980 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
13981 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
13982 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
13983 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
13984 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
13985 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
13986 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [24,24,24,24]
13987 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
13988 ; SSE3-NEXT:    retq
13990 ; SSSE3-LABEL: ult_24_v4i32:
13991 ; SSSE3:       # %bb.0:
13992 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
13993 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
13994 ; SSSE3-NEXT:    pand %xmm1, %xmm2
13995 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
13996 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
13997 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
13998 ; SSSE3-NEXT:    psrlw $4, %xmm0
13999 ; SSSE3-NEXT:    pand %xmm1, %xmm0
14000 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
14001 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
14002 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
14003 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
14004 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
14005 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
14006 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
14007 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
14008 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
14009 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [24,24,24,24]
14010 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
14011 ; SSSE3-NEXT:    retq
14013 ; SSE41-LABEL: ult_24_v4i32:
14014 ; SSE41:       # %bb.0:
14015 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14016 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
14017 ; SSE41-NEXT:    pand %xmm1, %xmm2
14018 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14019 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
14020 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
14021 ; SSE41-NEXT:    psrlw $4, %xmm0
14022 ; SSE41-NEXT:    pand %xmm1, %xmm0
14023 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
14024 ; SSE41-NEXT:    paddb %xmm4, %xmm3
14025 ; SSE41-NEXT:    pxor %xmm0, %xmm0
14026 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
14027 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
14028 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
14029 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
14030 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
14031 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [24,24,24,24]
14032 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
14033 ; SSE41-NEXT:    retq
14035 ; AVX1-LABEL: ult_24_v4i32:
14036 ; AVX1:       # %bb.0:
14037 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14038 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14039 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14040 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14041 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14042 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14043 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14044 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14045 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14046 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14047 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14048 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14049 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14050 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14051 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [24,24,24,24]
14052 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14053 ; AVX1-NEXT:    retq
14055 ; AVX2-LABEL: ult_24_v4i32:
14056 ; AVX2:       # %bb.0:
14057 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14058 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
14059 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14060 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14061 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
14062 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
14063 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14064 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14065 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14066 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14067 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14068 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14069 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14070 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14071 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14072 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14073 ; AVX2-NEXT:    retq
14075 ; AVX512VPOPCNTDQ-LABEL: ult_24_v4i32:
14076 ; AVX512VPOPCNTDQ:       # %bb.0:
14077 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14078 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
14079 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14080 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14081 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
14082 ; AVX512VPOPCNTDQ-NEXT:    retq
14084 ; AVX512VPOPCNTDQVL-LABEL: ult_24_v4i32:
14085 ; AVX512VPOPCNTDQVL:       # %bb.0:
14086 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
14087 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14088 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14089 ; AVX512VPOPCNTDQVL-NEXT:    retq
14091 ; BITALG_NOVLX-LABEL: ult_24_v4i32:
14092 ; BITALG_NOVLX:       # %bb.0:
14093 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14094 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14095 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14096 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14097 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14098 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14099 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14100 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14101 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14102 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14103 ; BITALG_NOVLX-NEXT:    vzeroupper
14104 ; BITALG_NOVLX-NEXT:    retq
14106 ; BITALG-LABEL: ult_24_v4i32:
14107 ; BITALG:       # %bb.0:
14108 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
14109 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14110 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14111 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14112 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14113 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14114 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14115 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14116 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14117 ; BITALG-NEXT:    retq
14118   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
14119   %3 = icmp ult <4 x i32> %2, <i32 24, i32 24, i32 24, i32 24>
14120   %4 = sext <4 x i1> %3 to <4 x i32>
14121   ret <4 x i32> %4
14124 define <4 x i32> @ugt_24_v4i32(<4 x i32> %0) {
14125 ; SSE2-LABEL: ugt_24_v4i32:
14126 ; SSE2:       # %bb.0:
14127 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14128 ; SSE2-NEXT:    psrlw $1, %xmm1
14129 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14130 ; SSE2-NEXT:    psubb %xmm1, %xmm0
14131 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14132 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
14133 ; SSE2-NEXT:    pand %xmm1, %xmm2
14134 ; SSE2-NEXT:    psrlw $2, %xmm0
14135 ; SSE2-NEXT:    pand %xmm1, %xmm0
14136 ; SSE2-NEXT:    paddb %xmm2, %xmm0
14137 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14138 ; SSE2-NEXT:    psrlw $4, %xmm1
14139 ; SSE2-NEXT:    paddb %xmm1, %xmm0
14140 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14141 ; SSE2-NEXT:    pxor %xmm1, %xmm1
14142 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
14143 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
14144 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
14145 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
14146 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
14147 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
14148 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14149 ; SSE2-NEXT:    retq
14151 ; SSE3-LABEL: ugt_24_v4i32:
14152 ; SSE3:       # %bb.0:
14153 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14154 ; SSE3-NEXT:    psrlw $1, %xmm1
14155 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14156 ; SSE3-NEXT:    psubb %xmm1, %xmm0
14157 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14158 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
14159 ; SSE3-NEXT:    pand %xmm1, %xmm2
14160 ; SSE3-NEXT:    psrlw $2, %xmm0
14161 ; SSE3-NEXT:    pand %xmm1, %xmm0
14162 ; SSE3-NEXT:    paddb %xmm2, %xmm0
14163 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14164 ; SSE3-NEXT:    psrlw $4, %xmm1
14165 ; SSE3-NEXT:    paddb %xmm1, %xmm0
14166 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14167 ; SSE3-NEXT:    pxor %xmm1, %xmm1
14168 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
14169 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
14170 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
14171 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
14172 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
14173 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
14174 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14175 ; SSE3-NEXT:    retq
14177 ; SSSE3-LABEL: ugt_24_v4i32:
14178 ; SSSE3:       # %bb.0:
14179 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14180 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
14181 ; SSSE3-NEXT:    pand %xmm2, %xmm3
14182 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14183 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
14184 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
14185 ; SSSE3-NEXT:    psrlw $4, %xmm0
14186 ; SSSE3-NEXT:    pand %xmm2, %xmm0
14187 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
14188 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
14189 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
14190 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
14191 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
14192 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
14193 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
14194 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
14195 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
14196 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14197 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
14198 ; SSSE3-NEXT:    retq
14200 ; SSE41-LABEL: ugt_24_v4i32:
14201 ; SSE41:       # %bb.0:
14202 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14203 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
14204 ; SSE41-NEXT:    pand %xmm1, %xmm2
14205 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14206 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
14207 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
14208 ; SSE41-NEXT:    psrlw $4, %xmm0
14209 ; SSE41-NEXT:    pand %xmm1, %xmm0
14210 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
14211 ; SSE41-NEXT:    paddb %xmm4, %xmm3
14212 ; SSE41-NEXT:    pxor %xmm1, %xmm1
14213 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
14214 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
14215 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
14216 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
14217 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
14218 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14219 ; SSE41-NEXT:    retq
14221 ; AVX1-LABEL: ugt_24_v4i32:
14222 ; AVX1:       # %bb.0:
14223 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14224 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14225 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14226 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14227 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14228 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14229 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14230 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14231 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14232 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14233 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14234 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14235 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14236 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14237 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
14238 ; AVX1-NEXT:    retq
14240 ; AVX2-LABEL: ugt_24_v4i32:
14241 ; AVX2:       # %bb.0:
14242 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14243 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
14244 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14245 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14246 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
14247 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
14248 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14249 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14250 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14251 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14252 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14253 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14254 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14255 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14256 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14257 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14258 ; AVX2-NEXT:    retq
14260 ; AVX512VPOPCNTDQ-LABEL: ugt_24_v4i32:
14261 ; AVX512VPOPCNTDQ:       # %bb.0:
14262 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14263 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
14264 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14265 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14266 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
14267 ; AVX512VPOPCNTDQ-NEXT:    retq
14269 ; AVX512VPOPCNTDQVL-LABEL: ugt_24_v4i32:
14270 ; AVX512VPOPCNTDQVL:       # %bb.0:
14271 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
14272 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14273 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14274 ; AVX512VPOPCNTDQVL-NEXT:    retq
14276 ; BITALG_NOVLX-LABEL: ugt_24_v4i32:
14277 ; BITALG_NOVLX:       # %bb.0:
14278 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14279 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14280 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14281 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14282 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14283 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14284 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14285 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14286 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14287 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14288 ; BITALG_NOVLX-NEXT:    vzeroupper
14289 ; BITALG_NOVLX-NEXT:    retq
14291 ; BITALG-LABEL: ugt_24_v4i32:
14292 ; BITALG:       # %bb.0:
14293 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
14294 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14295 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14296 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14297 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14298 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14299 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14300 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [24,24,24,24]
14301 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14302 ; BITALG-NEXT:    retq
14303   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
14304   %3 = icmp ugt <4 x i32> %2, <i32 24, i32 24, i32 24, i32 24>
14305   %4 = sext <4 x i1> %3 to <4 x i32>
14306   ret <4 x i32> %4
14309 define <4 x i32> @ult_25_v4i32(<4 x i32> %0) {
14310 ; SSE2-LABEL: ult_25_v4i32:
14311 ; SSE2:       # %bb.0:
14312 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14313 ; SSE2-NEXT:    psrlw $1, %xmm1
14314 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14315 ; SSE2-NEXT:    psubb %xmm1, %xmm0
14316 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14317 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
14318 ; SSE2-NEXT:    pand %xmm1, %xmm2
14319 ; SSE2-NEXT:    psrlw $2, %xmm0
14320 ; SSE2-NEXT:    pand %xmm1, %xmm0
14321 ; SSE2-NEXT:    paddb %xmm2, %xmm0
14322 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14323 ; SSE2-NEXT:    psrlw $4, %xmm1
14324 ; SSE2-NEXT:    paddb %xmm0, %xmm1
14325 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14326 ; SSE2-NEXT:    pxor %xmm0, %xmm0
14327 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
14328 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
14329 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
14330 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
14331 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
14332 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
14333 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [25,25,25,25]
14334 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
14335 ; SSE2-NEXT:    retq
14337 ; SSE3-LABEL: ult_25_v4i32:
14338 ; SSE3:       # %bb.0:
14339 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14340 ; SSE3-NEXT:    psrlw $1, %xmm1
14341 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14342 ; SSE3-NEXT:    psubb %xmm1, %xmm0
14343 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14344 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
14345 ; SSE3-NEXT:    pand %xmm1, %xmm2
14346 ; SSE3-NEXT:    psrlw $2, %xmm0
14347 ; SSE3-NEXT:    pand %xmm1, %xmm0
14348 ; SSE3-NEXT:    paddb %xmm2, %xmm0
14349 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14350 ; SSE3-NEXT:    psrlw $4, %xmm1
14351 ; SSE3-NEXT:    paddb %xmm0, %xmm1
14352 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14353 ; SSE3-NEXT:    pxor %xmm0, %xmm0
14354 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
14355 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
14356 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
14357 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
14358 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
14359 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
14360 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [25,25,25,25]
14361 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
14362 ; SSE3-NEXT:    retq
14364 ; SSSE3-LABEL: ult_25_v4i32:
14365 ; SSSE3:       # %bb.0:
14366 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14367 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
14368 ; SSSE3-NEXT:    pand %xmm1, %xmm2
14369 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14370 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
14371 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
14372 ; SSSE3-NEXT:    psrlw $4, %xmm0
14373 ; SSSE3-NEXT:    pand %xmm1, %xmm0
14374 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
14375 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
14376 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
14377 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
14378 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
14379 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
14380 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
14381 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
14382 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
14383 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [25,25,25,25]
14384 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
14385 ; SSSE3-NEXT:    retq
14387 ; SSE41-LABEL: ult_25_v4i32:
14388 ; SSE41:       # %bb.0:
14389 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14390 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
14391 ; SSE41-NEXT:    pand %xmm1, %xmm2
14392 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14393 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
14394 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
14395 ; SSE41-NEXT:    psrlw $4, %xmm0
14396 ; SSE41-NEXT:    pand %xmm1, %xmm0
14397 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
14398 ; SSE41-NEXT:    paddb %xmm4, %xmm3
14399 ; SSE41-NEXT:    pxor %xmm0, %xmm0
14400 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
14401 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
14402 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
14403 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
14404 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
14405 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [25,25,25,25]
14406 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
14407 ; SSE41-NEXT:    retq
14409 ; AVX1-LABEL: ult_25_v4i32:
14410 ; AVX1:       # %bb.0:
14411 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14412 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14413 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14414 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14415 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14416 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14417 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14418 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14419 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14420 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14421 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14422 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14423 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14424 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14425 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [25,25,25,25]
14426 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14427 ; AVX1-NEXT:    retq
14429 ; AVX2-LABEL: ult_25_v4i32:
14430 ; AVX2:       # %bb.0:
14431 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14432 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
14433 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14434 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14435 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
14436 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
14437 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14438 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14439 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14440 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14441 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14442 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14443 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14444 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14445 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14446 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14447 ; AVX2-NEXT:    retq
14449 ; AVX512VPOPCNTDQ-LABEL: ult_25_v4i32:
14450 ; AVX512VPOPCNTDQ:       # %bb.0:
14451 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14452 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
14453 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14454 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14455 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
14456 ; AVX512VPOPCNTDQ-NEXT:    retq
14458 ; AVX512VPOPCNTDQVL-LABEL: ult_25_v4i32:
14459 ; AVX512VPOPCNTDQVL:       # %bb.0:
14460 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
14461 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14462 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14463 ; AVX512VPOPCNTDQVL-NEXT:    retq
14465 ; BITALG_NOVLX-LABEL: ult_25_v4i32:
14466 ; BITALG_NOVLX:       # %bb.0:
14467 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14468 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14469 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14470 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14471 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14472 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14473 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14474 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14475 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14476 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14477 ; BITALG_NOVLX-NEXT:    vzeroupper
14478 ; BITALG_NOVLX-NEXT:    retq
14480 ; BITALG-LABEL: ult_25_v4i32:
14481 ; BITALG:       # %bb.0:
14482 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
14483 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14484 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14485 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14486 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14487 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14488 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14489 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14490 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14491 ; BITALG-NEXT:    retq
14492   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
14493   %3 = icmp ult <4 x i32> %2, <i32 25, i32 25, i32 25, i32 25>
14494   %4 = sext <4 x i1> %3 to <4 x i32>
14495   ret <4 x i32> %4
14498 define <4 x i32> @ugt_25_v4i32(<4 x i32> %0) {
14499 ; SSE2-LABEL: ugt_25_v4i32:
14500 ; SSE2:       # %bb.0:
14501 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14502 ; SSE2-NEXT:    psrlw $1, %xmm1
14503 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14504 ; SSE2-NEXT:    psubb %xmm1, %xmm0
14505 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14506 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
14507 ; SSE2-NEXT:    pand %xmm1, %xmm2
14508 ; SSE2-NEXT:    psrlw $2, %xmm0
14509 ; SSE2-NEXT:    pand %xmm1, %xmm0
14510 ; SSE2-NEXT:    paddb %xmm2, %xmm0
14511 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14512 ; SSE2-NEXT:    psrlw $4, %xmm1
14513 ; SSE2-NEXT:    paddb %xmm1, %xmm0
14514 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14515 ; SSE2-NEXT:    pxor %xmm1, %xmm1
14516 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
14517 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
14518 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
14519 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
14520 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
14521 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
14522 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14523 ; SSE2-NEXT:    retq
14525 ; SSE3-LABEL: ugt_25_v4i32:
14526 ; SSE3:       # %bb.0:
14527 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14528 ; SSE3-NEXT:    psrlw $1, %xmm1
14529 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14530 ; SSE3-NEXT:    psubb %xmm1, %xmm0
14531 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14532 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
14533 ; SSE3-NEXT:    pand %xmm1, %xmm2
14534 ; SSE3-NEXT:    psrlw $2, %xmm0
14535 ; SSE3-NEXT:    pand %xmm1, %xmm0
14536 ; SSE3-NEXT:    paddb %xmm2, %xmm0
14537 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14538 ; SSE3-NEXT:    psrlw $4, %xmm1
14539 ; SSE3-NEXT:    paddb %xmm1, %xmm0
14540 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14541 ; SSE3-NEXT:    pxor %xmm1, %xmm1
14542 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
14543 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
14544 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
14545 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
14546 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
14547 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
14548 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14549 ; SSE3-NEXT:    retq
14551 ; SSSE3-LABEL: ugt_25_v4i32:
14552 ; SSSE3:       # %bb.0:
14553 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14554 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
14555 ; SSSE3-NEXT:    pand %xmm2, %xmm3
14556 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14557 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
14558 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
14559 ; SSSE3-NEXT:    psrlw $4, %xmm0
14560 ; SSSE3-NEXT:    pand %xmm2, %xmm0
14561 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
14562 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
14563 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
14564 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
14565 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
14566 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
14567 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
14568 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
14569 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
14570 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14571 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
14572 ; SSSE3-NEXT:    retq
14574 ; SSE41-LABEL: ugt_25_v4i32:
14575 ; SSE41:       # %bb.0:
14576 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14577 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
14578 ; SSE41-NEXT:    pand %xmm1, %xmm2
14579 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14580 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
14581 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
14582 ; SSE41-NEXT:    psrlw $4, %xmm0
14583 ; SSE41-NEXT:    pand %xmm1, %xmm0
14584 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
14585 ; SSE41-NEXT:    paddb %xmm4, %xmm3
14586 ; SSE41-NEXT:    pxor %xmm1, %xmm1
14587 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
14588 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
14589 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
14590 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
14591 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
14592 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14593 ; SSE41-NEXT:    retq
14595 ; AVX1-LABEL: ugt_25_v4i32:
14596 ; AVX1:       # %bb.0:
14597 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14598 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14599 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14600 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14601 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14602 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14603 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14604 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14605 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14606 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14607 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14608 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14609 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14610 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14611 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
14612 ; AVX1-NEXT:    retq
14614 ; AVX2-LABEL: ugt_25_v4i32:
14615 ; AVX2:       # %bb.0:
14616 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14617 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
14618 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14619 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14620 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
14621 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
14622 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14623 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14624 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14625 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14626 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14627 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14628 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14629 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14630 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14631 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14632 ; AVX2-NEXT:    retq
14634 ; AVX512VPOPCNTDQ-LABEL: ugt_25_v4i32:
14635 ; AVX512VPOPCNTDQ:       # %bb.0:
14636 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14637 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
14638 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14639 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14640 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
14641 ; AVX512VPOPCNTDQ-NEXT:    retq
14643 ; AVX512VPOPCNTDQVL-LABEL: ugt_25_v4i32:
14644 ; AVX512VPOPCNTDQVL:       # %bb.0:
14645 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
14646 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14647 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14648 ; AVX512VPOPCNTDQVL-NEXT:    retq
14650 ; BITALG_NOVLX-LABEL: ugt_25_v4i32:
14651 ; BITALG_NOVLX:       # %bb.0:
14652 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14653 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14654 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14655 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14656 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14657 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14658 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14659 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14660 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14661 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14662 ; BITALG_NOVLX-NEXT:    vzeroupper
14663 ; BITALG_NOVLX-NEXT:    retq
14665 ; BITALG-LABEL: ugt_25_v4i32:
14666 ; BITALG:       # %bb.0:
14667 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
14668 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14669 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14670 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14671 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14672 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14673 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14674 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [25,25,25,25]
14675 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
14676 ; BITALG-NEXT:    retq
14677   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
14678   %3 = icmp ugt <4 x i32> %2, <i32 25, i32 25, i32 25, i32 25>
14679   %4 = sext <4 x i1> %3 to <4 x i32>
14680   ret <4 x i32> %4
14683 define <4 x i32> @ult_26_v4i32(<4 x i32> %0) {
14684 ; SSE2-LABEL: ult_26_v4i32:
14685 ; SSE2:       # %bb.0:
14686 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14687 ; SSE2-NEXT:    psrlw $1, %xmm1
14688 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14689 ; SSE2-NEXT:    psubb %xmm1, %xmm0
14690 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14691 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
14692 ; SSE2-NEXT:    pand %xmm1, %xmm2
14693 ; SSE2-NEXT:    psrlw $2, %xmm0
14694 ; SSE2-NEXT:    pand %xmm1, %xmm0
14695 ; SSE2-NEXT:    paddb %xmm2, %xmm0
14696 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14697 ; SSE2-NEXT:    psrlw $4, %xmm1
14698 ; SSE2-NEXT:    paddb %xmm0, %xmm1
14699 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14700 ; SSE2-NEXT:    pxor %xmm0, %xmm0
14701 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
14702 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
14703 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
14704 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
14705 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
14706 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
14707 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [26,26,26,26]
14708 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
14709 ; SSE2-NEXT:    retq
14711 ; SSE3-LABEL: ult_26_v4i32:
14712 ; SSE3:       # %bb.0:
14713 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14714 ; SSE3-NEXT:    psrlw $1, %xmm1
14715 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14716 ; SSE3-NEXT:    psubb %xmm1, %xmm0
14717 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14718 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
14719 ; SSE3-NEXT:    pand %xmm1, %xmm2
14720 ; SSE3-NEXT:    psrlw $2, %xmm0
14721 ; SSE3-NEXT:    pand %xmm1, %xmm0
14722 ; SSE3-NEXT:    paddb %xmm2, %xmm0
14723 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14724 ; SSE3-NEXT:    psrlw $4, %xmm1
14725 ; SSE3-NEXT:    paddb %xmm0, %xmm1
14726 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14727 ; SSE3-NEXT:    pxor %xmm0, %xmm0
14728 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
14729 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
14730 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
14731 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
14732 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
14733 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
14734 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [26,26,26,26]
14735 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
14736 ; SSE3-NEXT:    retq
14738 ; SSSE3-LABEL: ult_26_v4i32:
14739 ; SSSE3:       # %bb.0:
14740 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14741 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
14742 ; SSSE3-NEXT:    pand %xmm1, %xmm2
14743 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14744 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
14745 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
14746 ; SSSE3-NEXT:    psrlw $4, %xmm0
14747 ; SSSE3-NEXT:    pand %xmm1, %xmm0
14748 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
14749 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
14750 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
14751 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
14752 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
14753 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
14754 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
14755 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
14756 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
14757 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [26,26,26,26]
14758 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
14759 ; SSSE3-NEXT:    retq
14761 ; SSE41-LABEL: ult_26_v4i32:
14762 ; SSE41:       # %bb.0:
14763 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14764 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
14765 ; SSE41-NEXT:    pand %xmm1, %xmm2
14766 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14767 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
14768 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
14769 ; SSE41-NEXT:    psrlw $4, %xmm0
14770 ; SSE41-NEXT:    pand %xmm1, %xmm0
14771 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
14772 ; SSE41-NEXT:    paddb %xmm4, %xmm3
14773 ; SSE41-NEXT:    pxor %xmm0, %xmm0
14774 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
14775 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
14776 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
14777 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
14778 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
14779 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [26,26,26,26]
14780 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
14781 ; SSE41-NEXT:    retq
14783 ; AVX1-LABEL: ult_26_v4i32:
14784 ; AVX1:       # %bb.0:
14785 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14786 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14787 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14788 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14789 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14790 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14791 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14792 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14793 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14794 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14795 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14796 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14797 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14798 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14799 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [26,26,26,26]
14800 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14801 ; AVX1-NEXT:    retq
14803 ; AVX2-LABEL: ult_26_v4i32:
14804 ; AVX2:       # %bb.0:
14805 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14806 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
14807 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14808 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14809 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
14810 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
14811 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14812 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14813 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14814 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14815 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14816 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14817 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14818 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14819 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
14820 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14821 ; AVX2-NEXT:    retq
14823 ; AVX512VPOPCNTDQ-LABEL: ult_26_v4i32:
14824 ; AVX512VPOPCNTDQ:       # %bb.0:
14825 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14826 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
14827 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
14828 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14829 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
14830 ; AVX512VPOPCNTDQ-NEXT:    retq
14832 ; AVX512VPOPCNTDQVL-LABEL: ult_26_v4i32:
14833 ; AVX512VPOPCNTDQVL:       # %bb.0:
14834 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
14835 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
14836 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14837 ; AVX512VPOPCNTDQVL-NEXT:    retq
14839 ; BITALG_NOVLX-LABEL: ult_26_v4i32:
14840 ; BITALG_NOVLX:       # %bb.0:
14841 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
14842 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
14843 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14844 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14845 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14846 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14847 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14848 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14849 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
14850 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14851 ; BITALG_NOVLX-NEXT:    vzeroupper
14852 ; BITALG_NOVLX-NEXT:    retq
14854 ; BITALG-LABEL: ult_26_v4i32:
14855 ; BITALG:       # %bb.0:
14856 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
14857 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14858 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14859 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14860 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14861 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14862 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14863 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
14864 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
14865 ; BITALG-NEXT:    retq
14866   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
14867   %3 = icmp ult <4 x i32> %2, <i32 26, i32 26, i32 26, i32 26>
14868   %4 = sext <4 x i1> %3 to <4 x i32>
14869   ret <4 x i32> %4
14872 define <4 x i32> @ugt_26_v4i32(<4 x i32> %0) {
14873 ; SSE2-LABEL: ugt_26_v4i32:
14874 ; SSE2:       # %bb.0:
14875 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14876 ; SSE2-NEXT:    psrlw $1, %xmm1
14877 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14878 ; SSE2-NEXT:    psubb %xmm1, %xmm0
14879 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14880 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
14881 ; SSE2-NEXT:    pand %xmm1, %xmm2
14882 ; SSE2-NEXT:    psrlw $2, %xmm0
14883 ; SSE2-NEXT:    pand %xmm1, %xmm0
14884 ; SSE2-NEXT:    paddb %xmm2, %xmm0
14885 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
14886 ; SSE2-NEXT:    psrlw $4, %xmm1
14887 ; SSE2-NEXT:    paddb %xmm1, %xmm0
14888 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14889 ; SSE2-NEXT:    pxor %xmm1, %xmm1
14890 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
14891 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
14892 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
14893 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
14894 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
14895 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
14896 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14897 ; SSE2-NEXT:    retq
14899 ; SSE3-LABEL: ugt_26_v4i32:
14900 ; SSE3:       # %bb.0:
14901 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14902 ; SSE3-NEXT:    psrlw $1, %xmm1
14903 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14904 ; SSE3-NEXT:    psubb %xmm1, %xmm0
14905 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
14906 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
14907 ; SSE3-NEXT:    pand %xmm1, %xmm2
14908 ; SSE3-NEXT:    psrlw $2, %xmm0
14909 ; SSE3-NEXT:    pand %xmm1, %xmm0
14910 ; SSE3-NEXT:    paddb %xmm2, %xmm0
14911 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
14912 ; SSE3-NEXT:    psrlw $4, %xmm1
14913 ; SSE3-NEXT:    paddb %xmm1, %xmm0
14914 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14915 ; SSE3-NEXT:    pxor %xmm1, %xmm1
14916 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
14917 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
14918 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
14919 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
14920 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
14921 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
14922 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14923 ; SSE3-NEXT:    retq
14925 ; SSSE3-LABEL: ugt_26_v4i32:
14926 ; SSSE3:       # %bb.0:
14927 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14928 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
14929 ; SSSE3-NEXT:    pand %xmm2, %xmm3
14930 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14931 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
14932 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
14933 ; SSSE3-NEXT:    psrlw $4, %xmm0
14934 ; SSSE3-NEXT:    pand %xmm2, %xmm0
14935 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
14936 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
14937 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
14938 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
14939 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
14940 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
14941 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
14942 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
14943 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
14944 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
14945 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
14946 ; SSSE3-NEXT:    retq
14948 ; SSE41-LABEL: ugt_26_v4i32:
14949 ; SSE41:       # %bb.0:
14950 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14951 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
14952 ; SSE41-NEXT:    pand %xmm1, %xmm2
14953 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14954 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
14955 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
14956 ; SSE41-NEXT:    psrlw $4, %xmm0
14957 ; SSE41-NEXT:    pand %xmm1, %xmm0
14958 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
14959 ; SSE41-NEXT:    paddb %xmm4, %xmm3
14960 ; SSE41-NEXT:    pxor %xmm1, %xmm1
14961 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
14962 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
14963 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
14964 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
14965 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
14966 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
14967 ; SSE41-NEXT:    retq
14969 ; AVX1-LABEL: ugt_26_v4i32:
14970 ; AVX1:       # %bb.0:
14971 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14972 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
14973 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14974 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14975 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
14976 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
14977 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14978 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14979 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14980 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
14981 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
14982 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
14983 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
14984 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
14985 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
14986 ; AVX1-NEXT:    retq
14988 ; AVX2-LABEL: ugt_26_v4i32:
14989 ; AVX2:       # %bb.0:
14990 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
14991 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
14992 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
14993 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
14994 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
14995 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
14996 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
14997 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
14998 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
14999 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15000 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15001 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15002 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15003 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15004 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
15005 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15006 ; AVX2-NEXT:    retq
15008 ; AVX512VPOPCNTDQ-LABEL: ugt_26_v4i32:
15009 ; AVX512VPOPCNTDQ:       # %bb.0:
15010 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15011 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
15012 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
15013 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15014 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
15015 ; AVX512VPOPCNTDQ-NEXT:    retq
15017 ; AVX512VPOPCNTDQVL-LABEL: ugt_26_v4i32:
15018 ; AVX512VPOPCNTDQVL:       # %bb.0:
15019 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
15020 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
15021 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15022 ; AVX512VPOPCNTDQVL-NEXT:    retq
15024 ; BITALG_NOVLX-LABEL: ugt_26_v4i32:
15025 ; BITALG_NOVLX:       # %bb.0:
15026 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15027 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15028 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15029 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15030 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15031 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15032 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15033 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15034 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
15035 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15036 ; BITALG_NOVLX-NEXT:    vzeroupper
15037 ; BITALG_NOVLX-NEXT:    retq
15039 ; BITALG-LABEL: ugt_26_v4i32:
15040 ; BITALG:       # %bb.0:
15041 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
15042 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15043 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15044 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15045 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15046 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15047 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15048 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [26,26,26,26]
15049 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15050 ; BITALG-NEXT:    retq
15051   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
15052   %3 = icmp ugt <4 x i32> %2, <i32 26, i32 26, i32 26, i32 26>
15053   %4 = sext <4 x i1> %3 to <4 x i32>
15054   ret <4 x i32> %4
15057 define <4 x i32> @ult_27_v4i32(<4 x i32> %0) {
15058 ; SSE2-LABEL: ult_27_v4i32:
15059 ; SSE2:       # %bb.0:
15060 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15061 ; SSE2-NEXT:    psrlw $1, %xmm1
15062 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15063 ; SSE2-NEXT:    psubb %xmm1, %xmm0
15064 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15065 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
15066 ; SSE2-NEXT:    pand %xmm1, %xmm2
15067 ; SSE2-NEXT:    psrlw $2, %xmm0
15068 ; SSE2-NEXT:    pand %xmm1, %xmm0
15069 ; SSE2-NEXT:    paddb %xmm2, %xmm0
15070 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15071 ; SSE2-NEXT:    psrlw $4, %xmm1
15072 ; SSE2-NEXT:    paddb %xmm0, %xmm1
15073 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15074 ; SSE2-NEXT:    pxor %xmm0, %xmm0
15075 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
15076 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
15077 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
15078 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
15079 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
15080 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
15081 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [27,27,27,27]
15082 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
15083 ; SSE2-NEXT:    retq
15085 ; SSE3-LABEL: ult_27_v4i32:
15086 ; SSE3:       # %bb.0:
15087 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15088 ; SSE3-NEXT:    psrlw $1, %xmm1
15089 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15090 ; SSE3-NEXT:    psubb %xmm1, %xmm0
15091 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15092 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
15093 ; SSE3-NEXT:    pand %xmm1, %xmm2
15094 ; SSE3-NEXT:    psrlw $2, %xmm0
15095 ; SSE3-NEXT:    pand %xmm1, %xmm0
15096 ; SSE3-NEXT:    paddb %xmm2, %xmm0
15097 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15098 ; SSE3-NEXT:    psrlw $4, %xmm1
15099 ; SSE3-NEXT:    paddb %xmm0, %xmm1
15100 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15101 ; SSE3-NEXT:    pxor %xmm0, %xmm0
15102 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
15103 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
15104 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
15105 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
15106 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
15107 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
15108 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [27,27,27,27]
15109 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
15110 ; SSE3-NEXT:    retq
15112 ; SSSE3-LABEL: ult_27_v4i32:
15113 ; SSSE3:       # %bb.0:
15114 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15115 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
15116 ; SSSE3-NEXT:    pand %xmm1, %xmm2
15117 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15118 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
15119 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
15120 ; SSSE3-NEXT:    psrlw $4, %xmm0
15121 ; SSSE3-NEXT:    pand %xmm1, %xmm0
15122 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
15123 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
15124 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
15125 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
15126 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
15127 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
15128 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
15129 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
15130 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
15131 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [27,27,27,27]
15132 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
15133 ; SSSE3-NEXT:    retq
15135 ; SSE41-LABEL: ult_27_v4i32:
15136 ; SSE41:       # %bb.0:
15137 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15138 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
15139 ; SSE41-NEXT:    pand %xmm1, %xmm2
15140 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15141 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
15142 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
15143 ; SSE41-NEXT:    psrlw $4, %xmm0
15144 ; SSE41-NEXT:    pand %xmm1, %xmm0
15145 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
15146 ; SSE41-NEXT:    paddb %xmm4, %xmm3
15147 ; SSE41-NEXT:    pxor %xmm0, %xmm0
15148 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
15149 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
15150 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
15151 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
15152 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
15153 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [27,27,27,27]
15154 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
15155 ; SSE41-NEXT:    retq
15157 ; AVX1-LABEL: ult_27_v4i32:
15158 ; AVX1:       # %bb.0:
15159 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15160 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15161 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15162 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15163 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15164 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15165 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15166 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15167 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15168 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15169 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15170 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15171 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15172 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15173 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [27,27,27,27]
15174 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15175 ; AVX1-NEXT:    retq
15177 ; AVX2-LABEL: ult_27_v4i32:
15178 ; AVX2:       # %bb.0:
15179 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15180 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
15181 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15182 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15183 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
15184 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
15185 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15186 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15187 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15188 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15189 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15190 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15191 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15192 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15193 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15194 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15195 ; AVX2-NEXT:    retq
15197 ; AVX512VPOPCNTDQ-LABEL: ult_27_v4i32:
15198 ; AVX512VPOPCNTDQ:       # %bb.0:
15199 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15200 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
15201 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15202 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15203 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
15204 ; AVX512VPOPCNTDQ-NEXT:    retq
15206 ; AVX512VPOPCNTDQVL-LABEL: ult_27_v4i32:
15207 ; AVX512VPOPCNTDQVL:       # %bb.0:
15208 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
15209 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15210 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15211 ; AVX512VPOPCNTDQVL-NEXT:    retq
15213 ; BITALG_NOVLX-LABEL: ult_27_v4i32:
15214 ; BITALG_NOVLX:       # %bb.0:
15215 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15216 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15217 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15218 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15219 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15220 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15221 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15222 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15223 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15224 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15225 ; BITALG_NOVLX-NEXT:    vzeroupper
15226 ; BITALG_NOVLX-NEXT:    retq
15228 ; BITALG-LABEL: ult_27_v4i32:
15229 ; BITALG:       # %bb.0:
15230 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
15231 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15232 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15233 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15234 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15235 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15236 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15237 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15238 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15239 ; BITALG-NEXT:    retq
15240   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
15241   %3 = icmp ult <4 x i32> %2, <i32 27, i32 27, i32 27, i32 27>
15242   %4 = sext <4 x i1> %3 to <4 x i32>
15243   ret <4 x i32> %4
15246 define <4 x i32> @ugt_27_v4i32(<4 x i32> %0) {
15247 ; SSE2-LABEL: ugt_27_v4i32:
15248 ; SSE2:       # %bb.0:
15249 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15250 ; SSE2-NEXT:    psrlw $1, %xmm1
15251 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15252 ; SSE2-NEXT:    psubb %xmm1, %xmm0
15253 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15254 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
15255 ; SSE2-NEXT:    pand %xmm1, %xmm2
15256 ; SSE2-NEXT:    psrlw $2, %xmm0
15257 ; SSE2-NEXT:    pand %xmm1, %xmm0
15258 ; SSE2-NEXT:    paddb %xmm2, %xmm0
15259 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15260 ; SSE2-NEXT:    psrlw $4, %xmm1
15261 ; SSE2-NEXT:    paddb %xmm1, %xmm0
15262 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15263 ; SSE2-NEXT:    pxor %xmm1, %xmm1
15264 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
15265 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
15266 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
15267 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
15268 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
15269 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
15270 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15271 ; SSE2-NEXT:    retq
15273 ; SSE3-LABEL: ugt_27_v4i32:
15274 ; SSE3:       # %bb.0:
15275 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15276 ; SSE3-NEXT:    psrlw $1, %xmm1
15277 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15278 ; SSE3-NEXT:    psubb %xmm1, %xmm0
15279 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15280 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
15281 ; SSE3-NEXT:    pand %xmm1, %xmm2
15282 ; SSE3-NEXT:    psrlw $2, %xmm0
15283 ; SSE3-NEXT:    pand %xmm1, %xmm0
15284 ; SSE3-NEXT:    paddb %xmm2, %xmm0
15285 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15286 ; SSE3-NEXT:    psrlw $4, %xmm1
15287 ; SSE3-NEXT:    paddb %xmm1, %xmm0
15288 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15289 ; SSE3-NEXT:    pxor %xmm1, %xmm1
15290 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
15291 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
15292 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
15293 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
15294 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
15295 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
15296 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15297 ; SSE3-NEXT:    retq
15299 ; SSSE3-LABEL: ugt_27_v4i32:
15300 ; SSSE3:       # %bb.0:
15301 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15302 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
15303 ; SSSE3-NEXT:    pand %xmm2, %xmm3
15304 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15305 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
15306 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
15307 ; SSSE3-NEXT:    psrlw $4, %xmm0
15308 ; SSSE3-NEXT:    pand %xmm2, %xmm0
15309 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
15310 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
15311 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
15312 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
15313 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
15314 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
15315 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
15316 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
15317 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
15318 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15319 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
15320 ; SSSE3-NEXT:    retq
15322 ; SSE41-LABEL: ugt_27_v4i32:
15323 ; SSE41:       # %bb.0:
15324 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15325 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
15326 ; SSE41-NEXT:    pand %xmm1, %xmm2
15327 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15328 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
15329 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
15330 ; SSE41-NEXT:    psrlw $4, %xmm0
15331 ; SSE41-NEXT:    pand %xmm1, %xmm0
15332 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
15333 ; SSE41-NEXT:    paddb %xmm4, %xmm3
15334 ; SSE41-NEXT:    pxor %xmm1, %xmm1
15335 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
15336 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
15337 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
15338 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
15339 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
15340 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15341 ; SSE41-NEXT:    retq
15343 ; AVX1-LABEL: ugt_27_v4i32:
15344 ; AVX1:       # %bb.0:
15345 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15346 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15347 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15348 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15349 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15350 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15351 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15352 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15353 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15354 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15355 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15356 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15357 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15358 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15359 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
15360 ; AVX1-NEXT:    retq
15362 ; AVX2-LABEL: ugt_27_v4i32:
15363 ; AVX2:       # %bb.0:
15364 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15365 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
15366 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15367 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15368 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
15369 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
15370 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15371 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15372 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15373 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15374 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15375 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15376 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15377 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15378 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15379 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15380 ; AVX2-NEXT:    retq
15382 ; AVX512VPOPCNTDQ-LABEL: ugt_27_v4i32:
15383 ; AVX512VPOPCNTDQ:       # %bb.0:
15384 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15385 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
15386 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15387 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15388 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
15389 ; AVX512VPOPCNTDQ-NEXT:    retq
15391 ; AVX512VPOPCNTDQVL-LABEL: ugt_27_v4i32:
15392 ; AVX512VPOPCNTDQVL:       # %bb.0:
15393 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
15394 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15395 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15396 ; AVX512VPOPCNTDQVL-NEXT:    retq
15398 ; BITALG_NOVLX-LABEL: ugt_27_v4i32:
15399 ; BITALG_NOVLX:       # %bb.0:
15400 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15401 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15402 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15403 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15404 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15405 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15406 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15407 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15408 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15409 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15410 ; BITALG_NOVLX-NEXT:    vzeroupper
15411 ; BITALG_NOVLX-NEXT:    retq
15413 ; BITALG-LABEL: ugt_27_v4i32:
15414 ; BITALG:       # %bb.0:
15415 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
15416 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15417 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15418 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15419 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15420 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15421 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15422 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [27,27,27,27]
15423 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15424 ; BITALG-NEXT:    retq
15425   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
15426   %3 = icmp ugt <4 x i32> %2, <i32 27, i32 27, i32 27, i32 27>
15427   %4 = sext <4 x i1> %3 to <4 x i32>
15428   ret <4 x i32> %4
15431 define <4 x i32> @ult_28_v4i32(<4 x i32> %0) {
15432 ; SSE2-LABEL: ult_28_v4i32:
15433 ; SSE2:       # %bb.0:
15434 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15435 ; SSE2-NEXT:    psrlw $1, %xmm1
15436 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15437 ; SSE2-NEXT:    psubb %xmm1, %xmm0
15438 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15439 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
15440 ; SSE2-NEXT:    pand %xmm1, %xmm2
15441 ; SSE2-NEXT:    psrlw $2, %xmm0
15442 ; SSE2-NEXT:    pand %xmm1, %xmm0
15443 ; SSE2-NEXT:    paddb %xmm2, %xmm0
15444 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15445 ; SSE2-NEXT:    psrlw $4, %xmm1
15446 ; SSE2-NEXT:    paddb %xmm0, %xmm1
15447 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15448 ; SSE2-NEXT:    pxor %xmm0, %xmm0
15449 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
15450 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
15451 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
15452 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
15453 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
15454 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
15455 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [28,28,28,28]
15456 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
15457 ; SSE2-NEXT:    retq
15459 ; SSE3-LABEL: ult_28_v4i32:
15460 ; SSE3:       # %bb.0:
15461 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15462 ; SSE3-NEXT:    psrlw $1, %xmm1
15463 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15464 ; SSE3-NEXT:    psubb %xmm1, %xmm0
15465 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15466 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
15467 ; SSE3-NEXT:    pand %xmm1, %xmm2
15468 ; SSE3-NEXT:    psrlw $2, %xmm0
15469 ; SSE3-NEXT:    pand %xmm1, %xmm0
15470 ; SSE3-NEXT:    paddb %xmm2, %xmm0
15471 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15472 ; SSE3-NEXT:    psrlw $4, %xmm1
15473 ; SSE3-NEXT:    paddb %xmm0, %xmm1
15474 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15475 ; SSE3-NEXT:    pxor %xmm0, %xmm0
15476 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
15477 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
15478 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
15479 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
15480 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
15481 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
15482 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [28,28,28,28]
15483 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
15484 ; SSE3-NEXT:    retq
15486 ; SSSE3-LABEL: ult_28_v4i32:
15487 ; SSSE3:       # %bb.0:
15488 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15489 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
15490 ; SSSE3-NEXT:    pand %xmm1, %xmm2
15491 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15492 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
15493 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
15494 ; SSSE3-NEXT:    psrlw $4, %xmm0
15495 ; SSSE3-NEXT:    pand %xmm1, %xmm0
15496 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
15497 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
15498 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
15499 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
15500 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
15501 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
15502 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
15503 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
15504 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
15505 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [28,28,28,28]
15506 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
15507 ; SSSE3-NEXT:    retq
15509 ; SSE41-LABEL: ult_28_v4i32:
15510 ; SSE41:       # %bb.0:
15511 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15512 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
15513 ; SSE41-NEXT:    pand %xmm1, %xmm2
15514 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15515 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
15516 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
15517 ; SSE41-NEXT:    psrlw $4, %xmm0
15518 ; SSE41-NEXT:    pand %xmm1, %xmm0
15519 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
15520 ; SSE41-NEXT:    paddb %xmm4, %xmm3
15521 ; SSE41-NEXT:    pxor %xmm0, %xmm0
15522 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
15523 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
15524 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
15525 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
15526 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
15527 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [28,28,28,28]
15528 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
15529 ; SSE41-NEXT:    retq
15531 ; AVX1-LABEL: ult_28_v4i32:
15532 ; AVX1:       # %bb.0:
15533 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15534 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15535 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15536 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15537 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15538 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15539 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15540 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15541 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15542 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15543 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15544 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15545 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15546 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15547 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [28,28,28,28]
15548 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15549 ; AVX1-NEXT:    retq
15551 ; AVX2-LABEL: ult_28_v4i32:
15552 ; AVX2:       # %bb.0:
15553 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15554 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
15555 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15556 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15557 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
15558 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
15559 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15560 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15561 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15562 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15563 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15564 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15565 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15566 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15567 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15568 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15569 ; AVX2-NEXT:    retq
15571 ; AVX512VPOPCNTDQ-LABEL: ult_28_v4i32:
15572 ; AVX512VPOPCNTDQ:       # %bb.0:
15573 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15574 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
15575 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15576 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15577 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
15578 ; AVX512VPOPCNTDQ-NEXT:    retq
15580 ; AVX512VPOPCNTDQVL-LABEL: ult_28_v4i32:
15581 ; AVX512VPOPCNTDQVL:       # %bb.0:
15582 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
15583 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15584 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15585 ; AVX512VPOPCNTDQVL-NEXT:    retq
15587 ; BITALG_NOVLX-LABEL: ult_28_v4i32:
15588 ; BITALG_NOVLX:       # %bb.0:
15589 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15590 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15591 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15592 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15593 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15594 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15595 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15596 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15597 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15598 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15599 ; BITALG_NOVLX-NEXT:    vzeroupper
15600 ; BITALG_NOVLX-NEXT:    retq
15602 ; BITALG-LABEL: ult_28_v4i32:
15603 ; BITALG:       # %bb.0:
15604 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
15605 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15606 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15607 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15608 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15609 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15610 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15611 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15612 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15613 ; BITALG-NEXT:    retq
15614   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
15615   %3 = icmp ult <4 x i32> %2, <i32 28, i32 28, i32 28, i32 28>
15616   %4 = sext <4 x i1> %3 to <4 x i32>
15617   ret <4 x i32> %4
15620 define <4 x i32> @ugt_28_v4i32(<4 x i32> %0) {
15621 ; SSE2-LABEL: ugt_28_v4i32:
15622 ; SSE2:       # %bb.0:
15623 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15624 ; SSE2-NEXT:    psrlw $1, %xmm1
15625 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15626 ; SSE2-NEXT:    psubb %xmm1, %xmm0
15627 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15628 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
15629 ; SSE2-NEXT:    pand %xmm1, %xmm2
15630 ; SSE2-NEXT:    psrlw $2, %xmm0
15631 ; SSE2-NEXT:    pand %xmm1, %xmm0
15632 ; SSE2-NEXT:    paddb %xmm2, %xmm0
15633 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15634 ; SSE2-NEXT:    psrlw $4, %xmm1
15635 ; SSE2-NEXT:    paddb %xmm1, %xmm0
15636 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15637 ; SSE2-NEXT:    pxor %xmm1, %xmm1
15638 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
15639 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
15640 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
15641 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
15642 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
15643 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
15644 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15645 ; SSE2-NEXT:    retq
15647 ; SSE3-LABEL: ugt_28_v4i32:
15648 ; SSE3:       # %bb.0:
15649 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15650 ; SSE3-NEXT:    psrlw $1, %xmm1
15651 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15652 ; SSE3-NEXT:    psubb %xmm1, %xmm0
15653 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15654 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
15655 ; SSE3-NEXT:    pand %xmm1, %xmm2
15656 ; SSE3-NEXT:    psrlw $2, %xmm0
15657 ; SSE3-NEXT:    pand %xmm1, %xmm0
15658 ; SSE3-NEXT:    paddb %xmm2, %xmm0
15659 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15660 ; SSE3-NEXT:    psrlw $4, %xmm1
15661 ; SSE3-NEXT:    paddb %xmm1, %xmm0
15662 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15663 ; SSE3-NEXT:    pxor %xmm1, %xmm1
15664 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
15665 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
15666 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
15667 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
15668 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
15669 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
15670 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15671 ; SSE3-NEXT:    retq
15673 ; SSSE3-LABEL: ugt_28_v4i32:
15674 ; SSSE3:       # %bb.0:
15675 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15676 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
15677 ; SSSE3-NEXT:    pand %xmm2, %xmm3
15678 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15679 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
15680 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
15681 ; SSSE3-NEXT:    psrlw $4, %xmm0
15682 ; SSSE3-NEXT:    pand %xmm2, %xmm0
15683 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
15684 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
15685 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
15686 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
15687 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
15688 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
15689 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
15690 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
15691 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
15692 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15693 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
15694 ; SSSE3-NEXT:    retq
15696 ; SSE41-LABEL: ugt_28_v4i32:
15697 ; SSE41:       # %bb.0:
15698 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15699 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
15700 ; SSE41-NEXT:    pand %xmm1, %xmm2
15701 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15702 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
15703 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
15704 ; SSE41-NEXT:    psrlw $4, %xmm0
15705 ; SSE41-NEXT:    pand %xmm1, %xmm0
15706 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
15707 ; SSE41-NEXT:    paddb %xmm4, %xmm3
15708 ; SSE41-NEXT:    pxor %xmm1, %xmm1
15709 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
15710 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
15711 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
15712 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
15713 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
15714 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
15715 ; SSE41-NEXT:    retq
15717 ; AVX1-LABEL: ugt_28_v4i32:
15718 ; AVX1:       # %bb.0:
15719 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15720 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15721 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15722 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15723 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15724 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15725 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15726 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15727 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15728 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15729 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15730 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15731 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15732 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15733 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
15734 ; AVX1-NEXT:    retq
15736 ; AVX2-LABEL: ugt_28_v4i32:
15737 ; AVX2:       # %bb.0:
15738 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15739 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
15740 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15741 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15742 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
15743 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
15744 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15745 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15746 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15747 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15748 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15749 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15750 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15751 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15752 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15753 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15754 ; AVX2-NEXT:    retq
15756 ; AVX512VPOPCNTDQ-LABEL: ugt_28_v4i32:
15757 ; AVX512VPOPCNTDQ:       # %bb.0:
15758 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15759 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
15760 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15761 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15762 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
15763 ; AVX512VPOPCNTDQ-NEXT:    retq
15765 ; AVX512VPOPCNTDQVL-LABEL: ugt_28_v4i32:
15766 ; AVX512VPOPCNTDQVL:       # %bb.0:
15767 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
15768 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15769 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15770 ; AVX512VPOPCNTDQVL-NEXT:    retq
15772 ; BITALG_NOVLX-LABEL: ugt_28_v4i32:
15773 ; BITALG_NOVLX:       # %bb.0:
15774 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15775 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15776 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15777 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15778 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15779 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15780 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15781 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15782 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15783 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15784 ; BITALG_NOVLX-NEXT:    vzeroupper
15785 ; BITALG_NOVLX-NEXT:    retq
15787 ; BITALG-LABEL: ugt_28_v4i32:
15788 ; BITALG:       # %bb.0:
15789 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
15790 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15791 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15792 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15793 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15794 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15795 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15796 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [28,28,28,28]
15797 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
15798 ; BITALG-NEXT:    retq
15799   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
15800   %3 = icmp ugt <4 x i32> %2, <i32 28, i32 28, i32 28, i32 28>
15801   %4 = sext <4 x i1> %3 to <4 x i32>
15802   ret <4 x i32> %4
15805 define <4 x i32> @ult_29_v4i32(<4 x i32> %0) {
15806 ; SSE2-LABEL: ult_29_v4i32:
15807 ; SSE2:       # %bb.0:
15808 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15809 ; SSE2-NEXT:    psrlw $1, %xmm1
15810 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15811 ; SSE2-NEXT:    psubb %xmm1, %xmm0
15812 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15813 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
15814 ; SSE2-NEXT:    pand %xmm1, %xmm2
15815 ; SSE2-NEXT:    psrlw $2, %xmm0
15816 ; SSE2-NEXT:    pand %xmm1, %xmm0
15817 ; SSE2-NEXT:    paddb %xmm2, %xmm0
15818 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15819 ; SSE2-NEXT:    psrlw $4, %xmm1
15820 ; SSE2-NEXT:    paddb %xmm0, %xmm1
15821 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15822 ; SSE2-NEXT:    pxor %xmm0, %xmm0
15823 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
15824 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
15825 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
15826 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
15827 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
15828 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
15829 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [29,29,29,29]
15830 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
15831 ; SSE2-NEXT:    retq
15833 ; SSE3-LABEL: ult_29_v4i32:
15834 ; SSE3:       # %bb.0:
15835 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15836 ; SSE3-NEXT:    psrlw $1, %xmm1
15837 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15838 ; SSE3-NEXT:    psubb %xmm1, %xmm0
15839 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
15840 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
15841 ; SSE3-NEXT:    pand %xmm1, %xmm2
15842 ; SSE3-NEXT:    psrlw $2, %xmm0
15843 ; SSE3-NEXT:    pand %xmm1, %xmm0
15844 ; SSE3-NEXT:    paddb %xmm2, %xmm0
15845 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
15846 ; SSE3-NEXT:    psrlw $4, %xmm1
15847 ; SSE3-NEXT:    paddb %xmm0, %xmm1
15848 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
15849 ; SSE3-NEXT:    pxor %xmm0, %xmm0
15850 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
15851 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
15852 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
15853 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
15854 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
15855 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
15856 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [29,29,29,29]
15857 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
15858 ; SSE3-NEXT:    retq
15860 ; SSSE3-LABEL: ult_29_v4i32:
15861 ; SSSE3:       # %bb.0:
15862 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15863 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
15864 ; SSSE3-NEXT:    pand %xmm1, %xmm2
15865 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15866 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
15867 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
15868 ; SSSE3-NEXT:    psrlw $4, %xmm0
15869 ; SSSE3-NEXT:    pand %xmm1, %xmm0
15870 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
15871 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
15872 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
15873 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
15874 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
15875 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
15876 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
15877 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
15878 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
15879 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [29,29,29,29]
15880 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
15881 ; SSSE3-NEXT:    retq
15883 ; SSE41-LABEL: ult_29_v4i32:
15884 ; SSE41:       # %bb.0:
15885 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15886 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
15887 ; SSE41-NEXT:    pand %xmm1, %xmm2
15888 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15889 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
15890 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
15891 ; SSE41-NEXT:    psrlw $4, %xmm0
15892 ; SSE41-NEXT:    pand %xmm1, %xmm0
15893 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
15894 ; SSE41-NEXT:    paddb %xmm4, %xmm3
15895 ; SSE41-NEXT:    pxor %xmm0, %xmm0
15896 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
15897 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
15898 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
15899 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
15900 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
15901 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [29,29,29,29]
15902 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
15903 ; SSE41-NEXT:    retq
15905 ; AVX1-LABEL: ult_29_v4i32:
15906 ; AVX1:       # %bb.0:
15907 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15908 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
15909 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15910 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15911 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
15912 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
15913 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15914 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15915 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15916 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15917 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15918 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15919 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15920 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15921 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [29,29,29,29]
15922 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15923 ; AVX1-NEXT:    retq
15925 ; AVX2-LABEL: ult_29_v4i32:
15926 ; AVX2:       # %bb.0:
15927 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
15928 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
15929 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
15930 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
15931 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
15932 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
15933 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
15934 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
15935 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15936 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15937 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15938 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15939 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15940 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15941 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
15942 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15943 ; AVX2-NEXT:    retq
15945 ; AVX512VPOPCNTDQ-LABEL: ult_29_v4i32:
15946 ; AVX512VPOPCNTDQ:       # %bb.0:
15947 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15948 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
15949 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
15950 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15951 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
15952 ; AVX512VPOPCNTDQ-NEXT:    retq
15954 ; AVX512VPOPCNTDQVL-LABEL: ult_29_v4i32:
15955 ; AVX512VPOPCNTDQVL:       # %bb.0:
15956 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
15957 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
15958 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15959 ; AVX512VPOPCNTDQVL-NEXT:    retq
15961 ; BITALG_NOVLX-LABEL: ult_29_v4i32:
15962 ; BITALG_NOVLX:       # %bb.0:
15963 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
15964 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
15965 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15966 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15967 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15968 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15969 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15970 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15971 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
15972 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15973 ; BITALG_NOVLX-NEXT:    vzeroupper
15974 ; BITALG_NOVLX-NEXT:    retq
15976 ; BITALG-LABEL: ult_29_v4i32:
15977 ; BITALG:       # %bb.0:
15978 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
15979 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
15980 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
15981 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
15982 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
15983 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
15984 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
15985 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
15986 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
15987 ; BITALG-NEXT:    retq
15988   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
15989   %3 = icmp ult <4 x i32> %2, <i32 29, i32 29, i32 29, i32 29>
15990   %4 = sext <4 x i1> %3 to <4 x i32>
15991   ret <4 x i32> %4
15994 define <4 x i32> @ugt_29_v4i32(<4 x i32> %0) {
15995 ; SSE2-LABEL: ugt_29_v4i32:
15996 ; SSE2:       # %bb.0:
15997 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
15998 ; SSE2-NEXT:    psrlw $1, %xmm1
15999 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16000 ; SSE2-NEXT:    psubb %xmm1, %xmm0
16001 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16002 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
16003 ; SSE2-NEXT:    pand %xmm1, %xmm2
16004 ; SSE2-NEXT:    psrlw $2, %xmm0
16005 ; SSE2-NEXT:    pand %xmm1, %xmm0
16006 ; SSE2-NEXT:    paddb %xmm2, %xmm0
16007 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16008 ; SSE2-NEXT:    psrlw $4, %xmm1
16009 ; SSE2-NEXT:    paddb %xmm1, %xmm0
16010 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16011 ; SSE2-NEXT:    pxor %xmm1, %xmm1
16012 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
16013 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
16014 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
16015 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
16016 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
16017 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
16018 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16019 ; SSE2-NEXT:    retq
16021 ; SSE3-LABEL: ugt_29_v4i32:
16022 ; SSE3:       # %bb.0:
16023 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16024 ; SSE3-NEXT:    psrlw $1, %xmm1
16025 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16026 ; SSE3-NEXT:    psubb %xmm1, %xmm0
16027 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16028 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
16029 ; SSE3-NEXT:    pand %xmm1, %xmm2
16030 ; SSE3-NEXT:    psrlw $2, %xmm0
16031 ; SSE3-NEXT:    pand %xmm1, %xmm0
16032 ; SSE3-NEXT:    paddb %xmm2, %xmm0
16033 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16034 ; SSE3-NEXT:    psrlw $4, %xmm1
16035 ; SSE3-NEXT:    paddb %xmm1, %xmm0
16036 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16037 ; SSE3-NEXT:    pxor %xmm1, %xmm1
16038 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
16039 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
16040 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
16041 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
16042 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
16043 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
16044 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16045 ; SSE3-NEXT:    retq
16047 ; SSSE3-LABEL: ugt_29_v4i32:
16048 ; SSSE3:       # %bb.0:
16049 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16050 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
16051 ; SSSE3-NEXT:    pand %xmm2, %xmm3
16052 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16053 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
16054 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
16055 ; SSSE3-NEXT:    psrlw $4, %xmm0
16056 ; SSSE3-NEXT:    pand %xmm2, %xmm0
16057 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
16058 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
16059 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
16060 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
16061 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
16062 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
16063 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
16064 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
16065 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
16066 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16067 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
16068 ; SSSE3-NEXT:    retq
16070 ; SSE41-LABEL: ugt_29_v4i32:
16071 ; SSE41:       # %bb.0:
16072 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16073 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
16074 ; SSE41-NEXT:    pand %xmm1, %xmm2
16075 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16076 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
16077 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
16078 ; SSE41-NEXT:    psrlw $4, %xmm0
16079 ; SSE41-NEXT:    pand %xmm1, %xmm0
16080 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
16081 ; SSE41-NEXT:    paddb %xmm4, %xmm3
16082 ; SSE41-NEXT:    pxor %xmm1, %xmm1
16083 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
16084 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
16085 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
16086 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
16087 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
16088 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16089 ; SSE41-NEXT:    retq
16091 ; AVX1-LABEL: ugt_29_v4i32:
16092 ; AVX1:       # %bb.0:
16093 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16094 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16095 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16096 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16097 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16098 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16099 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16100 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
16101 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16102 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16103 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16104 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16105 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16106 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16107 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
16108 ; AVX1-NEXT:    retq
16110 ; AVX2-LABEL: ugt_29_v4i32:
16111 ; AVX2:       # %bb.0:
16112 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16113 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
16114 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16115 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16116 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
16117 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
16118 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16119 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
16120 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16121 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16122 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16123 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16124 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16125 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16126 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
16127 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16128 ; AVX2-NEXT:    retq
16130 ; AVX512VPOPCNTDQ-LABEL: ugt_29_v4i32:
16131 ; AVX512VPOPCNTDQ:       # %bb.0:
16132 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16133 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
16134 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
16135 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16136 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
16137 ; AVX512VPOPCNTDQ-NEXT:    retq
16139 ; AVX512VPOPCNTDQVL-LABEL: ugt_29_v4i32:
16140 ; AVX512VPOPCNTDQVL:       # %bb.0:
16141 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
16142 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
16143 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16144 ; AVX512VPOPCNTDQVL-NEXT:    retq
16146 ; BITALG_NOVLX-LABEL: ugt_29_v4i32:
16147 ; BITALG_NOVLX:       # %bb.0:
16148 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16149 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16150 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16151 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16152 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16153 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16154 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16155 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16156 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
16157 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16158 ; BITALG_NOVLX-NEXT:    vzeroupper
16159 ; BITALG_NOVLX-NEXT:    retq
16161 ; BITALG-LABEL: ugt_29_v4i32:
16162 ; BITALG:       # %bb.0:
16163 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
16164 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16165 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16166 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16167 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16168 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16169 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16170 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [29,29,29,29]
16171 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16172 ; BITALG-NEXT:    retq
16173   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
16174   %3 = icmp ugt <4 x i32> %2, <i32 29, i32 29, i32 29, i32 29>
16175   %4 = sext <4 x i1> %3 to <4 x i32>
16176   ret <4 x i32> %4
16179 define <4 x i32> @ult_30_v4i32(<4 x i32> %0) {
16180 ; SSE2-LABEL: ult_30_v4i32:
16181 ; SSE2:       # %bb.0:
16182 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16183 ; SSE2-NEXT:    psrlw $1, %xmm1
16184 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16185 ; SSE2-NEXT:    psubb %xmm1, %xmm0
16186 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16187 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
16188 ; SSE2-NEXT:    pand %xmm1, %xmm2
16189 ; SSE2-NEXT:    psrlw $2, %xmm0
16190 ; SSE2-NEXT:    pand %xmm1, %xmm0
16191 ; SSE2-NEXT:    paddb %xmm2, %xmm0
16192 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16193 ; SSE2-NEXT:    psrlw $4, %xmm1
16194 ; SSE2-NEXT:    paddb %xmm0, %xmm1
16195 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16196 ; SSE2-NEXT:    pxor %xmm0, %xmm0
16197 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
16198 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
16199 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
16200 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
16201 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
16202 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
16203 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [30,30,30,30]
16204 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
16205 ; SSE2-NEXT:    retq
16207 ; SSE3-LABEL: ult_30_v4i32:
16208 ; SSE3:       # %bb.0:
16209 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16210 ; SSE3-NEXT:    psrlw $1, %xmm1
16211 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16212 ; SSE3-NEXT:    psubb %xmm1, %xmm0
16213 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16214 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
16215 ; SSE3-NEXT:    pand %xmm1, %xmm2
16216 ; SSE3-NEXT:    psrlw $2, %xmm0
16217 ; SSE3-NEXT:    pand %xmm1, %xmm0
16218 ; SSE3-NEXT:    paddb %xmm2, %xmm0
16219 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16220 ; SSE3-NEXT:    psrlw $4, %xmm1
16221 ; SSE3-NEXT:    paddb %xmm0, %xmm1
16222 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16223 ; SSE3-NEXT:    pxor %xmm0, %xmm0
16224 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
16225 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
16226 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
16227 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
16228 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
16229 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
16230 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [30,30,30,30]
16231 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
16232 ; SSE3-NEXT:    retq
16234 ; SSSE3-LABEL: ult_30_v4i32:
16235 ; SSSE3:       # %bb.0:
16236 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16237 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
16238 ; SSSE3-NEXT:    pand %xmm1, %xmm2
16239 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16240 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
16241 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
16242 ; SSSE3-NEXT:    psrlw $4, %xmm0
16243 ; SSSE3-NEXT:    pand %xmm1, %xmm0
16244 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
16245 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
16246 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
16247 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
16248 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
16249 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
16250 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
16251 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
16252 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
16253 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [30,30,30,30]
16254 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
16255 ; SSSE3-NEXT:    retq
16257 ; SSE41-LABEL: ult_30_v4i32:
16258 ; SSE41:       # %bb.0:
16259 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16260 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
16261 ; SSE41-NEXT:    pand %xmm1, %xmm2
16262 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16263 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
16264 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
16265 ; SSE41-NEXT:    psrlw $4, %xmm0
16266 ; SSE41-NEXT:    pand %xmm1, %xmm0
16267 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
16268 ; SSE41-NEXT:    paddb %xmm4, %xmm3
16269 ; SSE41-NEXT:    pxor %xmm0, %xmm0
16270 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
16271 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
16272 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
16273 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
16274 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
16275 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [30,30,30,30]
16276 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
16277 ; SSE41-NEXT:    retq
16279 ; AVX1-LABEL: ult_30_v4i32:
16280 ; AVX1:       # %bb.0:
16281 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16282 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16283 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16284 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16285 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16286 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16287 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16288 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
16289 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16290 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16291 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16292 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16293 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16294 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16295 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [30,30,30,30]
16296 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16297 ; AVX1-NEXT:    retq
16299 ; AVX2-LABEL: ult_30_v4i32:
16300 ; AVX2:       # %bb.0:
16301 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16302 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
16303 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16304 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16305 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
16306 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
16307 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16308 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
16309 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16310 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16311 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16312 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16313 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16314 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16315 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16316 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16317 ; AVX2-NEXT:    retq
16319 ; AVX512VPOPCNTDQ-LABEL: ult_30_v4i32:
16320 ; AVX512VPOPCNTDQ:       # %bb.0:
16321 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16322 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
16323 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16324 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16325 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
16326 ; AVX512VPOPCNTDQ-NEXT:    retq
16328 ; AVX512VPOPCNTDQVL-LABEL: ult_30_v4i32:
16329 ; AVX512VPOPCNTDQVL:       # %bb.0:
16330 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
16331 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16332 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16333 ; AVX512VPOPCNTDQVL-NEXT:    retq
16335 ; BITALG_NOVLX-LABEL: ult_30_v4i32:
16336 ; BITALG_NOVLX:       # %bb.0:
16337 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16338 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16339 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16340 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16341 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16342 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16343 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16344 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16345 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16346 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16347 ; BITALG_NOVLX-NEXT:    vzeroupper
16348 ; BITALG_NOVLX-NEXT:    retq
16350 ; BITALG-LABEL: ult_30_v4i32:
16351 ; BITALG:       # %bb.0:
16352 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
16353 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16354 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16355 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16356 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16357 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16358 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16359 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16360 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16361 ; BITALG-NEXT:    retq
16362   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
16363   %3 = icmp ult <4 x i32> %2, <i32 30, i32 30, i32 30, i32 30>
16364   %4 = sext <4 x i1> %3 to <4 x i32>
16365   ret <4 x i32> %4
16368 define <4 x i32> @ugt_30_v4i32(<4 x i32> %0) {
16369 ; SSE2-LABEL: ugt_30_v4i32:
16370 ; SSE2:       # %bb.0:
16371 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16372 ; SSE2-NEXT:    psrlw $1, %xmm1
16373 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16374 ; SSE2-NEXT:    psubb %xmm1, %xmm0
16375 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16376 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
16377 ; SSE2-NEXT:    pand %xmm1, %xmm2
16378 ; SSE2-NEXT:    psrlw $2, %xmm0
16379 ; SSE2-NEXT:    pand %xmm1, %xmm0
16380 ; SSE2-NEXT:    paddb %xmm2, %xmm0
16381 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16382 ; SSE2-NEXT:    psrlw $4, %xmm1
16383 ; SSE2-NEXT:    paddb %xmm1, %xmm0
16384 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16385 ; SSE2-NEXT:    pxor %xmm1, %xmm1
16386 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
16387 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
16388 ; SSE2-NEXT:    psadbw %xmm1, %xmm2
16389 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
16390 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
16391 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
16392 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16393 ; SSE2-NEXT:    retq
16395 ; SSE3-LABEL: ugt_30_v4i32:
16396 ; SSE3:       # %bb.0:
16397 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16398 ; SSE3-NEXT:    psrlw $1, %xmm1
16399 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16400 ; SSE3-NEXT:    psubb %xmm1, %xmm0
16401 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16402 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
16403 ; SSE3-NEXT:    pand %xmm1, %xmm2
16404 ; SSE3-NEXT:    psrlw $2, %xmm0
16405 ; SSE3-NEXT:    pand %xmm1, %xmm0
16406 ; SSE3-NEXT:    paddb %xmm2, %xmm0
16407 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16408 ; SSE3-NEXT:    psrlw $4, %xmm1
16409 ; SSE3-NEXT:    paddb %xmm1, %xmm0
16410 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16411 ; SSE3-NEXT:    pxor %xmm1, %xmm1
16412 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
16413 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
16414 ; SSE3-NEXT:    psadbw %xmm1, %xmm2
16415 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
16416 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
16417 ; SSE3-NEXT:    packuswb %xmm2, %xmm0
16418 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16419 ; SSE3-NEXT:    retq
16421 ; SSSE3-LABEL: ugt_30_v4i32:
16422 ; SSSE3:       # %bb.0:
16423 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16424 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
16425 ; SSSE3-NEXT:    pand %xmm2, %xmm3
16426 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16427 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
16428 ; SSSE3-NEXT:    pshufb %xmm3, %xmm4
16429 ; SSSE3-NEXT:    psrlw $4, %xmm0
16430 ; SSSE3-NEXT:    pand %xmm2, %xmm0
16431 ; SSSE3-NEXT:    pshufb %xmm0, %xmm1
16432 ; SSSE3-NEXT:    paddb %xmm4, %xmm1
16433 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
16434 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
16435 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
16436 ; SSSE3-NEXT:    psadbw %xmm0, %xmm2
16437 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
16438 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
16439 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
16440 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16441 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
16442 ; SSSE3-NEXT:    retq
16444 ; SSE41-LABEL: ugt_30_v4i32:
16445 ; SSE41:       # %bb.0:
16446 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16447 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
16448 ; SSE41-NEXT:    pand %xmm1, %xmm2
16449 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16450 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
16451 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
16452 ; SSE41-NEXT:    psrlw $4, %xmm0
16453 ; SSE41-NEXT:    pand %xmm1, %xmm0
16454 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
16455 ; SSE41-NEXT:    paddb %xmm4, %xmm3
16456 ; SSE41-NEXT:    pxor %xmm1, %xmm1
16457 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm3[0],zero,xmm3[1],zero
16458 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm1[2],xmm3[3],xmm1[3]
16459 ; SSE41-NEXT:    psadbw %xmm1, %xmm3
16460 ; SSE41-NEXT:    psadbw %xmm1, %xmm0
16461 ; SSE41-NEXT:    packuswb %xmm3, %xmm0
16462 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16463 ; SSE41-NEXT:    retq
16465 ; AVX1-LABEL: ugt_30_v4i32:
16466 ; AVX1:       # %bb.0:
16467 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16468 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16469 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16470 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16471 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16472 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16473 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16474 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
16475 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16476 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16477 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16478 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16479 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16480 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16481 ; AVX1-NEXT:    vpcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
16482 ; AVX1-NEXT:    retq
16484 ; AVX2-LABEL: ugt_30_v4i32:
16485 ; AVX2:       # %bb.0:
16486 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16487 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
16488 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16489 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16490 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
16491 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
16492 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16493 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
16494 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16495 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16496 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16497 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16498 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16499 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16500 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16501 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16502 ; AVX2-NEXT:    retq
16504 ; AVX512VPOPCNTDQ-LABEL: ugt_30_v4i32:
16505 ; AVX512VPOPCNTDQ:       # %bb.0:
16506 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16507 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
16508 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16509 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16510 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
16511 ; AVX512VPOPCNTDQ-NEXT:    retq
16513 ; AVX512VPOPCNTDQVL-LABEL: ugt_30_v4i32:
16514 ; AVX512VPOPCNTDQVL:       # %bb.0:
16515 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
16516 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16517 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16518 ; AVX512VPOPCNTDQVL-NEXT:    retq
16520 ; BITALG_NOVLX-LABEL: ugt_30_v4i32:
16521 ; BITALG_NOVLX:       # %bb.0:
16522 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16523 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16524 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16525 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16526 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16527 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16528 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16529 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16530 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16531 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16532 ; BITALG_NOVLX-NEXT:    vzeroupper
16533 ; BITALG_NOVLX-NEXT:    retq
16535 ; BITALG-LABEL: ugt_30_v4i32:
16536 ; BITALG:       # %bb.0:
16537 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
16538 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16539 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16540 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16541 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16542 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16543 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16544 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [30,30,30,30]
16545 ; BITALG-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
16546 ; BITALG-NEXT:    retq
16547   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
16548   %3 = icmp ugt <4 x i32> %2, <i32 30, i32 30, i32 30, i32 30>
16549   %4 = sext <4 x i1> %3 to <4 x i32>
16550   ret <4 x i32> %4
16553 define <4 x i32> @ult_31_v4i32(<4 x i32> %0) {
16554 ; SSE2-LABEL: ult_31_v4i32:
16555 ; SSE2:       # %bb.0:
16556 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16557 ; SSE2-NEXT:    psrlw $1, %xmm1
16558 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16559 ; SSE2-NEXT:    psubb %xmm1, %xmm0
16560 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16561 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
16562 ; SSE2-NEXT:    pand %xmm1, %xmm2
16563 ; SSE2-NEXT:    psrlw $2, %xmm0
16564 ; SSE2-NEXT:    pand %xmm1, %xmm0
16565 ; SSE2-NEXT:    paddb %xmm2, %xmm0
16566 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16567 ; SSE2-NEXT:    psrlw $4, %xmm1
16568 ; SSE2-NEXT:    paddb %xmm0, %xmm1
16569 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16570 ; SSE2-NEXT:    pxor %xmm0, %xmm0
16571 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
16572 ; SSE2-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
16573 ; SSE2-NEXT:    psadbw %xmm0, %xmm2
16574 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
16575 ; SSE2-NEXT:    psadbw %xmm0, %xmm1
16576 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
16577 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [31,31,31,31]
16578 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
16579 ; SSE2-NEXT:    retq
16581 ; SSE3-LABEL: ult_31_v4i32:
16582 ; SSE3:       # %bb.0:
16583 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16584 ; SSE3-NEXT:    psrlw $1, %xmm1
16585 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16586 ; SSE3-NEXT:    psubb %xmm1, %xmm0
16587 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16588 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
16589 ; SSE3-NEXT:    pand %xmm1, %xmm2
16590 ; SSE3-NEXT:    psrlw $2, %xmm0
16591 ; SSE3-NEXT:    pand %xmm1, %xmm0
16592 ; SSE3-NEXT:    paddb %xmm2, %xmm0
16593 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16594 ; SSE3-NEXT:    psrlw $4, %xmm1
16595 ; SSE3-NEXT:    paddb %xmm0, %xmm1
16596 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16597 ; SSE3-NEXT:    pxor %xmm0, %xmm0
16598 ; SSE3-NEXT:    movdqa %xmm1, %xmm2
16599 ; SSE3-NEXT:    punpckhdq {{.*#+}} xmm2 = xmm2[2],xmm0[2],xmm2[3],xmm0[3]
16600 ; SSE3-NEXT:    psadbw %xmm0, %xmm2
16601 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
16602 ; SSE3-NEXT:    psadbw %xmm0, %xmm1
16603 ; SSE3-NEXT:    packuswb %xmm2, %xmm1
16604 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [31,31,31,31]
16605 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
16606 ; SSE3-NEXT:    retq
16608 ; SSSE3-LABEL: ult_31_v4i32:
16609 ; SSSE3:       # %bb.0:
16610 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16611 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
16612 ; SSSE3-NEXT:    pand %xmm1, %xmm2
16613 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16614 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
16615 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
16616 ; SSSE3-NEXT:    psrlw $4, %xmm0
16617 ; SSSE3-NEXT:    pand %xmm1, %xmm0
16618 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
16619 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
16620 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
16621 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
16622 ; SSSE3-NEXT:    punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm0[2],xmm1[3],xmm0[3]
16623 ; SSSE3-NEXT:    psadbw %xmm0, %xmm1
16624 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
16625 ; SSSE3-NEXT:    psadbw %xmm0, %xmm3
16626 ; SSSE3-NEXT:    packuswb %xmm1, %xmm3
16627 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [31,31,31,31]
16628 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
16629 ; SSSE3-NEXT:    retq
16631 ; SSE41-LABEL: ult_31_v4i32:
16632 ; SSE41:       # %bb.0:
16633 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16634 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
16635 ; SSE41-NEXT:    pand %xmm1, %xmm2
16636 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16637 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
16638 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
16639 ; SSE41-NEXT:    psrlw $4, %xmm0
16640 ; SSE41-NEXT:    pand %xmm1, %xmm0
16641 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
16642 ; SSE41-NEXT:    paddb %xmm4, %xmm3
16643 ; SSE41-NEXT:    pxor %xmm0, %xmm0
16644 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm1 = xmm3[0],zero,xmm3[1],zero
16645 ; SSE41-NEXT:    punpckhdq {{.*#+}} xmm3 = xmm3[2],xmm0[2],xmm3[3],xmm0[3]
16646 ; SSE41-NEXT:    psadbw %xmm0, %xmm3
16647 ; SSE41-NEXT:    psadbw %xmm0, %xmm1
16648 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
16649 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [31,31,31,31]
16650 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
16651 ; SSE41-NEXT:    retq
16653 ; AVX1-LABEL: ult_31_v4i32:
16654 ; AVX1:       # %bb.0:
16655 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16656 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
16657 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16658 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16659 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
16660 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16661 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16662 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
16663 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16664 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16665 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16666 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16667 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16668 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16669 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [31,31,31,31]
16670 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16671 ; AVX1-NEXT:    retq
16673 ; AVX2-LABEL: ult_31_v4i32:
16674 ; AVX2:       # %bb.0:
16675 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
16676 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
16677 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
16678 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
16679 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
16680 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
16681 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
16682 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
16683 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16684 ; AVX2-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16685 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16686 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16687 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16688 ; AVX2-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16689 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [31,31,31,31]
16690 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16691 ; AVX2-NEXT:    retq
16693 ; AVX512VPOPCNTDQ-LABEL: ult_31_v4i32:
16694 ; AVX512VPOPCNTDQ:       # %bb.0:
16695 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16696 ; AVX512VPOPCNTDQ-NEXT:    vpopcntd %zmm0, %zmm0
16697 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [31,31,31,31]
16698 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16699 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
16700 ; AVX512VPOPCNTDQ-NEXT:    retq
16702 ; AVX512VPOPCNTDQVL-LABEL: ult_31_v4i32:
16703 ; AVX512VPOPCNTDQVL:       # %bb.0:
16704 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntd %xmm0, %xmm0
16705 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [31,31,31,31]
16706 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16707 ; AVX512VPOPCNTDQVL-NEXT:    retq
16709 ; BITALG_NOVLX-LABEL: ult_31_v4i32:
16710 ; BITALG_NOVLX:       # %bb.0:
16711 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16712 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
16713 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16714 ; BITALG_NOVLX-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16715 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16716 ; BITALG_NOVLX-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16717 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16718 ; BITALG_NOVLX-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16719 ; BITALG_NOVLX-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [31,31,31,31]
16720 ; BITALG_NOVLX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16721 ; BITALG_NOVLX-NEXT:    vzeroupper
16722 ; BITALG_NOVLX-NEXT:    retq
16724 ; BITALG-LABEL: ult_31_v4i32:
16725 ; BITALG:       # %bb.0:
16726 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
16727 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16728 ; BITALG-NEXT:    vpunpckhdq {{.*#+}} xmm2 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
16729 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
16730 ; BITALG-NEXT:    vpmovzxdq {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero
16731 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
16732 ; BITALG-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
16733 ; BITALG-NEXT:    vpbroadcastd {{.*#+}} xmm1 = [31,31,31,31]
16734 ; BITALG-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
16735 ; BITALG-NEXT:    retq
16736   %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
16737   %3 = icmp ult <4 x i32> %2, <i32 31, i32 31, i32 31, i32 31>
16738   %4 = sext <4 x i1> %3 to <4 x i32>
16739   ret <4 x i32> %4
16742 define <2 x i64> @ugt_1_v2i64(<2 x i64> %0) {
16743 ; SSE2-LABEL: ugt_1_v2i64:
16744 ; SSE2:       # %bb.0:
16745 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
16746 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
16747 ; SSE2-NEXT:    paddq %xmm1, %xmm2
16748 ; SSE2-NEXT:    pand %xmm2, %xmm0
16749 ; SSE2-NEXT:    pxor %xmm2, %xmm2
16750 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
16751 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,0,3,2]
16752 ; SSE2-NEXT:    pand %xmm2, %xmm0
16753 ; SSE2-NEXT:    pxor %xmm1, %xmm0
16754 ; SSE2-NEXT:    retq
16756 ; SSE3-LABEL: ugt_1_v2i64:
16757 ; SSE3:       # %bb.0:
16758 ; SSE3-NEXT:    pcmpeqd %xmm1, %xmm1
16759 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
16760 ; SSE3-NEXT:    paddq %xmm1, %xmm2
16761 ; SSE3-NEXT:    pand %xmm2, %xmm0
16762 ; SSE3-NEXT:    pxor %xmm2, %xmm2
16763 ; SSE3-NEXT:    pcmpeqd %xmm2, %xmm0
16764 ; SSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,0,3,2]
16765 ; SSE3-NEXT:    pand %xmm2, %xmm0
16766 ; SSE3-NEXT:    pxor %xmm1, %xmm0
16767 ; SSE3-NEXT:    retq
16769 ; SSSE3-LABEL: ugt_1_v2i64:
16770 ; SSSE3:       # %bb.0:
16771 ; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm1
16772 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
16773 ; SSSE3-NEXT:    paddq %xmm1, %xmm2
16774 ; SSSE3-NEXT:    pand %xmm2, %xmm0
16775 ; SSSE3-NEXT:    pxor %xmm2, %xmm2
16776 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm0
16777 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,0,3,2]
16778 ; SSSE3-NEXT:    pand %xmm2, %xmm0
16779 ; SSSE3-NEXT:    pxor %xmm1, %xmm0
16780 ; SSSE3-NEXT:    retq
16782 ; SSE41-LABEL: ugt_1_v2i64:
16783 ; SSE41:       # %bb.0:
16784 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
16785 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
16786 ; SSE41-NEXT:    paddq %xmm1, %xmm2
16787 ; SSE41-NEXT:    pand %xmm2, %xmm0
16788 ; SSE41-NEXT:    pxor %xmm2, %xmm2
16789 ; SSE41-NEXT:    pcmpeqq %xmm2, %xmm0
16790 ; SSE41-NEXT:    pxor %xmm1, %xmm0
16791 ; SSE41-NEXT:    retq
16793 ; AVX1-LABEL: ugt_1_v2i64:
16794 ; AVX1:       # %bb.0:
16795 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
16796 ; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm2
16797 ; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
16798 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
16799 ; AVX1-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
16800 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
16801 ; AVX1-NEXT:    retq
16803 ; AVX2-LABEL: ugt_1_v2i64:
16804 ; AVX2:       # %bb.0:
16805 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
16806 ; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm2
16807 ; AVX2-NEXT:    vpand %xmm2, %xmm0, %xmm0
16808 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
16809 ; AVX2-NEXT:    vpcmpeqq %xmm2, %xmm0, %xmm0
16810 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
16811 ; AVX2-NEXT:    retq
16813 ; AVX512VPOPCNTDQ-LABEL: ugt_1_v2i64:
16814 ; AVX512VPOPCNTDQ:       # %bb.0:
16815 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16816 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16817 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
16818 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
16819 ; AVX512VPOPCNTDQ-NEXT:    retq
16821 ; AVX512VPOPCNTDQVL-LABEL: ugt_1_v2i64:
16822 ; AVX512VPOPCNTDQVL:       # %bb.0:
16823 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
16824 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [1,1]
16825 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
16826 ; AVX512VPOPCNTDQVL-NEXT:    retq
16828 ; BITALG_NOVLX-LABEL: ugt_1_v2i64:
16829 ; BITALG_NOVLX:       # %bb.0:
16830 ; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
16831 ; BITALG_NOVLX-NEXT:    vpaddq %xmm1, %xmm0, %xmm1
16832 ; BITALG_NOVLX-NEXT:    vpand %xmm1, %xmm0, %xmm0
16833 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16834 ; BITALG_NOVLX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
16835 ; BITALG_NOVLX-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
16836 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
16837 ; BITALG_NOVLX-NEXT:    vzeroupper
16838 ; BITALG_NOVLX-NEXT:    retq
16840 ; BITALG-LABEL: ugt_1_v2i64:
16841 ; BITALG:       # %bb.0:
16842 ; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
16843 ; BITALG-NEXT:    vpaddq %xmm1, %xmm0, %xmm1
16844 ; BITALG-NEXT:    vpand %xmm1, %xmm0, %xmm0
16845 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16846 ; BITALG-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
16847 ; BITALG-NEXT:    vpternlogq $15, %xmm0, %xmm0, %xmm0
16848 ; BITALG-NEXT:    retq
16849   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16850   %3 = icmp ugt <2 x i64> %2, <i64 1, i64 1>
16851   %4 = sext <2 x i1> %3 to <2 x i64>
16852   ret <2 x i64> %4
16855 define <2 x i64> @ult_2_v2i64(<2 x i64> %0) {
16856 ; SSE2-LABEL: ult_2_v2i64:
16857 ; SSE2:       # %bb.0:
16858 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
16859 ; SSE2-NEXT:    paddq %xmm0, %xmm1
16860 ; SSE2-NEXT:    pand %xmm1, %xmm0
16861 ; SSE2-NEXT:    pxor %xmm1, %xmm1
16862 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
16863 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
16864 ; SSE2-NEXT:    pand %xmm1, %xmm0
16865 ; SSE2-NEXT:    retq
16867 ; SSE3-LABEL: ult_2_v2i64:
16868 ; SSE3:       # %bb.0:
16869 ; SSE3-NEXT:    pcmpeqd %xmm1, %xmm1
16870 ; SSE3-NEXT:    paddq %xmm0, %xmm1
16871 ; SSE3-NEXT:    pand %xmm1, %xmm0
16872 ; SSE3-NEXT:    pxor %xmm1, %xmm1
16873 ; SSE3-NEXT:    pcmpeqd %xmm1, %xmm0
16874 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
16875 ; SSE3-NEXT:    pand %xmm1, %xmm0
16876 ; SSE3-NEXT:    retq
16878 ; SSSE3-LABEL: ult_2_v2i64:
16879 ; SSSE3:       # %bb.0:
16880 ; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm1
16881 ; SSSE3-NEXT:    paddq %xmm0, %xmm1
16882 ; SSSE3-NEXT:    pand %xmm1, %xmm0
16883 ; SSSE3-NEXT:    pxor %xmm1, %xmm1
16884 ; SSSE3-NEXT:    pcmpeqd %xmm1, %xmm0
16885 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
16886 ; SSSE3-NEXT:    pand %xmm1, %xmm0
16887 ; SSSE3-NEXT:    retq
16889 ; SSE41-LABEL: ult_2_v2i64:
16890 ; SSE41:       # %bb.0:
16891 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
16892 ; SSE41-NEXT:    paddq %xmm0, %xmm1
16893 ; SSE41-NEXT:    pand %xmm1, %xmm0
16894 ; SSE41-NEXT:    pxor %xmm1, %xmm1
16895 ; SSE41-NEXT:    pcmpeqq %xmm1, %xmm0
16896 ; SSE41-NEXT:    retq
16898 ; AVX1-LABEL: ult_2_v2i64:
16899 ; AVX1:       # %bb.0:
16900 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
16901 ; AVX1-NEXT:    vpaddq %xmm1, %xmm0, %xmm1
16902 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
16903 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16904 ; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
16905 ; AVX1-NEXT:    retq
16907 ; AVX2-LABEL: ult_2_v2i64:
16908 ; AVX2:       # %bb.0:
16909 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
16910 ; AVX2-NEXT:    vpaddq %xmm1, %xmm0, %xmm1
16911 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
16912 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16913 ; AVX2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
16914 ; AVX2-NEXT:    retq
16916 ; AVX512VPOPCNTDQ-LABEL: ult_2_v2i64:
16917 ; AVX512VPOPCNTDQ:       # %bb.0:
16918 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
16919 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
16920 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [2,2]
16921 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
16922 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
16923 ; AVX512VPOPCNTDQ-NEXT:    retq
16925 ; AVX512VPOPCNTDQVL-LABEL: ult_2_v2i64:
16926 ; AVX512VPOPCNTDQVL:       # %bb.0:
16927 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
16928 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [2,2]
16929 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
16930 ; AVX512VPOPCNTDQVL-NEXT:    retq
16932 ; BITALG_NOVLX-LABEL: ult_2_v2i64:
16933 ; BITALG_NOVLX:       # %bb.0:
16934 ; BITALG_NOVLX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
16935 ; BITALG_NOVLX-NEXT:    vpaddq %xmm1, %xmm0, %xmm1
16936 ; BITALG_NOVLX-NEXT:    vpand %xmm1, %xmm0, %xmm0
16937 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16938 ; BITALG_NOVLX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
16939 ; BITALG_NOVLX-NEXT:    retq
16941 ; BITALG-LABEL: ult_2_v2i64:
16942 ; BITALG:       # %bb.0:
16943 ; BITALG-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
16944 ; BITALG-NEXT:    vpaddq %xmm1, %xmm0, %xmm1
16945 ; BITALG-NEXT:    vpand %xmm1, %xmm0, %xmm0
16946 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
16947 ; BITALG-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
16948 ; BITALG-NEXT:    retq
16949   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16950   %3 = icmp ult <2 x i64> %2, <i64 2, i64 2>
16951   %4 = sext <2 x i1> %3 to <2 x i64>
16952   ret <2 x i64> %4
16955 define <2 x i64> @ugt_2_v2i64(<2 x i64> %0) {
16956 ; SSE2-LABEL: ugt_2_v2i64:
16957 ; SSE2:       # %bb.0:
16958 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16959 ; SSE2-NEXT:    psrlw $1, %xmm1
16960 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16961 ; SSE2-NEXT:    psubb %xmm1, %xmm0
16962 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16963 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
16964 ; SSE2-NEXT:    pand %xmm1, %xmm2
16965 ; SSE2-NEXT:    psrlw $2, %xmm0
16966 ; SSE2-NEXT:    pand %xmm1, %xmm0
16967 ; SSE2-NEXT:    paddb %xmm2, %xmm0
16968 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
16969 ; SSE2-NEXT:    psrlw $4, %xmm1
16970 ; SSE2-NEXT:    paddb %xmm0, %xmm1
16971 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16972 ; SSE2-NEXT:    pxor %xmm0, %xmm0
16973 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
16974 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
16975 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16976 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16977 ; SSE2-NEXT:    retq
16979 ; SSE3-LABEL: ugt_2_v2i64:
16980 ; SSE3:       # %bb.0:
16981 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16982 ; SSE3-NEXT:    psrlw $1, %xmm1
16983 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16984 ; SSE3-NEXT:    psubb %xmm1, %xmm0
16985 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
16986 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
16987 ; SSE3-NEXT:    pand %xmm1, %xmm2
16988 ; SSE3-NEXT:    psrlw $2, %xmm0
16989 ; SSE3-NEXT:    pand %xmm1, %xmm0
16990 ; SSE3-NEXT:    paddb %xmm2, %xmm0
16991 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
16992 ; SSE3-NEXT:    psrlw $4, %xmm1
16993 ; SSE3-NEXT:    paddb %xmm0, %xmm1
16994 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
16995 ; SSE3-NEXT:    pxor %xmm0, %xmm0
16996 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
16997 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
16998 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
16999 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17000 ; SSE3-NEXT:    retq
17002 ; SSSE3-LABEL: ugt_2_v2i64:
17003 ; SSSE3:       # %bb.0:
17004 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17005 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
17006 ; SSSE3-NEXT:    pand %xmm1, %xmm2
17007 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17008 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
17009 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
17010 ; SSSE3-NEXT:    psrlw $4, %xmm0
17011 ; SSSE3-NEXT:    pand %xmm1, %xmm0
17012 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
17013 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
17014 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
17015 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
17016 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17017 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17018 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17019 ; SSSE3-NEXT:    retq
17021 ; SSE41-LABEL: ugt_2_v2i64:
17022 ; SSE41:       # %bb.0:
17023 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17024 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
17025 ; SSE41-NEXT:    pand %xmm1, %xmm2
17026 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17027 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
17028 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
17029 ; SSE41-NEXT:    psrlw $4, %xmm0
17030 ; SSE41-NEXT:    pand %xmm1, %xmm0
17031 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
17032 ; SSE41-NEXT:    paddb %xmm4, %xmm3
17033 ; SSE41-NEXT:    pxor %xmm0, %xmm0
17034 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
17035 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17036 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17037 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17038 ; SSE41-NEXT:    retq
17040 ; AVX1-LABEL: ugt_2_v2i64:
17041 ; AVX1:       # %bb.0:
17042 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17043 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17044 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17045 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17046 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17047 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17048 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17049 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17050 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17051 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17052 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17053 ; AVX1-NEXT:    retq
17055 ; AVX2-LABEL: ugt_2_v2i64:
17056 ; AVX2:       # %bb.0:
17057 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17058 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
17059 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17060 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17061 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
17062 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
17063 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17064 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17065 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17066 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17067 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17068 ; AVX2-NEXT:    retq
17070 ; AVX512VPOPCNTDQ-LABEL: ugt_2_v2i64:
17071 ; AVX512VPOPCNTDQ:       # %bb.0:
17072 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17073 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17074 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17075 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
17076 ; AVX512VPOPCNTDQ-NEXT:    retq
17078 ; AVX512VPOPCNTDQVL-LABEL: ugt_2_v2i64:
17079 ; AVX512VPOPCNTDQVL:       # %bb.0:
17080 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
17081 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [2,2]
17082 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17083 ; AVX512VPOPCNTDQVL-NEXT:    retq
17085 ; BITALG_NOVLX-LABEL: ugt_2_v2i64:
17086 ; BITALG_NOVLX:       # %bb.0:
17087 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17088 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17089 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17090 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17091 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17092 ; BITALG_NOVLX-NEXT:    vzeroupper
17093 ; BITALG_NOVLX-NEXT:    retq
17095 ; BITALG-LABEL: ugt_2_v2i64:
17096 ; BITALG:       # %bb.0:
17097 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
17098 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17099 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17100 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [2,2]
17101 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17102 ; BITALG-NEXT:    retq
17103   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17104   %3 = icmp ugt <2 x i64> %2, <i64 2, i64 2>
17105   %4 = sext <2 x i1> %3 to <2 x i64>
17106   ret <2 x i64> %4
17109 define <2 x i64> @ult_3_v2i64(<2 x i64> %0) {
17110 ; SSE2-LABEL: ult_3_v2i64:
17111 ; SSE2:       # %bb.0:
17112 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17113 ; SSE2-NEXT:    psrlw $1, %xmm1
17114 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17115 ; SSE2-NEXT:    psubb %xmm1, %xmm0
17116 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17117 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
17118 ; SSE2-NEXT:    pand %xmm1, %xmm2
17119 ; SSE2-NEXT:    psrlw $2, %xmm0
17120 ; SSE2-NEXT:    pand %xmm1, %xmm0
17121 ; SSE2-NEXT:    paddb %xmm2, %xmm0
17122 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17123 ; SSE2-NEXT:    psrlw $4, %xmm1
17124 ; SSE2-NEXT:    paddb %xmm0, %xmm1
17125 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17126 ; SSE2-NEXT:    pxor %xmm0, %xmm0
17127 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
17128 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17129 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17130 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483651,2147483651,2147483651,2147483651]
17131 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
17132 ; SSE2-NEXT:    retq
17134 ; SSE3-LABEL: ult_3_v2i64:
17135 ; SSE3:       # %bb.0:
17136 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17137 ; SSE3-NEXT:    psrlw $1, %xmm1
17138 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17139 ; SSE3-NEXT:    psubb %xmm1, %xmm0
17140 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17141 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
17142 ; SSE3-NEXT:    pand %xmm1, %xmm2
17143 ; SSE3-NEXT:    psrlw $2, %xmm0
17144 ; SSE3-NEXT:    pand %xmm1, %xmm0
17145 ; SSE3-NEXT:    paddb %xmm2, %xmm0
17146 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17147 ; SSE3-NEXT:    psrlw $4, %xmm1
17148 ; SSE3-NEXT:    paddb %xmm0, %xmm1
17149 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17150 ; SSE3-NEXT:    pxor %xmm0, %xmm0
17151 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
17152 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17153 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17154 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483651,2147483651,2147483651,2147483651]
17155 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
17156 ; SSE3-NEXT:    retq
17158 ; SSSE3-LABEL: ult_3_v2i64:
17159 ; SSSE3:       # %bb.0:
17160 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17161 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
17162 ; SSSE3-NEXT:    pand %xmm1, %xmm2
17163 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17164 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
17165 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
17166 ; SSSE3-NEXT:    psrlw $4, %xmm0
17167 ; SSSE3-NEXT:    pand %xmm1, %xmm0
17168 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
17169 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
17170 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
17171 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
17172 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17173 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17174 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483651,2147483651,2147483651,2147483651]
17175 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
17176 ; SSSE3-NEXT:    retq
17178 ; SSE41-LABEL: ult_3_v2i64:
17179 ; SSE41:       # %bb.0:
17180 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17181 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
17182 ; SSE41-NEXT:    pand %xmm1, %xmm2
17183 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17184 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
17185 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
17186 ; SSE41-NEXT:    psrlw $4, %xmm0
17187 ; SSE41-NEXT:    pand %xmm1, %xmm0
17188 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
17189 ; SSE41-NEXT:    paddb %xmm4, %xmm3
17190 ; SSE41-NEXT:    pxor %xmm0, %xmm0
17191 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
17192 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17193 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17194 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483651,2147483651,2147483651,2147483651]
17195 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
17196 ; SSE41-NEXT:    retq
17198 ; AVX1-LABEL: ult_3_v2i64:
17199 ; AVX1:       # %bb.0:
17200 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17201 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17202 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17203 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17204 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17205 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17206 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17207 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17208 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17209 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17210 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [3,3]
17211 ; AVX1-NEXT:    # xmm1 = mem[0,0]
17212 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17213 ; AVX1-NEXT:    retq
17215 ; AVX2-LABEL: ult_3_v2i64:
17216 ; AVX2:       # %bb.0:
17217 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17218 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
17219 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17220 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17221 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
17222 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
17223 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17224 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17225 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17226 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17227 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [3,3]
17228 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17229 ; AVX2-NEXT:    retq
17231 ; AVX512VPOPCNTDQ-LABEL: ult_3_v2i64:
17232 ; AVX512VPOPCNTDQ:       # %bb.0:
17233 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17234 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17235 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [3,3]
17236 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17237 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
17238 ; AVX512VPOPCNTDQ-NEXT:    retq
17240 ; AVX512VPOPCNTDQVL-LABEL: ult_3_v2i64:
17241 ; AVX512VPOPCNTDQVL:       # %bb.0:
17242 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
17243 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [3,3]
17244 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17245 ; AVX512VPOPCNTDQVL-NEXT:    retq
17247 ; BITALG_NOVLX-LABEL: ult_3_v2i64:
17248 ; BITALG_NOVLX:       # %bb.0:
17249 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17250 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17251 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17252 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17253 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [3,3]
17254 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17255 ; BITALG_NOVLX-NEXT:    vzeroupper
17256 ; BITALG_NOVLX-NEXT:    retq
17258 ; BITALG-LABEL: ult_3_v2i64:
17259 ; BITALG:       # %bb.0:
17260 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
17261 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17262 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17263 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [3,3]
17264 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17265 ; BITALG-NEXT:    retq
17266   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17267   %3 = icmp ult <2 x i64> %2, <i64 3, i64 3>
17268   %4 = sext <2 x i1> %3 to <2 x i64>
17269   ret <2 x i64> %4
17272 define <2 x i64> @ugt_3_v2i64(<2 x i64> %0) {
17273 ; SSE2-LABEL: ugt_3_v2i64:
17274 ; SSE2:       # %bb.0:
17275 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17276 ; SSE2-NEXT:    psrlw $1, %xmm1
17277 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17278 ; SSE2-NEXT:    psubb %xmm1, %xmm0
17279 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17280 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
17281 ; SSE2-NEXT:    pand %xmm1, %xmm2
17282 ; SSE2-NEXT:    psrlw $2, %xmm0
17283 ; SSE2-NEXT:    pand %xmm1, %xmm0
17284 ; SSE2-NEXT:    paddb %xmm2, %xmm0
17285 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17286 ; SSE2-NEXT:    psrlw $4, %xmm1
17287 ; SSE2-NEXT:    paddb %xmm0, %xmm1
17288 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17289 ; SSE2-NEXT:    pxor %xmm0, %xmm0
17290 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
17291 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17292 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17293 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17294 ; SSE2-NEXT:    retq
17296 ; SSE3-LABEL: ugt_3_v2i64:
17297 ; SSE3:       # %bb.0:
17298 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17299 ; SSE3-NEXT:    psrlw $1, %xmm1
17300 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17301 ; SSE3-NEXT:    psubb %xmm1, %xmm0
17302 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17303 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
17304 ; SSE3-NEXT:    pand %xmm1, %xmm2
17305 ; SSE3-NEXT:    psrlw $2, %xmm0
17306 ; SSE3-NEXT:    pand %xmm1, %xmm0
17307 ; SSE3-NEXT:    paddb %xmm2, %xmm0
17308 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17309 ; SSE3-NEXT:    psrlw $4, %xmm1
17310 ; SSE3-NEXT:    paddb %xmm0, %xmm1
17311 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17312 ; SSE3-NEXT:    pxor %xmm0, %xmm0
17313 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
17314 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17315 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17316 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17317 ; SSE3-NEXT:    retq
17319 ; SSSE3-LABEL: ugt_3_v2i64:
17320 ; SSSE3:       # %bb.0:
17321 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17322 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
17323 ; SSSE3-NEXT:    pand %xmm1, %xmm2
17324 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17325 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
17326 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
17327 ; SSSE3-NEXT:    psrlw $4, %xmm0
17328 ; SSSE3-NEXT:    pand %xmm1, %xmm0
17329 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
17330 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
17331 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
17332 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
17333 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17334 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17335 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17336 ; SSSE3-NEXT:    retq
17338 ; SSE41-LABEL: ugt_3_v2i64:
17339 ; SSE41:       # %bb.0:
17340 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17341 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
17342 ; SSE41-NEXT:    pand %xmm1, %xmm2
17343 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17344 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
17345 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
17346 ; SSE41-NEXT:    psrlw $4, %xmm0
17347 ; SSE41-NEXT:    pand %xmm1, %xmm0
17348 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
17349 ; SSE41-NEXT:    paddb %xmm4, %xmm3
17350 ; SSE41-NEXT:    pxor %xmm0, %xmm0
17351 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
17352 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17353 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17354 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17355 ; SSE41-NEXT:    retq
17357 ; AVX1-LABEL: ugt_3_v2i64:
17358 ; AVX1:       # %bb.0:
17359 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17360 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17361 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17362 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17363 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17364 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17365 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17366 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17367 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17368 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17369 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17370 ; AVX1-NEXT:    retq
17372 ; AVX2-LABEL: ugt_3_v2i64:
17373 ; AVX2:       # %bb.0:
17374 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17375 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
17376 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17377 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17378 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
17379 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
17380 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17381 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17382 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17383 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17384 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17385 ; AVX2-NEXT:    retq
17387 ; AVX512VPOPCNTDQ-LABEL: ugt_3_v2i64:
17388 ; AVX512VPOPCNTDQ:       # %bb.0:
17389 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17390 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17391 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17392 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
17393 ; AVX512VPOPCNTDQ-NEXT:    retq
17395 ; AVX512VPOPCNTDQVL-LABEL: ugt_3_v2i64:
17396 ; AVX512VPOPCNTDQVL:       # %bb.0:
17397 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
17398 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [3,3]
17399 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17400 ; AVX512VPOPCNTDQVL-NEXT:    retq
17402 ; BITALG_NOVLX-LABEL: ugt_3_v2i64:
17403 ; BITALG_NOVLX:       # %bb.0:
17404 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17405 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17406 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17407 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17408 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17409 ; BITALG_NOVLX-NEXT:    vzeroupper
17410 ; BITALG_NOVLX-NEXT:    retq
17412 ; BITALG-LABEL: ugt_3_v2i64:
17413 ; BITALG:       # %bb.0:
17414 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
17415 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17416 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17417 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [3,3]
17418 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17419 ; BITALG-NEXT:    retq
17420   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17421   %3 = icmp ugt <2 x i64> %2, <i64 3, i64 3>
17422   %4 = sext <2 x i1> %3 to <2 x i64>
17423   ret <2 x i64> %4
17426 define <2 x i64> @ult_4_v2i64(<2 x i64> %0) {
17427 ; SSE2-LABEL: ult_4_v2i64:
17428 ; SSE2:       # %bb.0:
17429 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17430 ; SSE2-NEXT:    psrlw $1, %xmm1
17431 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17432 ; SSE2-NEXT:    psubb %xmm1, %xmm0
17433 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17434 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
17435 ; SSE2-NEXT:    pand %xmm1, %xmm2
17436 ; SSE2-NEXT:    psrlw $2, %xmm0
17437 ; SSE2-NEXT:    pand %xmm1, %xmm0
17438 ; SSE2-NEXT:    paddb %xmm2, %xmm0
17439 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17440 ; SSE2-NEXT:    psrlw $4, %xmm1
17441 ; SSE2-NEXT:    paddb %xmm0, %xmm1
17442 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17443 ; SSE2-NEXT:    pxor %xmm0, %xmm0
17444 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
17445 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17446 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17447 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483652,2147483652,2147483652,2147483652]
17448 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
17449 ; SSE2-NEXT:    retq
17451 ; SSE3-LABEL: ult_4_v2i64:
17452 ; SSE3:       # %bb.0:
17453 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17454 ; SSE3-NEXT:    psrlw $1, %xmm1
17455 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17456 ; SSE3-NEXT:    psubb %xmm1, %xmm0
17457 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17458 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
17459 ; SSE3-NEXT:    pand %xmm1, %xmm2
17460 ; SSE3-NEXT:    psrlw $2, %xmm0
17461 ; SSE3-NEXT:    pand %xmm1, %xmm0
17462 ; SSE3-NEXT:    paddb %xmm2, %xmm0
17463 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17464 ; SSE3-NEXT:    psrlw $4, %xmm1
17465 ; SSE3-NEXT:    paddb %xmm0, %xmm1
17466 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17467 ; SSE3-NEXT:    pxor %xmm0, %xmm0
17468 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
17469 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17470 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17471 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483652,2147483652,2147483652,2147483652]
17472 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
17473 ; SSE3-NEXT:    retq
17475 ; SSSE3-LABEL: ult_4_v2i64:
17476 ; SSSE3:       # %bb.0:
17477 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17478 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
17479 ; SSSE3-NEXT:    pand %xmm1, %xmm2
17480 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17481 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
17482 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
17483 ; SSSE3-NEXT:    psrlw $4, %xmm0
17484 ; SSSE3-NEXT:    pand %xmm1, %xmm0
17485 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
17486 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
17487 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
17488 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
17489 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17490 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17491 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483652,2147483652,2147483652,2147483652]
17492 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
17493 ; SSSE3-NEXT:    retq
17495 ; SSE41-LABEL: ult_4_v2i64:
17496 ; SSE41:       # %bb.0:
17497 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17498 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
17499 ; SSE41-NEXT:    pand %xmm1, %xmm2
17500 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17501 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
17502 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
17503 ; SSE41-NEXT:    psrlw $4, %xmm0
17504 ; SSE41-NEXT:    pand %xmm1, %xmm0
17505 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
17506 ; SSE41-NEXT:    paddb %xmm4, %xmm3
17507 ; SSE41-NEXT:    pxor %xmm0, %xmm0
17508 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
17509 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17510 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17511 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483652,2147483652,2147483652,2147483652]
17512 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
17513 ; SSE41-NEXT:    retq
17515 ; AVX1-LABEL: ult_4_v2i64:
17516 ; AVX1:       # %bb.0:
17517 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17518 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17519 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17520 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17521 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17522 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17523 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17524 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17525 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17526 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17527 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [4,4]
17528 ; AVX1-NEXT:    # xmm1 = mem[0,0]
17529 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17530 ; AVX1-NEXT:    retq
17532 ; AVX2-LABEL: ult_4_v2i64:
17533 ; AVX2:       # %bb.0:
17534 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17535 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
17536 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17537 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17538 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
17539 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
17540 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17541 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17542 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17543 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17544 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4,4]
17545 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17546 ; AVX2-NEXT:    retq
17548 ; AVX512VPOPCNTDQ-LABEL: ult_4_v2i64:
17549 ; AVX512VPOPCNTDQ:       # %bb.0:
17550 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17551 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17552 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4,4]
17553 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17554 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
17555 ; AVX512VPOPCNTDQ-NEXT:    retq
17557 ; AVX512VPOPCNTDQVL-LABEL: ult_4_v2i64:
17558 ; AVX512VPOPCNTDQVL:       # %bb.0:
17559 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
17560 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4,4]
17561 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17562 ; AVX512VPOPCNTDQVL-NEXT:    retq
17564 ; BITALG_NOVLX-LABEL: ult_4_v2i64:
17565 ; BITALG_NOVLX:       # %bb.0:
17566 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17567 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17568 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17569 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17570 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4,4]
17571 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17572 ; BITALG_NOVLX-NEXT:    vzeroupper
17573 ; BITALG_NOVLX-NEXT:    retq
17575 ; BITALG-LABEL: ult_4_v2i64:
17576 ; BITALG:       # %bb.0:
17577 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
17578 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17579 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17580 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4,4]
17581 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17582 ; BITALG-NEXT:    retq
17583   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17584   %3 = icmp ult <2 x i64> %2, <i64 4, i64 4>
17585   %4 = sext <2 x i1> %3 to <2 x i64>
17586   ret <2 x i64> %4
17589 define <2 x i64> @ugt_4_v2i64(<2 x i64> %0) {
17590 ; SSE2-LABEL: ugt_4_v2i64:
17591 ; SSE2:       # %bb.0:
17592 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17593 ; SSE2-NEXT:    psrlw $1, %xmm1
17594 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17595 ; SSE2-NEXT:    psubb %xmm1, %xmm0
17596 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17597 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
17598 ; SSE2-NEXT:    pand %xmm1, %xmm2
17599 ; SSE2-NEXT:    psrlw $2, %xmm0
17600 ; SSE2-NEXT:    pand %xmm1, %xmm0
17601 ; SSE2-NEXT:    paddb %xmm2, %xmm0
17602 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17603 ; SSE2-NEXT:    psrlw $4, %xmm1
17604 ; SSE2-NEXT:    paddb %xmm0, %xmm1
17605 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17606 ; SSE2-NEXT:    pxor %xmm0, %xmm0
17607 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
17608 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17609 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17610 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17611 ; SSE2-NEXT:    retq
17613 ; SSE3-LABEL: ugt_4_v2i64:
17614 ; SSE3:       # %bb.0:
17615 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17616 ; SSE3-NEXT:    psrlw $1, %xmm1
17617 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17618 ; SSE3-NEXT:    psubb %xmm1, %xmm0
17619 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17620 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
17621 ; SSE3-NEXT:    pand %xmm1, %xmm2
17622 ; SSE3-NEXT:    psrlw $2, %xmm0
17623 ; SSE3-NEXT:    pand %xmm1, %xmm0
17624 ; SSE3-NEXT:    paddb %xmm2, %xmm0
17625 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17626 ; SSE3-NEXT:    psrlw $4, %xmm1
17627 ; SSE3-NEXT:    paddb %xmm0, %xmm1
17628 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17629 ; SSE3-NEXT:    pxor %xmm0, %xmm0
17630 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
17631 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17632 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17633 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17634 ; SSE3-NEXT:    retq
17636 ; SSSE3-LABEL: ugt_4_v2i64:
17637 ; SSSE3:       # %bb.0:
17638 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17639 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
17640 ; SSSE3-NEXT:    pand %xmm1, %xmm2
17641 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17642 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
17643 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
17644 ; SSSE3-NEXT:    psrlw $4, %xmm0
17645 ; SSSE3-NEXT:    pand %xmm1, %xmm0
17646 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
17647 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
17648 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
17649 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
17650 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17651 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17652 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17653 ; SSSE3-NEXT:    retq
17655 ; SSE41-LABEL: ugt_4_v2i64:
17656 ; SSE41:       # %bb.0:
17657 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17658 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
17659 ; SSE41-NEXT:    pand %xmm1, %xmm2
17660 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17661 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
17662 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
17663 ; SSE41-NEXT:    psrlw $4, %xmm0
17664 ; SSE41-NEXT:    pand %xmm1, %xmm0
17665 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
17666 ; SSE41-NEXT:    paddb %xmm4, %xmm3
17667 ; SSE41-NEXT:    pxor %xmm0, %xmm0
17668 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
17669 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17670 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17671 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17672 ; SSE41-NEXT:    retq
17674 ; AVX1-LABEL: ugt_4_v2i64:
17675 ; AVX1:       # %bb.0:
17676 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17677 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17678 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17679 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17680 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17681 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17682 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17683 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17684 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17685 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17686 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17687 ; AVX1-NEXT:    retq
17689 ; AVX2-LABEL: ugt_4_v2i64:
17690 ; AVX2:       # %bb.0:
17691 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17692 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
17693 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17694 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17695 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
17696 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
17697 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17698 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17699 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17700 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17701 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17702 ; AVX2-NEXT:    retq
17704 ; AVX512VPOPCNTDQ-LABEL: ugt_4_v2i64:
17705 ; AVX512VPOPCNTDQ:       # %bb.0:
17706 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17707 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17708 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17709 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
17710 ; AVX512VPOPCNTDQ-NEXT:    retq
17712 ; AVX512VPOPCNTDQVL-LABEL: ugt_4_v2i64:
17713 ; AVX512VPOPCNTDQVL:       # %bb.0:
17714 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
17715 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4,4]
17716 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17717 ; AVX512VPOPCNTDQVL-NEXT:    retq
17719 ; BITALG_NOVLX-LABEL: ugt_4_v2i64:
17720 ; BITALG_NOVLX:       # %bb.0:
17721 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17722 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17723 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17724 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17725 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
17726 ; BITALG_NOVLX-NEXT:    vzeroupper
17727 ; BITALG_NOVLX-NEXT:    retq
17729 ; BITALG-LABEL: ugt_4_v2i64:
17730 ; BITALG:       # %bb.0:
17731 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
17732 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17733 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17734 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [4,4]
17735 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
17736 ; BITALG-NEXT:    retq
17737   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17738   %3 = icmp ugt <2 x i64> %2, <i64 4, i64 4>
17739   %4 = sext <2 x i1> %3 to <2 x i64>
17740   ret <2 x i64> %4
17743 define <2 x i64> @ult_5_v2i64(<2 x i64> %0) {
17744 ; SSE2-LABEL: ult_5_v2i64:
17745 ; SSE2:       # %bb.0:
17746 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17747 ; SSE2-NEXT:    psrlw $1, %xmm1
17748 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17749 ; SSE2-NEXT:    psubb %xmm1, %xmm0
17750 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17751 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
17752 ; SSE2-NEXT:    pand %xmm1, %xmm2
17753 ; SSE2-NEXT:    psrlw $2, %xmm0
17754 ; SSE2-NEXT:    pand %xmm1, %xmm0
17755 ; SSE2-NEXT:    paddb %xmm2, %xmm0
17756 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17757 ; SSE2-NEXT:    psrlw $4, %xmm1
17758 ; SSE2-NEXT:    paddb %xmm0, %xmm1
17759 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17760 ; SSE2-NEXT:    pxor %xmm0, %xmm0
17761 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
17762 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17763 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17764 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483653,2147483653,2147483653,2147483653]
17765 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
17766 ; SSE2-NEXT:    retq
17768 ; SSE3-LABEL: ult_5_v2i64:
17769 ; SSE3:       # %bb.0:
17770 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17771 ; SSE3-NEXT:    psrlw $1, %xmm1
17772 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17773 ; SSE3-NEXT:    psubb %xmm1, %xmm0
17774 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17775 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
17776 ; SSE3-NEXT:    pand %xmm1, %xmm2
17777 ; SSE3-NEXT:    psrlw $2, %xmm0
17778 ; SSE3-NEXT:    pand %xmm1, %xmm0
17779 ; SSE3-NEXT:    paddb %xmm2, %xmm0
17780 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17781 ; SSE3-NEXT:    psrlw $4, %xmm1
17782 ; SSE3-NEXT:    paddb %xmm0, %xmm1
17783 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17784 ; SSE3-NEXT:    pxor %xmm0, %xmm0
17785 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
17786 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17787 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17788 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483653,2147483653,2147483653,2147483653]
17789 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
17790 ; SSE3-NEXT:    retq
17792 ; SSSE3-LABEL: ult_5_v2i64:
17793 ; SSSE3:       # %bb.0:
17794 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17795 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
17796 ; SSSE3-NEXT:    pand %xmm1, %xmm2
17797 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17798 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
17799 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
17800 ; SSSE3-NEXT:    psrlw $4, %xmm0
17801 ; SSSE3-NEXT:    pand %xmm1, %xmm0
17802 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
17803 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
17804 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
17805 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
17806 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17807 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17808 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483653,2147483653,2147483653,2147483653]
17809 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
17810 ; SSSE3-NEXT:    retq
17812 ; SSE41-LABEL: ult_5_v2i64:
17813 ; SSE41:       # %bb.0:
17814 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17815 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
17816 ; SSE41-NEXT:    pand %xmm1, %xmm2
17817 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17818 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
17819 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
17820 ; SSE41-NEXT:    psrlw $4, %xmm0
17821 ; SSE41-NEXT:    pand %xmm1, %xmm0
17822 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
17823 ; SSE41-NEXT:    paddb %xmm4, %xmm3
17824 ; SSE41-NEXT:    pxor %xmm0, %xmm0
17825 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
17826 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
17827 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17828 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483653,2147483653,2147483653,2147483653]
17829 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
17830 ; SSE41-NEXT:    retq
17832 ; AVX1-LABEL: ult_5_v2i64:
17833 ; AVX1:       # %bb.0:
17834 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17835 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17836 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17837 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17838 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17839 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17840 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17841 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17842 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17843 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17844 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [5,5]
17845 ; AVX1-NEXT:    # xmm1 = mem[0,0]
17846 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17847 ; AVX1-NEXT:    retq
17849 ; AVX2-LABEL: ult_5_v2i64:
17850 ; AVX2:       # %bb.0:
17851 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17852 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
17853 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17854 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17855 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
17856 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
17857 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
17858 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
17859 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17860 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17861 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [5,5]
17862 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17863 ; AVX2-NEXT:    retq
17865 ; AVX512VPOPCNTDQ-LABEL: ult_5_v2i64:
17866 ; AVX512VPOPCNTDQ:       # %bb.0:
17867 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17868 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
17869 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [5,5]
17870 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17871 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
17872 ; AVX512VPOPCNTDQ-NEXT:    retq
17874 ; AVX512VPOPCNTDQVL-LABEL: ult_5_v2i64:
17875 ; AVX512VPOPCNTDQVL:       # %bb.0:
17876 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
17877 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [5,5]
17878 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17879 ; AVX512VPOPCNTDQVL-NEXT:    retq
17881 ; BITALG_NOVLX-LABEL: ult_5_v2i64:
17882 ; BITALG_NOVLX:       # %bb.0:
17883 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
17884 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
17885 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17886 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17887 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [5,5]
17888 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17889 ; BITALG_NOVLX-NEXT:    vzeroupper
17890 ; BITALG_NOVLX-NEXT:    retq
17892 ; BITALG-LABEL: ult_5_v2i64:
17893 ; BITALG:       # %bb.0:
17894 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
17895 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
17896 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
17897 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [5,5]
17898 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
17899 ; BITALG-NEXT:    retq
17900   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17901   %3 = icmp ult <2 x i64> %2, <i64 5, i64 5>
17902   %4 = sext <2 x i1> %3 to <2 x i64>
17903   ret <2 x i64> %4
17906 define <2 x i64> @ugt_5_v2i64(<2 x i64> %0) {
17907 ; SSE2-LABEL: ugt_5_v2i64:
17908 ; SSE2:       # %bb.0:
17909 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17910 ; SSE2-NEXT:    psrlw $1, %xmm1
17911 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17912 ; SSE2-NEXT:    psubb %xmm1, %xmm0
17913 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17914 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
17915 ; SSE2-NEXT:    pand %xmm1, %xmm2
17916 ; SSE2-NEXT:    psrlw $2, %xmm0
17917 ; SSE2-NEXT:    pand %xmm1, %xmm0
17918 ; SSE2-NEXT:    paddb %xmm2, %xmm0
17919 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
17920 ; SSE2-NEXT:    psrlw $4, %xmm1
17921 ; SSE2-NEXT:    paddb %xmm0, %xmm1
17922 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17923 ; SSE2-NEXT:    pxor %xmm0, %xmm0
17924 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
17925 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17926 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17927 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17928 ; SSE2-NEXT:    retq
17930 ; SSE3-LABEL: ugt_5_v2i64:
17931 ; SSE3:       # %bb.0:
17932 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17933 ; SSE3-NEXT:    psrlw $1, %xmm1
17934 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17935 ; SSE3-NEXT:    psubb %xmm1, %xmm0
17936 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
17937 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
17938 ; SSE3-NEXT:    pand %xmm1, %xmm2
17939 ; SSE3-NEXT:    psrlw $2, %xmm0
17940 ; SSE3-NEXT:    pand %xmm1, %xmm0
17941 ; SSE3-NEXT:    paddb %xmm2, %xmm0
17942 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
17943 ; SSE3-NEXT:    psrlw $4, %xmm1
17944 ; SSE3-NEXT:    paddb %xmm0, %xmm1
17945 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
17946 ; SSE3-NEXT:    pxor %xmm0, %xmm0
17947 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
17948 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17949 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17950 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17951 ; SSE3-NEXT:    retq
17953 ; SSSE3-LABEL: ugt_5_v2i64:
17954 ; SSSE3:       # %bb.0:
17955 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17956 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
17957 ; SSSE3-NEXT:    pand %xmm1, %xmm2
17958 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17959 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
17960 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
17961 ; SSSE3-NEXT:    psrlw $4, %xmm0
17962 ; SSSE3-NEXT:    pand %xmm1, %xmm0
17963 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
17964 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
17965 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
17966 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
17967 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17968 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17969 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17970 ; SSSE3-NEXT:    retq
17972 ; SSE41-LABEL: ugt_5_v2i64:
17973 ; SSE41:       # %bb.0:
17974 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17975 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
17976 ; SSE41-NEXT:    pand %xmm1, %xmm2
17977 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17978 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
17979 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
17980 ; SSE41-NEXT:    psrlw $4, %xmm0
17981 ; SSE41-NEXT:    pand %xmm1, %xmm0
17982 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
17983 ; SSE41-NEXT:    paddb %xmm4, %xmm3
17984 ; SSE41-NEXT:    pxor %xmm0, %xmm0
17985 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
17986 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
17987 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17988 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
17989 ; SSE41-NEXT:    retq
17991 ; AVX1-LABEL: ugt_5_v2i64:
17992 ; AVX1:       # %bb.0:
17993 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
17994 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
17995 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
17996 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
17997 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
17998 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
17999 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18000 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18001 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18002 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18003 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18004 ; AVX1-NEXT:    retq
18006 ; AVX2-LABEL: ugt_5_v2i64:
18007 ; AVX2:       # %bb.0:
18008 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18009 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
18010 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18011 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18012 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
18013 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
18014 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18015 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18016 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18017 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18018 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18019 ; AVX2-NEXT:    retq
18021 ; AVX512VPOPCNTDQ-LABEL: ugt_5_v2i64:
18022 ; AVX512VPOPCNTDQ:       # %bb.0:
18023 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18024 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18025 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18026 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
18027 ; AVX512VPOPCNTDQ-NEXT:    retq
18029 ; AVX512VPOPCNTDQVL-LABEL: ugt_5_v2i64:
18030 ; AVX512VPOPCNTDQVL:       # %bb.0:
18031 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
18032 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [5,5]
18033 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18034 ; AVX512VPOPCNTDQVL-NEXT:    retq
18036 ; BITALG_NOVLX-LABEL: ugt_5_v2i64:
18037 ; BITALG_NOVLX:       # %bb.0:
18038 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18039 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18040 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18041 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18042 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18043 ; BITALG_NOVLX-NEXT:    vzeroupper
18044 ; BITALG_NOVLX-NEXT:    retq
18046 ; BITALG-LABEL: ugt_5_v2i64:
18047 ; BITALG:       # %bb.0:
18048 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
18049 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18050 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18051 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [5,5]
18052 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18053 ; BITALG-NEXT:    retq
18054   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18055   %3 = icmp ugt <2 x i64> %2, <i64 5, i64 5>
18056   %4 = sext <2 x i1> %3 to <2 x i64>
18057   ret <2 x i64> %4
18060 define <2 x i64> @ult_6_v2i64(<2 x i64> %0) {
18061 ; SSE2-LABEL: ult_6_v2i64:
18062 ; SSE2:       # %bb.0:
18063 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18064 ; SSE2-NEXT:    psrlw $1, %xmm1
18065 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18066 ; SSE2-NEXT:    psubb %xmm1, %xmm0
18067 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18068 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
18069 ; SSE2-NEXT:    pand %xmm1, %xmm2
18070 ; SSE2-NEXT:    psrlw $2, %xmm0
18071 ; SSE2-NEXT:    pand %xmm1, %xmm0
18072 ; SSE2-NEXT:    paddb %xmm2, %xmm0
18073 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18074 ; SSE2-NEXT:    psrlw $4, %xmm1
18075 ; SSE2-NEXT:    paddb %xmm0, %xmm1
18076 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18077 ; SSE2-NEXT:    pxor %xmm0, %xmm0
18078 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
18079 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18080 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18081 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483654,2147483654,2147483654,2147483654]
18082 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
18083 ; SSE2-NEXT:    retq
18085 ; SSE3-LABEL: ult_6_v2i64:
18086 ; SSE3:       # %bb.0:
18087 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18088 ; SSE3-NEXT:    psrlw $1, %xmm1
18089 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18090 ; SSE3-NEXT:    psubb %xmm1, %xmm0
18091 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18092 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
18093 ; SSE3-NEXT:    pand %xmm1, %xmm2
18094 ; SSE3-NEXT:    psrlw $2, %xmm0
18095 ; SSE3-NEXT:    pand %xmm1, %xmm0
18096 ; SSE3-NEXT:    paddb %xmm2, %xmm0
18097 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18098 ; SSE3-NEXT:    psrlw $4, %xmm1
18099 ; SSE3-NEXT:    paddb %xmm0, %xmm1
18100 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18101 ; SSE3-NEXT:    pxor %xmm0, %xmm0
18102 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
18103 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18104 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18105 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483654,2147483654,2147483654,2147483654]
18106 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
18107 ; SSE3-NEXT:    retq
18109 ; SSSE3-LABEL: ult_6_v2i64:
18110 ; SSSE3:       # %bb.0:
18111 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18112 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
18113 ; SSSE3-NEXT:    pand %xmm1, %xmm2
18114 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18115 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
18116 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
18117 ; SSSE3-NEXT:    psrlw $4, %xmm0
18118 ; SSSE3-NEXT:    pand %xmm1, %xmm0
18119 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
18120 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
18121 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
18122 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
18123 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18124 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18125 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483654,2147483654,2147483654,2147483654]
18126 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
18127 ; SSSE3-NEXT:    retq
18129 ; SSE41-LABEL: ult_6_v2i64:
18130 ; SSE41:       # %bb.0:
18131 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18132 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
18133 ; SSE41-NEXT:    pand %xmm1, %xmm2
18134 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18135 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
18136 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
18137 ; SSE41-NEXT:    psrlw $4, %xmm0
18138 ; SSE41-NEXT:    pand %xmm1, %xmm0
18139 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
18140 ; SSE41-NEXT:    paddb %xmm4, %xmm3
18141 ; SSE41-NEXT:    pxor %xmm0, %xmm0
18142 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
18143 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18144 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18145 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483654,2147483654,2147483654,2147483654]
18146 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
18147 ; SSE41-NEXT:    retq
18149 ; AVX1-LABEL: ult_6_v2i64:
18150 ; AVX1:       # %bb.0:
18151 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18152 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18153 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18154 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18155 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18156 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18157 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18158 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18159 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18160 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18161 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [6,6]
18162 ; AVX1-NEXT:    # xmm1 = mem[0,0]
18163 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18164 ; AVX1-NEXT:    retq
18166 ; AVX2-LABEL: ult_6_v2i64:
18167 ; AVX2:       # %bb.0:
18168 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18169 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
18170 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18171 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18172 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
18173 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
18174 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18175 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18176 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18177 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18178 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [6,6]
18179 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18180 ; AVX2-NEXT:    retq
18182 ; AVX512VPOPCNTDQ-LABEL: ult_6_v2i64:
18183 ; AVX512VPOPCNTDQ:       # %bb.0:
18184 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18185 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18186 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [6,6]
18187 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18188 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
18189 ; AVX512VPOPCNTDQ-NEXT:    retq
18191 ; AVX512VPOPCNTDQVL-LABEL: ult_6_v2i64:
18192 ; AVX512VPOPCNTDQVL:       # %bb.0:
18193 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
18194 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [6,6]
18195 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18196 ; AVX512VPOPCNTDQVL-NEXT:    retq
18198 ; BITALG_NOVLX-LABEL: ult_6_v2i64:
18199 ; BITALG_NOVLX:       # %bb.0:
18200 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18201 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18202 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18203 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18204 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [6,6]
18205 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18206 ; BITALG_NOVLX-NEXT:    vzeroupper
18207 ; BITALG_NOVLX-NEXT:    retq
18209 ; BITALG-LABEL: ult_6_v2i64:
18210 ; BITALG:       # %bb.0:
18211 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
18212 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18213 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18214 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [6,6]
18215 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18216 ; BITALG-NEXT:    retq
18217   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18218   %3 = icmp ult <2 x i64> %2, <i64 6, i64 6>
18219   %4 = sext <2 x i1> %3 to <2 x i64>
18220   ret <2 x i64> %4
18223 define <2 x i64> @ugt_6_v2i64(<2 x i64> %0) {
18224 ; SSE2-LABEL: ugt_6_v2i64:
18225 ; SSE2:       # %bb.0:
18226 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18227 ; SSE2-NEXT:    psrlw $1, %xmm1
18228 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18229 ; SSE2-NEXT:    psubb %xmm1, %xmm0
18230 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18231 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
18232 ; SSE2-NEXT:    pand %xmm1, %xmm2
18233 ; SSE2-NEXT:    psrlw $2, %xmm0
18234 ; SSE2-NEXT:    pand %xmm1, %xmm0
18235 ; SSE2-NEXT:    paddb %xmm2, %xmm0
18236 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18237 ; SSE2-NEXT:    psrlw $4, %xmm1
18238 ; SSE2-NEXT:    paddb %xmm0, %xmm1
18239 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18240 ; SSE2-NEXT:    pxor %xmm0, %xmm0
18241 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
18242 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18243 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18244 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18245 ; SSE2-NEXT:    retq
18247 ; SSE3-LABEL: ugt_6_v2i64:
18248 ; SSE3:       # %bb.0:
18249 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18250 ; SSE3-NEXT:    psrlw $1, %xmm1
18251 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18252 ; SSE3-NEXT:    psubb %xmm1, %xmm0
18253 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18254 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
18255 ; SSE3-NEXT:    pand %xmm1, %xmm2
18256 ; SSE3-NEXT:    psrlw $2, %xmm0
18257 ; SSE3-NEXT:    pand %xmm1, %xmm0
18258 ; SSE3-NEXT:    paddb %xmm2, %xmm0
18259 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18260 ; SSE3-NEXT:    psrlw $4, %xmm1
18261 ; SSE3-NEXT:    paddb %xmm0, %xmm1
18262 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18263 ; SSE3-NEXT:    pxor %xmm0, %xmm0
18264 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
18265 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18266 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18267 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18268 ; SSE3-NEXT:    retq
18270 ; SSSE3-LABEL: ugt_6_v2i64:
18271 ; SSSE3:       # %bb.0:
18272 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18273 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
18274 ; SSSE3-NEXT:    pand %xmm1, %xmm2
18275 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18276 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
18277 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
18278 ; SSSE3-NEXT:    psrlw $4, %xmm0
18279 ; SSSE3-NEXT:    pand %xmm1, %xmm0
18280 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
18281 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
18282 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
18283 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
18284 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18285 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18286 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18287 ; SSSE3-NEXT:    retq
18289 ; SSE41-LABEL: ugt_6_v2i64:
18290 ; SSE41:       # %bb.0:
18291 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18292 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
18293 ; SSE41-NEXT:    pand %xmm1, %xmm2
18294 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18295 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
18296 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
18297 ; SSE41-NEXT:    psrlw $4, %xmm0
18298 ; SSE41-NEXT:    pand %xmm1, %xmm0
18299 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
18300 ; SSE41-NEXT:    paddb %xmm4, %xmm3
18301 ; SSE41-NEXT:    pxor %xmm0, %xmm0
18302 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
18303 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18304 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18305 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18306 ; SSE41-NEXT:    retq
18308 ; AVX1-LABEL: ugt_6_v2i64:
18309 ; AVX1:       # %bb.0:
18310 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18311 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18312 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18313 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18314 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18315 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18316 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18317 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18318 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18319 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18320 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18321 ; AVX1-NEXT:    retq
18323 ; AVX2-LABEL: ugt_6_v2i64:
18324 ; AVX2:       # %bb.0:
18325 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18326 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
18327 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18328 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18329 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
18330 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
18331 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18332 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18333 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18334 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18335 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18336 ; AVX2-NEXT:    retq
18338 ; AVX512VPOPCNTDQ-LABEL: ugt_6_v2i64:
18339 ; AVX512VPOPCNTDQ:       # %bb.0:
18340 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18341 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18342 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18343 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
18344 ; AVX512VPOPCNTDQ-NEXT:    retq
18346 ; AVX512VPOPCNTDQVL-LABEL: ugt_6_v2i64:
18347 ; AVX512VPOPCNTDQVL:       # %bb.0:
18348 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
18349 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [6,6]
18350 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18351 ; AVX512VPOPCNTDQVL-NEXT:    retq
18353 ; BITALG_NOVLX-LABEL: ugt_6_v2i64:
18354 ; BITALG_NOVLX:       # %bb.0:
18355 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18356 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18357 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18358 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18359 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18360 ; BITALG_NOVLX-NEXT:    vzeroupper
18361 ; BITALG_NOVLX-NEXT:    retq
18363 ; BITALG-LABEL: ugt_6_v2i64:
18364 ; BITALG:       # %bb.0:
18365 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
18366 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18367 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18368 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [6,6]
18369 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18370 ; BITALG-NEXT:    retq
18371   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18372   %3 = icmp ugt <2 x i64> %2, <i64 6, i64 6>
18373   %4 = sext <2 x i1> %3 to <2 x i64>
18374   ret <2 x i64> %4
18377 define <2 x i64> @ult_7_v2i64(<2 x i64> %0) {
18378 ; SSE2-LABEL: ult_7_v2i64:
18379 ; SSE2:       # %bb.0:
18380 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18381 ; SSE2-NEXT:    psrlw $1, %xmm1
18382 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18383 ; SSE2-NEXT:    psubb %xmm1, %xmm0
18384 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18385 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
18386 ; SSE2-NEXT:    pand %xmm1, %xmm2
18387 ; SSE2-NEXT:    psrlw $2, %xmm0
18388 ; SSE2-NEXT:    pand %xmm1, %xmm0
18389 ; SSE2-NEXT:    paddb %xmm2, %xmm0
18390 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18391 ; SSE2-NEXT:    psrlw $4, %xmm1
18392 ; SSE2-NEXT:    paddb %xmm0, %xmm1
18393 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18394 ; SSE2-NEXT:    pxor %xmm0, %xmm0
18395 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
18396 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18397 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18398 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483655,2147483655,2147483655,2147483655]
18399 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
18400 ; SSE2-NEXT:    retq
18402 ; SSE3-LABEL: ult_7_v2i64:
18403 ; SSE3:       # %bb.0:
18404 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18405 ; SSE3-NEXT:    psrlw $1, %xmm1
18406 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18407 ; SSE3-NEXT:    psubb %xmm1, %xmm0
18408 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18409 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
18410 ; SSE3-NEXT:    pand %xmm1, %xmm2
18411 ; SSE3-NEXT:    psrlw $2, %xmm0
18412 ; SSE3-NEXT:    pand %xmm1, %xmm0
18413 ; SSE3-NEXT:    paddb %xmm2, %xmm0
18414 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18415 ; SSE3-NEXT:    psrlw $4, %xmm1
18416 ; SSE3-NEXT:    paddb %xmm0, %xmm1
18417 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18418 ; SSE3-NEXT:    pxor %xmm0, %xmm0
18419 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
18420 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18421 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18422 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483655,2147483655,2147483655,2147483655]
18423 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
18424 ; SSE3-NEXT:    retq
18426 ; SSSE3-LABEL: ult_7_v2i64:
18427 ; SSSE3:       # %bb.0:
18428 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18429 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
18430 ; SSSE3-NEXT:    pand %xmm1, %xmm2
18431 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18432 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
18433 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
18434 ; SSSE3-NEXT:    psrlw $4, %xmm0
18435 ; SSSE3-NEXT:    pand %xmm1, %xmm0
18436 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
18437 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
18438 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
18439 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
18440 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18441 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18442 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483655,2147483655,2147483655,2147483655]
18443 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
18444 ; SSSE3-NEXT:    retq
18446 ; SSE41-LABEL: ult_7_v2i64:
18447 ; SSE41:       # %bb.0:
18448 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18449 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
18450 ; SSE41-NEXT:    pand %xmm1, %xmm2
18451 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18452 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
18453 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
18454 ; SSE41-NEXT:    psrlw $4, %xmm0
18455 ; SSE41-NEXT:    pand %xmm1, %xmm0
18456 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
18457 ; SSE41-NEXT:    paddb %xmm4, %xmm3
18458 ; SSE41-NEXT:    pxor %xmm0, %xmm0
18459 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
18460 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18461 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18462 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483655,2147483655,2147483655,2147483655]
18463 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
18464 ; SSE41-NEXT:    retq
18466 ; AVX1-LABEL: ult_7_v2i64:
18467 ; AVX1:       # %bb.0:
18468 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18469 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18470 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18471 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18472 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18473 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18474 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18475 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18476 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18477 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18478 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [7,7]
18479 ; AVX1-NEXT:    # xmm1 = mem[0,0]
18480 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18481 ; AVX1-NEXT:    retq
18483 ; AVX2-LABEL: ult_7_v2i64:
18484 ; AVX2:       # %bb.0:
18485 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18486 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
18487 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18488 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18489 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
18490 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
18491 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18492 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18493 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18494 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18495 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [7,7]
18496 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18497 ; AVX2-NEXT:    retq
18499 ; AVX512VPOPCNTDQ-LABEL: ult_7_v2i64:
18500 ; AVX512VPOPCNTDQ:       # %bb.0:
18501 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18502 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18503 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [7,7]
18504 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18505 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
18506 ; AVX512VPOPCNTDQ-NEXT:    retq
18508 ; AVX512VPOPCNTDQVL-LABEL: ult_7_v2i64:
18509 ; AVX512VPOPCNTDQVL:       # %bb.0:
18510 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
18511 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [7,7]
18512 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18513 ; AVX512VPOPCNTDQVL-NEXT:    retq
18515 ; BITALG_NOVLX-LABEL: ult_7_v2i64:
18516 ; BITALG_NOVLX:       # %bb.0:
18517 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18518 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18519 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18520 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18521 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [7,7]
18522 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18523 ; BITALG_NOVLX-NEXT:    vzeroupper
18524 ; BITALG_NOVLX-NEXT:    retq
18526 ; BITALG-LABEL: ult_7_v2i64:
18527 ; BITALG:       # %bb.0:
18528 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
18529 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18530 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18531 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [7,7]
18532 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18533 ; BITALG-NEXT:    retq
18534   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18535   %3 = icmp ult <2 x i64> %2, <i64 7, i64 7>
18536   %4 = sext <2 x i1> %3 to <2 x i64>
18537   ret <2 x i64> %4
18540 define <2 x i64> @ugt_7_v2i64(<2 x i64> %0) {
18541 ; SSE2-LABEL: ugt_7_v2i64:
18542 ; SSE2:       # %bb.0:
18543 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18544 ; SSE2-NEXT:    psrlw $1, %xmm1
18545 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18546 ; SSE2-NEXT:    psubb %xmm1, %xmm0
18547 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18548 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
18549 ; SSE2-NEXT:    pand %xmm1, %xmm2
18550 ; SSE2-NEXT:    psrlw $2, %xmm0
18551 ; SSE2-NEXT:    pand %xmm1, %xmm0
18552 ; SSE2-NEXT:    paddb %xmm2, %xmm0
18553 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18554 ; SSE2-NEXT:    psrlw $4, %xmm1
18555 ; SSE2-NEXT:    paddb %xmm0, %xmm1
18556 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18557 ; SSE2-NEXT:    pxor %xmm0, %xmm0
18558 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
18559 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18560 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18561 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18562 ; SSE2-NEXT:    retq
18564 ; SSE3-LABEL: ugt_7_v2i64:
18565 ; SSE3:       # %bb.0:
18566 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18567 ; SSE3-NEXT:    psrlw $1, %xmm1
18568 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18569 ; SSE3-NEXT:    psubb %xmm1, %xmm0
18570 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18571 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
18572 ; SSE3-NEXT:    pand %xmm1, %xmm2
18573 ; SSE3-NEXT:    psrlw $2, %xmm0
18574 ; SSE3-NEXT:    pand %xmm1, %xmm0
18575 ; SSE3-NEXT:    paddb %xmm2, %xmm0
18576 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18577 ; SSE3-NEXT:    psrlw $4, %xmm1
18578 ; SSE3-NEXT:    paddb %xmm0, %xmm1
18579 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18580 ; SSE3-NEXT:    pxor %xmm0, %xmm0
18581 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
18582 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18583 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18584 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18585 ; SSE3-NEXT:    retq
18587 ; SSSE3-LABEL: ugt_7_v2i64:
18588 ; SSSE3:       # %bb.0:
18589 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18590 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
18591 ; SSSE3-NEXT:    pand %xmm1, %xmm2
18592 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18593 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
18594 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
18595 ; SSSE3-NEXT:    psrlw $4, %xmm0
18596 ; SSSE3-NEXT:    pand %xmm1, %xmm0
18597 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
18598 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
18599 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
18600 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
18601 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18602 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18603 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18604 ; SSSE3-NEXT:    retq
18606 ; SSE41-LABEL: ugt_7_v2i64:
18607 ; SSE41:       # %bb.0:
18608 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18609 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
18610 ; SSE41-NEXT:    pand %xmm1, %xmm2
18611 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18612 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
18613 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
18614 ; SSE41-NEXT:    psrlw $4, %xmm0
18615 ; SSE41-NEXT:    pand %xmm1, %xmm0
18616 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
18617 ; SSE41-NEXT:    paddb %xmm4, %xmm3
18618 ; SSE41-NEXT:    pxor %xmm0, %xmm0
18619 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
18620 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18621 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18622 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18623 ; SSE41-NEXT:    retq
18625 ; AVX1-LABEL: ugt_7_v2i64:
18626 ; AVX1:       # %bb.0:
18627 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18628 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18629 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18630 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18631 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18632 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18633 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18634 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18635 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18636 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18637 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18638 ; AVX1-NEXT:    retq
18640 ; AVX2-LABEL: ugt_7_v2i64:
18641 ; AVX2:       # %bb.0:
18642 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18643 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
18644 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18645 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18646 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
18647 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
18648 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18649 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18650 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18651 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18652 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18653 ; AVX2-NEXT:    retq
18655 ; AVX512VPOPCNTDQ-LABEL: ugt_7_v2i64:
18656 ; AVX512VPOPCNTDQ:       # %bb.0:
18657 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18658 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18659 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18660 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
18661 ; AVX512VPOPCNTDQ-NEXT:    retq
18663 ; AVX512VPOPCNTDQVL-LABEL: ugt_7_v2i64:
18664 ; AVX512VPOPCNTDQVL:       # %bb.0:
18665 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
18666 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [7,7]
18667 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18668 ; AVX512VPOPCNTDQVL-NEXT:    retq
18670 ; BITALG_NOVLX-LABEL: ugt_7_v2i64:
18671 ; BITALG_NOVLX:       # %bb.0:
18672 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18673 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18674 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18675 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18676 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18677 ; BITALG_NOVLX-NEXT:    vzeroupper
18678 ; BITALG_NOVLX-NEXT:    retq
18680 ; BITALG-LABEL: ugt_7_v2i64:
18681 ; BITALG:       # %bb.0:
18682 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
18683 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18684 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18685 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [7,7]
18686 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18687 ; BITALG-NEXT:    retq
18688   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18689   %3 = icmp ugt <2 x i64> %2, <i64 7, i64 7>
18690   %4 = sext <2 x i1> %3 to <2 x i64>
18691   ret <2 x i64> %4
18694 define <2 x i64> @ult_8_v2i64(<2 x i64> %0) {
18695 ; SSE2-LABEL: ult_8_v2i64:
18696 ; SSE2:       # %bb.0:
18697 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18698 ; SSE2-NEXT:    psrlw $1, %xmm1
18699 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18700 ; SSE2-NEXT:    psubb %xmm1, %xmm0
18701 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18702 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
18703 ; SSE2-NEXT:    pand %xmm1, %xmm2
18704 ; SSE2-NEXT:    psrlw $2, %xmm0
18705 ; SSE2-NEXT:    pand %xmm1, %xmm0
18706 ; SSE2-NEXT:    paddb %xmm2, %xmm0
18707 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18708 ; SSE2-NEXT:    psrlw $4, %xmm1
18709 ; SSE2-NEXT:    paddb %xmm0, %xmm1
18710 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18711 ; SSE2-NEXT:    pxor %xmm0, %xmm0
18712 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
18713 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18714 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18715 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483656,2147483656,2147483656,2147483656]
18716 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
18717 ; SSE2-NEXT:    retq
18719 ; SSE3-LABEL: ult_8_v2i64:
18720 ; SSE3:       # %bb.0:
18721 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18722 ; SSE3-NEXT:    psrlw $1, %xmm1
18723 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18724 ; SSE3-NEXT:    psubb %xmm1, %xmm0
18725 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18726 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
18727 ; SSE3-NEXT:    pand %xmm1, %xmm2
18728 ; SSE3-NEXT:    psrlw $2, %xmm0
18729 ; SSE3-NEXT:    pand %xmm1, %xmm0
18730 ; SSE3-NEXT:    paddb %xmm2, %xmm0
18731 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18732 ; SSE3-NEXT:    psrlw $4, %xmm1
18733 ; SSE3-NEXT:    paddb %xmm0, %xmm1
18734 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18735 ; SSE3-NEXT:    pxor %xmm0, %xmm0
18736 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
18737 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18738 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18739 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483656,2147483656,2147483656,2147483656]
18740 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
18741 ; SSE3-NEXT:    retq
18743 ; SSSE3-LABEL: ult_8_v2i64:
18744 ; SSSE3:       # %bb.0:
18745 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18746 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
18747 ; SSSE3-NEXT:    pand %xmm1, %xmm2
18748 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18749 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
18750 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
18751 ; SSSE3-NEXT:    psrlw $4, %xmm0
18752 ; SSSE3-NEXT:    pand %xmm1, %xmm0
18753 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
18754 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
18755 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
18756 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
18757 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18758 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18759 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483656,2147483656,2147483656,2147483656]
18760 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
18761 ; SSSE3-NEXT:    retq
18763 ; SSE41-LABEL: ult_8_v2i64:
18764 ; SSE41:       # %bb.0:
18765 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18766 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
18767 ; SSE41-NEXT:    pand %xmm1, %xmm2
18768 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18769 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
18770 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
18771 ; SSE41-NEXT:    psrlw $4, %xmm0
18772 ; SSE41-NEXT:    pand %xmm1, %xmm0
18773 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
18774 ; SSE41-NEXT:    paddb %xmm4, %xmm3
18775 ; SSE41-NEXT:    pxor %xmm0, %xmm0
18776 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
18777 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
18778 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18779 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483656,2147483656,2147483656,2147483656]
18780 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
18781 ; SSE41-NEXT:    retq
18783 ; AVX1-LABEL: ult_8_v2i64:
18784 ; AVX1:       # %bb.0:
18785 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18786 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18787 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18788 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18789 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18790 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18791 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18792 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18793 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18794 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18795 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [8,8]
18796 ; AVX1-NEXT:    # xmm1 = mem[0,0]
18797 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18798 ; AVX1-NEXT:    retq
18800 ; AVX2-LABEL: ult_8_v2i64:
18801 ; AVX2:       # %bb.0:
18802 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18803 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
18804 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18805 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18806 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
18807 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
18808 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18809 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18810 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18811 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18812 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [8,8]
18813 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18814 ; AVX2-NEXT:    retq
18816 ; AVX512VPOPCNTDQ-LABEL: ult_8_v2i64:
18817 ; AVX512VPOPCNTDQ:       # %bb.0:
18818 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18819 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18820 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [8,8]
18821 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18822 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
18823 ; AVX512VPOPCNTDQ-NEXT:    retq
18825 ; AVX512VPOPCNTDQVL-LABEL: ult_8_v2i64:
18826 ; AVX512VPOPCNTDQVL:       # %bb.0:
18827 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
18828 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [8,8]
18829 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18830 ; AVX512VPOPCNTDQVL-NEXT:    retq
18832 ; BITALG_NOVLX-LABEL: ult_8_v2i64:
18833 ; BITALG_NOVLX:       # %bb.0:
18834 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18835 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18836 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18837 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18838 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [8,8]
18839 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18840 ; BITALG_NOVLX-NEXT:    vzeroupper
18841 ; BITALG_NOVLX-NEXT:    retq
18843 ; BITALG-LABEL: ult_8_v2i64:
18844 ; BITALG:       # %bb.0:
18845 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
18846 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18847 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18848 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [8,8]
18849 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
18850 ; BITALG-NEXT:    retq
18851   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18852   %3 = icmp ult <2 x i64> %2, <i64 8, i64 8>
18853   %4 = sext <2 x i1> %3 to <2 x i64>
18854   ret <2 x i64> %4
18857 define <2 x i64> @ugt_8_v2i64(<2 x i64> %0) {
18858 ; SSE2-LABEL: ugt_8_v2i64:
18859 ; SSE2:       # %bb.0:
18860 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18861 ; SSE2-NEXT:    psrlw $1, %xmm1
18862 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18863 ; SSE2-NEXT:    psubb %xmm1, %xmm0
18864 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18865 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
18866 ; SSE2-NEXT:    pand %xmm1, %xmm2
18867 ; SSE2-NEXT:    psrlw $2, %xmm0
18868 ; SSE2-NEXT:    pand %xmm1, %xmm0
18869 ; SSE2-NEXT:    paddb %xmm2, %xmm0
18870 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
18871 ; SSE2-NEXT:    psrlw $4, %xmm1
18872 ; SSE2-NEXT:    paddb %xmm0, %xmm1
18873 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18874 ; SSE2-NEXT:    pxor %xmm0, %xmm0
18875 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
18876 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18877 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18878 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18879 ; SSE2-NEXT:    retq
18881 ; SSE3-LABEL: ugt_8_v2i64:
18882 ; SSE3:       # %bb.0:
18883 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18884 ; SSE3-NEXT:    psrlw $1, %xmm1
18885 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18886 ; SSE3-NEXT:    psubb %xmm1, %xmm0
18887 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
18888 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
18889 ; SSE3-NEXT:    pand %xmm1, %xmm2
18890 ; SSE3-NEXT:    psrlw $2, %xmm0
18891 ; SSE3-NEXT:    pand %xmm1, %xmm0
18892 ; SSE3-NEXT:    paddb %xmm2, %xmm0
18893 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
18894 ; SSE3-NEXT:    psrlw $4, %xmm1
18895 ; SSE3-NEXT:    paddb %xmm0, %xmm1
18896 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
18897 ; SSE3-NEXT:    pxor %xmm0, %xmm0
18898 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
18899 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18900 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18901 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18902 ; SSE3-NEXT:    retq
18904 ; SSSE3-LABEL: ugt_8_v2i64:
18905 ; SSSE3:       # %bb.0:
18906 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18907 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
18908 ; SSSE3-NEXT:    pand %xmm1, %xmm2
18909 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18910 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
18911 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
18912 ; SSSE3-NEXT:    psrlw $4, %xmm0
18913 ; SSSE3-NEXT:    pand %xmm1, %xmm0
18914 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
18915 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
18916 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
18917 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
18918 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18919 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18920 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18921 ; SSSE3-NEXT:    retq
18923 ; SSE41-LABEL: ugt_8_v2i64:
18924 ; SSE41:       # %bb.0:
18925 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18926 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
18927 ; SSE41-NEXT:    pand %xmm1, %xmm2
18928 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18929 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
18930 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
18931 ; SSE41-NEXT:    psrlw $4, %xmm0
18932 ; SSE41-NEXT:    pand %xmm1, %xmm0
18933 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
18934 ; SSE41-NEXT:    paddb %xmm4, %xmm3
18935 ; SSE41-NEXT:    pxor %xmm0, %xmm0
18936 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
18937 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
18938 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18939 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
18940 ; SSE41-NEXT:    retq
18942 ; AVX1-LABEL: ugt_8_v2i64:
18943 ; AVX1:       # %bb.0:
18944 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18945 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
18946 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18947 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18948 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
18949 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
18950 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18951 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18952 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18953 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18954 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18955 ; AVX1-NEXT:    retq
18957 ; AVX2-LABEL: ugt_8_v2i64:
18958 ; AVX2:       # %bb.0:
18959 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
18960 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
18961 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
18962 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
18963 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
18964 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
18965 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
18966 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
18967 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18968 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18969 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18970 ; AVX2-NEXT:    retq
18972 ; AVX512VPOPCNTDQ-LABEL: ugt_8_v2i64:
18973 ; AVX512VPOPCNTDQ:       # %bb.0:
18974 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18975 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
18976 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18977 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
18978 ; AVX512VPOPCNTDQ-NEXT:    retq
18980 ; AVX512VPOPCNTDQVL-LABEL: ugt_8_v2i64:
18981 ; AVX512VPOPCNTDQVL:       # %bb.0:
18982 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
18983 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [8,8]
18984 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
18985 ; AVX512VPOPCNTDQVL-NEXT:    retq
18987 ; BITALG_NOVLX-LABEL: ugt_8_v2i64:
18988 ; BITALG_NOVLX:       # %bb.0:
18989 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
18990 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
18991 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
18992 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
18993 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
18994 ; BITALG_NOVLX-NEXT:    vzeroupper
18995 ; BITALG_NOVLX-NEXT:    retq
18997 ; BITALG-LABEL: ugt_8_v2i64:
18998 ; BITALG:       # %bb.0:
18999 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
19000 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19001 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19002 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [8,8]
19003 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19004 ; BITALG-NEXT:    retq
19005   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19006   %3 = icmp ugt <2 x i64> %2, <i64 8, i64 8>
19007   %4 = sext <2 x i1> %3 to <2 x i64>
19008   ret <2 x i64> %4
19011 define <2 x i64> @ult_9_v2i64(<2 x i64> %0) {
19012 ; SSE2-LABEL: ult_9_v2i64:
19013 ; SSE2:       # %bb.0:
19014 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19015 ; SSE2-NEXT:    psrlw $1, %xmm1
19016 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19017 ; SSE2-NEXT:    psubb %xmm1, %xmm0
19018 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19019 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
19020 ; SSE2-NEXT:    pand %xmm1, %xmm2
19021 ; SSE2-NEXT:    psrlw $2, %xmm0
19022 ; SSE2-NEXT:    pand %xmm1, %xmm0
19023 ; SSE2-NEXT:    paddb %xmm2, %xmm0
19024 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19025 ; SSE2-NEXT:    psrlw $4, %xmm1
19026 ; SSE2-NEXT:    paddb %xmm0, %xmm1
19027 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19028 ; SSE2-NEXT:    pxor %xmm0, %xmm0
19029 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
19030 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19031 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19032 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483657,2147483657,2147483657,2147483657]
19033 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
19034 ; SSE2-NEXT:    retq
19036 ; SSE3-LABEL: ult_9_v2i64:
19037 ; SSE3:       # %bb.0:
19038 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19039 ; SSE3-NEXT:    psrlw $1, %xmm1
19040 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19041 ; SSE3-NEXT:    psubb %xmm1, %xmm0
19042 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19043 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
19044 ; SSE3-NEXT:    pand %xmm1, %xmm2
19045 ; SSE3-NEXT:    psrlw $2, %xmm0
19046 ; SSE3-NEXT:    pand %xmm1, %xmm0
19047 ; SSE3-NEXT:    paddb %xmm2, %xmm0
19048 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19049 ; SSE3-NEXT:    psrlw $4, %xmm1
19050 ; SSE3-NEXT:    paddb %xmm0, %xmm1
19051 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19052 ; SSE3-NEXT:    pxor %xmm0, %xmm0
19053 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
19054 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19055 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19056 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483657,2147483657,2147483657,2147483657]
19057 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
19058 ; SSE3-NEXT:    retq
19060 ; SSSE3-LABEL: ult_9_v2i64:
19061 ; SSSE3:       # %bb.0:
19062 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19063 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
19064 ; SSSE3-NEXT:    pand %xmm1, %xmm2
19065 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19066 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
19067 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
19068 ; SSSE3-NEXT:    psrlw $4, %xmm0
19069 ; SSSE3-NEXT:    pand %xmm1, %xmm0
19070 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
19071 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
19072 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
19073 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
19074 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19075 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19076 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483657,2147483657,2147483657,2147483657]
19077 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
19078 ; SSSE3-NEXT:    retq
19080 ; SSE41-LABEL: ult_9_v2i64:
19081 ; SSE41:       # %bb.0:
19082 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19083 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
19084 ; SSE41-NEXT:    pand %xmm1, %xmm2
19085 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19086 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
19087 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
19088 ; SSE41-NEXT:    psrlw $4, %xmm0
19089 ; SSE41-NEXT:    pand %xmm1, %xmm0
19090 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
19091 ; SSE41-NEXT:    paddb %xmm4, %xmm3
19092 ; SSE41-NEXT:    pxor %xmm0, %xmm0
19093 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
19094 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19095 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19096 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483657,2147483657,2147483657,2147483657]
19097 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
19098 ; SSE41-NEXT:    retq
19100 ; AVX1-LABEL: ult_9_v2i64:
19101 ; AVX1:       # %bb.0:
19102 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19103 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19104 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19105 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19106 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19107 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19108 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19109 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19110 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19111 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19112 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [9,9]
19113 ; AVX1-NEXT:    # xmm1 = mem[0,0]
19114 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19115 ; AVX1-NEXT:    retq
19117 ; AVX2-LABEL: ult_9_v2i64:
19118 ; AVX2:       # %bb.0:
19119 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19120 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
19121 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19122 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19123 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
19124 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
19125 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19126 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19127 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19128 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19129 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [9,9]
19130 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19131 ; AVX2-NEXT:    retq
19133 ; AVX512VPOPCNTDQ-LABEL: ult_9_v2i64:
19134 ; AVX512VPOPCNTDQ:       # %bb.0:
19135 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19136 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19137 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [9,9]
19138 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19139 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
19140 ; AVX512VPOPCNTDQ-NEXT:    retq
19142 ; AVX512VPOPCNTDQVL-LABEL: ult_9_v2i64:
19143 ; AVX512VPOPCNTDQVL:       # %bb.0:
19144 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
19145 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [9,9]
19146 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19147 ; AVX512VPOPCNTDQVL-NEXT:    retq
19149 ; BITALG_NOVLX-LABEL: ult_9_v2i64:
19150 ; BITALG_NOVLX:       # %bb.0:
19151 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19152 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19153 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19154 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19155 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [9,9]
19156 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19157 ; BITALG_NOVLX-NEXT:    vzeroupper
19158 ; BITALG_NOVLX-NEXT:    retq
19160 ; BITALG-LABEL: ult_9_v2i64:
19161 ; BITALG:       # %bb.0:
19162 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
19163 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19164 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19165 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [9,9]
19166 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19167 ; BITALG-NEXT:    retq
19168   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19169   %3 = icmp ult <2 x i64> %2, <i64 9, i64 9>
19170   %4 = sext <2 x i1> %3 to <2 x i64>
19171   ret <2 x i64> %4
19174 define <2 x i64> @ugt_9_v2i64(<2 x i64> %0) {
19175 ; SSE2-LABEL: ugt_9_v2i64:
19176 ; SSE2:       # %bb.0:
19177 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19178 ; SSE2-NEXT:    psrlw $1, %xmm1
19179 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19180 ; SSE2-NEXT:    psubb %xmm1, %xmm0
19181 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19182 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
19183 ; SSE2-NEXT:    pand %xmm1, %xmm2
19184 ; SSE2-NEXT:    psrlw $2, %xmm0
19185 ; SSE2-NEXT:    pand %xmm1, %xmm0
19186 ; SSE2-NEXT:    paddb %xmm2, %xmm0
19187 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19188 ; SSE2-NEXT:    psrlw $4, %xmm1
19189 ; SSE2-NEXT:    paddb %xmm0, %xmm1
19190 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19191 ; SSE2-NEXT:    pxor %xmm0, %xmm0
19192 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
19193 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19194 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19195 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19196 ; SSE2-NEXT:    retq
19198 ; SSE3-LABEL: ugt_9_v2i64:
19199 ; SSE3:       # %bb.0:
19200 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19201 ; SSE3-NEXT:    psrlw $1, %xmm1
19202 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19203 ; SSE3-NEXT:    psubb %xmm1, %xmm0
19204 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19205 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
19206 ; SSE3-NEXT:    pand %xmm1, %xmm2
19207 ; SSE3-NEXT:    psrlw $2, %xmm0
19208 ; SSE3-NEXT:    pand %xmm1, %xmm0
19209 ; SSE3-NEXT:    paddb %xmm2, %xmm0
19210 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19211 ; SSE3-NEXT:    psrlw $4, %xmm1
19212 ; SSE3-NEXT:    paddb %xmm0, %xmm1
19213 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19214 ; SSE3-NEXT:    pxor %xmm0, %xmm0
19215 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
19216 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19217 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19218 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19219 ; SSE3-NEXT:    retq
19221 ; SSSE3-LABEL: ugt_9_v2i64:
19222 ; SSSE3:       # %bb.0:
19223 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19224 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
19225 ; SSSE3-NEXT:    pand %xmm1, %xmm2
19226 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19227 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
19228 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
19229 ; SSSE3-NEXT:    psrlw $4, %xmm0
19230 ; SSSE3-NEXT:    pand %xmm1, %xmm0
19231 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
19232 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
19233 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
19234 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
19235 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19236 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19237 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19238 ; SSSE3-NEXT:    retq
19240 ; SSE41-LABEL: ugt_9_v2i64:
19241 ; SSE41:       # %bb.0:
19242 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19243 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
19244 ; SSE41-NEXT:    pand %xmm1, %xmm2
19245 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19246 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
19247 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
19248 ; SSE41-NEXT:    psrlw $4, %xmm0
19249 ; SSE41-NEXT:    pand %xmm1, %xmm0
19250 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
19251 ; SSE41-NEXT:    paddb %xmm4, %xmm3
19252 ; SSE41-NEXT:    pxor %xmm0, %xmm0
19253 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
19254 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19255 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19256 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19257 ; SSE41-NEXT:    retq
19259 ; AVX1-LABEL: ugt_9_v2i64:
19260 ; AVX1:       # %bb.0:
19261 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19262 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19263 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19264 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19265 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19266 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19267 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19268 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19269 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19270 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19271 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19272 ; AVX1-NEXT:    retq
19274 ; AVX2-LABEL: ugt_9_v2i64:
19275 ; AVX2:       # %bb.0:
19276 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19277 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
19278 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19279 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19280 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
19281 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
19282 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19283 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19284 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19285 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19286 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19287 ; AVX2-NEXT:    retq
19289 ; AVX512VPOPCNTDQ-LABEL: ugt_9_v2i64:
19290 ; AVX512VPOPCNTDQ:       # %bb.0:
19291 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19292 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19293 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19294 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
19295 ; AVX512VPOPCNTDQ-NEXT:    retq
19297 ; AVX512VPOPCNTDQVL-LABEL: ugt_9_v2i64:
19298 ; AVX512VPOPCNTDQVL:       # %bb.0:
19299 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
19300 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [9,9]
19301 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19302 ; AVX512VPOPCNTDQVL-NEXT:    retq
19304 ; BITALG_NOVLX-LABEL: ugt_9_v2i64:
19305 ; BITALG_NOVLX:       # %bb.0:
19306 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19307 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19308 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19309 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19310 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19311 ; BITALG_NOVLX-NEXT:    vzeroupper
19312 ; BITALG_NOVLX-NEXT:    retq
19314 ; BITALG-LABEL: ugt_9_v2i64:
19315 ; BITALG:       # %bb.0:
19316 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
19317 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19318 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19319 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [9,9]
19320 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19321 ; BITALG-NEXT:    retq
19322   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19323   %3 = icmp ugt <2 x i64> %2, <i64 9, i64 9>
19324   %4 = sext <2 x i1> %3 to <2 x i64>
19325   ret <2 x i64> %4
19328 define <2 x i64> @ult_10_v2i64(<2 x i64> %0) {
19329 ; SSE2-LABEL: ult_10_v2i64:
19330 ; SSE2:       # %bb.0:
19331 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19332 ; SSE2-NEXT:    psrlw $1, %xmm1
19333 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19334 ; SSE2-NEXT:    psubb %xmm1, %xmm0
19335 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19336 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
19337 ; SSE2-NEXT:    pand %xmm1, %xmm2
19338 ; SSE2-NEXT:    psrlw $2, %xmm0
19339 ; SSE2-NEXT:    pand %xmm1, %xmm0
19340 ; SSE2-NEXT:    paddb %xmm2, %xmm0
19341 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19342 ; SSE2-NEXT:    psrlw $4, %xmm1
19343 ; SSE2-NEXT:    paddb %xmm0, %xmm1
19344 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19345 ; SSE2-NEXT:    pxor %xmm0, %xmm0
19346 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
19347 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19348 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19349 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483658,2147483658,2147483658,2147483658]
19350 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
19351 ; SSE2-NEXT:    retq
19353 ; SSE3-LABEL: ult_10_v2i64:
19354 ; SSE3:       # %bb.0:
19355 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19356 ; SSE3-NEXT:    psrlw $1, %xmm1
19357 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19358 ; SSE3-NEXT:    psubb %xmm1, %xmm0
19359 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19360 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
19361 ; SSE3-NEXT:    pand %xmm1, %xmm2
19362 ; SSE3-NEXT:    psrlw $2, %xmm0
19363 ; SSE3-NEXT:    pand %xmm1, %xmm0
19364 ; SSE3-NEXT:    paddb %xmm2, %xmm0
19365 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19366 ; SSE3-NEXT:    psrlw $4, %xmm1
19367 ; SSE3-NEXT:    paddb %xmm0, %xmm1
19368 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19369 ; SSE3-NEXT:    pxor %xmm0, %xmm0
19370 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
19371 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19372 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19373 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483658,2147483658,2147483658,2147483658]
19374 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
19375 ; SSE3-NEXT:    retq
19377 ; SSSE3-LABEL: ult_10_v2i64:
19378 ; SSSE3:       # %bb.0:
19379 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19380 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
19381 ; SSSE3-NEXT:    pand %xmm1, %xmm2
19382 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19383 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
19384 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
19385 ; SSSE3-NEXT:    psrlw $4, %xmm0
19386 ; SSSE3-NEXT:    pand %xmm1, %xmm0
19387 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
19388 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
19389 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
19390 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
19391 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19392 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19393 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483658,2147483658,2147483658,2147483658]
19394 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
19395 ; SSSE3-NEXT:    retq
19397 ; SSE41-LABEL: ult_10_v2i64:
19398 ; SSE41:       # %bb.0:
19399 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19400 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
19401 ; SSE41-NEXT:    pand %xmm1, %xmm2
19402 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19403 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
19404 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
19405 ; SSE41-NEXT:    psrlw $4, %xmm0
19406 ; SSE41-NEXT:    pand %xmm1, %xmm0
19407 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
19408 ; SSE41-NEXT:    paddb %xmm4, %xmm3
19409 ; SSE41-NEXT:    pxor %xmm0, %xmm0
19410 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
19411 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19412 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19413 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483658,2147483658,2147483658,2147483658]
19414 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
19415 ; SSE41-NEXT:    retq
19417 ; AVX1-LABEL: ult_10_v2i64:
19418 ; AVX1:       # %bb.0:
19419 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19420 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19421 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19422 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19423 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19424 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19425 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19426 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19427 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19428 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19429 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [10,10]
19430 ; AVX1-NEXT:    # xmm1 = mem[0,0]
19431 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19432 ; AVX1-NEXT:    retq
19434 ; AVX2-LABEL: ult_10_v2i64:
19435 ; AVX2:       # %bb.0:
19436 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19437 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
19438 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19439 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19440 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
19441 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
19442 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19443 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19444 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19445 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19446 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [10,10]
19447 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19448 ; AVX2-NEXT:    retq
19450 ; AVX512VPOPCNTDQ-LABEL: ult_10_v2i64:
19451 ; AVX512VPOPCNTDQ:       # %bb.0:
19452 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19453 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19454 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [10,10]
19455 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19456 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
19457 ; AVX512VPOPCNTDQ-NEXT:    retq
19459 ; AVX512VPOPCNTDQVL-LABEL: ult_10_v2i64:
19460 ; AVX512VPOPCNTDQVL:       # %bb.0:
19461 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
19462 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [10,10]
19463 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19464 ; AVX512VPOPCNTDQVL-NEXT:    retq
19466 ; BITALG_NOVLX-LABEL: ult_10_v2i64:
19467 ; BITALG_NOVLX:       # %bb.0:
19468 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19469 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19470 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19471 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19472 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [10,10]
19473 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19474 ; BITALG_NOVLX-NEXT:    vzeroupper
19475 ; BITALG_NOVLX-NEXT:    retq
19477 ; BITALG-LABEL: ult_10_v2i64:
19478 ; BITALG:       # %bb.0:
19479 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
19480 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19481 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19482 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [10,10]
19483 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19484 ; BITALG-NEXT:    retq
19485   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19486   %3 = icmp ult <2 x i64> %2, <i64 10, i64 10>
19487   %4 = sext <2 x i1> %3 to <2 x i64>
19488   ret <2 x i64> %4
19491 define <2 x i64> @ugt_10_v2i64(<2 x i64> %0) {
19492 ; SSE2-LABEL: ugt_10_v2i64:
19493 ; SSE2:       # %bb.0:
19494 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19495 ; SSE2-NEXT:    psrlw $1, %xmm1
19496 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19497 ; SSE2-NEXT:    psubb %xmm1, %xmm0
19498 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19499 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
19500 ; SSE2-NEXT:    pand %xmm1, %xmm2
19501 ; SSE2-NEXT:    psrlw $2, %xmm0
19502 ; SSE2-NEXT:    pand %xmm1, %xmm0
19503 ; SSE2-NEXT:    paddb %xmm2, %xmm0
19504 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19505 ; SSE2-NEXT:    psrlw $4, %xmm1
19506 ; SSE2-NEXT:    paddb %xmm0, %xmm1
19507 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19508 ; SSE2-NEXT:    pxor %xmm0, %xmm0
19509 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
19510 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19511 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19512 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19513 ; SSE2-NEXT:    retq
19515 ; SSE3-LABEL: ugt_10_v2i64:
19516 ; SSE3:       # %bb.0:
19517 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19518 ; SSE3-NEXT:    psrlw $1, %xmm1
19519 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19520 ; SSE3-NEXT:    psubb %xmm1, %xmm0
19521 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19522 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
19523 ; SSE3-NEXT:    pand %xmm1, %xmm2
19524 ; SSE3-NEXT:    psrlw $2, %xmm0
19525 ; SSE3-NEXT:    pand %xmm1, %xmm0
19526 ; SSE3-NEXT:    paddb %xmm2, %xmm0
19527 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19528 ; SSE3-NEXT:    psrlw $4, %xmm1
19529 ; SSE3-NEXT:    paddb %xmm0, %xmm1
19530 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19531 ; SSE3-NEXT:    pxor %xmm0, %xmm0
19532 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
19533 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19534 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19535 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19536 ; SSE3-NEXT:    retq
19538 ; SSSE3-LABEL: ugt_10_v2i64:
19539 ; SSSE3:       # %bb.0:
19540 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19541 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
19542 ; SSSE3-NEXT:    pand %xmm1, %xmm2
19543 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19544 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
19545 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
19546 ; SSSE3-NEXT:    psrlw $4, %xmm0
19547 ; SSSE3-NEXT:    pand %xmm1, %xmm0
19548 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
19549 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
19550 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
19551 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
19552 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19553 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19554 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19555 ; SSSE3-NEXT:    retq
19557 ; SSE41-LABEL: ugt_10_v2i64:
19558 ; SSE41:       # %bb.0:
19559 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19560 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
19561 ; SSE41-NEXT:    pand %xmm1, %xmm2
19562 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19563 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
19564 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
19565 ; SSE41-NEXT:    psrlw $4, %xmm0
19566 ; SSE41-NEXT:    pand %xmm1, %xmm0
19567 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
19568 ; SSE41-NEXT:    paddb %xmm4, %xmm3
19569 ; SSE41-NEXT:    pxor %xmm0, %xmm0
19570 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
19571 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19572 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19573 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19574 ; SSE41-NEXT:    retq
19576 ; AVX1-LABEL: ugt_10_v2i64:
19577 ; AVX1:       # %bb.0:
19578 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19579 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19580 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19581 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19582 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19583 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19584 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19585 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19586 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19587 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19588 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19589 ; AVX1-NEXT:    retq
19591 ; AVX2-LABEL: ugt_10_v2i64:
19592 ; AVX2:       # %bb.0:
19593 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19594 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
19595 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19596 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19597 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
19598 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
19599 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19600 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19601 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19602 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19603 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19604 ; AVX2-NEXT:    retq
19606 ; AVX512VPOPCNTDQ-LABEL: ugt_10_v2i64:
19607 ; AVX512VPOPCNTDQ:       # %bb.0:
19608 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19609 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19610 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19611 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
19612 ; AVX512VPOPCNTDQ-NEXT:    retq
19614 ; AVX512VPOPCNTDQVL-LABEL: ugt_10_v2i64:
19615 ; AVX512VPOPCNTDQVL:       # %bb.0:
19616 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
19617 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [10,10]
19618 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19619 ; AVX512VPOPCNTDQVL-NEXT:    retq
19621 ; BITALG_NOVLX-LABEL: ugt_10_v2i64:
19622 ; BITALG_NOVLX:       # %bb.0:
19623 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19624 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19625 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19626 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19627 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19628 ; BITALG_NOVLX-NEXT:    vzeroupper
19629 ; BITALG_NOVLX-NEXT:    retq
19631 ; BITALG-LABEL: ugt_10_v2i64:
19632 ; BITALG:       # %bb.0:
19633 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
19634 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19635 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19636 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [10,10]
19637 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19638 ; BITALG-NEXT:    retq
19639   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19640   %3 = icmp ugt <2 x i64> %2, <i64 10, i64 10>
19641   %4 = sext <2 x i1> %3 to <2 x i64>
19642   ret <2 x i64> %4
19645 define <2 x i64> @ult_11_v2i64(<2 x i64> %0) {
19646 ; SSE2-LABEL: ult_11_v2i64:
19647 ; SSE2:       # %bb.0:
19648 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19649 ; SSE2-NEXT:    psrlw $1, %xmm1
19650 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19651 ; SSE2-NEXT:    psubb %xmm1, %xmm0
19652 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19653 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
19654 ; SSE2-NEXT:    pand %xmm1, %xmm2
19655 ; SSE2-NEXT:    psrlw $2, %xmm0
19656 ; SSE2-NEXT:    pand %xmm1, %xmm0
19657 ; SSE2-NEXT:    paddb %xmm2, %xmm0
19658 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19659 ; SSE2-NEXT:    psrlw $4, %xmm1
19660 ; SSE2-NEXT:    paddb %xmm0, %xmm1
19661 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19662 ; SSE2-NEXT:    pxor %xmm0, %xmm0
19663 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
19664 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19665 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19666 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483659,2147483659,2147483659,2147483659]
19667 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
19668 ; SSE2-NEXT:    retq
19670 ; SSE3-LABEL: ult_11_v2i64:
19671 ; SSE3:       # %bb.0:
19672 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19673 ; SSE3-NEXT:    psrlw $1, %xmm1
19674 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19675 ; SSE3-NEXT:    psubb %xmm1, %xmm0
19676 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19677 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
19678 ; SSE3-NEXT:    pand %xmm1, %xmm2
19679 ; SSE3-NEXT:    psrlw $2, %xmm0
19680 ; SSE3-NEXT:    pand %xmm1, %xmm0
19681 ; SSE3-NEXT:    paddb %xmm2, %xmm0
19682 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19683 ; SSE3-NEXT:    psrlw $4, %xmm1
19684 ; SSE3-NEXT:    paddb %xmm0, %xmm1
19685 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19686 ; SSE3-NEXT:    pxor %xmm0, %xmm0
19687 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
19688 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19689 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19690 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483659,2147483659,2147483659,2147483659]
19691 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
19692 ; SSE3-NEXT:    retq
19694 ; SSSE3-LABEL: ult_11_v2i64:
19695 ; SSSE3:       # %bb.0:
19696 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19697 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
19698 ; SSSE3-NEXT:    pand %xmm1, %xmm2
19699 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19700 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
19701 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
19702 ; SSSE3-NEXT:    psrlw $4, %xmm0
19703 ; SSSE3-NEXT:    pand %xmm1, %xmm0
19704 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
19705 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
19706 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
19707 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
19708 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19709 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19710 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483659,2147483659,2147483659,2147483659]
19711 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
19712 ; SSSE3-NEXT:    retq
19714 ; SSE41-LABEL: ult_11_v2i64:
19715 ; SSE41:       # %bb.0:
19716 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19717 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
19718 ; SSE41-NEXT:    pand %xmm1, %xmm2
19719 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19720 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
19721 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
19722 ; SSE41-NEXT:    psrlw $4, %xmm0
19723 ; SSE41-NEXT:    pand %xmm1, %xmm0
19724 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
19725 ; SSE41-NEXT:    paddb %xmm4, %xmm3
19726 ; SSE41-NEXT:    pxor %xmm0, %xmm0
19727 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
19728 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19729 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19730 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483659,2147483659,2147483659,2147483659]
19731 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
19732 ; SSE41-NEXT:    retq
19734 ; AVX1-LABEL: ult_11_v2i64:
19735 ; AVX1:       # %bb.0:
19736 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19737 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19738 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19739 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19740 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19741 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19742 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19743 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19744 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19745 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19746 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [11,11]
19747 ; AVX1-NEXT:    # xmm1 = mem[0,0]
19748 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19749 ; AVX1-NEXT:    retq
19751 ; AVX2-LABEL: ult_11_v2i64:
19752 ; AVX2:       # %bb.0:
19753 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19754 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
19755 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19756 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19757 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
19758 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
19759 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19760 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19761 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19762 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19763 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [11,11]
19764 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19765 ; AVX2-NEXT:    retq
19767 ; AVX512VPOPCNTDQ-LABEL: ult_11_v2i64:
19768 ; AVX512VPOPCNTDQ:       # %bb.0:
19769 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19770 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19771 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [11,11]
19772 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19773 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
19774 ; AVX512VPOPCNTDQ-NEXT:    retq
19776 ; AVX512VPOPCNTDQVL-LABEL: ult_11_v2i64:
19777 ; AVX512VPOPCNTDQVL:       # %bb.0:
19778 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
19779 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [11,11]
19780 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19781 ; AVX512VPOPCNTDQVL-NEXT:    retq
19783 ; BITALG_NOVLX-LABEL: ult_11_v2i64:
19784 ; BITALG_NOVLX:       # %bb.0:
19785 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19786 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19787 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19788 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19789 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [11,11]
19790 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19791 ; BITALG_NOVLX-NEXT:    vzeroupper
19792 ; BITALG_NOVLX-NEXT:    retq
19794 ; BITALG-LABEL: ult_11_v2i64:
19795 ; BITALG:       # %bb.0:
19796 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
19797 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19798 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19799 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [11,11]
19800 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
19801 ; BITALG-NEXT:    retq
19802   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19803   %3 = icmp ult <2 x i64> %2, <i64 11, i64 11>
19804   %4 = sext <2 x i1> %3 to <2 x i64>
19805   ret <2 x i64> %4
19808 define <2 x i64> @ugt_11_v2i64(<2 x i64> %0) {
19809 ; SSE2-LABEL: ugt_11_v2i64:
19810 ; SSE2:       # %bb.0:
19811 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19812 ; SSE2-NEXT:    psrlw $1, %xmm1
19813 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19814 ; SSE2-NEXT:    psubb %xmm1, %xmm0
19815 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19816 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
19817 ; SSE2-NEXT:    pand %xmm1, %xmm2
19818 ; SSE2-NEXT:    psrlw $2, %xmm0
19819 ; SSE2-NEXT:    pand %xmm1, %xmm0
19820 ; SSE2-NEXT:    paddb %xmm2, %xmm0
19821 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19822 ; SSE2-NEXT:    psrlw $4, %xmm1
19823 ; SSE2-NEXT:    paddb %xmm0, %xmm1
19824 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19825 ; SSE2-NEXT:    pxor %xmm0, %xmm0
19826 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
19827 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19828 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19829 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19830 ; SSE2-NEXT:    retq
19832 ; SSE3-LABEL: ugt_11_v2i64:
19833 ; SSE3:       # %bb.0:
19834 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19835 ; SSE3-NEXT:    psrlw $1, %xmm1
19836 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19837 ; SSE3-NEXT:    psubb %xmm1, %xmm0
19838 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19839 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
19840 ; SSE3-NEXT:    pand %xmm1, %xmm2
19841 ; SSE3-NEXT:    psrlw $2, %xmm0
19842 ; SSE3-NEXT:    pand %xmm1, %xmm0
19843 ; SSE3-NEXT:    paddb %xmm2, %xmm0
19844 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19845 ; SSE3-NEXT:    psrlw $4, %xmm1
19846 ; SSE3-NEXT:    paddb %xmm0, %xmm1
19847 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19848 ; SSE3-NEXT:    pxor %xmm0, %xmm0
19849 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
19850 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19851 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19852 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19853 ; SSE3-NEXT:    retq
19855 ; SSSE3-LABEL: ugt_11_v2i64:
19856 ; SSSE3:       # %bb.0:
19857 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19858 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
19859 ; SSSE3-NEXT:    pand %xmm1, %xmm2
19860 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19861 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
19862 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
19863 ; SSSE3-NEXT:    psrlw $4, %xmm0
19864 ; SSSE3-NEXT:    pand %xmm1, %xmm0
19865 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
19866 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
19867 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
19868 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
19869 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19870 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19871 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19872 ; SSSE3-NEXT:    retq
19874 ; SSE41-LABEL: ugt_11_v2i64:
19875 ; SSE41:       # %bb.0:
19876 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19877 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
19878 ; SSE41-NEXT:    pand %xmm1, %xmm2
19879 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19880 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
19881 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
19882 ; SSE41-NEXT:    psrlw $4, %xmm0
19883 ; SSE41-NEXT:    pand %xmm1, %xmm0
19884 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
19885 ; SSE41-NEXT:    paddb %xmm4, %xmm3
19886 ; SSE41-NEXT:    pxor %xmm0, %xmm0
19887 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
19888 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
19889 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19890 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
19891 ; SSE41-NEXT:    retq
19893 ; AVX1-LABEL: ugt_11_v2i64:
19894 ; AVX1:       # %bb.0:
19895 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19896 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
19897 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19898 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19899 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
19900 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
19901 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19902 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19903 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19904 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19905 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19906 ; AVX1-NEXT:    retq
19908 ; AVX2-LABEL: ugt_11_v2i64:
19909 ; AVX2:       # %bb.0:
19910 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
19911 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
19912 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
19913 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
19914 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
19915 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
19916 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
19917 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
19918 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19919 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19920 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19921 ; AVX2-NEXT:    retq
19923 ; AVX512VPOPCNTDQ-LABEL: ugt_11_v2i64:
19924 ; AVX512VPOPCNTDQ:       # %bb.0:
19925 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19926 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
19927 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19928 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
19929 ; AVX512VPOPCNTDQ-NEXT:    retq
19931 ; AVX512VPOPCNTDQVL-LABEL: ugt_11_v2i64:
19932 ; AVX512VPOPCNTDQVL:       # %bb.0:
19933 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
19934 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [11,11]
19935 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19936 ; AVX512VPOPCNTDQVL-NEXT:    retq
19938 ; BITALG_NOVLX-LABEL: ugt_11_v2i64:
19939 ; BITALG_NOVLX:       # %bb.0:
19940 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
19941 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
19942 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19943 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19944 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
19945 ; BITALG_NOVLX-NEXT:    vzeroupper
19946 ; BITALG_NOVLX-NEXT:    retq
19948 ; BITALG-LABEL: ugt_11_v2i64:
19949 ; BITALG:       # %bb.0:
19950 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
19951 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
19952 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
19953 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [11,11]
19954 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
19955 ; BITALG-NEXT:    retq
19956   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19957   %3 = icmp ugt <2 x i64> %2, <i64 11, i64 11>
19958   %4 = sext <2 x i1> %3 to <2 x i64>
19959   ret <2 x i64> %4
19962 define <2 x i64> @ult_12_v2i64(<2 x i64> %0) {
19963 ; SSE2-LABEL: ult_12_v2i64:
19964 ; SSE2:       # %bb.0:
19965 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19966 ; SSE2-NEXT:    psrlw $1, %xmm1
19967 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19968 ; SSE2-NEXT:    psubb %xmm1, %xmm0
19969 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19970 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
19971 ; SSE2-NEXT:    pand %xmm1, %xmm2
19972 ; SSE2-NEXT:    psrlw $2, %xmm0
19973 ; SSE2-NEXT:    pand %xmm1, %xmm0
19974 ; SSE2-NEXT:    paddb %xmm2, %xmm0
19975 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
19976 ; SSE2-NEXT:    psrlw $4, %xmm1
19977 ; SSE2-NEXT:    paddb %xmm0, %xmm1
19978 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19979 ; SSE2-NEXT:    pxor %xmm0, %xmm0
19980 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
19981 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
19982 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19983 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483660,2147483660,2147483660,2147483660]
19984 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
19985 ; SSE2-NEXT:    retq
19987 ; SSE3-LABEL: ult_12_v2i64:
19988 ; SSE3:       # %bb.0:
19989 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
19990 ; SSE3-NEXT:    psrlw $1, %xmm1
19991 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
19992 ; SSE3-NEXT:    psubb %xmm1, %xmm0
19993 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
19994 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
19995 ; SSE3-NEXT:    pand %xmm1, %xmm2
19996 ; SSE3-NEXT:    psrlw $2, %xmm0
19997 ; SSE3-NEXT:    pand %xmm1, %xmm0
19998 ; SSE3-NEXT:    paddb %xmm2, %xmm0
19999 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20000 ; SSE3-NEXT:    psrlw $4, %xmm1
20001 ; SSE3-NEXT:    paddb %xmm0, %xmm1
20002 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20003 ; SSE3-NEXT:    pxor %xmm0, %xmm0
20004 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
20005 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20006 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20007 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483660,2147483660,2147483660,2147483660]
20008 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
20009 ; SSE3-NEXT:    retq
20011 ; SSSE3-LABEL: ult_12_v2i64:
20012 ; SSSE3:       # %bb.0:
20013 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20014 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
20015 ; SSSE3-NEXT:    pand %xmm1, %xmm2
20016 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20017 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
20018 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
20019 ; SSSE3-NEXT:    psrlw $4, %xmm0
20020 ; SSSE3-NEXT:    pand %xmm1, %xmm0
20021 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
20022 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
20023 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
20024 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
20025 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20026 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20027 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483660,2147483660,2147483660,2147483660]
20028 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
20029 ; SSSE3-NEXT:    retq
20031 ; SSE41-LABEL: ult_12_v2i64:
20032 ; SSE41:       # %bb.0:
20033 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20034 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
20035 ; SSE41-NEXT:    pand %xmm1, %xmm2
20036 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20037 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
20038 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
20039 ; SSE41-NEXT:    psrlw $4, %xmm0
20040 ; SSE41-NEXT:    pand %xmm1, %xmm0
20041 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
20042 ; SSE41-NEXT:    paddb %xmm4, %xmm3
20043 ; SSE41-NEXT:    pxor %xmm0, %xmm0
20044 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
20045 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20046 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20047 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483660,2147483660,2147483660,2147483660]
20048 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
20049 ; SSE41-NEXT:    retq
20051 ; AVX1-LABEL: ult_12_v2i64:
20052 ; AVX1:       # %bb.0:
20053 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20054 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
20055 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20056 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20057 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
20058 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
20059 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20060 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20061 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20062 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20063 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [12,12]
20064 ; AVX1-NEXT:    # xmm1 = mem[0,0]
20065 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20066 ; AVX1-NEXT:    retq
20068 ; AVX2-LABEL: ult_12_v2i64:
20069 ; AVX2:       # %bb.0:
20070 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20071 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
20072 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20073 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20074 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
20075 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
20076 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20077 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20078 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20079 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20080 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [12,12]
20081 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20082 ; AVX2-NEXT:    retq
20084 ; AVX512VPOPCNTDQ-LABEL: ult_12_v2i64:
20085 ; AVX512VPOPCNTDQ:       # %bb.0:
20086 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20087 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
20088 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [12,12]
20089 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20090 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
20091 ; AVX512VPOPCNTDQ-NEXT:    retq
20093 ; AVX512VPOPCNTDQVL-LABEL: ult_12_v2i64:
20094 ; AVX512VPOPCNTDQVL:       # %bb.0:
20095 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
20096 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [12,12]
20097 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20098 ; AVX512VPOPCNTDQVL-NEXT:    retq
20100 ; BITALG_NOVLX-LABEL: ult_12_v2i64:
20101 ; BITALG_NOVLX:       # %bb.0:
20102 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20103 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
20104 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20105 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20106 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [12,12]
20107 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20108 ; BITALG_NOVLX-NEXT:    vzeroupper
20109 ; BITALG_NOVLX-NEXT:    retq
20111 ; BITALG-LABEL: ult_12_v2i64:
20112 ; BITALG:       # %bb.0:
20113 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
20114 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20115 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20116 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [12,12]
20117 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20118 ; BITALG-NEXT:    retq
20119   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20120   %3 = icmp ult <2 x i64> %2, <i64 12, i64 12>
20121   %4 = sext <2 x i1> %3 to <2 x i64>
20122   ret <2 x i64> %4
20125 define <2 x i64> @ugt_12_v2i64(<2 x i64> %0) {
20126 ; SSE2-LABEL: ugt_12_v2i64:
20127 ; SSE2:       # %bb.0:
20128 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20129 ; SSE2-NEXT:    psrlw $1, %xmm1
20130 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20131 ; SSE2-NEXT:    psubb %xmm1, %xmm0
20132 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20133 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
20134 ; SSE2-NEXT:    pand %xmm1, %xmm2
20135 ; SSE2-NEXT:    psrlw $2, %xmm0
20136 ; SSE2-NEXT:    pand %xmm1, %xmm0
20137 ; SSE2-NEXT:    paddb %xmm2, %xmm0
20138 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20139 ; SSE2-NEXT:    psrlw $4, %xmm1
20140 ; SSE2-NEXT:    paddb %xmm0, %xmm1
20141 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20142 ; SSE2-NEXT:    pxor %xmm0, %xmm0
20143 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
20144 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20145 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20146 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20147 ; SSE2-NEXT:    retq
20149 ; SSE3-LABEL: ugt_12_v2i64:
20150 ; SSE3:       # %bb.0:
20151 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20152 ; SSE3-NEXT:    psrlw $1, %xmm1
20153 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20154 ; SSE3-NEXT:    psubb %xmm1, %xmm0
20155 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20156 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
20157 ; SSE3-NEXT:    pand %xmm1, %xmm2
20158 ; SSE3-NEXT:    psrlw $2, %xmm0
20159 ; SSE3-NEXT:    pand %xmm1, %xmm0
20160 ; SSE3-NEXT:    paddb %xmm2, %xmm0
20161 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20162 ; SSE3-NEXT:    psrlw $4, %xmm1
20163 ; SSE3-NEXT:    paddb %xmm0, %xmm1
20164 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20165 ; SSE3-NEXT:    pxor %xmm0, %xmm0
20166 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
20167 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20168 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20169 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20170 ; SSE3-NEXT:    retq
20172 ; SSSE3-LABEL: ugt_12_v2i64:
20173 ; SSSE3:       # %bb.0:
20174 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20175 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
20176 ; SSSE3-NEXT:    pand %xmm1, %xmm2
20177 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20178 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
20179 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
20180 ; SSSE3-NEXT:    psrlw $4, %xmm0
20181 ; SSSE3-NEXT:    pand %xmm1, %xmm0
20182 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
20183 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
20184 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
20185 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
20186 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20187 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20188 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20189 ; SSSE3-NEXT:    retq
20191 ; SSE41-LABEL: ugt_12_v2i64:
20192 ; SSE41:       # %bb.0:
20193 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20194 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
20195 ; SSE41-NEXT:    pand %xmm1, %xmm2
20196 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20197 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
20198 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
20199 ; SSE41-NEXT:    psrlw $4, %xmm0
20200 ; SSE41-NEXT:    pand %xmm1, %xmm0
20201 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
20202 ; SSE41-NEXT:    paddb %xmm4, %xmm3
20203 ; SSE41-NEXT:    pxor %xmm0, %xmm0
20204 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
20205 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20206 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20207 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20208 ; SSE41-NEXT:    retq
20210 ; AVX1-LABEL: ugt_12_v2i64:
20211 ; AVX1:       # %bb.0:
20212 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20213 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
20214 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20215 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20216 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
20217 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
20218 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20219 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20220 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20221 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20222 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20223 ; AVX1-NEXT:    retq
20225 ; AVX2-LABEL: ugt_12_v2i64:
20226 ; AVX2:       # %bb.0:
20227 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20228 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
20229 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20230 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20231 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
20232 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
20233 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20234 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20235 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20236 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20237 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20238 ; AVX2-NEXT:    retq
20240 ; AVX512VPOPCNTDQ-LABEL: ugt_12_v2i64:
20241 ; AVX512VPOPCNTDQ:       # %bb.0:
20242 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20243 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
20244 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20245 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
20246 ; AVX512VPOPCNTDQ-NEXT:    retq
20248 ; AVX512VPOPCNTDQVL-LABEL: ugt_12_v2i64:
20249 ; AVX512VPOPCNTDQVL:       # %bb.0:
20250 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
20251 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [12,12]
20252 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
20253 ; AVX512VPOPCNTDQVL-NEXT:    retq
20255 ; BITALG_NOVLX-LABEL: ugt_12_v2i64:
20256 ; BITALG_NOVLX:       # %bb.0:
20257 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20258 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
20259 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20260 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20261 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20262 ; BITALG_NOVLX-NEXT:    vzeroupper
20263 ; BITALG_NOVLX-NEXT:    retq
20265 ; BITALG-LABEL: ugt_12_v2i64:
20266 ; BITALG:       # %bb.0:
20267 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
20268 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20269 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20270 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [12,12]
20271 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
20272 ; BITALG-NEXT:    retq
20273   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20274   %3 = icmp ugt <2 x i64> %2, <i64 12, i64 12>
20275   %4 = sext <2 x i1> %3 to <2 x i64>
20276   ret <2 x i64> %4
20279 define <2 x i64> @ult_13_v2i64(<2 x i64> %0) {
20280 ; SSE2-LABEL: ult_13_v2i64:
20281 ; SSE2:       # %bb.0:
20282 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20283 ; SSE2-NEXT:    psrlw $1, %xmm1
20284 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20285 ; SSE2-NEXT:    psubb %xmm1, %xmm0
20286 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20287 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
20288 ; SSE2-NEXT:    pand %xmm1, %xmm2
20289 ; SSE2-NEXT:    psrlw $2, %xmm0
20290 ; SSE2-NEXT:    pand %xmm1, %xmm0
20291 ; SSE2-NEXT:    paddb %xmm2, %xmm0
20292 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20293 ; SSE2-NEXT:    psrlw $4, %xmm1
20294 ; SSE2-NEXT:    paddb %xmm0, %xmm1
20295 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20296 ; SSE2-NEXT:    pxor %xmm0, %xmm0
20297 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
20298 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20299 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20300 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483661,2147483661,2147483661,2147483661]
20301 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
20302 ; SSE2-NEXT:    retq
20304 ; SSE3-LABEL: ult_13_v2i64:
20305 ; SSE3:       # %bb.0:
20306 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20307 ; SSE3-NEXT:    psrlw $1, %xmm1
20308 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20309 ; SSE3-NEXT:    psubb %xmm1, %xmm0
20310 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20311 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
20312 ; SSE3-NEXT:    pand %xmm1, %xmm2
20313 ; SSE3-NEXT:    psrlw $2, %xmm0
20314 ; SSE3-NEXT:    pand %xmm1, %xmm0
20315 ; SSE3-NEXT:    paddb %xmm2, %xmm0
20316 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20317 ; SSE3-NEXT:    psrlw $4, %xmm1
20318 ; SSE3-NEXT:    paddb %xmm0, %xmm1
20319 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20320 ; SSE3-NEXT:    pxor %xmm0, %xmm0
20321 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
20322 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20323 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20324 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483661,2147483661,2147483661,2147483661]
20325 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
20326 ; SSE3-NEXT:    retq
20328 ; SSSE3-LABEL: ult_13_v2i64:
20329 ; SSSE3:       # %bb.0:
20330 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20331 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
20332 ; SSSE3-NEXT:    pand %xmm1, %xmm2
20333 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20334 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
20335 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
20336 ; SSSE3-NEXT:    psrlw $4, %xmm0
20337 ; SSSE3-NEXT:    pand %xmm1, %xmm0
20338 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
20339 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
20340 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
20341 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
20342 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20343 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20344 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483661,2147483661,2147483661,2147483661]
20345 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
20346 ; SSSE3-NEXT:    retq
20348 ; SSE41-LABEL: ult_13_v2i64:
20349 ; SSE41:       # %bb.0:
20350 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20351 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
20352 ; SSE41-NEXT:    pand %xmm1, %xmm2
20353 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20354 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
20355 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
20356 ; SSE41-NEXT:    psrlw $4, %xmm0
20357 ; SSE41-NEXT:    pand %xmm1, %xmm0
20358 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
20359 ; SSE41-NEXT:    paddb %xmm4, %xmm3
20360 ; SSE41-NEXT:    pxor %xmm0, %xmm0
20361 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
20362 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20363 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20364 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483661,2147483661,2147483661,2147483661]
20365 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
20366 ; SSE41-NEXT:    retq
20368 ; AVX1-LABEL: ult_13_v2i64:
20369 ; AVX1:       # %bb.0:
20370 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20371 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
20372 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20373 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20374 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
20375 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
20376 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20377 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20378 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20379 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20380 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [13,13]
20381 ; AVX1-NEXT:    # xmm1 = mem[0,0]
20382 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20383 ; AVX1-NEXT:    retq
20385 ; AVX2-LABEL: ult_13_v2i64:
20386 ; AVX2:       # %bb.0:
20387 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20388 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
20389 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20390 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20391 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
20392 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
20393 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20394 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20395 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20396 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20397 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [13,13]
20398 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20399 ; AVX2-NEXT:    retq
20401 ; AVX512VPOPCNTDQ-LABEL: ult_13_v2i64:
20402 ; AVX512VPOPCNTDQ:       # %bb.0:
20403 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20404 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
20405 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [13,13]
20406 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20407 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
20408 ; AVX512VPOPCNTDQ-NEXT:    retq
20410 ; AVX512VPOPCNTDQVL-LABEL: ult_13_v2i64:
20411 ; AVX512VPOPCNTDQVL:       # %bb.0:
20412 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
20413 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [13,13]
20414 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20415 ; AVX512VPOPCNTDQVL-NEXT:    retq
20417 ; BITALG_NOVLX-LABEL: ult_13_v2i64:
20418 ; BITALG_NOVLX:       # %bb.0:
20419 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20420 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
20421 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20422 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20423 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [13,13]
20424 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20425 ; BITALG_NOVLX-NEXT:    vzeroupper
20426 ; BITALG_NOVLX-NEXT:    retq
20428 ; BITALG-LABEL: ult_13_v2i64:
20429 ; BITALG:       # %bb.0:
20430 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
20431 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20432 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20433 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [13,13]
20434 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20435 ; BITALG-NEXT:    retq
20436   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20437   %3 = icmp ult <2 x i64> %2, <i64 13, i64 13>
20438   %4 = sext <2 x i1> %3 to <2 x i64>
20439   ret <2 x i64> %4
20442 define <2 x i64> @ugt_13_v2i64(<2 x i64> %0) {
20443 ; SSE2-LABEL: ugt_13_v2i64:
20444 ; SSE2:       # %bb.0:
20445 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20446 ; SSE2-NEXT:    psrlw $1, %xmm1
20447 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20448 ; SSE2-NEXT:    psubb %xmm1, %xmm0
20449 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20450 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
20451 ; SSE2-NEXT:    pand %xmm1, %xmm2
20452 ; SSE2-NEXT:    psrlw $2, %xmm0
20453 ; SSE2-NEXT:    pand %xmm1, %xmm0
20454 ; SSE2-NEXT:    paddb %xmm2, %xmm0
20455 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20456 ; SSE2-NEXT:    psrlw $4, %xmm1
20457 ; SSE2-NEXT:    paddb %xmm0, %xmm1
20458 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20459 ; SSE2-NEXT:    pxor %xmm0, %xmm0
20460 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
20461 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20462 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20463 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20464 ; SSE2-NEXT:    retq
20466 ; SSE3-LABEL: ugt_13_v2i64:
20467 ; SSE3:       # %bb.0:
20468 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20469 ; SSE3-NEXT:    psrlw $1, %xmm1
20470 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20471 ; SSE3-NEXT:    psubb %xmm1, %xmm0
20472 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20473 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
20474 ; SSE3-NEXT:    pand %xmm1, %xmm2
20475 ; SSE3-NEXT:    psrlw $2, %xmm0
20476 ; SSE3-NEXT:    pand %xmm1, %xmm0
20477 ; SSE3-NEXT:    paddb %xmm2, %xmm0
20478 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20479 ; SSE3-NEXT:    psrlw $4, %xmm1
20480 ; SSE3-NEXT:    paddb %xmm0, %xmm1
20481 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20482 ; SSE3-NEXT:    pxor %xmm0, %xmm0
20483 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
20484 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20485 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20486 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20487 ; SSE3-NEXT:    retq
20489 ; SSSE3-LABEL: ugt_13_v2i64:
20490 ; SSSE3:       # %bb.0:
20491 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20492 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
20493 ; SSSE3-NEXT:    pand %xmm1, %xmm2
20494 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20495 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
20496 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
20497 ; SSSE3-NEXT:    psrlw $4, %xmm0
20498 ; SSSE3-NEXT:    pand %xmm1, %xmm0
20499 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
20500 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
20501 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
20502 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
20503 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20504 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20505 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20506 ; SSSE3-NEXT:    retq
20508 ; SSE41-LABEL: ugt_13_v2i64:
20509 ; SSE41:       # %bb.0:
20510 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20511 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
20512 ; SSE41-NEXT:    pand %xmm1, %xmm2
20513 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20514 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
20515 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
20516 ; SSE41-NEXT:    psrlw $4, %xmm0
20517 ; SSE41-NEXT:    pand %xmm1, %xmm0
20518 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
20519 ; SSE41-NEXT:    paddb %xmm4, %xmm3
20520 ; SSE41-NEXT:    pxor %xmm0, %xmm0
20521 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
20522 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20523 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20524 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20525 ; SSE41-NEXT:    retq
20527 ; AVX1-LABEL: ugt_13_v2i64:
20528 ; AVX1:       # %bb.0:
20529 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20530 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
20531 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20532 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20533 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
20534 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
20535 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20536 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20537 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20538 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20539 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20540 ; AVX1-NEXT:    retq
20542 ; AVX2-LABEL: ugt_13_v2i64:
20543 ; AVX2:       # %bb.0:
20544 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20545 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
20546 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20547 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20548 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
20549 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
20550 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20551 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20552 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20553 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20554 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20555 ; AVX2-NEXT:    retq
20557 ; AVX512VPOPCNTDQ-LABEL: ugt_13_v2i64:
20558 ; AVX512VPOPCNTDQ:       # %bb.0:
20559 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20560 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
20561 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20562 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
20563 ; AVX512VPOPCNTDQ-NEXT:    retq
20565 ; AVX512VPOPCNTDQVL-LABEL: ugt_13_v2i64:
20566 ; AVX512VPOPCNTDQVL:       # %bb.0:
20567 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
20568 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [13,13]
20569 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
20570 ; AVX512VPOPCNTDQVL-NEXT:    retq
20572 ; BITALG_NOVLX-LABEL: ugt_13_v2i64:
20573 ; BITALG_NOVLX:       # %bb.0:
20574 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20575 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
20576 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20577 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20578 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20579 ; BITALG_NOVLX-NEXT:    vzeroupper
20580 ; BITALG_NOVLX-NEXT:    retq
20582 ; BITALG-LABEL: ugt_13_v2i64:
20583 ; BITALG:       # %bb.0:
20584 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
20585 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20586 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20587 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [13,13]
20588 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
20589 ; BITALG-NEXT:    retq
20590   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20591   %3 = icmp ugt <2 x i64> %2, <i64 13, i64 13>
20592   %4 = sext <2 x i1> %3 to <2 x i64>
20593   ret <2 x i64> %4
20596 define <2 x i64> @ult_14_v2i64(<2 x i64> %0) {
20597 ; SSE2-LABEL: ult_14_v2i64:
20598 ; SSE2:       # %bb.0:
20599 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20600 ; SSE2-NEXT:    psrlw $1, %xmm1
20601 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20602 ; SSE2-NEXT:    psubb %xmm1, %xmm0
20603 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20604 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
20605 ; SSE2-NEXT:    pand %xmm1, %xmm2
20606 ; SSE2-NEXT:    psrlw $2, %xmm0
20607 ; SSE2-NEXT:    pand %xmm1, %xmm0
20608 ; SSE2-NEXT:    paddb %xmm2, %xmm0
20609 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20610 ; SSE2-NEXT:    psrlw $4, %xmm1
20611 ; SSE2-NEXT:    paddb %xmm0, %xmm1
20612 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20613 ; SSE2-NEXT:    pxor %xmm0, %xmm0
20614 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
20615 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20616 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20617 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483662,2147483662,2147483662,2147483662]
20618 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
20619 ; SSE2-NEXT:    retq
20621 ; SSE3-LABEL: ult_14_v2i64:
20622 ; SSE3:       # %bb.0:
20623 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20624 ; SSE3-NEXT:    psrlw $1, %xmm1
20625 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20626 ; SSE3-NEXT:    psubb %xmm1, %xmm0
20627 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20628 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
20629 ; SSE3-NEXT:    pand %xmm1, %xmm2
20630 ; SSE3-NEXT:    psrlw $2, %xmm0
20631 ; SSE3-NEXT:    pand %xmm1, %xmm0
20632 ; SSE3-NEXT:    paddb %xmm2, %xmm0
20633 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20634 ; SSE3-NEXT:    psrlw $4, %xmm1
20635 ; SSE3-NEXT:    paddb %xmm0, %xmm1
20636 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20637 ; SSE3-NEXT:    pxor %xmm0, %xmm0
20638 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
20639 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20640 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20641 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483662,2147483662,2147483662,2147483662]
20642 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
20643 ; SSE3-NEXT:    retq
20645 ; SSSE3-LABEL: ult_14_v2i64:
20646 ; SSSE3:       # %bb.0:
20647 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20648 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
20649 ; SSSE3-NEXT:    pand %xmm1, %xmm2
20650 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20651 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
20652 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
20653 ; SSSE3-NEXT:    psrlw $4, %xmm0
20654 ; SSSE3-NEXT:    pand %xmm1, %xmm0
20655 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
20656 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
20657 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
20658 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
20659 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20660 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20661 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483662,2147483662,2147483662,2147483662]
20662 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
20663 ; SSSE3-NEXT:    retq
20665 ; SSE41-LABEL: ult_14_v2i64:
20666 ; SSE41:       # %bb.0:
20667 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20668 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
20669 ; SSE41-NEXT:    pand %xmm1, %xmm2
20670 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20671 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
20672 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
20673 ; SSE41-NEXT:    psrlw $4, %xmm0
20674 ; SSE41-NEXT:    pand %xmm1, %xmm0
20675 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
20676 ; SSE41-NEXT:    paddb %xmm4, %xmm3
20677 ; SSE41-NEXT:    pxor %xmm0, %xmm0
20678 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
20679 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20680 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20681 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483662,2147483662,2147483662,2147483662]
20682 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
20683 ; SSE41-NEXT:    retq
20685 ; AVX1-LABEL: ult_14_v2i64:
20686 ; AVX1:       # %bb.0:
20687 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20688 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
20689 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20690 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20691 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
20692 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
20693 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20694 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20695 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20696 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20697 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [14,14]
20698 ; AVX1-NEXT:    # xmm1 = mem[0,0]
20699 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20700 ; AVX1-NEXT:    retq
20702 ; AVX2-LABEL: ult_14_v2i64:
20703 ; AVX2:       # %bb.0:
20704 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20705 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
20706 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20707 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20708 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
20709 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
20710 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20711 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20712 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20713 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20714 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [14,14]
20715 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20716 ; AVX2-NEXT:    retq
20718 ; AVX512VPOPCNTDQ-LABEL: ult_14_v2i64:
20719 ; AVX512VPOPCNTDQ:       # %bb.0:
20720 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20721 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
20722 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [14,14]
20723 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20724 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
20725 ; AVX512VPOPCNTDQ-NEXT:    retq
20727 ; AVX512VPOPCNTDQVL-LABEL: ult_14_v2i64:
20728 ; AVX512VPOPCNTDQVL:       # %bb.0:
20729 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
20730 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [14,14]
20731 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20732 ; AVX512VPOPCNTDQVL-NEXT:    retq
20734 ; BITALG_NOVLX-LABEL: ult_14_v2i64:
20735 ; BITALG_NOVLX:       # %bb.0:
20736 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20737 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
20738 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20739 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20740 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [14,14]
20741 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20742 ; BITALG_NOVLX-NEXT:    vzeroupper
20743 ; BITALG_NOVLX-NEXT:    retq
20745 ; BITALG-LABEL: ult_14_v2i64:
20746 ; BITALG:       # %bb.0:
20747 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
20748 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20749 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20750 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [14,14]
20751 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
20752 ; BITALG-NEXT:    retq
20753   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20754   %3 = icmp ult <2 x i64> %2, <i64 14, i64 14>
20755   %4 = sext <2 x i1> %3 to <2 x i64>
20756   ret <2 x i64> %4
20759 define <2 x i64> @ugt_14_v2i64(<2 x i64> %0) {
20760 ; SSE2-LABEL: ugt_14_v2i64:
20761 ; SSE2:       # %bb.0:
20762 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20763 ; SSE2-NEXT:    psrlw $1, %xmm1
20764 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20765 ; SSE2-NEXT:    psubb %xmm1, %xmm0
20766 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20767 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
20768 ; SSE2-NEXT:    pand %xmm1, %xmm2
20769 ; SSE2-NEXT:    psrlw $2, %xmm0
20770 ; SSE2-NEXT:    pand %xmm1, %xmm0
20771 ; SSE2-NEXT:    paddb %xmm2, %xmm0
20772 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20773 ; SSE2-NEXT:    psrlw $4, %xmm1
20774 ; SSE2-NEXT:    paddb %xmm0, %xmm1
20775 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20776 ; SSE2-NEXT:    pxor %xmm0, %xmm0
20777 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
20778 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20779 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20780 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20781 ; SSE2-NEXT:    retq
20783 ; SSE3-LABEL: ugt_14_v2i64:
20784 ; SSE3:       # %bb.0:
20785 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20786 ; SSE3-NEXT:    psrlw $1, %xmm1
20787 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20788 ; SSE3-NEXT:    psubb %xmm1, %xmm0
20789 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20790 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
20791 ; SSE3-NEXT:    pand %xmm1, %xmm2
20792 ; SSE3-NEXT:    psrlw $2, %xmm0
20793 ; SSE3-NEXT:    pand %xmm1, %xmm0
20794 ; SSE3-NEXT:    paddb %xmm2, %xmm0
20795 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20796 ; SSE3-NEXT:    psrlw $4, %xmm1
20797 ; SSE3-NEXT:    paddb %xmm0, %xmm1
20798 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20799 ; SSE3-NEXT:    pxor %xmm0, %xmm0
20800 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
20801 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20802 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20803 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20804 ; SSE3-NEXT:    retq
20806 ; SSSE3-LABEL: ugt_14_v2i64:
20807 ; SSSE3:       # %bb.0:
20808 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20809 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
20810 ; SSSE3-NEXT:    pand %xmm1, %xmm2
20811 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20812 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
20813 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
20814 ; SSSE3-NEXT:    psrlw $4, %xmm0
20815 ; SSSE3-NEXT:    pand %xmm1, %xmm0
20816 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
20817 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
20818 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
20819 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
20820 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20821 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20822 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20823 ; SSSE3-NEXT:    retq
20825 ; SSE41-LABEL: ugt_14_v2i64:
20826 ; SSE41:       # %bb.0:
20827 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20828 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
20829 ; SSE41-NEXT:    pand %xmm1, %xmm2
20830 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20831 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
20832 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
20833 ; SSE41-NEXT:    psrlw $4, %xmm0
20834 ; SSE41-NEXT:    pand %xmm1, %xmm0
20835 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
20836 ; SSE41-NEXT:    paddb %xmm4, %xmm3
20837 ; SSE41-NEXT:    pxor %xmm0, %xmm0
20838 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
20839 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
20840 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20841 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
20842 ; SSE41-NEXT:    retq
20844 ; AVX1-LABEL: ugt_14_v2i64:
20845 ; AVX1:       # %bb.0:
20846 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20847 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
20848 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20849 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20850 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
20851 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
20852 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20853 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20854 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20855 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20856 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20857 ; AVX1-NEXT:    retq
20859 ; AVX2-LABEL: ugt_14_v2i64:
20860 ; AVX2:       # %bb.0:
20861 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20862 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
20863 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20864 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
20865 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
20866 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
20867 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
20868 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
20869 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20870 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20871 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20872 ; AVX2-NEXT:    retq
20874 ; AVX512VPOPCNTDQ-LABEL: ugt_14_v2i64:
20875 ; AVX512VPOPCNTDQ:       # %bb.0:
20876 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20877 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
20878 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20879 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
20880 ; AVX512VPOPCNTDQ-NEXT:    retq
20882 ; AVX512VPOPCNTDQVL-LABEL: ugt_14_v2i64:
20883 ; AVX512VPOPCNTDQVL:       # %bb.0:
20884 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
20885 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [14,14]
20886 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
20887 ; AVX512VPOPCNTDQVL-NEXT:    retq
20889 ; BITALG_NOVLX-LABEL: ugt_14_v2i64:
20890 ; BITALG_NOVLX:       # %bb.0:
20891 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
20892 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
20893 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20894 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20895 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
20896 ; BITALG_NOVLX-NEXT:    vzeroupper
20897 ; BITALG_NOVLX-NEXT:    retq
20899 ; BITALG-LABEL: ugt_14_v2i64:
20900 ; BITALG:       # %bb.0:
20901 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
20902 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
20903 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
20904 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [14,14]
20905 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
20906 ; BITALG-NEXT:    retq
20907   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20908   %3 = icmp ugt <2 x i64> %2, <i64 14, i64 14>
20909   %4 = sext <2 x i1> %3 to <2 x i64>
20910   ret <2 x i64> %4
20913 define <2 x i64> @ult_15_v2i64(<2 x i64> %0) {
20914 ; SSE2-LABEL: ult_15_v2i64:
20915 ; SSE2:       # %bb.0:
20916 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20917 ; SSE2-NEXT:    psrlw $1, %xmm1
20918 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20919 ; SSE2-NEXT:    psubb %xmm1, %xmm0
20920 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20921 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
20922 ; SSE2-NEXT:    pand %xmm1, %xmm2
20923 ; SSE2-NEXT:    psrlw $2, %xmm0
20924 ; SSE2-NEXT:    pand %xmm1, %xmm0
20925 ; SSE2-NEXT:    paddb %xmm2, %xmm0
20926 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
20927 ; SSE2-NEXT:    psrlw $4, %xmm1
20928 ; SSE2-NEXT:    paddb %xmm0, %xmm1
20929 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20930 ; SSE2-NEXT:    pxor %xmm0, %xmm0
20931 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
20932 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20933 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20934 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483663,2147483663,2147483663,2147483663]
20935 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
20936 ; SSE2-NEXT:    retq
20938 ; SSE3-LABEL: ult_15_v2i64:
20939 ; SSE3:       # %bb.0:
20940 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20941 ; SSE3-NEXT:    psrlw $1, %xmm1
20942 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20943 ; SSE3-NEXT:    psubb %xmm1, %xmm0
20944 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
20945 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
20946 ; SSE3-NEXT:    pand %xmm1, %xmm2
20947 ; SSE3-NEXT:    psrlw $2, %xmm0
20948 ; SSE3-NEXT:    pand %xmm1, %xmm0
20949 ; SSE3-NEXT:    paddb %xmm2, %xmm0
20950 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
20951 ; SSE3-NEXT:    psrlw $4, %xmm1
20952 ; SSE3-NEXT:    paddb %xmm0, %xmm1
20953 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20954 ; SSE3-NEXT:    pxor %xmm0, %xmm0
20955 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
20956 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20957 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20958 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483663,2147483663,2147483663,2147483663]
20959 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
20960 ; SSE3-NEXT:    retq
20962 ; SSSE3-LABEL: ult_15_v2i64:
20963 ; SSSE3:       # %bb.0:
20964 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20965 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
20966 ; SSSE3-NEXT:    pand %xmm1, %xmm2
20967 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20968 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
20969 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
20970 ; SSSE3-NEXT:    psrlw $4, %xmm0
20971 ; SSSE3-NEXT:    pand %xmm1, %xmm0
20972 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
20973 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
20974 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
20975 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
20976 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20977 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20978 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483663,2147483663,2147483663,2147483663]
20979 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
20980 ; SSSE3-NEXT:    retq
20982 ; SSE41-LABEL: ult_15_v2i64:
20983 ; SSE41:       # %bb.0:
20984 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20985 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
20986 ; SSE41-NEXT:    pand %xmm1, %xmm2
20987 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
20988 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
20989 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
20990 ; SSE41-NEXT:    psrlw $4, %xmm0
20991 ; SSE41-NEXT:    pand %xmm1, %xmm0
20992 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
20993 ; SSE41-NEXT:    paddb %xmm4, %xmm3
20994 ; SSE41-NEXT:    pxor %xmm0, %xmm0
20995 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
20996 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
20997 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
20998 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483663,2147483663,2147483663,2147483663]
20999 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
21000 ; SSE41-NEXT:    retq
21002 ; AVX1-LABEL: ult_15_v2i64:
21003 ; AVX1:       # %bb.0:
21004 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21005 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
21006 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21007 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21008 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
21009 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
21010 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21011 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21012 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21013 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21014 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [15,15]
21015 ; AVX1-NEXT:    # xmm1 = mem[0,0]
21016 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21017 ; AVX1-NEXT:    retq
21019 ; AVX2-LABEL: ult_15_v2i64:
21020 ; AVX2:       # %bb.0:
21021 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21022 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
21023 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21024 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21025 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
21026 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
21027 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21028 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21029 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21030 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21031 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [15,15]
21032 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21033 ; AVX2-NEXT:    retq
21035 ; AVX512VPOPCNTDQ-LABEL: ult_15_v2i64:
21036 ; AVX512VPOPCNTDQ:       # %bb.0:
21037 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21038 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
21039 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [15,15]
21040 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21041 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
21042 ; AVX512VPOPCNTDQ-NEXT:    retq
21044 ; AVX512VPOPCNTDQVL-LABEL: ult_15_v2i64:
21045 ; AVX512VPOPCNTDQVL:       # %bb.0:
21046 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
21047 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [15,15]
21048 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21049 ; AVX512VPOPCNTDQVL-NEXT:    retq
21051 ; BITALG_NOVLX-LABEL: ult_15_v2i64:
21052 ; BITALG_NOVLX:       # %bb.0:
21053 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21054 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
21055 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21056 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21057 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [15,15]
21058 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21059 ; BITALG_NOVLX-NEXT:    vzeroupper
21060 ; BITALG_NOVLX-NEXT:    retq
21062 ; BITALG-LABEL: ult_15_v2i64:
21063 ; BITALG:       # %bb.0:
21064 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
21065 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21066 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21067 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [15,15]
21068 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21069 ; BITALG-NEXT:    retq
21070   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21071   %3 = icmp ult <2 x i64> %2, <i64 15, i64 15>
21072   %4 = sext <2 x i1> %3 to <2 x i64>
21073   ret <2 x i64> %4
21076 define <2 x i64> @ugt_15_v2i64(<2 x i64> %0) {
21077 ; SSE2-LABEL: ugt_15_v2i64:
21078 ; SSE2:       # %bb.0:
21079 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21080 ; SSE2-NEXT:    psrlw $1, %xmm1
21081 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21082 ; SSE2-NEXT:    psubb %xmm1, %xmm0
21083 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21084 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
21085 ; SSE2-NEXT:    pand %xmm1, %xmm2
21086 ; SSE2-NEXT:    psrlw $2, %xmm0
21087 ; SSE2-NEXT:    pand %xmm1, %xmm0
21088 ; SSE2-NEXT:    paddb %xmm2, %xmm0
21089 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21090 ; SSE2-NEXT:    psrlw $4, %xmm1
21091 ; SSE2-NEXT:    paddb %xmm0, %xmm1
21092 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21093 ; SSE2-NEXT:    pxor %xmm0, %xmm0
21094 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
21095 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21096 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21097 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21098 ; SSE2-NEXT:    retq
21100 ; SSE3-LABEL: ugt_15_v2i64:
21101 ; SSE3:       # %bb.0:
21102 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21103 ; SSE3-NEXT:    psrlw $1, %xmm1
21104 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21105 ; SSE3-NEXT:    psubb %xmm1, %xmm0
21106 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21107 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
21108 ; SSE3-NEXT:    pand %xmm1, %xmm2
21109 ; SSE3-NEXT:    psrlw $2, %xmm0
21110 ; SSE3-NEXT:    pand %xmm1, %xmm0
21111 ; SSE3-NEXT:    paddb %xmm2, %xmm0
21112 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21113 ; SSE3-NEXT:    psrlw $4, %xmm1
21114 ; SSE3-NEXT:    paddb %xmm0, %xmm1
21115 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21116 ; SSE3-NEXT:    pxor %xmm0, %xmm0
21117 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
21118 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21119 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21120 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21121 ; SSE3-NEXT:    retq
21123 ; SSSE3-LABEL: ugt_15_v2i64:
21124 ; SSSE3:       # %bb.0:
21125 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21126 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
21127 ; SSSE3-NEXT:    pand %xmm1, %xmm2
21128 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21129 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
21130 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
21131 ; SSSE3-NEXT:    psrlw $4, %xmm0
21132 ; SSSE3-NEXT:    pand %xmm1, %xmm0
21133 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
21134 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
21135 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
21136 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
21137 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21138 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21139 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21140 ; SSSE3-NEXT:    retq
21142 ; SSE41-LABEL: ugt_15_v2i64:
21143 ; SSE41:       # %bb.0:
21144 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21145 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
21146 ; SSE41-NEXT:    pand %xmm1, %xmm2
21147 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21148 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
21149 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
21150 ; SSE41-NEXT:    psrlw $4, %xmm0
21151 ; SSE41-NEXT:    pand %xmm1, %xmm0
21152 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
21153 ; SSE41-NEXT:    paddb %xmm4, %xmm3
21154 ; SSE41-NEXT:    pxor %xmm0, %xmm0
21155 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
21156 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21157 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21158 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21159 ; SSE41-NEXT:    retq
21161 ; AVX1-LABEL: ugt_15_v2i64:
21162 ; AVX1:       # %bb.0:
21163 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21164 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
21165 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21166 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21167 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
21168 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
21169 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21170 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21171 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21172 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21173 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21174 ; AVX1-NEXT:    retq
21176 ; AVX2-LABEL: ugt_15_v2i64:
21177 ; AVX2:       # %bb.0:
21178 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21179 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
21180 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21181 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21182 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
21183 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
21184 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21185 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21186 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21187 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21188 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21189 ; AVX2-NEXT:    retq
21191 ; AVX512VPOPCNTDQ-LABEL: ugt_15_v2i64:
21192 ; AVX512VPOPCNTDQ:       # %bb.0:
21193 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21194 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
21195 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21196 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
21197 ; AVX512VPOPCNTDQ-NEXT:    retq
21199 ; AVX512VPOPCNTDQVL-LABEL: ugt_15_v2i64:
21200 ; AVX512VPOPCNTDQVL:       # %bb.0:
21201 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
21202 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [15,15]
21203 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
21204 ; AVX512VPOPCNTDQVL-NEXT:    retq
21206 ; BITALG_NOVLX-LABEL: ugt_15_v2i64:
21207 ; BITALG_NOVLX:       # %bb.0:
21208 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21209 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
21210 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21211 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21212 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21213 ; BITALG_NOVLX-NEXT:    vzeroupper
21214 ; BITALG_NOVLX-NEXT:    retq
21216 ; BITALG-LABEL: ugt_15_v2i64:
21217 ; BITALG:       # %bb.0:
21218 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
21219 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21220 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21221 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [15,15]
21222 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
21223 ; BITALG-NEXT:    retq
21224   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21225   %3 = icmp ugt <2 x i64> %2, <i64 15, i64 15>
21226   %4 = sext <2 x i1> %3 to <2 x i64>
21227   ret <2 x i64> %4
21230 define <2 x i64> @ult_16_v2i64(<2 x i64> %0) {
21231 ; SSE2-LABEL: ult_16_v2i64:
21232 ; SSE2:       # %bb.0:
21233 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21234 ; SSE2-NEXT:    psrlw $1, %xmm1
21235 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21236 ; SSE2-NEXT:    psubb %xmm1, %xmm0
21237 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21238 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
21239 ; SSE2-NEXT:    pand %xmm1, %xmm2
21240 ; SSE2-NEXT:    psrlw $2, %xmm0
21241 ; SSE2-NEXT:    pand %xmm1, %xmm0
21242 ; SSE2-NEXT:    paddb %xmm2, %xmm0
21243 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21244 ; SSE2-NEXT:    psrlw $4, %xmm1
21245 ; SSE2-NEXT:    paddb %xmm0, %xmm1
21246 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21247 ; SSE2-NEXT:    pxor %xmm0, %xmm0
21248 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
21249 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21250 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21251 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483664,2147483664,2147483664,2147483664]
21252 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
21253 ; SSE2-NEXT:    retq
21255 ; SSE3-LABEL: ult_16_v2i64:
21256 ; SSE3:       # %bb.0:
21257 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21258 ; SSE3-NEXT:    psrlw $1, %xmm1
21259 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21260 ; SSE3-NEXT:    psubb %xmm1, %xmm0
21261 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21262 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
21263 ; SSE3-NEXT:    pand %xmm1, %xmm2
21264 ; SSE3-NEXT:    psrlw $2, %xmm0
21265 ; SSE3-NEXT:    pand %xmm1, %xmm0
21266 ; SSE3-NEXT:    paddb %xmm2, %xmm0
21267 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21268 ; SSE3-NEXT:    psrlw $4, %xmm1
21269 ; SSE3-NEXT:    paddb %xmm0, %xmm1
21270 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21271 ; SSE3-NEXT:    pxor %xmm0, %xmm0
21272 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
21273 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21274 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21275 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483664,2147483664,2147483664,2147483664]
21276 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
21277 ; SSE3-NEXT:    retq
21279 ; SSSE3-LABEL: ult_16_v2i64:
21280 ; SSSE3:       # %bb.0:
21281 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21282 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
21283 ; SSSE3-NEXT:    pand %xmm1, %xmm2
21284 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21285 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
21286 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
21287 ; SSSE3-NEXT:    psrlw $4, %xmm0
21288 ; SSSE3-NEXT:    pand %xmm1, %xmm0
21289 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
21290 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
21291 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
21292 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
21293 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21294 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21295 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483664,2147483664,2147483664,2147483664]
21296 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
21297 ; SSSE3-NEXT:    retq
21299 ; SSE41-LABEL: ult_16_v2i64:
21300 ; SSE41:       # %bb.0:
21301 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21302 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
21303 ; SSE41-NEXT:    pand %xmm1, %xmm2
21304 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21305 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
21306 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
21307 ; SSE41-NEXT:    psrlw $4, %xmm0
21308 ; SSE41-NEXT:    pand %xmm1, %xmm0
21309 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
21310 ; SSE41-NEXT:    paddb %xmm4, %xmm3
21311 ; SSE41-NEXT:    pxor %xmm0, %xmm0
21312 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
21313 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21314 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21315 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483664,2147483664,2147483664,2147483664]
21316 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
21317 ; SSE41-NEXT:    retq
21319 ; AVX1-LABEL: ult_16_v2i64:
21320 ; AVX1:       # %bb.0:
21321 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21322 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
21323 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21324 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21325 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
21326 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
21327 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21328 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21329 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21330 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21331 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [16,16]
21332 ; AVX1-NEXT:    # xmm1 = mem[0,0]
21333 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21334 ; AVX1-NEXT:    retq
21336 ; AVX2-LABEL: ult_16_v2i64:
21337 ; AVX2:       # %bb.0:
21338 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21339 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
21340 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21341 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21342 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
21343 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
21344 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21345 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21346 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21347 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21348 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [16,16]
21349 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21350 ; AVX2-NEXT:    retq
21352 ; AVX512VPOPCNTDQ-LABEL: ult_16_v2i64:
21353 ; AVX512VPOPCNTDQ:       # %bb.0:
21354 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21355 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
21356 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [16,16]
21357 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21358 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
21359 ; AVX512VPOPCNTDQ-NEXT:    retq
21361 ; AVX512VPOPCNTDQVL-LABEL: ult_16_v2i64:
21362 ; AVX512VPOPCNTDQVL:       # %bb.0:
21363 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
21364 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [16,16]
21365 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21366 ; AVX512VPOPCNTDQVL-NEXT:    retq
21368 ; BITALG_NOVLX-LABEL: ult_16_v2i64:
21369 ; BITALG_NOVLX:       # %bb.0:
21370 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21371 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
21372 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21373 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21374 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [16,16]
21375 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21376 ; BITALG_NOVLX-NEXT:    vzeroupper
21377 ; BITALG_NOVLX-NEXT:    retq
21379 ; BITALG-LABEL: ult_16_v2i64:
21380 ; BITALG:       # %bb.0:
21381 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
21382 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21383 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21384 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [16,16]
21385 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21386 ; BITALG-NEXT:    retq
21387   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21388   %3 = icmp ult <2 x i64> %2, <i64 16, i64 16>
21389   %4 = sext <2 x i1> %3 to <2 x i64>
21390   ret <2 x i64> %4
21393 define <2 x i64> @ugt_16_v2i64(<2 x i64> %0) {
21394 ; SSE2-LABEL: ugt_16_v2i64:
21395 ; SSE2:       # %bb.0:
21396 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21397 ; SSE2-NEXT:    psrlw $1, %xmm1
21398 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21399 ; SSE2-NEXT:    psubb %xmm1, %xmm0
21400 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21401 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
21402 ; SSE2-NEXT:    pand %xmm1, %xmm2
21403 ; SSE2-NEXT:    psrlw $2, %xmm0
21404 ; SSE2-NEXT:    pand %xmm1, %xmm0
21405 ; SSE2-NEXT:    paddb %xmm2, %xmm0
21406 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21407 ; SSE2-NEXT:    psrlw $4, %xmm1
21408 ; SSE2-NEXT:    paddb %xmm0, %xmm1
21409 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21410 ; SSE2-NEXT:    pxor %xmm0, %xmm0
21411 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
21412 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21413 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21414 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21415 ; SSE2-NEXT:    retq
21417 ; SSE3-LABEL: ugt_16_v2i64:
21418 ; SSE3:       # %bb.0:
21419 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21420 ; SSE3-NEXT:    psrlw $1, %xmm1
21421 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21422 ; SSE3-NEXT:    psubb %xmm1, %xmm0
21423 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21424 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
21425 ; SSE3-NEXT:    pand %xmm1, %xmm2
21426 ; SSE3-NEXT:    psrlw $2, %xmm0
21427 ; SSE3-NEXT:    pand %xmm1, %xmm0
21428 ; SSE3-NEXT:    paddb %xmm2, %xmm0
21429 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21430 ; SSE3-NEXT:    psrlw $4, %xmm1
21431 ; SSE3-NEXT:    paddb %xmm0, %xmm1
21432 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21433 ; SSE3-NEXT:    pxor %xmm0, %xmm0
21434 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
21435 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21436 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21437 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21438 ; SSE3-NEXT:    retq
21440 ; SSSE3-LABEL: ugt_16_v2i64:
21441 ; SSSE3:       # %bb.0:
21442 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21443 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
21444 ; SSSE3-NEXT:    pand %xmm1, %xmm2
21445 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21446 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
21447 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
21448 ; SSSE3-NEXT:    psrlw $4, %xmm0
21449 ; SSSE3-NEXT:    pand %xmm1, %xmm0
21450 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
21451 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
21452 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
21453 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
21454 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21455 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21456 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21457 ; SSSE3-NEXT:    retq
21459 ; SSE41-LABEL: ugt_16_v2i64:
21460 ; SSE41:       # %bb.0:
21461 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21462 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
21463 ; SSE41-NEXT:    pand %xmm1, %xmm2
21464 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21465 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
21466 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
21467 ; SSE41-NEXT:    psrlw $4, %xmm0
21468 ; SSE41-NEXT:    pand %xmm1, %xmm0
21469 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
21470 ; SSE41-NEXT:    paddb %xmm4, %xmm3
21471 ; SSE41-NEXT:    pxor %xmm0, %xmm0
21472 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
21473 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21474 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21475 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21476 ; SSE41-NEXT:    retq
21478 ; AVX1-LABEL: ugt_16_v2i64:
21479 ; AVX1:       # %bb.0:
21480 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21481 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
21482 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21483 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21484 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
21485 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
21486 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21487 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21488 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21489 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21490 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21491 ; AVX1-NEXT:    retq
21493 ; AVX2-LABEL: ugt_16_v2i64:
21494 ; AVX2:       # %bb.0:
21495 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21496 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
21497 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21498 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21499 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
21500 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
21501 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21502 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21503 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21504 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21505 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21506 ; AVX2-NEXT:    retq
21508 ; AVX512VPOPCNTDQ-LABEL: ugt_16_v2i64:
21509 ; AVX512VPOPCNTDQ:       # %bb.0:
21510 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21511 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
21512 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21513 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
21514 ; AVX512VPOPCNTDQ-NEXT:    retq
21516 ; AVX512VPOPCNTDQVL-LABEL: ugt_16_v2i64:
21517 ; AVX512VPOPCNTDQVL:       # %bb.0:
21518 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
21519 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [16,16]
21520 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
21521 ; AVX512VPOPCNTDQVL-NEXT:    retq
21523 ; BITALG_NOVLX-LABEL: ugt_16_v2i64:
21524 ; BITALG_NOVLX:       # %bb.0:
21525 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21526 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
21527 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21528 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21529 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21530 ; BITALG_NOVLX-NEXT:    vzeroupper
21531 ; BITALG_NOVLX-NEXT:    retq
21533 ; BITALG-LABEL: ugt_16_v2i64:
21534 ; BITALG:       # %bb.0:
21535 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
21536 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21537 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21538 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [16,16]
21539 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
21540 ; BITALG-NEXT:    retq
21541   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21542   %3 = icmp ugt <2 x i64> %2, <i64 16, i64 16>
21543   %4 = sext <2 x i1> %3 to <2 x i64>
21544   ret <2 x i64> %4
21547 define <2 x i64> @ult_17_v2i64(<2 x i64> %0) {
21548 ; SSE2-LABEL: ult_17_v2i64:
21549 ; SSE2:       # %bb.0:
21550 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21551 ; SSE2-NEXT:    psrlw $1, %xmm1
21552 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21553 ; SSE2-NEXT:    psubb %xmm1, %xmm0
21554 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21555 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
21556 ; SSE2-NEXT:    pand %xmm1, %xmm2
21557 ; SSE2-NEXT:    psrlw $2, %xmm0
21558 ; SSE2-NEXT:    pand %xmm1, %xmm0
21559 ; SSE2-NEXT:    paddb %xmm2, %xmm0
21560 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21561 ; SSE2-NEXT:    psrlw $4, %xmm1
21562 ; SSE2-NEXT:    paddb %xmm0, %xmm1
21563 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21564 ; SSE2-NEXT:    pxor %xmm0, %xmm0
21565 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
21566 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21567 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21568 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483665,2147483665,2147483665,2147483665]
21569 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
21570 ; SSE2-NEXT:    retq
21572 ; SSE3-LABEL: ult_17_v2i64:
21573 ; SSE3:       # %bb.0:
21574 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21575 ; SSE3-NEXT:    psrlw $1, %xmm1
21576 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21577 ; SSE3-NEXT:    psubb %xmm1, %xmm0
21578 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21579 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
21580 ; SSE3-NEXT:    pand %xmm1, %xmm2
21581 ; SSE3-NEXT:    psrlw $2, %xmm0
21582 ; SSE3-NEXT:    pand %xmm1, %xmm0
21583 ; SSE3-NEXT:    paddb %xmm2, %xmm0
21584 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21585 ; SSE3-NEXT:    psrlw $4, %xmm1
21586 ; SSE3-NEXT:    paddb %xmm0, %xmm1
21587 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21588 ; SSE3-NEXT:    pxor %xmm0, %xmm0
21589 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
21590 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21591 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21592 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483665,2147483665,2147483665,2147483665]
21593 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
21594 ; SSE3-NEXT:    retq
21596 ; SSSE3-LABEL: ult_17_v2i64:
21597 ; SSSE3:       # %bb.0:
21598 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21599 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
21600 ; SSSE3-NEXT:    pand %xmm1, %xmm2
21601 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21602 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
21603 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
21604 ; SSSE3-NEXT:    psrlw $4, %xmm0
21605 ; SSSE3-NEXT:    pand %xmm1, %xmm0
21606 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
21607 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
21608 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
21609 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
21610 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21611 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21612 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483665,2147483665,2147483665,2147483665]
21613 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
21614 ; SSSE3-NEXT:    retq
21616 ; SSE41-LABEL: ult_17_v2i64:
21617 ; SSE41:       # %bb.0:
21618 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21619 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
21620 ; SSE41-NEXT:    pand %xmm1, %xmm2
21621 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21622 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
21623 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
21624 ; SSE41-NEXT:    psrlw $4, %xmm0
21625 ; SSE41-NEXT:    pand %xmm1, %xmm0
21626 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
21627 ; SSE41-NEXT:    paddb %xmm4, %xmm3
21628 ; SSE41-NEXT:    pxor %xmm0, %xmm0
21629 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
21630 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21631 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21632 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483665,2147483665,2147483665,2147483665]
21633 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
21634 ; SSE41-NEXT:    retq
21636 ; AVX1-LABEL: ult_17_v2i64:
21637 ; AVX1:       # %bb.0:
21638 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21639 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
21640 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21641 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21642 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
21643 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
21644 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21645 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21646 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21647 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21648 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [17,17]
21649 ; AVX1-NEXT:    # xmm1 = mem[0,0]
21650 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21651 ; AVX1-NEXT:    retq
21653 ; AVX2-LABEL: ult_17_v2i64:
21654 ; AVX2:       # %bb.0:
21655 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21656 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
21657 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21658 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21659 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
21660 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
21661 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21662 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21663 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21664 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21665 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [17,17]
21666 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21667 ; AVX2-NEXT:    retq
21669 ; AVX512VPOPCNTDQ-LABEL: ult_17_v2i64:
21670 ; AVX512VPOPCNTDQ:       # %bb.0:
21671 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21672 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
21673 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [17,17]
21674 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21675 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
21676 ; AVX512VPOPCNTDQ-NEXT:    retq
21678 ; AVX512VPOPCNTDQVL-LABEL: ult_17_v2i64:
21679 ; AVX512VPOPCNTDQVL:       # %bb.0:
21680 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
21681 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [17,17]
21682 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21683 ; AVX512VPOPCNTDQVL-NEXT:    retq
21685 ; BITALG_NOVLX-LABEL: ult_17_v2i64:
21686 ; BITALG_NOVLX:       # %bb.0:
21687 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21688 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
21689 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21690 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21691 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [17,17]
21692 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21693 ; BITALG_NOVLX-NEXT:    vzeroupper
21694 ; BITALG_NOVLX-NEXT:    retq
21696 ; BITALG-LABEL: ult_17_v2i64:
21697 ; BITALG:       # %bb.0:
21698 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
21699 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21700 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21701 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [17,17]
21702 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21703 ; BITALG-NEXT:    retq
21704   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21705   %3 = icmp ult <2 x i64> %2, <i64 17, i64 17>
21706   %4 = sext <2 x i1> %3 to <2 x i64>
21707   ret <2 x i64> %4
21710 define <2 x i64> @ugt_17_v2i64(<2 x i64> %0) {
21711 ; SSE2-LABEL: ugt_17_v2i64:
21712 ; SSE2:       # %bb.0:
21713 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21714 ; SSE2-NEXT:    psrlw $1, %xmm1
21715 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21716 ; SSE2-NEXT:    psubb %xmm1, %xmm0
21717 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21718 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
21719 ; SSE2-NEXT:    pand %xmm1, %xmm2
21720 ; SSE2-NEXT:    psrlw $2, %xmm0
21721 ; SSE2-NEXT:    pand %xmm1, %xmm0
21722 ; SSE2-NEXT:    paddb %xmm2, %xmm0
21723 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21724 ; SSE2-NEXT:    psrlw $4, %xmm1
21725 ; SSE2-NEXT:    paddb %xmm0, %xmm1
21726 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21727 ; SSE2-NEXT:    pxor %xmm0, %xmm0
21728 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
21729 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21730 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21731 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21732 ; SSE2-NEXT:    retq
21734 ; SSE3-LABEL: ugt_17_v2i64:
21735 ; SSE3:       # %bb.0:
21736 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21737 ; SSE3-NEXT:    psrlw $1, %xmm1
21738 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21739 ; SSE3-NEXT:    psubb %xmm1, %xmm0
21740 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21741 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
21742 ; SSE3-NEXT:    pand %xmm1, %xmm2
21743 ; SSE3-NEXT:    psrlw $2, %xmm0
21744 ; SSE3-NEXT:    pand %xmm1, %xmm0
21745 ; SSE3-NEXT:    paddb %xmm2, %xmm0
21746 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21747 ; SSE3-NEXT:    psrlw $4, %xmm1
21748 ; SSE3-NEXT:    paddb %xmm0, %xmm1
21749 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21750 ; SSE3-NEXT:    pxor %xmm0, %xmm0
21751 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
21752 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21753 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21754 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21755 ; SSE3-NEXT:    retq
21757 ; SSSE3-LABEL: ugt_17_v2i64:
21758 ; SSSE3:       # %bb.0:
21759 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21760 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
21761 ; SSSE3-NEXT:    pand %xmm1, %xmm2
21762 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21763 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
21764 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
21765 ; SSSE3-NEXT:    psrlw $4, %xmm0
21766 ; SSSE3-NEXT:    pand %xmm1, %xmm0
21767 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
21768 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
21769 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
21770 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
21771 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21772 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21773 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21774 ; SSSE3-NEXT:    retq
21776 ; SSE41-LABEL: ugt_17_v2i64:
21777 ; SSE41:       # %bb.0:
21778 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21779 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
21780 ; SSE41-NEXT:    pand %xmm1, %xmm2
21781 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21782 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
21783 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
21784 ; SSE41-NEXT:    psrlw $4, %xmm0
21785 ; SSE41-NEXT:    pand %xmm1, %xmm0
21786 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
21787 ; SSE41-NEXT:    paddb %xmm4, %xmm3
21788 ; SSE41-NEXT:    pxor %xmm0, %xmm0
21789 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
21790 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
21791 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21792 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
21793 ; SSE41-NEXT:    retq
21795 ; AVX1-LABEL: ugt_17_v2i64:
21796 ; AVX1:       # %bb.0:
21797 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21798 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
21799 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21800 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21801 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
21802 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
21803 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21804 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21805 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21806 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21807 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21808 ; AVX1-NEXT:    retq
21810 ; AVX2-LABEL: ugt_17_v2i64:
21811 ; AVX2:       # %bb.0:
21812 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21813 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
21814 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21815 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21816 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
21817 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
21818 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21819 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21820 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21821 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21822 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21823 ; AVX2-NEXT:    retq
21825 ; AVX512VPOPCNTDQ-LABEL: ugt_17_v2i64:
21826 ; AVX512VPOPCNTDQ:       # %bb.0:
21827 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21828 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
21829 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21830 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
21831 ; AVX512VPOPCNTDQ-NEXT:    retq
21833 ; AVX512VPOPCNTDQVL-LABEL: ugt_17_v2i64:
21834 ; AVX512VPOPCNTDQVL:       # %bb.0:
21835 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
21836 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [17,17]
21837 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
21838 ; AVX512VPOPCNTDQVL-NEXT:    retq
21840 ; BITALG_NOVLX-LABEL: ugt_17_v2i64:
21841 ; BITALG_NOVLX:       # %bb.0:
21842 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21843 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
21844 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21845 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21846 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
21847 ; BITALG_NOVLX-NEXT:    vzeroupper
21848 ; BITALG_NOVLX-NEXT:    retq
21850 ; BITALG-LABEL: ugt_17_v2i64:
21851 ; BITALG:       # %bb.0:
21852 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
21853 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21854 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21855 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [17,17]
21856 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
21857 ; BITALG-NEXT:    retq
21858   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21859   %3 = icmp ugt <2 x i64> %2, <i64 17, i64 17>
21860   %4 = sext <2 x i1> %3 to <2 x i64>
21861   ret <2 x i64> %4
21864 define <2 x i64> @ult_18_v2i64(<2 x i64> %0) {
21865 ; SSE2-LABEL: ult_18_v2i64:
21866 ; SSE2:       # %bb.0:
21867 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21868 ; SSE2-NEXT:    psrlw $1, %xmm1
21869 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21870 ; SSE2-NEXT:    psubb %xmm1, %xmm0
21871 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21872 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
21873 ; SSE2-NEXT:    pand %xmm1, %xmm2
21874 ; SSE2-NEXT:    psrlw $2, %xmm0
21875 ; SSE2-NEXT:    pand %xmm1, %xmm0
21876 ; SSE2-NEXT:    paddb %xmm2, %xmm0
21877 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
21878 ; SSE2-NEXT:    psrlw $4, %xmm1
21879 ; SSE2-NEXT:    paddb %xmm0, %xmm1
21880 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21881 ; SSE2-NEXT:    pxor %xmm0, %xmm0
21882 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
21883 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21884 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21885 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483666,2147483666,2147483666,2147483666]
21886 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
21887 ; SSE2-NEXT:    retq
21889 ; SSE3-LABEL: ult_18_v2i64:
21890 ; SSE3:       # %bb.0:
21891 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21892 ; SSE3-NEXT:    psrlw $1, %xmm1
21893 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21894 ; SSE3-NEXT:    psubb %xmm1, %xmm0
21895 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
21896 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
21897 ; SSE3-NEXT:    pand %xmm1, %xmm2
21898 ; SSE3-NEXT:    psrlw $2, %xmm0
21899 ; SSE3-NEXT:    pand %xmm1, %xmm0
21900 ; SSE3-NEXT:    paddb %xmm2, %xmm0
21901 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
21902 ; SSE3-NEXT:    psrlw $4, %xmm1
21903 ; SSE3-NEXT:    paddb %xmm0, %xmm1
21904 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21905 ; SSE3-NEXT:    pxor %xmm0, %xmm0
21906 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
21907 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21908 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21909 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483666,2147483666,2147483666,2147483666]
21910 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
21911 ; SSE3-NEXT:    retq
21913 ; SSSE3-LABEL: ult_18_v2i64:
21914 ; SSSE3:       # %bb.0:
21915 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21916 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
21917 ; SSSE3-NEXT:    pand %xmm1, %xmm2
21918 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21919 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
21920 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
21921 ; SSSE3-NEXT:    psrlw $4, %xmm0
21922 ; SSSE3-NEXT:    pand %xmm1, %xmm0
21923 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
21924 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
21925 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
21926 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
21927 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21928 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21929 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483666,2147483666,2147483666,2147483666]
21930 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
21931 ; SSSE3-NEXT:    retq
21933 ; SSE41-LABEL: ult_18_v2i64:
21934 ; SSE41:       # %bb.0:
21935 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21936 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
21937 ; SSE41-NEXT:    pand %xmm1, %xmm2
21938 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21939 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
21940 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
21941 ; SSE41-NEXT:    psrlw $4, %xmm0
21942 ; SSE41-NEXT:    pand %xmm1, %xmm0
21943 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
21944 ; SSE41-NEXT:    paddb %xmm4, %xmm3
21945 ; SSE41-NEXT:    pxor %xmm0, %xmm0
21946 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
21947 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
21948 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
21949 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483666,2147483666,2147483666,2147483666]
21950 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
21951 ; SSE41-NEXT:    retq
21953 ; AVX1-LABEL: ult_18_v2i64:
21954 ; AVX1:       # %bb.0:
21955 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21956 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
21957 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21958 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21959 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
21960 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
21961 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21962 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21963 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21964 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21965 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [18,18]
21966 ; AVX1-NEXT:    # xmm1 = mem[0,0]
21967 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21968 ; AVX1-NEXT:    retq
21970 ; AVX2-LABEL: ult_18_v2i64:
21971 ; AVX2:       # %bb.0:
21972 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
21973 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
21974 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
21975 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
21976 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
21977 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
21978 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
21979 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
21980 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
21981 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
21982 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18,18]
21983 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21984 ; AVX2-NEXT:    retq
21986 ; AVX512VPOPCNTDQ-LABEL: ult_18_v2i64:
21987 ; AVX512VPOPCNTDQ:       # %bb.0:
21988 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
21989 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
21990 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18,18]
21991 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
21992 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
21993 ; AVX512VPOPCNTDQ-NEXT:    retq
21995 ; AVX512VPOPCNTDQVL-LABEL: ult_18_v2i64:
21996 ; AVX512VPOPCNTDQVL:       # %bb.0:
21997 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
21998 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18,18]
21999 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22000 ; AVX512VPOPCNTDQVL-NEXT:    retq
22002 ; BITALG_NOVLX-LABEL: ult_18_v2i64:
22003 ; BITALG_NOVLX:       # %bb.0:
22004 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22005 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
22006 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22007 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22008 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18,18]
22009 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22010 ; BITALG_NOVLX-NEXT:    vzeroupper
22011 ; BITALG_NOVLX-NEXT:    retq
22013 ; BITALG-LABEL: ult_18_v2i64:
22014 ; BITALG:       # %bb.0:
22015 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
22016 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22017 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22018 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18,18]
22019 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22020 ; BITALG-NEXT:    retq
22021   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22022   %3 = icmp ult <2 x i64> %2, <i64 18, i64 18>
22023   %4 = sext <2 x i1> %3 to <2 x i64>
22024   ret <2 x i64> %4
22027 define <2 x i64> @ugt_18_v2i64(<2 x i64> %0) {
22028 ; SSE2-LABEL: ugt_18_v2i64:
22029 ; SSE2:       # %bb.0:
22030 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22031 ; SSE2-NEXT:    psrlw $1, %xmm1
22032 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22033 ; SSE2-NEXT:    psubb %xmm1, %xmm0
22034 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22035 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
22036 ; SSE2-NEXT:    pand %xmm1, %xmm2
22037 ; SSE2-NEXT:    psrlw $2, %xmm0
22038 ; SSE2-NEXT:    pand %xmm1, %xmm0
22039 ; SSE2-NEXT:    paddb %xmm2, %xmm0
22040 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22041 ; SSE2-NEXT:    psrlw $4, %xmm1
22042 ; SSE2-NEXT:    paddb %xmm0, %xmm1
22043 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22044 ; SSE2-NEXT:    pxor %xmm0, %xmm0
22045 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
22046 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22047 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22048 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22049 ; SSE2-NEXT:    retq
22051 ; SSE3-LABEL: ugt_18_v2i64:
22052 ; SSE3:       # %bb.0:
22053 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22054 ; SSE3-NEXT:    psrlw $1, %xmm1
22055 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22056 ; SSE3-NEXT:    psubb %xmm1, %xmm0
22057 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22058 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
22059 ; SSE3-NEXT:    pand %xmm1, %xmm2
22060 ; SSE3-NEXT:    psrlw $2, %xmm0
22061 ; SSE3-NEXT:    pand %xmm1, %xmm0
22062 ; SSE3-NEXT:    paddb %xmm2, %xmm0
22063 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22064 ; SSE3-NEXT:    psrlw $4, %xmm1
22065 ; SSE3-NEXT:    paddb %xmm0, %xmm1
22066 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22067 ; SSE3-NEXT:    pxor %xmm0, %xmm0
22068 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
22069 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22070 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22071 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22072 ; SSE3-NEXT:    retq
22074 ; SSSE3-LABEL: ugt_18_v2i64:
22075 ; SSSE3:       # %bb.0:
22076 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22077 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
22078 ; SSSE3-NEXT:    pand %xmm1, %xmm2
22079 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22080 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
22081 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
22082 ; SSSE3-NEXT:    psrlw $4, %xmm0
22083 ; SSSE3-NEXT:    pand %xmm1, %xmm0
22084 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
22085 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
22086 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
22087 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
22088 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22089 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22090 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22091 ; SSSE3-NEXT:    retq
22093 ; SSE41-LABEL: ugt_18_v2i64:
22094 ; SSE41:       # %bb.0:
22095 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22096 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
22097 ; SSE41-NEXT:    pand %xmm1, %xmm2
22098 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22099 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
22100 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
22101 ; SSE41-NEXT:    psrlw $4, %xmm0
22102 ; SSE41-NEXT:    pand %xmm1, %xmm0
22103 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
22104 ; SSE41-NEXT:    paddb %xmm4, %xmm3
22105 ; SSE41-NEXT:    pxor %xmm0, %xmm0
22106 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
22107 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22108 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22109 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22110 ; SSE41-NEXT:    retq
22112 ; AVX1-LABEL: ugt_18_v2i64:
22113 ; AVX1:       # %bb.0:
22114 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22115 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
22116 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22117 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22118 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
22119 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
22120 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22121 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22122 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22123 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22124 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22125 ; AVX1-NEXT:    retq
22127 ; AVX2-LABEL: ugt_18_v2i64:
22128 ; AVX2:       # %bb.0:
22129 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22130 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
22131 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22132 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22133 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
22134 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
22135 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22136 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22137 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22138 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22139 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22140 ; AVX2-NEXT:    retq
22142 ; AVX512VPOPCNTDQ-LABEL: ugt_18_v2i64:
22143 ; AVX512VPOPCNTDQ:       # %bb.0:
22144 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22145 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
22146 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22147 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
22148 ; AVX512VPOPCNTDQ-NEXT:    retq
22150 ; AVX512VPOPCNTDQVL-LABEL: ugt_18_v2i64:
22151 ; AVX512VPOPCNTDQVL:       # %bb.0:
22152 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
22153 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18,18]
22154 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
22155 ; AVX512VPOPCNTDQVL-NEXT:    retq
22157 ; BITALG_NOVLX-LABEL: ugt_18_v2i64:
22158 ; BITALG_NOVLX:       # %bb.0:
22159 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22160 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
22161 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22162 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22163 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22164 ; BITALG_NOVLX-NEXT:    vzeroupper
22165 ; BITALG_NOVLX-NEXT:    retq
22167 ; BITALG-LABEL: ugt_18_v2i64:
22168 ; BITALG:       # %bb.0:
22169 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
22170 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22171 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22172 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [18,18]
22173 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
22174 ; BITALG-NEXT:    retq
22175   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22176   %3 = icmp ugt <2 x i64> %2, <i64 18, i64 18>
22177   %4 = sext <2 x i1> %3 to <2 x i64>
22178   ret <2 x i64> %4
22181 define <2 x i64> @ult_19_v2i64(<2 x i64> %0) {
22182 ; SSE2-LABEL: ult_19_v2i64:
22183 ; SSE2:       # %bb.0:
22184 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22185 ; SSE2-NEXT:    psrlw $1, %xmm1
22186 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22187 ; SSE2-NEXT:    psubb %xmm1, %xmm0
22188 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22189 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
22190 ; SSE2-NEXT:    pand %xmm1, %xmm2
22191 ; SSE2-NEXT:    psrlw $2, %xmm0
22192 ; SSE2-NEXT:    pand %xmm1, %xmm0
22193 ; SSE2-NEXT:    paddb %xmm2, %xmm0
22194 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22195 ; SSE2-NEXT:    psrlw $4, %xmm1
22196 ; SSE2-NEXT:    paddb %xmm0, %xmm1
22197 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22198 ; SSE2-NEXT:    pxor %xmm0, %xmm0
22199 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
22200 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22201 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22202 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483667,2147483667,2147483667,2147483667]
22203 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
22204 ; SSE2-NEXT:    retq
22206 ; SSE3-LABEL: ult_19_v2i64:
22207 ; SSE3:       # %bb.0:
22208 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22209 ; SSE3-NEXT:    psrlw $1, %xmm1
22210 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22211 ; SSE3-NEXT:    psubb %xmm1, %xmm0
22212 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22213 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
22214 ; SSE3-NEXT:    pand %xmm1, %xmm2
22215 ; SSE3-NEXT:    psrlw $2, %xmm0
22216 ; SSE3-NEXT:    pand %xmm1, %xmm0
22217 ; SSE3-NEXT:    paddb %xmm2, %xmm0
22218 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22219 ; SSE3-NEXT:    psrlw $4, %xmm1
22220 ; SSE3-NEXT:    paddb %xmm0, %xmm1
22221 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22222 ; SSE3-NEXT:    pxor %xmm0, %xmm0
22223 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
22224 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22225 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22226 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483667,2147483667,2147483667,2147483667]
22227 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
22228 ; SSE3-NEXT:    retq
22230 ; SSSE3-LABEL: ult_19_v2i64:
22231 ; SSSE3:       # %bb.0:
22232 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22233 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
22234 ; SSSE3-NEXT:    pand %xmm1, %xmm2
22235 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22236 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
22237 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
22238 ; SSSE3-NEXT:    psrlw $4, %xmm0
22239 ; SSSE3-NEXT:    pand %xmm1, %xmm0
22240 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
22241 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
22242 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
22243 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
22244 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22245 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22246 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483667,2147483667,2147483667,2147483667]
22247 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
22248 ; SSSE3-NEXT:    retq
22250 ; SSE41-LABEL: ult_19_v2i64:
22251 ; SSE41:       # %bb.0:
22252 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22253 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
22254 ; SSE41-NEXT:    pand %xmm1, %xmm2
22255 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22256 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
22257 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
22258 ; SSE41-NEXT:    psrlw $4, %xmm0
22259 ; SSE41-NEXT:    pand %xmm1, %xmm0
22260 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
22261 ; SSE41-NEXT:    paddb %xmm4, %xmm3
22262 ; SSE41-NEXT:    pxor %xmm0, %xmm0
22263 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
22264 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22265 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22266 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483667,2147483667,2147483667,2147483667]
22267 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
22268 ; SSE41-NEXT:    retq
22270 ; AVX1-LABEL: ult_19_v2i64:
22271 ; AVX1:       # %bb.0:
22272 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22273 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
22274 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22275 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22276 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
22277 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
22278 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22279 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22280 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22281 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22282 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [19,19]
22283 ; AVX1-NEXT:    # xmm1 = mem[0,0]
22284 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22285 ; AVX1-NEXT:    retq
22287 ; AVX2-LABEL: ult_19_v2i64:
22288 ; AVX2:       # %bb.0:
22289 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22290 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
22291 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22292 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22293 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
22294 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
22295 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22296 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22297 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22298 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22299 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [19,19]
22300 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22301 ; AVX2-NEXT:    retq
22303 ; AVX512VPOPCNTDQ-LABEL: ult_19_v2i64:
22304 ; AVX512VPOPCNTDQ:       # %bb.0:
22305 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22306 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
22307 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [19,19]
22308 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22309 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
22310 ; AVX512VPOPCNTDQ-NEXT:    retq
22312 ; AVX512VPOPCNTDQVL-LABEL: ult_19_v2i64:
22313 ; AVX512VPOPCNTDQVL:       # %bb.0:
22314 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
22315 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [19,19]
22316 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22317 ; AVX512VPOPCNTDQVL-NEXT:    retq
22319 ; BITALG_NOVLX-LABEL: ult_19_v2i64:
22320 ; BITALG_NOVLX:       # %bb.0:
22321 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22322 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
22323 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22324 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22325 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [19,19]
22326 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22327 ; BITALG_NOVLX-NEXT:    vzeroupper
22328 ; BITALG_NOVLX-NEXT:    retq
22330 ; BITALG-LABEL: ult_19_v2i64:
22331 ; BITALG:       # %bb.0:
22332 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
22333 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22334 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22335 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [19,19]
22336 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22337 ; BITALG-NEXT:    retq
22338   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22339   %3 = icmp ult <2 x i64> %2, <i64 19, i64 19>
22340   %4 = sext <2 x i1> %3 to <2 x i64>
22341   ret <2 x i64> %4
22344 define <2 x i64> @ugt_19_v2i64(<2 x i64> %0) {
22345 ; SSE2-LABEL: ugt_19_v2i64:
22346 ; SSE2:       # %bb.0:
22347 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22348 ; SSE2-NEXT:    psrlw $1, %xmm1
22349 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22350 ; SSE2-NEXT:    psubb %xmm1, %xmm0
22351 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22352 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
22353 ; SSE2-NEXT:    pand %xmm1, %xmm2
22354 ; SSE2-NEXT:    psrlw $2, %xmm0
22355 ; SSE2-NEXT:    pand %xmm1, %xmm0
22356 ; SSE2-NEXT:    paddb %xmm2, %xmm0
22357 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22358 ; SSE2-NEXT:    psrlw $4, %xmm1
22359 ; SSE2-NEXT:    paddb %xmm0, %xmm1
22360 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22361 ; SSE2-NEXT:    pxor %xmm0, %xmm0
22362 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
22363 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22364 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22365 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22366 ; SSE2-NEXT:    retq
22368 ; SSE3-LABEL: ugt_19_v2i64:
22369 ; SSE3:       # %bb.0:
22370 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22371 ; SSE3-NEXT:    psrlw $1, %xmm1
22372 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22373 ; SSE3-NEXT:    psubb %xmm1, %xmm0
22374 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22375 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
22376 ; SSE3-NEXT:    pand %xmm1, %xmm2
22377 ; SSE3-NEXT:    psrlw $2, %xmm0
22378 ; SSE3-NEXT:    pand %xmm1, %xmm0
22379 ; SSE3-NEXT:    paddb %xmm2, %xmm0
22380 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22381 ; SSE3-NEXT:    psrlw $4, %xmm1
22382 ; SSE3-NEXT:    paddb %xmm0, %xmm1
22383 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22384 ; SSE3-NEXT:    pxor %xmm0, %xmm0
22385 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
22386 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22387 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22388 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22389 ; SSE3-NEXT:    retq
22391 ; SSSE3-LABEL: ugt_19_v2i64:
22392 ; SSSE3:       # %bb.0:
22393 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22394 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
22395 ; SSSE3-NEXT:    pand %xmm1, %xmm2
22396 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22397 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
22398 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
22399 ; SSSE3-NEXT:    psrlw $4, %xmm0
22400 ; SSSE3-NEXT:    pand %xmm1, %xmm0
22401 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
22402 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
22403 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
22404 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
22405 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22406 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22407 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22408 ; SSSE3-NEXT:    retq
22410 ; SSE41-LABEL: ugt_19_v2i64:
22411 ; SSE41:       # %bb.0:
22412 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22413 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
22414 ; SSE41-NEXT:    pand %xmm1, %xmm2
22415 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22416 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
22417 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
22418 ; SSE41-NEXT:    psrlw $4, %xmm0
22419 ; SSE41-NEXT:    pand %xmm1, %xmm0
22420 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
22421 ; SSE41-NEXT:    paddb %xmm4, %xmm3
22422 ; SSE41-NEXT:    pxor %xmm0, %xmm0
22423 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
22424 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22425 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22426 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22427 ; SSE41-NEXT:    retq
22429 ; AVX1-LABEL: ugt_19_v2i64:
22430 ; AVX1:       # %bb.0:
22431 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22432 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
22433 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22434 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22435 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
22436 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
22437 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22438 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22439 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22440 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22441 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22442 ; AVX1-NEXT:    retq
22444 ; AVX2-LABEL: ugt_19_v2i64:
22445 ; AVX2:       # %bb.0:
22446 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22447 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
22448 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22449 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22450 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
22451 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
22452 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22453 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22454 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22455 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22456 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22457 ; AVX2-NEXT:    retq
22459 ; AVX512VPOPCNTDQ-LABEL: ugt_19_v2i64:
22460 ; AVX512VPOPCNTDQ:       # %bb.0:
22461 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22462 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
22463 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22464 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
22465 ; AVX512VPOPCNTDQ-NEXT:    retq
22467 ; AVX512VPOPCNTDQVL-LABEL: ugt_19_v2i64:
22468 ; AVX512VPOPCNTDQVL:       # %bb.0:
22469 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
22470 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [19,19]
22471 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
22472 ; AVX512VPOPCNTDQVL-NEXT:    retq
22474 ; BITALG_NOVLX-LABEL: ugt_19_v2i64:
22475 ; BITALG_NOVLX:       # %bb.0:
22476 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22477 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
22478 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22479 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22480 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22481 ; BITALG_NOVLX-NEXT:    vzeroupper
22482 ; BITALG_NOVLX-NEXT:    retq
22484 ; BITALG-LABEL: ugt_19_v2i64:
22485 ; BITALG:       # %bb.0:
22486 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
22487 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22488 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22489 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [19,19]
22490 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
22491 ; BITALG-NEXT:    retq
22492   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22493   %3 = icmp ugt <2 x i64> %2, <i64 19, i64 19>
22494   %4 = sext <2 x i1> %3 to <2 x i64>
22495   ret <2 x i64> %4
22498 define <2 x i64> @ult_20_v2i64(<2 x i64> %0) {
22499 ; SSE2-LABEL: ult_20_v2i64:
22500 ; SSE2:       # %bb.0:
22501 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22502 ; SSE2-NEXT:    psrlw $1, %xmm1
22503 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22504 ; SSE2-NEXT:    psubb %xmm1, %xmm0
22505 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22506 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
22507 ; SSE2-NEXT:    pand %xmm1, %xmm2
22508 ; SSE2-NEXT:    psrlw $2, %xmm0
22509 ; SSE2-NEXT:    pand %xmm1, %xmm0
22510 ; SSE2-NEXT:    paddb %xmm2, %xmm0
22511 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22512 ; SSE2-NEXT:    psrlw $4, %xmm1
22513 ; SSE2-NEXT:    paddb %xmm0, %xmm1
22514 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22515 ; SSE2-NEXT:    pxor %xmm0, %xmm0
22516 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
22517 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22518 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22519 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483668,2147483668,2147483668,2147483668]
22520 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
22521 ; SSE2-NEXT:    retq
22523 ; SSE3-LABEL: ult_20_v2i64:
22524 ; SSE3:       # %bb.0:
22525 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22526 ; SSE3-NEXT:    psrlw $1, %xmm1
22527 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22528 ; SSE3-NEXT:    psubb %xmm1, %xmm0
22529 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22530 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
22531 ; SSE3-NEXT:    pand %xmm1, %xmm2
22532 ; SSE3-NEXT:    psrlw $2, %xmm0
22533 ; SSE3-NEXT:    pand %xmm1, %xmm0
22534 ; SSE3-NEXT:    paddb %xmm2, %xmm0
22535 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22536 ; SSE3-NEXT:    psrlw $4, %xmm1
22537 ; SSE3-NEXT:    paddb %xmm0, %xmm1
22538 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22539 ; SSE3-NEXT:    pxor %xmm0, %xmm0
22540 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
22541 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22542 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22543 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483668,2147483668,2147483668,2147483668]
22544 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
22545 ; SSE3-NEXT:    retq
22547 ; SSSE3-LABEL: ult_20_v2i64:
22548 ; SSSE3:       # %bb.0:
22549 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22550 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
22551 ; SSSE3-NEXT:    pand %xmm1, %xmm2
22552 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22553 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
22554 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
22555 ; SSSE3-NEXT:    psrlw $4, %xmm0
22556 ; SSSE3-NEXT:    pand %xmm1, %xmm0
22557 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
22558 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
22559 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
22560 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
22561 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22562 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22563 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483668,2147483668,2147483668,2147483668]
22564 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
22565 ; SSSE3-NEXT:    retq
22567 ; SSE41-LABEL: ult_20_v2i64:
22568 ; SSE41:       # %bb.0:
22569 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22570 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
22571 ; SSE41-NEXT:    pand %xmm1, %xmm2
22572 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22573 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
22574 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
22575 ; SSE41-NEXT:    psrlw $4, %xmm0
22576 ; SSE41-NEXT:    pand %xmm1, %xmm0
22577 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
22578 ; SSE41-NEXT:    paddb %xmm4, %xmm3
22579 ; SSE41-NEXT:    pxor %xmm0, %xmm0
22580 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
22581 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22582 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22583 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483668,2147483668,2147483668,2147483668]
22584 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
22585 ; SSE41-NEXT:    retq
22587 ; AVX1-LABEL: ult_20_v2i64:
22588 ; AVX1:       # %bb.0:
22589 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22590 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
22591 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22592 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22593 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
22594 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
22595 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22596 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22597 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22598 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22599 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [20,20]
22600 ; AVX1-NEXT:    # xmm1 = mem[0,0]
22601 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22602 ; AVX1-NEXT:    retq
22604 ; AVX2-LABEL: ult_20_v2i64:
22605 ; AVX2:       # %bb.0:
22606 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22607 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
22608 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22609 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22610 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
22611 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
22612 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22613 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22614 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22615 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22616 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [20,20]
22617 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22618 ; AVX2-NEXT:    retq
22620 ; AVX512VPOPCNTDQ-LABEL: ult_20_v2i64:
22621 ; AVX512VPOPCNTDQ:       # %bb.0:
22622 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22623 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
22624 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [20,20]
22625 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22626 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
22627 ; AVX512VPOPCNTDQ-NEXT:    retq
22629 ; AVX512VPOPCNTDQVL-LABEL: ult_20_v2i64:
22630 ; AVX512VPOPCNTDQVL:       # %bb.0:
22631 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
22632 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [20,20]
22633 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22634 ; AVX512VPOPCNTDQVL-NEXT:    retq
22636 ; BITALG_NOVLX-LABEL: ult_20_v2i64:
22637 ; BITALG_NOVLX:       # %bb.0:
22638 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22639 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
22640 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22641 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22642 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [20,20]
22643 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22644 ; BITALG_NOVLX-NEXT:    vzeroupper
22645 ; BITALG_NOVLX-NEXT:    retq
22647 ; BITALG-LABEL: ult_20_v2i64:
22648 ; BITALG:       # %bb.0:
22649 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
22650 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22651 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22652 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [20,20]
22653 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22654 ; BITALG-NEXT:    retq
22655   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22656   %3 = icmp ult <2 x i64> %2, <i64 20, i64 20>
22657   %4 = sext <2 x i1> %3 to <2 x i64>
22658   ret <2 x i64> %4
22661 define <2 x i64> @ugt_20_v2i64(<2 x i64> %0) {
22662 ; SSE2-LABEL: ugt_20_v2i64:
22663 ; SSE2:       # %bb.0:
22664 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22665 ; SSE2-NEXT:    psrlw $1, %xmm1
22666 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22667 ; SSE2-NEXT:    psubb %xmm1, %xmm0
22668 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22669 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
22670 ; SSE2-NEXT:    pand %xmm1, %xmm2
22671 ; SSE2-NEXT:    psrlw $2, %xmm0
22672 ; SSE2-NEXT:    pand %xmm1, %xmm0
22673 ; SSE2-NEXT:    paddb %xmm2, %xmm0
22674 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22675 ; SSE2-NEXT:    psrlw $4, %xmm1
22676 ; SSE2-NEXT:    paddb %xmm0, %xmm1
22677 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22678 ; SSE2-NEXT:    pxor %xmm0, %xmm0
22679 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
22680 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22681 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22682 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22683 ; SSE2-NEXT:    retq
22685 ; SSE3-LABEL: ugt_20_v2i64:
22686 ; SSE3:       # %bb.0:
22687 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22688 ; SSE3-NEXT:    psrlw $1, %xmm1
22689 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22690 ; SSE3-NEXT:    psubb %xmm1, %xmm0
22691 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22692 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
22693 ; SSE3-NEXT:    pand %xmm1, %xmm2
22694 ; SSE3-NEXT:    psrlw $2, %xmm0
22695 ; SSE3-NEXT:    pand %xmm1, %xmm0
22696 ; SSE3-NEXT:    paddb %xmm2, %xmm0
22697 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22698 ; SSE3-NEXT:    psrlw $4, %xmm1
22699 ; SSE3-NEXT:    paddb %xmm0, %xmm1
22700 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22701 ; SSE3-NEXT:    pxor %xmm0, %xmm0
22702 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
22703 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22704 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22705 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22706 ; SSE3-NEXT:    retq
22708 ; SSSE3-LABEL: ugt_20_v2i64:
22709 ; SSSE3:       # %bb.0:
22710 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22711 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
22712 ; SSSE3-NEXT:    pand %xmm1, %xmm2
22713 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22714 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
22715 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
22716 ; SSSE3-NEXT:    psrlw $4, %xmm0
22717 ; SSSE3-NEXT:    pand %xmm1, %xmm0
22718 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
22719 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
22720 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
22721 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
22722 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22723 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22724 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22725 ; SSSE3-NEXT:    retq
22727 ; SSE41-LABEL: ugt_20_v2i64:
22728 ; SSE41:       # %bb.0:
22729 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22730 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
22731 ; SSE41-NEXT:    pand %xmm1, %xmm2
22732 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22733 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
22734 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
22735 ; SSE41-NEXT:    psrlw $4, %xmm0
22736 ; SSE41-NEXT:    pand %xmm1, %xmm0
22737 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
22738 ; SSE41-NEXT:    paddb %xmm4, %xmm3
22739 ; SSE41-NEXT:    pxor %xmm0, %xmm0
22740 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
22741 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22742 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22743 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22744 ; SSE41-NEXT:    retq
22746 ; AVX1-LABEL: ugt_20_v2i64:
22747 ; AVX1:       # %bb.0:
22748 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22749 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
22750 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22751 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22752 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
22753 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
22754 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22755 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22756 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22757 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22758 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22759 ; AVX1-NEXT:    retq
22761 ; AVX2-LABEL: ugt_20_v2i64:
22762 ; AVX2:       # %bb.0:
22763 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22764 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
22765 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22766 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22767 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
22768 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
22769 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22770 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22771 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22772 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22773 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22774 ; AVX2-NEXT:    retq
22776 ; AVX512VPOPCNTDQ-LABEL: ugt_20_v2i64:
22777 ; AVX512VPOPCNTDQ:       # %bb.0:
22778 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22779 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
22780 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22781 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
22782 ; AVX512VPOPCNTDQ-NEXT:    retq
22784 ; AVX512VPOPCNTDQVL-LABEL: ugt_20_v2i64:
22785 ; AVX512VPOPCNTDQVL:       # %bb.0:
22786 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
22787 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [20,20]
22788 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
22789 ; AVX512VPOPCNTDQVL-NEXT:    retq
22791 ; BITALG_NOVLX-LABEL: ugt_20_v2i64:
22792 ; BITALG_NOVLX:       # %bb.0:
22793 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22794 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
22795 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22796 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22797 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
22798 ; BITALG_NOVLX-NEXT:    vzeroupper
22799 ; BITALG_NOVLX-NEXT:    retq
22801 ; BITALG-LABEL: ugt_20_v2i64:
22802 ; BITALG:       # %bb.0:
22803 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
22804 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22805 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22806 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [20,20]
22807 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
22808 ; BITALG-NEXT:    retq
22809   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22810   %3 = icmp ugt <2 x i64> %2, <i64 20, i64 20>
22811   %4 = sext <2 x i1> %3 to <2 x i64>
22812   ret <2 x i64> %4
22815 define <2 x i64> @ult_21_v2i64(<2 x i64> %0) {
22816 ; SSE2-LABEL: ult_21_v2i64:
22817 ; SSE2:       # %bb.0:
22818 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22819 ; SSE2-NEXT:    psrlw $1, %xmm1
22820 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22821 ; SSE2-NEXT:    psubb %xmm1, %xmm0
22822 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22823 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
22824 ; SSE2-NEXT:    pand %xmm1, %xmm2
22825 ; SSE2-NEXT:    psrlw $2, %xmm0
22826 ; SSE2-NEXT:    pand %xmm1, %xmm0
22827 ; SSE2-NEXT:    paddb %xmm2, %xmm0
22828 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22829 ; SSE2-NEXT:    psrlw $4, %xmm1
22830 ; SSE2-NEXT:    paddb %xmm0, %xmm1
22831 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22832 ; SSE2-NEXT:    pxor %xmm0, %xmm0
22833 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
22834 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22835 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22836 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483669,2147483669,2147483669,2147483669]
22837 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
22838 ; SSE2-NEXT:    retq
22840 ; SSE3-LABEL: ult_21_v2i64:
22841 ; SSE3:       # %bb.0:
22842 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22843 ; SSE3-NEXT:    psrlw $1, %xmm1
22844 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22845 ; SSE3-NEXT:    psubb %xmm1, %xmm0
22846 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22847 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
22848 ; SSE3-NEXT:    pand %xmm1, %xmm2
22849 ; SSE3-NEXT:    psrlw $2, %xmm0
22850 ; SSE3-NEXT:    pand %xmm1, %xmm0
22851 ; SSE3-NEXT:    paddb %xmm2, %xmm0
22852 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
22853 ; SSE3-NEXT:    psrlw $4, %xmm1
22854 ; SSE3-NEXT:    paddb %xmm0, %xmm1
22855 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22856 ; SSE3-NEXT:    pxor %xmm0, %xmm0
22857 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
22858 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22859 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22860 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483669,2147483669,2147483669,2147483669]
22861 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
22862 ; SSE3-NEXT:    retq
22864 ; SSSE3-LABEL: ult_21_v2i64:
22865 ; SSSE3:       # %bb.0:
22866 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22867 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
22868 ; SSSE3-NEXT:    pand %xmm1, %xmm2
22869 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22870 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
22871 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
22872 ; SSSE3-NEXT:    psrlw $4, %xmm0
22873 ; SSSE3-NEXT:    pand %xmm1, %xmm0
22874 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
22875 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
22876 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
22877 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
22878 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22879 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22880 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483669,2147483669,2147483669,2147483669]
22881 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
22882 ; SSSE3-NEXT:    retq
22884 ; SSE41-LABEL: ult_21_v2i64:
22885 ; SSE41:       # %bb.0:
22886 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22887 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
22888 ; SSE41-NEXT:    pand %xmm1, %xmm2
22889 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22890 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
22891 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
22892 ; SSE41-NEXT:    psrlw $4, %xmm0
22893 ; SSE41-NEXT:    pand %xmm1, %xmm0
22894 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
22895 ; SSE41-NEXT:    paddb %xmm4, %xmm3
22896 ; SSE41-NEXT:    pxor %xmm0, %xmm0
22897 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
22898 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
22899 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22900 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483669,2147483669,2147483669,2147483669]
22901 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
22902 ; SSE41-NEXT:    retq
22904 ; AVX1-LABEL: ult_21_v2i64:
22905 ; AVX1:       # %bb.0:
22906 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22907 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
22908 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22909 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22910 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
22911 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
22912 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22913 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22914 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22915 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22916 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [21,21]
22917 ; AVX1-NEXT:    # xmm1 = mem[0,0]
22918 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22919 ; AVX1-NEXT:    retq
22921 ; AVX2-LABEL: ult_21_v2i64:
22922 ; AVX2:       # %bb.0:
22923 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
22924 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
22925 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22926 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
22927 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
22928 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
22929 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
22930 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
22931 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22932 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22933 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [21,21]
22934 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22935 ; AVX2-NEXT:    retq
22937 ; AVX512VPOPCNTDQ-LABEL: ult_21_v2i64:
22938 ; AVX512VPOPCNTDQ:       # %bb.0:
22939 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22940 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
22941 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [21,21]
22942 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22943 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
22944 ; AVX512VPOPCNTDQ-NEXT:    retq
22946 ; AVX512VPOPCNTDQVL-LABEL: ult_21_v2i64:
22947 ; AVX512VPOPCNTDQVL:       # %bb.0:
22948 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
22949 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [21,21]
22950 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22951 ; AVX512VPOPCNTDQVL-NEXT:    retq
22953 ; BITALG_NOVLX-LABEL: ult_21_v2i64:
22954 ; BITALG_NOVLX:       # %bb.0:
22955 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
22956 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
22957 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22958 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22959 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [21,21]
22960 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22961 ; BITALG_NOVLX-NEXT:    vzeroupper
22962 ; BITALG_NOVLX-NEXT:    retq
22964 ; BITALG-LABEL: ult_21_v2i64:
22965 ; BITALG:       # %bb.0:
22966 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
22967 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
22968 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
22969 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [21,21]
22970 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
22971 ; BITALG-NEXT:    retq
22972   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22973   %3 = icmp ult <2 x i64> %2, <i64 21, i64 21>
22974   %4 = sext <2 x i1> %3 to <2 x i64>
22975   ret <2 x i64> %4
22978 define <2 x i64> @ugt_21_v2i64(<2 x i64> %0) {
22979 ; SSE2-LABEL: ugt_21_v2i64:
22980 ; SSE2:       # %bb.0:
22981 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22982 ; SSE2-NEXT:    psrlw $1, %xmm1
22983 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22984 ; SSE2-NEXT:    psubb %xmm1, %xmm0
22985 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
22986 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
22987 ; SSE2-NEXT:    pand %xmm1, %xmm2
22988 ; SSE2-NEXT:    psrlw $2, %xmm0
22989 ; SSE2-NEXT:    pand %xmm1, %xmm0
22990 ; SSE2-NEXT:    paddb %xmm2, %xmm0
22991 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
22992 ; SSE2-NEXT:    psrlw $4, %xmm1
22993 ; SSE2-NEXT:    paddb %xmm0, %xmm1
22994 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
22995 ; SSE2-NEXT:    pxor %xmm0, %xmm0
22996 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
22997 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
22998 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
22999 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23000 ; SSE2-NEXT:    retq
23002 ; SSE3-LABEL: ugt_21_v2i64:
23003 ; SSE3:       # %bb.0:
23004 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23005 ; SSE3-NEXT:    psrlw $1, %xmm1
23006 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23007 ; SSE3-NEXT:    psubb %xmm1, %xmm0
23008 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23009 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
23010 ; SSE3-NEXT:    pand %xmm1, %xmm2
23011 ; SSE3-NEXT:    psrlw $2, %xmm0
23012 ; SSE3-NEXT:    pand %xmm1, %xmm0
23013 ; SSE3-NEXT:    paddb %xmm2, %xmm0
23014 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23015 ; SSE3-NEXT:    psrlw $4, %xmm1
23016 ; SSE3-NEXT:    paddb %xmm0, %xmm1
23017 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23018 ; SSE3-NEXT:    pxor %xmm0, %xmm0
23019 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
23020 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23021 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23022 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23023 ; SSE3-NEXT:    retq
23025 ; SSSE3-LABEL: ugt_21_v2i64:
23026 ; SSSE3:       # %bb.0:
23027 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23028 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
23029 ; SSSE3-NEXT:    pand %xmm1, %xmm2
23030 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23031 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
23032 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
23033 ; SSSE3-NEXT:    psrlw $4, %xmm0
23034 ; SSSE3-NEXT:    pand %xmm1, %xmm0
23035 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
23036 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
23037 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
23038 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
23039 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23040 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23041 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23042 ; SSSE3-NEXT:    retq
23044 ; SSE41-LABEL: ugt_21_v2i64:
23045 ; SSE41:       # %bb.0:
23046 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23047 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
23048 ; SSE41-NEXT:    pand %xmm1, %xmm2
23049 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23050 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
23051 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
23052 ; SSE41-NEXT:    psrlw $4, %xmm0
23053 ; SSE41-NEXT:    pand %xmm1, %xmm0
23054 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
23055 ; SSE41-NEXT:    paddb %xmm4, %xmm3
23056 ; SSE41-NEXT:    pxor %xmm0, %xmm0
23057 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
23058 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23059 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23060 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23061 ; SSE41-NEXT:    retq
23063 ; AVX1-LABEL: ugt_21_v2i64:
23064 ; AVX1:       # %bb.0:
23065 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23066 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
23067 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23068 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23069 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
23070 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
23071 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23072 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23073 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23074 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23075 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23076 ; AVX1-NEXT:    retq
23078 ; AVX2-LABEL: ugt_21_v2i64:
23079 ; AVX2:       # %bb.0:
23080 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23081 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
23082 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23083 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23084 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
23085 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
23086 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23087 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23088 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23089 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23090 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23091 ; AVX2-NEXT:    retq
23093 ; AVX512VPOPCNTDQ-LABEL: ugt_21_v2i64:
23094 ; AVX512VPOPCNTDQ:       # %bb.0:
23095 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23096 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
23097 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23098 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
23099 ; AVX512VPOPCNTDQ-NEXT:    retq
23101 ; AVX512VPOPCNTDQVL-LABEL: ugt_21_v2i64:
23102 ; AVX512VPOPCNTDQVL:       # %bb.0:
23103 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
23104 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [21,21]
23105 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
23106 ; AVX512VPOPCNTDQVL-NEXT:    retq
23108 ; BITALG_NOVLX-LABEL: ugt_21_v2i64:
23109 ; BITALG_NOVLX:       # %bb.0:
23110 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23111 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
23112 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23113 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23114 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23115 ; BITALG_NOVLX-NEXT:    vzeroupper
23116 ; BITALG_NOVLX-NEXT:    retq
23118 ; BITALG-LABEL: ugt_21_v2i64:
23119 ; BITALG:       # %bb.0:
23120 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
23121 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23122 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23123 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [21,21]
23124 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
23125 ; BITALG-NEXT:    retq
23126   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23127   %3 = icmp ugt <2 x i64> %2, <i64 21, i64 21>
23128   %4 = sext <2 x i1> %3 to <2 x i64>
23129   ret <2 x i64> %4
23132 define <2 x i64> @ult_22_v2i64(<2 x i64> %0) {
23133 ; SSE2-LABEL: ult_22_v2i64:
23134 ; SSE2:       # %bb.0:
23135 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23136 ; SSE2-NEXT:    psrlw $1, %xmm1
23137 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23138 ; SSE2-NEXT:    psubb %xmm1, %xmm0
23139 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23140 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
23141 ; SSE2-NEXT:    pand %xmm1, %xmm2
23142 ; SSE2-NEXT:    psrlw $2, %xmm0
23143 ; SSE2-NEXT:    pand %xmm1, %xmm0
23144 ; SSE2-NEXT:    paddb %xmm2, %xmm0
23145 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23146 ; SSE2-NEXT:    psrlw $4, %xmm1
23147 ; SSE2-NEXT:    paddb %xmm0, %xmm1
23148 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23149 ; SSE2-NEXT:    pxor %xmm0, %xmm0
23150 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
23151 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23152 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23153 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483670,2147483670,2147483670,2147483670]
23154 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
23155 ; SSE2-NEXT:    retq
23157 ; SSE3-LABEL: ult_22_v2i64:
23158 ; SSE3:       # %bb.0:
23159 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23160 ; SSE3-NEXT:    psrlw $1, %xmm1
23161 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23162 ; SSE3-NEXT:    psubb %xmm1, %xmm0
23163 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23164 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
23165 ; SSE3-NEXT:    pand %xmm1, %xmm2
23166 ; SSE3-NEXT:    psrlw $2, %xmm0
23167 ; SSE3-NEXT:    pand %xmm1, %xmm0
23168 ; SSE3-NEXT:    paddb %xmm2, %xmm0
23169 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23170 ; SSE3-NEXT:    psrlw $4, %xmm1
23171 ; SSE3-NEXT:    paddb %xmm0, %xmm1
23172 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23173 ; SSE3-NEXT:    pxor %xmm0, %xmm0
23174 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
23175 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23176 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23177 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483670,2147483670,2147483670,2147483670]
23178 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
23179 ; SSE3-NEXT:    retq
23181 ; SSSE3-LABEL: ult_22_v2i64:
23182 ; SSSE3:       # %bb.0:
23183 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23184 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
23185 ; SSSE3-NEXT:    pand %xmm1, %xmm2
23186 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23187 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
23188 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
23189 ; SSSE3-NEXT:    psrlw $4, %xmm0
23190 ; SSSE3-NEXT:    pand %xmm1, %xmm0
23191 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
23192 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
23193 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
23194 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
23195 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23196 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23197 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483670,2147483670,2147483670,2147483670]
23198 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
23199 ; SSSE3-NEXT:    retq
23201 ; SSE41-LABEL: ult_22_v2i64:
23202 ; SSE41:       # %bb.0:
23203 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23204 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
23205 ; SSE41-NEXT:    pand %xmm1, %xmm2
23206 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23207 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
23208 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
23209 ; SSE41-NEXT:    psrlw $4, %xmm0
23210 ; SSE41-NEXT:    pand %xmm1, %xmm0
23211 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
23212 ; SSE41-NEXT:    paddb %xmm4, %xmm3
23213 ; SSE41-NEXT:    pxor %xmm0, %xmm0
23214 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
23215 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23216 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23217 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483670,2147483670,2147483670,2147483670]
23218 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
23219 ; SSE41-NEXT:    retq
23221 ; AVX1-LABEL: ult_22_v2i64:
23222 ; AVX1:       # %bb.0:
23223 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23224 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
23225 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23226 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23227 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
23228 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
23229 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23230 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23231 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23232 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23233 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [22,22]
23234 ; AVX1-NEXT:    # xmm1 = mem[0,0]
23235 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23236 ; AVX1-NEXT:    retq
23238 ; AVX2-LABEL: ult_22_v2i64:
23239 ; AVX2:       # %bb.0:
23240 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23241 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
23242 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23243 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23244 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
23245 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
23246 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23247 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23248 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23249 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23250 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [22,22]
23251 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23252 ; AVX2-NEXT:    retq
23254 ; AVX512VPOPCNTDQ-LABEL: ult_22_v2i64:
23255 ; AVX512VPOPCNTDQ:       # %bb.0:
23256 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23257 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
23258 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [22,22]
23259 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23260 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
23261 ; AVX512VPOPCNTDQ-NEXT:    retq
23263 ; AVX512VPOPCNTDQVL-LABEL: ult_22_v2i64:
23264 ; AVX512VPOPCNTDQVL:       # %bb.0:
23265 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
23266 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [22,22]
23267 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23268 ; AVX512VPOPCNTDQVL-NEXT:    retq
23270 ; BITALG_NOVLX-LABEL: ult_22_v2i64:
23271 ; BITALG_NOVLX:       # %bb.0:
23272 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23273 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
23274 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23275 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23276 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [22,22]
23277 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23278 ; BITALG_NOVLX-NEXT:    vzeroupper
23279 ; BITALG_NOVLX-NEXT:    retq
23281 ; BITALG-LABEL: ult_22_v2i64:
23282 ; BITALG:       # %bb.0:
23283 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
23284 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23285 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23286 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [22,22]
23287 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23288 ; BITALG-NEXT:    retq
23289   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23290   %3 = icmp ult <2 x i64> %2, <i64 22, i64 22>
23291   %4 = sext <2 x i1> %3 to <2 x i64>
23292   ret <2 x i64> %4
23295 define <2 x i64> @ugt_22_v2i64(<2 x i64> %0) {
23296 ; SSE2-LABEL: ugt_22_v2i64:
23297 ; SSE2:       # %bb.0:
23298 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23299 ; SSE2-NEXT:    psrlw $1, %xmm1
23300 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23301 ; SSE2-NEXT:    psubb %xmm1, %xmm0
23302 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23303 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
23304 ; SSE2-NEXT:    pand %xmm1, %xmm2
23305 ; SSE2-NEXT:    psrlw $2, %xmm0
23306 ; SSE2-NEXT:    pand %xmm1, %xmm0
23307 ; SSE2-NEXT:    paddb %xmm2, %xmm0
23308 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23309 ; SSE2-NEXT:    psrlw $4, %xmm1
23310 ; SSE2-NEXT:    paddb %xmm0, %xmm1
23311 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23312 ; SSE2-NEXT:    pxor %xmm0, %xmm0
23313 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
23314 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23315 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23316 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23317 ; SSE2-NEXT:    retq
23319 ; SSE3-LABEL: ugt_22_v2i64:
23320 ; SSE3:       # %bb.0:
23321 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23322 ; SSE3-NEXT:    psrlw $1, %xmm1
23323 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23324 ; SSE3-NEXT:    psubb %xmm1, %xmm0
23325 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23326 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
23327 ; SSE3-NEXT:    pand %xmm1, %xmm2
23328 ; SSE3-NEXT:    psrlw $2, %xmm0
23329 ; SSE3-NEXT:    pand %xmm1, %xmm0
23330 ; SSE3-NEXT:    paddb %xmm2, %xmm0
23331 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23332 ; SSE3-NEXT:    psrlw $4, %xmm1
23333 ; SSE3-NEXT:    paddb %xmm0, %xmm1
23334 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23335 ; SSE3-NEXT:    pxor %xmm0, %xmm0
23336 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
23337 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23338 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23339 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23340 ; SSE3-NEXT:    retq
23342 ; SSSE3-LABEL: ugt_22_v2i64:
23343 ; SSSE3:       # %bb.0:
23344 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23345 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
23346 ; SSSE3-NEXT:    pand %xmm1, %xmm2
23347 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23348 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
23349 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
23350 ; SSSE3-NEXT:    psrlw $4, %xmm0
23351 ; SSSE3-NEXT:    pand %xmm1, %xmm0
23352 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
23353 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
23354 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
23355 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
23356 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23357 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23358 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23359 ; SSSE3-NEXT:    retq
23361 ; SSE41-LABEL: ugt_22_v2i64:
23362 ; SSE41:       # %bb.0:
23363 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23364 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
23365 ; SSE41-NEXT:    pand %xmm1, %xmm2
23366 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23367 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
23368 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
23369 ; SSE41-NEXT:    psrlw $4, %xmm0
23370 ; SSE41-NEXT:    pand %xmm1, %xmm0
23371 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
23372 ; SSE41-NEXT:    paddb %xmm4, %xmm3
23373 ; SSE41-NEXT:    pxor %xmm0, %xmm0
23374 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
23375 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23376 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23377 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23378 ; SSE41-NEXT:    retq
23380 ; AVX1-LABEL: ugt_22_v2i64:
23381 ; AVX1:       # %bb.0:
23382 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23383 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
23384 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23385 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23386 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
23387 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
23388 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23389 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23390 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23391 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23392 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23393 ; AVX1-NEXT:    retq
23395 ; AVX2-LABEL: ugt_22_v2i64:
23396 ; AVX2:       # %bb.0:
23397 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23398 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
23399 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23400 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23401 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
23402 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
23403 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23404 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23405 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23406 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23407 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23408 ; AVX2-NEXT:    retq
23410 ; AVX512VPOPCNTDQ-LABEL: ugt_22_v2i64:
23411 ; AVX512VPOPCNTDQ:       # %bb.0:
23412 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23413 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
23414 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23415 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
23416 ; AVX512VPOPCNTDQ-NEXT:    retq
23418 ; AVX512VPOPCNTDQVL-LABEL: ugt_22_v2i64:
23419 ; AVX512VPOPCNTDQVL:       # %bb.0:
23420 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
23421 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [22,22]
23422 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
23423 ; AVX512VPOPCNTDQVL-NEXT:    retq
23425 ; BITALG_NOVLX-LABEL: ugt_22_v2i64:
23426 ; BITALG_NOVLX:       # %bb.0:
23427 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23428 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
23429 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23430 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23431 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23432 ; BITALG_NOVLX-NEXT:    vzeroupper
23433 ; BITALG_NOVLX-NEXT:    retq
23435 ; BITALG-LABEL: ugt_22_v2i64:
23436 ; BITALG:       # %bb.0:
23437 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
23438 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23439 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23440 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [22,22]
23441 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
23442 ; BITALG-NEXT:    retq
23443   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23444   %3 = icmp ugt <2 x i64> %2, <i64 22, i64 22>
23445   %4 = sext <2 x i1> %3 to <2 x i64>
23446   ret <2 x i64> %4
23449 define <2 x i64> @ult_23_v2i64(<2 x i64> %0) {
23450 ; SSE2-LABEL: ult_23_v2i64:
23451 ; SSE2:       # %bb.0:
23452 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23453 ; SSE2-NEXT:    psrlw $1, %xmm1
23454 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23455 ; SSE2-NEXT:    psubb %xmm1, %xmm0
23456 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23457 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
23458 ; SSE2-NEXT:    pand %xmm1, %xmm2
23459 ; SSE2-NEXT:    psrlw $2, %xmm0
23460 ; SSE2-NEXT:    pand %xmm1, %xmm0
23461 ; SSE2-NEXT:    paddb %xmm2, %xmm0
23462 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23463 ; SSE2-NEXT:    psrlw $4, %xmm1
23464 ; SSE2-NEXT:    paddb %xmm0, %xmm1
23465 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23466 ; SSE2-NEXT:    pxor %xmm0, %xmm0
23467 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
23468 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23469 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23470 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483671,2147483671,2147483671,2147483671]
23471 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
23472 ; SSE2-NEXT:    retq
23474 ; SSE3-LABEL: ult_23_v2i64:
23475 ; SSE3:       # %bb.0:
23476 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23477 ; SSE3-NEXT:    psrlw $1, %xmm1
23478 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23479 ; SSE3-NEXT:    psubb %xmm1, %xmm0
23480 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23481 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
23482 ; SSE3-NEXT:    pand %xmm1, %xmm2
23483 ; SSE3-NEXT:    psrlw $2, %xmm0
23484 ; SSE3-NEXT:    pand %xmm1, %xmm0
23485 ; SSE3-NEXT:    paddb %xmm2, %xmm0
23486 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23487 ; SSE3-NEXT:    psrlw $4, %xmm1
23488 ; SSE3-NEXT:    paddb %xmm0, %xmm1
23489 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23490 ; SSE3-NEXT:    pxor %xmm0, %xmm0
23491 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
23492 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23493 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23494 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483671,2147483671,2147483671,2147483671]
23495 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
23496 ; SSE3-NEXT:    retq
23498 ; SSSE3-LABEL: ult_23_v2i64:
23499 ; SSSE3:       # %bb.0:
23500 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23501 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
23502 ; SSSE3-NEXT:    pand %xmm1, %xmm2
23503 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23504 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
23505 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
23506 ; SSSE3-NEXT:    psrlw $4, %xmm0
23507 ; SSSE3-NEXT:    pand %xmm1, %xmm0
23508 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
23509 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
23510 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
23511 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
23512 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23513 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23514 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483671,2147483671,2147483671,2147483671]
23515 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
23516 ; SSSE3-NEXT:    retq
23518 ; SSE41-LABEL: ult_23_v2i64:
23519 ; SSE41:       # %bb.0:
23520 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23521 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
23522 ; SSE41-NEXT:    pand %xmm1, %xmm2
23523 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23524 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
23525 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
23526 ; SSE41-NEXT:    psrlw $4, %xmm0
23527 ; SSE41-NEXT:    pand %xmm1, %xmm0
23528 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
23529 ; SSE41-NEXT:    paddb %xmm4, %xmm3
23530 ; SSE41-NEXT:    pxor %xmm0, %xmm0
23531 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
23532 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23533 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23534 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483671,2147483671,2147483671,2147483671]
23535 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
23536 ; SSE41-NEXT:    retq
23538 ; AVX1-LABEL: ult_23_v2i64:
23539 ; AVX1:       # %bb.0:
23540 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23541 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
23542 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23543 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23544 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
23545 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
23546 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23547 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23548 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23549 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23550 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [23,23]
23551 ; AVX1-NEXT:    # xmm1 = mem[0,0]
23552 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23553 ; AVX1-NEXT:    retq
23555 ; AVX2-LABEL: ult_23_v2i64:
23556 ; AVX2:       # %bb.0:
23557 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23558 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
23559 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23560 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23561 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
23562 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
23563 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23564 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23565 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23566 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23567 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [23,23]
23568 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23569 ; AVX2-NEXT:    retq
23571 ; AVX512VPOPCNTDQ-LABEL: ult_23_v2i64:
23572 ; AVX512VPOPCNTDQ:       # %bb.0:
23573 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23574 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
23575 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [23,23]
23576 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23577 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
23578 ; AVX512VPOPCNTDQ-NEXT:    retq
23580 ; AVX512VPOPCNTDQVL-LABEL: ult_23_v2i64:
23581 ; AVX512VPOPCNTDQVL:       # %bb.0:
23582 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
23583 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [23,23]
23584 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23585 ; AVX512VPOPCNTDQVL-NEXT:    retq
23587 ; BITALG_NOVLX-LABEL: ult_23_v2i64:
23588 ; BITALG_NOVLX:       # %bb.0:
23589 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23590 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
23591 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23592 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23593 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [23,23]
23594 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23595 ; BITALG_NOVLX-NEXT:    vzeroupper
23596 ; BITALG_NOVLX-NEXT:    retq
23598 ; BITALG-LABEL: ult_23_v2i64:
23599 ; BITALG:       # %bb.0:
23600 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
23601 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23602 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23603 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [23,23]
23604 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23605 ; BITALG-NEXT:    retq
23606   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23607   %3 = icmp ult <2 x i64> %2, <i64 23, i64 23>
23608   %4 = sext <2 x i1> %3 to <2 x i64>
23609   ret <2 x i64> %4
23612 define <2 x i64> @ugt_23_v2i64(<2 x i64> %0) {
23613 ; SSE2-LABEL: ugt_23_v2i64:
23614 ; SSE2:       # %bb.0:
23615 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23616 ; SSE2-NEXT:    psrlw $1, %xmm1
23617 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23618 ; SSE2-NEXT:    psubb %xmm1, %xmm0
23619 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23620 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
23621 ; SSE2-NEXT:    pand %xmm1, %xmm2
23622 ; SSE2-NEXT:    psrlw $2, %xmm0
23623 ; SSE2-NEXT:    pand %xmm1, %xmm0
23624 ; SSE2-NEXT:    paddb %xmm2, %xmm0
23625 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23626 ; SSE2-NEXT:    psrlw $4, %xmm1
23627 ; SSE2-NEXT:    paddb %xmm0, %xmm1
23628 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23629 ; SSE2-NEXT:    pxor %xmm0, %xmm0
23630 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
23631 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23632 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23633 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23634 ; SSE2-NEXT:    retq
23636 ; SSE3-LABEL: ugt_23_v2i64:
23637 ; SSE3:       # %bb.0:
23638 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23639 ; SSE3-NEXT:    psrlw $1, %xmm1
23640 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23641 ; SSE3-NEXT:    psubb %xmm1, %xmm0
23642 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23643 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
23644 ; SSE3-NEXT:    pand %xmm1, %xmm2
23645 ; SSE3-NEXT:    psrlw $2, %xmm0
23646 ; SSE3-NEXT:    pand %xmm1, %xmm0
23647 ; SSE3-NEXT:    paddb %xmm2, %xmm0
23648 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23649 ; SSE3-NEXT:    psrlw $4, %xmm1
23650 ; SSE3-NEXT:    paddb %xmm0, %xmm1
23651 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23652 ; SSE3-NEXT:    pxor %xmm0, %xmm0
23653 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
23654 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23655 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23656 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23657 ; SSE3-NEXT:    retq
23659 ; SSSE3-LABEL: ugt_23_v2i64:
23660 ; SSSE3:       # %bb.0:
23661 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23662 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
23663 ; SSSE3-NEXT:    pand %xmm1, %xmm2
23664 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23665 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
23666 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
23667 ; SSSE3-NEXT:    psrlw $4, %xmm0
23668 ; SSSE3-NEXT:    pand %xmm1, %xmm0
23669 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
23670 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
23671 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
23672 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
23673 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23674 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23675 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23676 ; SSSE3-NEXT:    retq
23678 ; SSE41-LABEL: ugt_23_v2i64:
23679 ; SSE41:       # %bb.0:
23680 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23681 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
23682 ; SSE41-NEXT:    pand %xmm1, %xmm2
23683 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23684 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
23685 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
23686 ; SSE41-NEXT:    psrlw $4, %xmm0
23687 ; SSE41-NEXT:    pand %xmm1, %xmm0
23688 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
23689 ; SSE41-NEXT:    paddb %xmm4, %xmm3
23690 ; SSE41-NEXT:    pxor %xmm0, %xmm0
23691 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
23692 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23693 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23694 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23695 ; SSE41-NEXT:    retq
23697 ; AVX1-LABEL: ugt_23_v2i64:
23698 ; AVX1:       # %bb.0:
23699 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23700 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
23701 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23702 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23703 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
23704 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
23705 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23706 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23707 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23708 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23709 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23710 ; AVX1-NEXT:    retq
23712 ; AVX2-LABEL: ugt_23_v2i64:
23713 ; AVX2:       # %bb.0:
23714 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23715 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
23716 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23717 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23718 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
23719 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
23720 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23721 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23722 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23723 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23724 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23725 ; AVX2-NEXT:    retq
23727 ; AVX512VPOPCNTDQ-LABEL: ugt_23_v2i64:
23728 ; AVX512VPOPCNTDQ:       # %bb.0:
23729 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23730 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
23731 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23732 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
23733 ; AVX512VPOPCNTDQ-NEXT:    retq
23735 ; AVX512VPOPCNTDQVL-LABEL: ugt_23_v2i64:
23736 ; AVX512VPOPCNTDQVL:       # %bb.0:
23737 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
23738 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [23,23]
23739 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
23740 ; AVX512VPOPCNTDQVL-NEXT:    retq
23742 ; BITALG_NOVLX-LABEL: ugt_23_v2i64:
23743 ; BITALG_NOVLX:       # %bb.0:
23744 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23745 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
23746 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23747 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23748 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
23749 ; BITALG_NOVLX-NEXT:    vzeroupper
23750 ; BITALG_NOVLX-NEXT:    retq
23752 ; BITALG-LABEL: ugt_23_v2i64:
23753 ; BITALG:       # %bb.0:
23754 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
23755 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23756 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23757 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [23,23]
23758 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
23759 ; BITALG-NEXT:    retq
23760   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23761   %3 = icmp ugt <2 x i64> %2, <i64 23, i64 23>
23762   %4 = sext <2 x i1> %3 to <2 x i64>
23763   ret <2 x i64> %4
23766 define <2 x i64> @ult_24_v2i64(<2 x i64> %0) {
23767 ; SSE2-LABEL: ult_24_v2i64:
23768 ; SSE2:       # %bb.0:
23769 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23770 ; SSE2-NEXT:    psrlw $1, %xmm1
23771 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23772 ; SSE2-NEXT:    psubb %xmm1, %xmm0
23773 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23774 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
23775 ; SSE2-NEXT:    pand %xmm1, %xmm2
23776 ; SSE2-NEXT:    psrlw $2, %xmm0
23777 ; SSE2-NEXT:    pand %xmm1, %xmm0
23778 ; SSE2-NEXT:    paddb %xmm2, %xmm0
23779 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23780 ; SSE2-NEXT:    psrlw $4, %xmm1
23781 ; SSE2-NEXT:    paddb %xmm0, %xmm1
23782 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23783 ; SSE2-NEXT:    pxor %xmm0, %xmm0
23784 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
23785 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23786 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23787 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483672,2147483672,2147483672,2147483672]
23788 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
23789 ; SSE2-NEXT:    retq
23791 ; SSE3-LABEL: ult_24_v2i64:
23792 ; SSE3:       # %bb.0:
23793 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23794 ; SSE3-NEXT:    psrlw $1, %xmm1
23795 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23796 ; SSE3-NEXT:    psubb %xmm1, %xmm0
23797 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23798 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
23799 ; SSE3-NEXT:    pand %xmm1, %xmm2
23800 ; SSE3-NEXT:    psrlw $2, %xmm0
23801 ; SSE3-NEXT:    pand %xmm1, %xmm0
23802 ; SSE3-NEXT:    paddb %xmm2, %xmm0
23803 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23804 ; SSE3-NEXT:    psrlw $4, %xmm1
23805 ; SSE3-NEXT:    paddb %xmm0, %xmm1
23806 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23807 ; SSE3-NEXT:    pxor %xmm0, %xmm0
23808 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
23809 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23810 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23811 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483672,2147483672,2147483672,2147483672]
23812 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
23813 ; SSE3-NEXT:    retq
23815 ; SSSE3-LABEL: ult_24_v2i64:
23816 ; SSSE3:       # %bb.0:
23817 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23818 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
23819 ; SSSE3-NEXT:    pand %xmm1, %xmm2
23820 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23821 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
23822 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
23823 ; SSSE3-NEXT:    psrlw $4, %xmm0
23824 ; SSSE3-NEXT:    pand %xmm1, %xmm0
23825 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
23826 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
23827 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
23828 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
23829 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23830 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23831 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483672,2147483672,2147483672,2147483672]
23832 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
23833 ; SSSE3-NEXT:    retq
23835 ; SSE41-LABEL: ult_24_v2i64:
23836 ; SSE41:       # %bb.0:
23837 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23838 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
23839 ; SSE41-NEXT:    pand %xmm1, %xmm2
23840 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23841 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
23842 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
23843 ; SSE41-NEXT:    psrlw $4, %xmm0
23844 ; SSE41-NEXT:    pand %xmm1, %xmm0
23845 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
23846 ; SSE41-NEXT:    paddb %xmm4, %xmm3
23847 ; SSE41-NEXT:    pxor %xmm0, %xmm0
23848 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
23849 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
23850 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23851 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483672,2147483672,2147483672,2147483672]
23852 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
23853 ; SSE41-NEXT:    retq
23855 ; AVX1-LABEL: ult_24_v2i64:
23856 ; AVX1:       # %bb.0:
23857 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23858 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
23859 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23860 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23861 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
23862 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
23863 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23864 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23865 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23866 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23867 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [24,24]
23868 ; AVX1-NEXT:    # xmm1 = mem[0,0]
23869 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23870 ; AVX1-NEXT:    retq
23872 ; AVX2-LABEL: ult_24_v2i64:
23873 ; AVX2:       # %bb.0:
23874 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23875 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
23876 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23877 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
23878 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
23879 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
23880 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
23881 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
23882 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23883 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23884 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [24,24]
23885 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23886 ; AVX2-NEXT:    retq
23888 ; AVX512VPOPCNTDQ-LABEL: ult_24_v2i64:
23889 ; AVX512VPOPCNTDQ:       # %bb.0:
23890 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23891 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
23892 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [24,24]
23893 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23894 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
23895 ; AVX512VPOPCNTDQ-NEXT:    retq
23897 ; AVX512VPOPCNTDQVL-LABEL: ult_24_v2i64:
23898 ; AVX512VPOPCNTDQVL:       # %bb.0:
23899 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
23900 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [24,24]
23901 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23902 ; AVX512VPOPCNTDQVL-NEXT:    retq
23904 ; BITALG_NOVLX-LABEL: ult_24_v2i64:
23905 ; BITALG_NOVLX:       # %bb.0:
23906 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
23907 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
23908 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23909 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23910 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [24,24]
23911 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23912 ; BITALG_NOVLX-NEXT:    vzeroupper
23913 ; BITALG_NOVLX-NEXT:    retq
23915 ; BITALG-LABEL: ult_24_v2i64:
23916 ; BITALG:       # %bb.0:
23917 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
23918 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
23919 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
23920 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [24,24]
23921 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
23922 ; BITALG-NEXT:    retq
23923   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23924   %3 = icmp ult <2 x i64> %2, <i64 24, i64 24>
23925   %4 = sext <2 x i1> %3 to <2 x i64>
23926   ret <2 x i64> %4
23929 define <2 x i64> @ugt_24_v2i64(<2 x i64> %0) {
23930 ; SSE2-LABEL: ugt_24_v2i64:
23931 ; SSE2:       # %bb.0:
23932 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23933 ; SSE2-NEXT:    psrlw $1, %xmm1
23934 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23935 ; SSE2-NEXT:    psubb %xmm1, %xmm0
23936 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23937 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
23938 ; SSE2-NEXT:    pand %xmm1, %xmm2
23939 ; SSE2-NEXT:    psrlw $2, %xmm0
23940 ; SSE2-NEXT:    pand %xmm1, %xmm0
23941 ; SSE2-NEXT:    paddb %xmm2, %xmm0
23942 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
23943 ; SSE2-NEXT:    psrlw $4, %xmm1
23944 ; SSE2-NEXT:    paddb %xmm0, %xmm1
23945 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23946 ; SSE2-NEXT:    pxor %xmm0, %xmm0
23947 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
23948 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23949 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23950 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23951 ; SSE2-NEXT:    retq
23953 ; SSE3-LABEL: ugt_24_v2i64:
23954 ; SSE3:       # %bb.0:
23955 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23956 ; SSE3-NEXT:    psrlw $1, %xmm1
23957 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23958 ; SSE3-NEXT:    psubb %xmm1, %xmm0
23959 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
23960 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
23961 ; SSE3-NEXT:    pand %xmm1, %xmm2
23962 ; SSE3-NEXT:    psrlw $2, %xmm0
23963 ; SSE3-NEXT:    pand %xmm1, %xmm0
23964 ; SSE3-NEXT:    paddb %xmm2, %xmm0
23965 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
23966 ; SSE3-NEXT:    psrlw $4, %xmm1
23967 ; SSE3-NEXT:    paddb %xmm0, %xmm1
23968 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
23969 ; SSE3-NEXT:    pxor %xmm0, %xmm0
23970 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
23971 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23972 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23973 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23974 ; SSE3-NEXT:    retq
23976 ; SSSE3-LABEL: ugt_24_v2i64:
23977 ; SSSE3:       # %bb.0:
23978 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23979 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
23980 ; SSSE3-NEXT:    pand %xmm1, %xmm2
23981 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
23982 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
23983 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
23984 ; SSSE3-NEXT:    psrlw $4, %xmm0
23985 ; SSSE3-NEXT:    pand %xmm1, %xmm0
23986 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
23987 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
23988 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
23989 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
23990 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
23991 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23992 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
23993 ; SSSE3-NEXT:    retq
23995 ; SSE41-LABEL: ugt_24_v2i64:
23996 ; SSE41:       # %bb.0:
23997 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
23998 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
23999 ; SSE41-NEXT:    pand %xmm1, %xmm2
24000 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24001 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
24002 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
24003 ; SSE41-NEXT:    psrlw $4, %xmm0
24004 ; SSE41-NEXT:    pand %xmm1, %xmm0
24005 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
24006 ; SSE41-NEXT:    paddb %xmm4, %xmm3
24007 ; SSE41-NEXT:    pxor %xmm0, %xmm0
24008 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
24009 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24010 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24011 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24012 ; SSE41-NEXT:    retq
24014 ; AVX1-LABEL: ugt_24_v2i64:
24015 ; AVX1:       # %bb.0:
24016 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24017 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
24018 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24019 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24020 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
24021 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
24022 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24023 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24024 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24025 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24026 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24027 ; AVX1-NEXT:    retq
24029 ; AVX2-LABEL: ugt_24_v2i64:
24030 ; AVX2:       # %bb.0:
24031 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24032 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
24033 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24034 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24035 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
24036 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
24037 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24038 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24039 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24040 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24041 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24042 ; AVX2-NEXT:    retq
24044 ; AVX512VPOPCNTDQ-LABEL: ugt_24_v2i64:
24045 ; AVX512VPOPCNTDQ:       # %bb.0:
24046 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24047 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
24048 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24049 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
24050 ; AVX512VPOPCNTDQ-NEXT:    retq
24052 ; AVX512VPOPCNTDQVL-LABEL: ugt_24_v2i64:
24053 ; AVX512VPOPCNTDQVL:       # %bb.0:
24054 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
24055 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [24,24]
24056 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
24057 ; AVX512VPOPCNTDQVL-NEXT:    retq
24059 ; BITALG_NOVLX-LABEL: ugt_24_v2i64:
24060 ; BITALG_NOVLX:       # %bb.0:
24061 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24062 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
24063 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24064 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24065 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24066 ; BITALG_NOVLX-NEXT:    vzeroupper
24067 ; BITALG_NOVLX-NEXT:    retq
24069 ; BITALG-LABEL: ugt_24_v2i64:
24070 ; BITALG:       # %bb.0:
24071 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
24072 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24073 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24074 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [24,24]
24075 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
24076 ; BITALG-NEXT:    retq
24077   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24078   %3 = icmp ugt <2 x i64> %2, <i64 24, i64 24>
24079   %4 = sext <2 x i1> %3 to <2 x i64>
24080   ret <2 x i64> %4
24083 define <2 x i64> @ult_25_v2i64(<2 x i64> %0) {
24084 ; SSE2-LABEL: ult_25_v2i64:
24085 ; SSE2:       # %bb.0:
24086 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24087 ; SSE2-NEXT:    psrlw $1, %xmm1
24088 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24089 ; SSE2-NEXT:    psubb %xmm1, %xmm0
24090 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24091 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
24092 ; SSE2-NEXT:    pand %xmm1, %xmm2
24093 ; SSE2-NEXT:    psrlw $2, %xmm0
24094 ; SSE2-NEXT:    pand %xmm1, %xmm0
24095 ; SSE2-NEXT:    paddb %xmm2, %xmm0
24096 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24097 ; SSE2-NEXT:    psrlw $4, %xmm1
24098 ; SSE2-NEXT:    paddb %xmm0, %xmm1
24099 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24100 ; SSE2-NEXT:    pxor %xmm0, %xmm0
24101 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
24102 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24103 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24104 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483673,2147483673,2147483673,2147483673]
24105 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
24106 ; SSE2-NEXT:    retq
24108 ; SSE3-LABEL: ult_25_v2i64:
24109 ; SSE3:       # %bb.0:
24110 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24111 ; SSE3-NEXT:    psrlw $1, %xmm1
24112 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24113 ; SSE3-NEXT:    psubb %xmm1, %xmm0
24114 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24115 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
24116 ; SSE3-NEXT:    pand %xmm1, %xmm2
24117 ; SSE3-NEXT:    psrlw $2, %xmm0
24118 ; SSE3-NEXT:    pand %xmm1, %xmm0
24119 ; SSE3-NEXT:    paddb %xmm2, %xmm0
24120 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24121 ; SSE3-NEXT:    psrlw $4, %xmm1
24122 ; SSE3-NEXT:    paddb %xmm0, %xmm1
24123 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24124 ; SSE3-NEXT:    pxor %xmm0, %xmm0
24125 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
24126 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24127 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24128 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483673,2147483673,2147483673,2147483673]
24129 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
24130 ; SSE3-NEXT:    retq
24132 ; SSSE3-LABEL: ult_25_v2i64:
24133 ; SSSE3:       # %bb.0:
24134 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24135 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
24136 ; SSSE3-NEXT:    pand %xmm1, %xmm2
24137 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24138 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
24139 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
24140 ; SSSE3-NEXT:    psrlw $4, %xmm0
24141 ; SSSE3-NEXT:    pand %xmm1, %xmm0
24142 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
24143 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
24144 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
24145 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
24146 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24147 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24148 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483673,2147483673,2147483673,2147483673]
24149 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
24150 ; SSSE3-NEXT:    retq
24152 ; SSE41-LABEL: ult_25_v2i64:
24153 ; SSE41:       # %bb.0:
24154 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24155 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
24156 ; SSE41-NEXT:    pand %xmm1, %xmm2
24157 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24158 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
24159 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
24160 ; SSE41-NEXT:    psrlw $4, %xmm0
24161 ; SSE41-NEXT:    pand %xmm1, %xmm0
24162 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
24163 ; SSE41-NEXT:    paddb %xmm4, %xmm3
24164 ; SSE41-NEXT:    pxor %xmm0, %xmm0
24165 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
24166 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24167 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24168 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483673,2147483673,2147483673,2147483673]
24169 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
24170 ; SSE41-NEXT:    retq
24172 ; AVX1-LABEL: ult_25_v2i64:
24173 ; AVX1:       # %bb.0:
24174 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24175 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
24176 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24177 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24178 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
24179 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
24180 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24181 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24182 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24183 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24184 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [25,25]
24185 ; AVX1-NEXT:    # xmm1 = mem[0,0]
24186 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24187 ; AVX1-NEXT:    retq
24189 ; AVX2-LABEL: ult_25_v2i64:
24190 ; AVX2:       # %bb.0:
24191 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24192 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
24193 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24194 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24195 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
24196 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
24197 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24198 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24199 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24200 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24201 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [25,25]
24202 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24203 ; AVX2-NEXT:    retq
24205 ; AVX512VPOPCNTDQ-LABEL: ult_25_v2i64:
24206 ; AVX512VPOPCNTDQ:       # %bb.0:
24207 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24208 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
24209 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [25,25]
24210 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24211 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
24212 ; AVX512VPOPCNTDQ-NEXT:    retq
24214 ; AVX512VPOPCNTDQVL-LABEL: ult_25_v2i64:
24215 ; AVX512VPOPCNTDQVL:       # %bb.0:
24216 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
24217 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [25,25]
24218 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24219 ; AVX512VPOPCNTDQVL-NEXT:    retq
24221 ; BITALG_NOVLX-LABEL: ult_25_v2i64:
24222 ; BITALG_NOVLX:       # %bb.0:
24223 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24224 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
24225 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24226 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24227 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [25,25]
24228 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24229 ; BITALG_NOVLX-NEXT:    vzeroupper
24230 ; BITALG_NOVLX-NEXT:    retq
24232 ; BITALG-LABEL: ult_25_v2i64:
24233 ; BITALG:       # %bb.0:
24234 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
24235 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24236 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24237 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [25,25]
24238 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24239 ; BITALG-NEXT:    retq
24240   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24241   %3 = icmp ult <2 x i64> %2, <i64 25, i64 25>
24242   %4 = sext <2 x i1> %3 to <2 x i64>
24243   ret <2 x i64> %4
24246 define <2 x i64> @ugt_25_v2i64(<2 x i64> %0) {
24247 ; SSE2-LABEL: ugt_25_v2i64:
24248 ; SSE2:       # %bb.0:
24249 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24250 ; SSE2-NEXT:    psrlw $1, %xmm1
24251 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24252 ; SSE2-NEXT:    psubb %xmm1, %xmm0
24253 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24254 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
24255 ; SSE2-NEXT:    pand %xmm1, %xmm2
24256 ; SSE2-NEXT:    psrlw $2, %xmm0
24257 ; SSE2-NEXT:    pand %xmm1, %xmm0
24258 ; SSE2-NEXT:    paddb %xmm2, %xmm0
24259 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24260 ; SSE2-NEXT:    psrlw $4, %xmm1
24261 ; SSE2-NEXT:    paddb %xmm0, %xmm1
24262 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24263 ; SSE2-NEXT:    pxor %xmm0, %xmm0
24264 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
24265 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24266 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24267 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24268 ; SSE2-NEXT:    retq
24270 ; SSE3-LABEL: ugt_25_v2i64:
24271 ; SSE3:       # %bb.0:
24272 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24273 ; SSE3-NEXT:    psrlw $1, %xmm1
24274 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24275 ; SSE3-NEXT:    psubb %xmm1, %xmm0
24276 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24277 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
24278 ; SSE3-NEXT:    pand %xmm1, %xmm2
24279 ; SSE3-NEXT:    psrlw $2, %xmm0
24280 ; SSE3-NEXT:    pand %xmm1, %xmm0
24281 ; SSE3-NEXT:    paddb %xmm2, %xmm0
24282 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24283 ; SSE3-NEXT:    psrlw $4, %xmm1
24284 ; SSE3-NEXT:    paddb %xmm0, %xmm1
24285 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24286 ; SSE3-NEXT:    pxor %xmm0, %xmm0
24287 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
24288 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24289 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24290 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24291 ; SSE3-NEXT:    retq
24293 ; SSSE3-LABEL: ugt_25_v2i64:
24294 ; SSSE3:       # %bb.0:
24295 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24296 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
24297 ; SSSE3-NEXT:    pand %xmm1, %xmm2
24298 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24299 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
24300 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
24301 ; SSSE3-NEXT:    psrlw $4, %xmm0
24302 ; SSSE3-NEXT:    pand %xmm1, %xmm0
24303 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
24304 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
24305 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
24306 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
24307 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24308 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24309 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24310 ; SSSE3-NEXT:    retq
24312 ; SSE41-LABEL: ugt_25_v2i64:
24313 ; SSE41:       # %bb.0:
24314 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24315 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
24316 ; SSE41-NEXT:    pand %xmm1, %xmm2
24317 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24318 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
24319 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
24320 ; SSE41-NEXT:    psrlw $4, %xmm0
24321 ; SSE41-NEXT:    pand %xmm1, %xmm0
24322 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
24323 ; SSE41-NEXT:    paddb %xmm4, %xmm3
24324 ; SSE41-NEXT:    pxor %xmm0, %xmm0
24325 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
24326 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24327 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24328 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24329 ; SSE41-NEXT:    retq
24331 ; AVX1-LABEL: ugt_25_v2i64:
24332 ; AVX1:       # %bb.0:
24333 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24334 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
24335 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24336 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24337 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
24338 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
24339 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24340 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24341 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24342 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24343 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24344 ; AVX1-NEXT:    retq
24346 ; AVX2-LABEL: ugt_25_v2i64:
24347 ; AVX2:       # %bb.0:
24348 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24349 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
24350 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24351 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24352 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
24353 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
24354 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24355 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24356 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24357 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24358 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24359 ; AVX2-NEXT:    retq
24361 ; AVX512VPOPCNTDQ-LABEL: ugt_25_v2i64:
24362 ; AVX512VPOPCNTDQ:       # %bb.0:
24363 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24364 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
24365 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24366 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
24367 ; AVX512VPOPCNTDQ-NEXT:    retq
24369 ; AVX512VPOPCNTDQVL-LABEL: ugt_25_v2i64:
24370 ; AVX512VPOPCNTDQVL:       # %bb.0:
24371 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
24372 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [25,25]
24373 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
24374 ; AVX512VPOPCNTDQVL-NEXT:    retq
24376 ; BITALG_NOVLX-LABEL: ugt_25_v2i64:
24377 ; BITALG_NOVLX:       # %bb.0:
24378 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24379 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
24380 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24381 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24382 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24383 ; BITALG_NOVLX-NEXT:    vzeroupper
24384 ; BITALG_NOVLX-NEXT:    retq
24386 ; BITALG-LABEL: ugt_25_v2i64:
24387 ; BITALG:       # %bb.0:
24388 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
24389 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24390 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24391 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [25,25]
24392 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
24393 ; BITALG-NEXT:    retq
24394   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24395   %3 = icmp ugt <2 x i64> %2, <i64 25, i64 25>
24396   %4 = sext <2 x i1> %3 to <2 x i64>
24397   ret <2 x i64> %4
24400 define <2 x i64> @ult_26_v2i64(<2 x i64> %0) {
24401 ; SSE2-LABEL: ult_26_v2i64:
24402 ; SSE2:       # %bb.0:
24403 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24404 ; SSE2-NEXT:    psrlw $1, %xmm1
24405 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24406 ; SSE2-NEXT:    psubb %xmm1, %xmm0
24407 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24408 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
24409 ; SSE2-NEXT:    pand %xmm1, %xmm2
24410 ; SSE2-NEXT:    psrlw $2, %xmm0
24411 ; SSE2-NEXT:    pand %xmm1, %xmm0
24412 ; SSE2-NEXT:    paddb %xmm2, %xmm0
24413 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24414 ; SSE2-NEXT:    psrlw $4, %xmm1
24415 ; SSE2-NEXT:    paddb %xmm0, %xmm1
24416 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24417 ; SSE2-NEXT:    pxor %xmm0, %xmm0
24418 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
24419 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24420 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24421 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483674,2147483674,2147483674,2147483674]
24422 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
24423 ; SSE2-NEXT:    retq
24425 ; SSE3-LABEL: ult_26_v2i64:
24426 ; SSE3:       # %bb.0:
24427 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24428 ; SSE3-NEXT:    psrlw $1, %xmm1
24429 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24430 ; SSE3-NEXT:    psubb %xmm1, %xmm0
24431 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24432 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
24433 ; SSE3-NEXT:    pand %xmm1, %xmm2
24434 ; SSE3-NEXT:    psrlw $2, %xmm0
24435 ; SSE3-NEXT:    pand %xmm1, %xmm0
24436 ; SSE3-NEXT:    paddb %xmm2, %xmm0
24437 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24438 ; SSE3-NEXT:    psrlw $4, %xmm1
24439 ; SSE3-NEXT:    paddb %xmm0, %xmm1
24440 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24441 ; SSE3-NEXT:    pxor %xmm0, %xmm0
24442 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
24443 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24444 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24445 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483674,2147483674,2147483674,2147483674]
24446 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
24447 ; SSE3-NEXT:    retq
24449 ; SSSE3-LABEL: ult_26_v2i64:
24450 ; SSSE3:       # %bb.0:
24451 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24452 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
24453 ; SSSE3-NEXT:    pand %xmm1, %xmm2
24454 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24455 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
24456 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
24457 ; SSSE3-NEXT:    psrlw $4, %xmm0
24458 ; SSSE3-NEXT:    pand %xmm1, %xmm0
24459 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
24460 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
24461 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
24462 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
24463 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24464 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24465 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483674,2147483674,2147483674,2147483674]
24466 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
24467 ; SSSE3-NEXT:    retq
24469 ; SSE41-LABEL: ult_26_v2i64:
24470 ; SSE41:       # %bb.0:
24471 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24472 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
24473 ; SSE41-NEXT:    pand %xmm1, %xmm2
24474 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24475 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
24476 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
24477 ; SSE41-NEXT:    psrlw $4, %xmm0
24478 ; SSE41-NEXT:    pand %xmm1, %xmm0
24479 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
24480 ; SSE41-NEXT:    paddb %xmm4, %xmm3
24481 ; SSE41-NEXT:    pxor %xmm0, %xmm0
24482 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
24483 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24484 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24485 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483674,2147483674,2147483674,2147483674]
24486 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
24487 ; SSE41-NEXT:    retq
24489 ; AVX1-LABEL: ult_26_v2i64:
24490 ; AVX1:       # %bb.0:
24491 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24492 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
24493 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24494 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24495 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
24496 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
24497 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24498 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24499 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24500 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24501 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [26,26]
24502 ; AVX1-NEXT:    # xmm1 = mem[0,0]
24503 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24504 ; AVX1-NEXT:    retq
24506 ; AVX2-LABEL: ult_26_v2i64:
24507 ; AVX2:       # %bb.0:
24508 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24509 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
24510 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24511 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24512 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
24513 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
24514 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24515 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24516 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24517 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24518 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [26,26]
24519 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24520 ; AVX2-NEXT:    retq
24522 ; AVX512VPOPCNTDQ-LABEL: ult_26_v2i64:
24523 ; AVX512VPOPCNTDQ:       # %bb.0:
24524 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24525 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
24526 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [26,26]
24527 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24528 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
24529 ; AVX512VPOPCNTDQ-NEXT:    retq
24531 ; AVX512VPOPCNTDQVL-LABEL: ult_26_v2i64:
24532 ; AVX512VPOPCNTDQVL:       # %bb.0:
24533 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
24534 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [26,26]
24535 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24536 ; AVX512VPOPCNTDQVL-NEXT:    retq
24538 ; BITALG_NOVLX-LABEL: ult_26_v2i64:
24539 ; BITALG_NOVLX:       # %bb.0:
24540 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24541 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
24542 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24543 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24544 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [26,26]
24545 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24546 ; BITALG_NOVLX-NEXT:    vzeroupper
24547 ; BITALG_NOVLX-NEXT:    retq
24549 ; BITALG-LABEL: ult_26_v2i64:
24550 ; BITALG:       # %bb.0:
24551 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
24552 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24553 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24554 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [26,26]
24555 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24556 ; BITALG-NEXT:    retq
24557   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24558   %3 = icmp ult <2 x i64> %2, <i64 26, i64 26>
24559   %4 = sext <2 x i1> %3 to <2 x i64>
24560   ret <2 x i64> %4
24563 define <2 x i64> @ugt_26_v2i64(<2 x i64> %0) {
24564 ; SSE2-LABEL: ugt_26_v2i64:
24565 ; SSE2:       # %bb.0:
24566 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24567 ; SSE2-NEXT:    psrlw $1, %xmm1
24568 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24569 ; SSE2-NEXT:    psubb %xmm1, %xmm0
24570 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24571 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
24572 ; SSE2-NEXT:    pand %xmm1, %xmm2
24573 ; SSE2-NEXT:    psrlw $2, %xmm0
24574 ; SSE2-NEXT:    pand %xmm1, %xmm0
24575 ; SSE2-NEXT:    paddb %xmm2, %xmm0
24576 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24577 ; SSE2-NEXT:    psrlw $4, %xmm1
24578 ; SSE2-NEXT:    paddb %xmm0, %xmm1
24579 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24580 ; SSE2-NEXT:    pxor %xmm0, %xmm0
24581 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
24582 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24583 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24584 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24585 ; SSE2-NEXT:    retq
24587 ; SSE3-LABEL: ugt_26_v2i64:
24588 ; SSE3:       # %bb.0:
24589 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24590 ; SSE3-NEXT:    psrlw $1, %xmm1
24591 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24592 ; SSE3-NEXT:    psubb %xmm1, %xmm0
24593 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24594 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
24595 ; SSE3-NEXT:    pand %xmm1, %xmm2
24596 ; SSE3-NEXT:    psrlw $2, %xmm0
24597 ; SSE3-NEXT:    pand %xmm1, %xmm0
24598 ; SSE3-NEXT:    paddb %xmm2, %xmm0
24599 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24600 ; SSE3-NEXT:    psrlw $4, %xmm1
24601 ; SSE3-NEXT:    paddb %xmm0, %xmm1
24602 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24603 ; SSE3-NEXT:    pxor %xmm0, %xmm0
24604 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
24605 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24606 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24607 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24608 ; SSE3-NEXT:    retq
24610 ; SSSE3-LABEL: ugt_26_v2i64:
24611 ; SSSE3:       # %bb.0:
24612 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24613 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
24614 ; SSSE3-NEXT:    pand %xmm1, %xmm2
24615 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24616 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
24617 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
24618 ; SSSE3-NEXT:    psrlw $4, %xmm0
24619 ; SSSE3-NEXT:    pand %xmm1, %xmm0
24620 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
24621 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
24622 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
24623 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
24624 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24625 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24626 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24627 ; SSSE3-NEXT:    retq
24629 ; SSE41-LABEL: ugt_26_v2i64:
24630 ; SSE41:       # %bb.0:
24631 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24632 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
24633 ; SSE41-NEXT:    pand %xmm1, %xmm2
24634 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24635 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
24636 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
24637 ; SSE41-NEXT:    psrlw $4, %xmm0
24638 ; SSE41-NEXT:    pand %xmm1, %xmm0
24639 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
24640 ; SSE41-NEXT:    paddb %xmm4, %xmm3
24641 ; SSE41-NEXT:    pxor %xmm0, %xmm0
24642 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
24643 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24644 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24645 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24646 ; SSE41-NEXT:    retq
24648 ; AVX1-LABEL: ugt_26_v2i64:
24649 ; AVX1:       # %bb.0:
24650 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24651 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
24652 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24653 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24654 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
24655 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
24656 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24657 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24658 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24659 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24660 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24661 ; AVX1-NEXT:    retq
24663 ; AVX2-LABEL: ugt_26_v2i64:
24664 ; AVX2:       # %bb.0:
24665 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24666 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
24667 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24668 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24669 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
24670 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
24671 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24672 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24673 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24674 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24675 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24676 ; AVX2-NEXT:    retq
24678 ; AVX512VPOPCNTDQ-LABEL: ugt_26_v2i64:
24679 ; AVX512VPOPCNTDQ:       # %bb.0:
24680 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24681 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
24682 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24683 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
24684 ; AVX512VPOPCNTDQ-NEXT:    retq
24686 ; AVX512VPOPCNTDQVL-LABEL: ugt_26_v2i64:
24687 ; AVX512VPOPCNTDQVL:       # %bb.0:
24688 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
24689 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [26,26]
24690 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
24691 ; AVX512VPOPCNTDQVL-NEXT:    retq
24693 ; BITALG_NOVLX-LABEL: ugt_26_v2i64:
24694 ; BITALG_NOVLX:       # %bb.0:
24695 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24696 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
24697 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24698 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24699 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24700 ; BITALG_NOVLX-NEXT:    vzeroupper
24701 ; BITALG_NOVLX-NEXT:    retq
24703 ; BITALG-LABEL: ugt_26_v2i64:
24704 ; BITALG:       # %bb.0:
24705 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
24706 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24707 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24708 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [26,26]
24709 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
24710 ; BITALG-NEXT:    retq
24711   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24712   %3 = icmp ugt <2 x i64> %2, <i64 26, i64 26>
24713   %4 = sext <2 x i1> %3 to <2 x i64>
24714   ret <2 x i64> %4
24717 define <2 x i64> @ult_27_v2i64(<2 x i64> %0) {
24718 ; SSE2-LABEL: ult_27_v2i64:
24719 ; SSE2:       # %bb.0:
24720 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24721 ; SSE2-NEXT:    psrlw $1, %xmm1
24722 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24723 ; SSE2-NEXT:    psubb %xmm1, %xmm0
24724 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24725 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
24726 ; SSE2-NEXT:    pand %xmm1, %xmm2
24727 ; SSE2-NEXT:    psrlw $2, %xmm0
24728 ; SSE2-NEXT:    pand %xmm1, %xmm0
24729 ; SSE2-NEXT:    paddb %xmm2, %xmm0
24730 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24731 ; SSE2-NEXT:    psrlw $4, %xmm1
24732 ; SSE2-NEXT:    paddb %xmm0, %xmm1
24733 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24734 ; SSE2-NEXT:    pxor %xmm0, %xmm0
24735 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
24736 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24737 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24738 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483675,2147483675,2147483675,2147483675]
24739 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
24740 ; SSE2-NEXT:    retq
24742 ; SSE3-LABEL: ult_27_v2i64:
24743 ; SSE3:       # %bb.0:
24744 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24745 ; SSE3-NEXT:    psrlw $1, %xmm1
24746 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24747 ; SSE3-NEXT:    psubb %xmm1, %xmm0
24748 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24749 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
24750 ; SSE3-NEXT:    pand %xmm1, %xmm2
24751 ; SSE3-NEXT:    psrlw $2, %xmm0
24752 ; SSE3-NEXT:    pand %xmm1, %xmm0
24753 ; SSE3-NEXT:    paddb %xmm2, %xmm0
24754 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24755 ; SSE3-NEXT:    psrlw $4, %xmm1
24756 ; SSE3-NEXT:    paddb %xmm0, %xmm1
24757 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24758 ; SSE3-NEXT:    pxor %xmm0, %xmm0
24759 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
24760 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24761 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24762 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483675,2147483675,2147483675,2147483675]
24763 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
24764 ; SSE3-NEXT:    retq
24766 ; SSSE3-LABEL: ult_27_v2i64:
24767 ; SSSE3:       # %bb.0:
24768 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24769 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
24770 ; SSSE3-NEXT:    pand %xmm1, %xmm2
24771 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24772 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
24773 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
24774 ; SSSE3-NEXT:    psrlw $4, %xmm0
24775 ; SSSE3-NEXT:    pand %xmm1, %xmm0
24776 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
24777 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
24778 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
24779 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
24780 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24781 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24782 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483675,2147483675,2147483675,2147483675]
24783 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
24784 ; SSSE3-NEXT:    retq
24786 ; SSE41-LABEL: ult_27_v2i64:
24787 ; SSE41:       # %bb.0:
24788 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24789 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
24790 ; SSE41-NEXT:    pand %xmm1, %xmm2
24791 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24792 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
24793 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
24794 ; SSE41-NEXT:    psrlw $4, %xmm0
24795 ; SSE41-NEXT:    pand %xmm1, %xmm0
24796 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
24797 ; SSE41-NEXT:    paddb %xmm4, %xmm3
24798 ; SSE41-NEXT:    pxor %xmm0, %xmm0
24799 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
24800 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
24801 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24802 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483675,2147483675,2147483675,2147483675]
24803 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
24804 ; SSE41-NEXT:    retq
24806 ; AVX1-LABEL: ult_27_v2i64:
24807 ; AVX1:       # %bb.0:
24808 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24809 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
24810 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24811 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24812 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
24813 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
24814 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24815 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24816 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24817 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24818 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [27,27]
24819 ; AVX1-NEXT:    # xmm1 = mem[0,0]
24820 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24821 ; AVX1-NEXT:    retq
24823 ; AVX2-LABEL: ult_27_v2i64:
24824 ; AVX2:       # %bb.0:
24825 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24826 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
24827 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24828 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24829 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
24830 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
24831 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24832 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24833 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24834 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24835 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [27,27]
24836 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24837 ; AVX2-NEXT:    retq
24839 ; AVX512VPOPCNTDQ-LABEL: ult_27_v2i64:
24840 ; AVX512VPOPCNTDQ:       # %bb.0:
24841 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24842 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
24843 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [27,27]
24844 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24845 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
24846 ; AVX512VPOPCNTDQ-NEXT:    retq
24848 ; AVX512VPOPCNTDQVL-LABEL: ult_27_v2i64:
24849 ; AVX512VPOPCNTDQVL:       # %bb.0:
24850 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
24851 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [27,27]
24852 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24853 ; AVX512VPOPCNTDQVL-NEXT:    retq
24855 ; BITALG_NOVLX-LABEL: ult_27_v2i64:
24856 ; BITALG_NOVLX:       # %bb.0:
24857 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24858 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
24859 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24860 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24861 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [27,27]
24862 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24863 ; BITALG_NOVLX-NEXT:    vzeroupper
24864 ; BITALG_NOVLX-NEXT:    retq
24866 ; BITALG-LABEL: ult_27_v2i64:
24867 ; BITALG:       # %bb.0:
24868 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
24869 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24870 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24871 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [27,27]
24872 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
24873 ; BITALG-NEXT:    retq
24874   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24875   %3 = icmp ult <2 x i64> %2, <i64 27, i64 27>
24876   %4 = sext <2 x i1> %3 to <2 x i64>
24877   ret <2 x i64> %4
24880 define <2 x i64> @ugt_27_v2i64(<2 x i64> %0) {
24881 ; SSE2-LABEL: ugt_27_v2i64:
24882 ; SSE2:       # %bb.0:
24883 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24884 ; SSE2-NEXT:    psrlw $1, %xmm1
24885 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24886 ; SSE2-NEXT:    psubb %xmm1, %xmm0
24887 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24888 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
24889 ; SSE2-NEXT:    pand %xmm1, %xmm2
24890 ; SSE2-NEXT:    psrlw $2, %xmm0
24891 ; SSE2-NEXT:    pand %xmm1, %xmm0
24892 ; SSE2-NEXT:    paddb %xmm2, %xmm0
24893 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
24894 ; SSE2-NEXT:    psrlw $4, %xmm1
24895 ; SSE2-NEXT:    paddb %xmm0, %xmm1
24896 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24897 ; SSE2-NEXT:    pxor %xmm0, %xmm0
24898 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
24899 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24900 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24901 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24902 ; SSE2-NEXT:    retq
24904 ; SSE3-LABEL: ugt_27_v2i64:
24905 ; SSE3:       # %bb.0:
24906 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24907 ; SSE3-NEXT:    psrlw $1, %xmm1
24908 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24909 ; SSE3-NEXT:    psubb %xmm1, %xmm0
24910 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
24911 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
24912 ; SSE3-NEXT:    pand %xmm1, %xmm2
24913 ; SSE3-NEXT:    psrlw $2, %xmm0
24914 ; SSE3-NEXT:    pand %xmm1, %xmm0
24915 ; SSE3-NEXT:    paddb %xmm2, %xmm0
24916 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
24917 ; SSE3-NEXT:    psrlw $4, %xmm1
24918 ; SSE3-NEXT:    paddb %xmm0, %xmm1
24919 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
24920 ; SSE3-NEXT:    pxor %xmm0, %xmm0
24921 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
24922 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24923 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24924 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24925 ; SSE3-NEXT:    retq
24927 ; SSSE3-LABEL: ugt_27_v2i64:
24928 ; SSSE3:       # %bb.0:
24929 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24930 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
24931 ; SSSE3-NEXT:    pand %xmm1, %xmm2
24932 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24933 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
24934 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
24935 ; SSSE3-NEXT:    psrlw $4, %xmm0
24936 ; SSSE3-NEXT:    pand %xmm1, %xmm0
24937 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
24938 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
24939 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
24940 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
24941 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24942 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24943 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24944 ; SSSE3-NEXT:    retq
24946 ; SSE41-LABEL: ugt_27_v2i64:
24947 ; SSE41:       # %bb.0:
24948 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24949 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
24950 ; SSE41-NEXT:    pand %xmm1, %xmm2
24951 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24952 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
24953 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
24954 ; SSE41-NEXT:    psrlw $4, %xmm0
24955 ; SSE41-NEXT:    pand %xmm1, %xmm0
24956 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
24957 ; SSE41-NEXT:    paddb %xmm4, %xmm3
24958 ; SSE41-NEXT:    pxor %xmm0, %xmm0
24959 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
24960 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
24961 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24962 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
24963 ; SSE41-NEXT:    retq
24965 ; AVX1-LABEL: ugt_27_v2i64:
24966 ; AVX1:       # %bb.0:
24967 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24968 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
24969 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24970 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24971 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
24972 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
24973 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24974 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24975 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24976 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24977 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24978 ; AVX1-NEXT:    retq
24980 ; AVX2-LABEL: ugt_27_v2i64:
24981 ; AVX2:       # %bb.0:
24982 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
24983 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
24984 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
24985 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
24986 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
24987 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
24988 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
24989 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
24990 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
24991 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
24992 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
24993 ; AVX2-NEXT:    retq
24995 ; AVX512VPOPCNTDQ-LABEL: ugt_27_v2i64:
24996 ; AVX512VPOPCNTDQ:       # %bb.0:
24997 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
24998 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
24999 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25000 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
25001 ; AVX512VPOPCNTDQ-NEXT:    retq
25003 ; AVX512VPOPCNTDQVL-LABEL: ugt_27_v2i64:
25004 ; AVX512VPOPCNTDQVL:       # %bb.0:
25005 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
25006 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [27,27]
25007 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
25008 ; AVX512VPOPCNTDQVL-NEXT:    retq
25010 ; BITALG_NOVLX-LABEL: ugt_27_v2i64:
25011 ; BITALG_NOVLX:       # %bb.0:
25012 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25013 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
25014 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25015 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25016 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25017 ; BITALG_NOVLX-NEXT:    vzeroupper
25018 ; BITALG_NOVLX-NEXT:    retq
25020 ; BITALG-LABEL: ugt_27_v2i64:
25021 ; BITALG:       # %bb.0:
25022 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
25023 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25024 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25025 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [27,27]
25026 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
25027 ; BITALG-NEXT:    retq
25028   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25029   %3 = icmp ugt <2 x i64> %2, <i64 27, i64 27>
25030   %4 = sext <2 x i1> %3 to <2 x i64>
25031   ret <2 x i64> %4
25034 define <2 x i64> @ult_28_v2i64(<2 x i64> %0) {
25035 ; SSE2-LABEL: ult_28_v2i64:
25036 ; SSE2:       # %bb.0:
25037 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25038 ; SSE2-NEXT:    psrlw $1, %xmm1
25039 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25040 ; SSE2-NEXT:    psubb %xmm1, %xmm0
25041 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25042 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
25043 ; SSE2-NEXT:    pand %xmm1, %xmm2
25044 ; SSE2-NEXT:    psrlw $2, %xmm0
25045 ; SSE2-NEXT:    pand %xmm1, %xmm0
25046 ; SSE2-NEXT:    paddb %xmm2, %xmm0
25047 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25048 ; SSE2-NEXT:    psrlw $4, %xmm1
25049 ; SSE2-NEXT:    paddb %xmm0, %xmm1
25050 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25051 ; SSE2-NEXT:    pxor %xmm0, %xmm0
25052 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
25053 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25054 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25055 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483676,2147483676,2147483676,2147483676]
25056 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
25057 ; SSE2-NEXT:    retq
25059 ; SSE3-LABEL: ult_28_v2i64:
25060 ; SSE3:       # %bb.0:
25061 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25062 ; SSE3-NEXT:    psrlw $1, %xmm1
25063 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25064 ; SSE3-NEXT:    psubb %xmm1, %xmm0
25065 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25066 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
25067 ; SSE3-NEXT:    pand %xmm1, %xmm2
25068 ; SSE3-NEXT:    psrlw $2, %xmm0
25069 ; SSE3-NEXT:    pand %xmm1, %xmm0
25070 ; SSE3-NEXT:    paddb %xmm2, %xmm0
25071 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25072 ; SSE3-NEXT:    psrlw $4, %xmm1
25073 ; SSE3-NEXT:    paddb %xmm0, %xmm1
25074 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25075 ; SSE3-NEXT:    pxor %xmm0, %xmm0
25076 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
25077 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25078 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25079 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483676,2147483676,2147483676,2147483676]
25080 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
25081 ; SSE3-NEXT:    retq
25083 ; SSSE3-LABEL: ult_28_v2i64:
25084 ; SSSE3:       # %bb.0:
25085 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25086 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
25087 ; SSSE3-NEXT:    pand %xmm1, %xmm2
25088 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25089 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
25090 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
25091 ; SSSE3-NEXT:    psrlw $4, %xmm0
25092 ; SSSE3-NEXT:    pand %xmm1, %xmm0
25093 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
25094 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
25095 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
25096 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
25097 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25098 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25099 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483676,2147483676,2147483676,2147483676]
25100 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
25101 ; SSSE3-NEXT:    retq
25103 ; SSE41-LABEL: ult_28_v2i64:
25104 ; SSE41:       # %bb.0:
25105 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25106 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
25107 ; SSE41-NEXT:    pand %xmm1, %xmm2
25108 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25109 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
25110 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
25111 ; SSE41-NEXT:    psrlw $4, %xmm0
25112 ; SSE41-NEXT:    pand %xmm1, %xmm0
25113 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
25114 ; SSE41-NEXT:    paddb %xmm4, %xmm3
25115 ; SSE41-NEXT:    pxor %xmm0, %xmm0
25116 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
25117 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25118 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25119 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483676,2147483676,2147483676,2147483676]
25120 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
25121 ; SSE41-NEXT:    retq
25123 ; AVX1-LABEL: ult_28_v2i64:
25124 ; AVX1:       # %bb.0:
25125 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25126 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
25127 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25128 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25129 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
25130 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
25131 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25132 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25133 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25134 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25135 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [28,28]
25136 ; AVX1-NEXT:    # xmm1 = mem[0,0]
25137 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25138 ; AVX1-NEXT:    retq
25140 ; AVX2-LABEL: ult_28_v2i64:
25141 ; AVX2:       # %bb.0:
25142 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25143 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
25144 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25145 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25146 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
25147 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
25148 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25149 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25150 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25151 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25152 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [28,28]
25153 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25154 ; AVX2-NEXT:    retq
25156 ; AVX512VPOPCNTDQ-LABEL: ult_28_v2i64:
25157 ; AVX512VPOPCNTDQ:       # %bb.0:
25158 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25159 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
25160 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [28,28]
25161 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25162 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
25163 ; AVX512VPOPCNTDQ-NEXT:    retq
25165 ; AVX512VPOPCNTDQVL-LABEL: ult_28_v2i64:
25166 ; AVX512VPOPCNTDQVL:       # %bb.0:
25167 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
25168 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [28,28]
25169 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25170 ; AVX512VPOPCNTDQVL-NEXT:    retq
25172 ; BITALG_NOVLX-LABEL: ult_28_v2i64:
25173 ; BITALG_NOVLX:       # %bb.0:
25174 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25175 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
25176 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25177 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25178 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [28,28]
25179 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25180 ; BITALG_NOVLX-NEXT:    vzeroupper
25181 ; BITALG_NOVLX-NEXT:    retq
25183 ; BITALG-LABEL: ult_28_v2i64:
25184 ; BITALG:       # %bb.0:
25185 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
25186 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25187 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25188 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [28,28]
25189 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25190 ; BITALG-NEXT:    retq
25191   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25192   %3 = icmp ult <2 x i64> %2, <i64 28, i64 28>
25193   %4 = sext <2 x i1> %3 to <2 x i64>
25194   ret <2 x i64> %4
25197 define <2 x i64> @ugt_28_v2i64(<2 x i64> %0) {
25198 ; SSE2-LABEL: ugt_28_v2i64:
25199 ; SSE2:       # %bb.0:
25200 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25201 ; SSE2-NEXT:    psrlw $1, %xmm1
25202 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25203 ; SSE2-NEXT:    psubb %xmm1, %xmm0
25204 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25205 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
25206 ; SSE2-NEXT:    pand %xmm1, %xmm2
25207 ; SSE2-NEXT:    psrlw $2, %xmm0
25208 ; SSE2-NEXT:    pand %xmm1, %xmm0
25209 ; SSE2-NEXT:    paddb %xmm2, %xmm0
25210 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25211 ; SSE2-NEXT:    psrlw $4, %xmm1
25212 ; SSE2-NEXT:    paddb %xmm0, %xmm1
25213 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25214 ; SSE2-NEXT:    pxor %xmm0, %xmm0
25215 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
25216 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25217 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25218 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25219 ; SSE2-NEXT:    retq
25221 ; SSE3-LABEL: ugt_28_v2i64:
25222 ; SSE3:       # %bb.0:
25223 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25224 ; SSE3-NEXT:    psrlw $1, %xmm1
25225 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25226 ; SSE3-NEXT:    psubb %xmm1, %xmm0
25227 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25228 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
25229 ; SSE3-NEXT:    pand %xmm1, %xmm2
25230 ; SSE3-NEXT:    psrlw $2, %xmm0
25231 ; SSE3-NEXT:    pand %xmm1, %xmm0
25232 ; SSE3-NEXT:    paddb %xmm2, %xmm0
25233 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25234 ; SSE3-NEXT:    psrlw $4, %xmm1
25235 ; SSE3-NEXT:    paddb %xmm0, %xmm1
25236 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25237 ; SSE3-NEXT:    pxor %xmm0, %xmm0
25238 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
25239 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25240 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25241 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25242 ; SSE3-NEXT:    retq
25244 ; SSSE3-LABEL: ugt_28_v2i64:
25245 ; SSSE3:       # %bb.0:
25246 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25247 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
25248 ; SSSE3-NEXT:    pand %xmm1, %xmm2
25249 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25250 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
25251 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
25252 ; SSSE3-NEXT:    psrlw $4, %xmm0
25253 ; SSSE3-NEXT:    pand %xmm1, %xmm0
25254 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
25255 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
25256 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
25257 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
25258 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25259 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25260 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25261 ; SSSE3-NEXT:    retq
25263 ; SSE41-LABEL: ugt_28_v2i64:
25264 ; SSE41:       # %bb.0:
25265 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25266 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
25267 ; SSE41-NEXT:    pand %xmm1, %xmm2
25268 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25269 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
25270 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
25271 ; SSE41-NEXT:    psrlw $4, %xmm0
25272 ; SSE41-NEXT:    pand %xmm1, %xmm0
25273 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
25274 ; SSE41-NEXT:    paddb %xmm4, %xmm3
25275 ; SSE41-NEXT:    pxor %xmm0, %xmm0
25276 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
25277 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25278 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25279 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25280 ; SSE41-NEXT:    retq
25282 ; AVX1-LABEL: ugt_28_v2i64:
25283 ; AVX1:       # %bb.0:
25284 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25285 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
25286 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25287 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25288 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
25289 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
25290 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25291 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25292 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25293 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25294 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25295 ; AVX1-NEXT:    retq
25297 ; AVX2-LABEL: ugt_28_v2i64:
25298 ; AVX2:       # %bb.0:
25299 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25300 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
25301 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25302 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25303 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
25304 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
25305 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25306 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25307 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25308 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25309 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25310 ; AVX2-NEXT:    retq
25312 ; AVX512VPOPCNTDQ-LABEL: ugt_28_v2i64:
25313 ; AVX512VPOPCNTDQ:       # %bb.0:
25314 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25315 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
25316 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25317 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
25318 ; AVX512VPOPCNTDQ-NEXT:    retq
25320 ; AVX512VPOPCNTDQVL-LABEL: ugt_28_v2i64:
25321 ; AVX512VPOPCNTDQVL:       # %bb.0:
25322 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
25323 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [28,28]
25324 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
25325 ; AVX512VPOPCNTDQVL-NEXT:    retq
25327 ; BITALG_NOVLX-LABEL: ugt_28_v2i64:
25328 ; BITALG_NOVLX:       # %bb.0:
25329 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25330 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
25331 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25332 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25333 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25334 ; BITALG_NOVLX-NEXT:    vzeroupper
25335 ; BITALG_NOVLX-NEXT:    retq
25337 ; BITALG-LABEL: ugt_28_v2i64:
25338 ; BITALG:       # %bb.0:
25339 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
25340 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25341 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25342 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [28,28]
25343 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
25344 ; BITALG-NEXT:    retq
25345   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25346   %3 = icmp ugt <2 x i64> %2, <i64 28, i64 28>
25347   %4 = sext <2 x i1> %3 to <2 x i64>
25348   ret <2 x i64> %4
25351 define <2 x i64> @ult_29_v2i64(<2 x i64> %0) {
25352 ; SSE2-LABEL: ult_29_v2i64:
25353 ; SSE2:       # %bb.0:
25354 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25355 ; SSE2-NEXT:    psrlw $1, %xmm1
25356 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25357 ; SSE2-NEXT:    psubb %xmm1, %xmm0
25358 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25359 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
25360 ; SSE2-NEXT:    pand %xmm1, %xmm2
25361 ; SSE2-NEXT:    psrlw $2, %xmm0
25362 ; SSE2-NEXT:    pand %xmm1, %xmm0
25363 ; SSE2-NEXT:    paddb %xmm2, %xmm0
25364 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25365 ; SSE2-NEXT:    psrlw $4, %xmm1
25366 ; SSE2-NEXT:    paddb %xmm0, %xmm1
25367 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25368 ; SSE2-NEXT:    pxor %xmm0, %xmm0
25369 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
25370 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25371 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25372 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483677,2147483677,2147483677,2147483677]
25373 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
25374 ; SSE2-NEXT:    retq
25376 ; SSE3-LABEL: ult_29_v2i64:
25377 ; SSE3:       # %bb.0:
25378 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25379 ; SSE3-NEXT:    psrlw $1, %xmm1
25380 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25381 ; SSE3-NEXT:    psubb %xmm1, %xmm0
25382 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25383 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
25384 ; SSE3-NEXT:    pand %xmm1, %xmm2
25385 ; SSE3-NEXT:    psrlw $2, %xmm0
25386 ; SSE3-NEXT:    pand %xmm1, %xmm0
25387 ; SSE3-NEXT:    paddb %xmm2, %xmm0
25388 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25389 ; SSE3-NEXT:    psrlw $4, %xmm1
25390 ; SSE3-NEXT:    paddb %xmm0, %xmm1
25391 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25392 ; SSE3-NEXT:    pxor %xmm0, %xmm0
25393 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
25394 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25395 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25396 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483677,2147483677,2147483677,2147483677]
25397 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
25398 ; SSE3-NEXT:    retq
25400 ; SSSE3-LABEL: ult_29_v2i64:
25401 ; SSSE3:       # %bb.0:
25402 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25403 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
25404 ; SSSE3-NEXT:    pand %xmm1, %xmm2
25405 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25406 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
25407 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
25408 ; SSSE3-NEXT:    psrlw $4, %xmm0
25409 ; SSSE3-NEXT:    pand %xmm1, %xmm0
25410 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
25411 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
25412 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
25413 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
25414 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25415 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25416 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483677,2147483677,2147483677,2147483677]
25417 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
25418 ; SSSE3-NEXT:    retq
25420 ; SSE41-LABEL: ult_29_v2i64:
25421 ; SSE41:       # %bb.0:
25422 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25423 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
25424 ; SSE41-NEXT:    pand %xmm1, %xmm2
25425 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25426 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
25427 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
25428 ; SSE41-NEXT:    psrlw $4, %xmm0
25429 ; SSE41-NEXT:    pand %xmm1, %xmm0
25430 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
25431 ; SSE41-NEXT:    paddb %xmm4, %xmm3
25432 ; SSE41-NEXT:    pxor %xmm0, %xmm0
25433 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
25434 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25435 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25436 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483677,2147483677,2147483677,2147483677]
25437 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
25438 ; SSE41-NEXT:    retq
25440 ; AVX1-LABEL: ult_29_v2i64:
25441 ; AVX1:       # %bb.0:
25442 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25443 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
25444 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25445 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25446 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
25447 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
25448 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25449 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25450 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25451 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25452 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [29,29]
25453 ; AVX1-NEXT:    # xmm1 = mem[0,0]
25454 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25455 ; AVX1-NEXT:    retq
25457 ; AVX2-LABEL: ult_29_v2i64:
25458 ; AVX2:       # %bb.0:
25459 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25460 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
25461 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25462 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25463 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
25464 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
25465 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25466 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25467 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25468 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25469 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [29,29]
25470 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25471 ; AVX2-NEXT:    retq
25473 ; AVX512VPOPCNTDQ-LABEL: ult_29_v2i64:
25474 ; AVX512VPOPCNTDQ:       # %bb.0:
25475 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25476 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
25477 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [29,29]
25478 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25479 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
25480 ; AVX512VPOPCNTDQ-NEXT:    retq
25482 ; AVX512VPOPCNTDQVL-LABEL: ult_29_v2i64:
25483 ; AVX512VPOPCNTDQVL:       # %bb.0:
25484 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
25485 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [29,29]
25486 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25487 ; AVX512VPOPCNTDQVL-NEXT:    retq
25489 ; BITALG_NOVLX-LABEL: ult_29_v2i64:
25490 ; BITALG_NOVLX:       # %bb.0:
25491 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25492 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
25493 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25494 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25495 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [29,29]
25496 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25497 ; BITALG_NOVLX-NEXT:    vzeroupper
25498 ; BITALG_NOVLX-NEXT:    retq
25500 ; BITALG-LABEL: ult_29_v2i64:
25501 ; BITALG:       # %bb.0:
25502 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
25503 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25504 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25505 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [29,29]
25506 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25507 ; BITALG-NEXT:    retq
25508   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25509   %3 = icmp ult <2 x i64> %2, <i64 29, i64 29>
25510   %4 = sext <2 x i1> %3 to <2 x i64>
25511   ret <2 x i64> %4
25514 define <2 x i64> @ugt_29_v2i64(<2 x i64> %0) {
25515 ; SSE2-LABEL: ugt_29_v2i64:
25516 ; SSE2:       # %bb.0:
25517 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25518 ; SSE2-NEXT:    psrlw $1, %xmm1
25519 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25520 ; SSE2-NEXT:    psubb %xmm1, %xmm0
25521 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25522 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
25523 ; SSE2-NEXT:    pand %xmm1, %xmm2
25524 ; SSE2-NEXT:    psrlw $2, %xmm0
25525 ; SSE2-NEXT:    pand %xmm1, %xmm0
25526 ; SSE2-NEXT:    paddb %xmm2, %xmm0
25527 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25528 ; SSE2-NEXT:    psrlw $4, %xmm1
25529 ; SSE2-NEXT:    paddb %xmm0, %xmm1
25530 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25531 ; SSE2-NEXT:    pxor %xmm0, %xmm0
25532 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
25533 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25534 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25535 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25536 ; SSE2-NEXT:    retq
25538 ; SSE3-LABEL: ugt_29_v2i64:
25539 ; SSE3:       # %bb.0:
25540 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25541 ; SSE3-NEXT:    psrlw $1, %xmm1
25542 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25543 ; SSE3-NEXT:    psubb %xmm1, %xmm0
25544 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25545 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
25546 ; SSE3-NEXT:    pand %xmm1, %xmm2
25547 ; SSE3-NEXT:    psrlw $2, %xmm0
25548 ; SSE3-NEXT:    pand %xmm1, %xmm0
25549 ; SSE3-NEXT:    paddb %xmm2, %xmm0
25550 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25551 ; SSE3-NEXT:    psrlw $4, %xmm1
25552 ; SSE3-NEXT:    paddb %xmm0, %xmm1
25553 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25554 ; SSE3-NEXT:    pxor %xmm0, %xmm0
25555 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
25556 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25557 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25558 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25559 ; SSE3-NEXT:    retq
25561 ; SSSE3-LABEL: ugt_29_v2i64:
25562 ; SSSE3:       # %bb.0:
25563 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25564 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
25565 ; SSSE3-NEXT:    pand %xmm1, %xmm2
25566 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25567 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
25568 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
25569 ; SSSE3-NEXT:    psrlw $4, %xmm0
25570 ; SSSE3-NEXT:    pand %xmm1, %xmm0
25571 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
25572 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
25573 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
25574 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
25575 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25576 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25577 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25578 ; SSSE3-NEXT:    retq
25580 ; SSE41-LABEL: ugt_29_v2i64:
25581 ; SSE41:       # %bb.0:
25582 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25583 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
25584 ; SSE41-NEXT:    pand %xmm1, %xmm2
25585 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25586 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
25587 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
25588 ; SSE41-NEXT:    psrlw $4, %xmm0
25589 ; SSE41-NEXT:    pand %xmm1, %xmm0
25590 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
25591 ; SSE41-NEXT:    paddb %xmm4, %xmm3
25592 ; SSE41-NEXT:    pxor %xmm0, %xmm0
25593 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
25594 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25595 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25596 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25597 ; SSE41-NEXT:    retq
25599 ; AVX1-LABEL: ugt_29_v2i64:
25600 ; AVX1:       # %bb.0:
25601 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25602 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
25603 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25604 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25605 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
25606 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
25607 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25608 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25609 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25610 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25611 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25612 ; AVX1-NEXT:    retq
25614 ; AVX2-LABEL: ugt_29_v2i64:
25615 ; AVX2:       # %bb.0:
25616 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25617 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
25618 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25619 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25620 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
25621 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
25622 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25623 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25624 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25625 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25626 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25627 ; AVX2-NEXT:    retq
25629 ; AVX512VPOPCNTDQ-LABEL: ugt_29_v2i64:
25630 ; AVX512VPOPCNTDQ:       # %bb.0:
25631 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25632 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
25633 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25634 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
25635 ; AVX512VPOPCNTDQ-NEXT:    retq
25637 ; AVX512VPOPCNTDQVL-LABEL: ugt_29_v2i64:
25638 ; AVX512VPOPCNTDQVL:       # %bb.0:
25639 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
25640 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [29,29]
25641 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
25642 ; AVX512VPOPCNTDQVL-NEXT:    retq
25644 ; BITALG_NOVLX-LABEL: ugt_29_v2i64:
25645 ; BITALG_NOVLX:       # %bb.0:
25646 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25647 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
25648 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25649 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25650 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25651 ; BITALG_NOVLX-NEXT:    vzeroupper
25652 ; BITALG_NOVLX-NEXT:    retq
25654 ; BITALG-LABEL: ugt_29_v2i64:
25655 ; BITALG:       # %bb.0:
25656 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
25657 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25658 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25659 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [29,29]
25660 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
25661 ; BITALG-NEXT:    retq
25662   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25663   %3 = icmp ugt <2 x i64> %2, <i64 29, i64 29>
25664   %4 = sext <2 x i1> %3 to <2 x i64>
25665   ret <2 x i64> %4
25668 define <2 x i64> @ult_30_v2i64(<2 x i64> %0) {
25669 ; SSE2-LABEL: ult_30_v2i64:
25670 ; SSE2:       # %bb.0:
25671 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25672 ; SSE2-NEXT:    psrlw $1, %xmm1
25673 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25674 ; SSE2-NEXT:    psubb %xmm1, %xmm0
25675 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25676 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
25677 ; SSE2-NEXT:    pand %xmm1, %xmm2
25678 ; SSE2-NEXT:    psrlw $2, %xmm0
25679 ; SSE2-NEXT:    pand %xmm1, %xmm0
25680 ; SSE2-NEXT:    paddb %xmm2, %xmm0
25681 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25682 ; SSE2-NEXT:    psrlw $4, %xmm1
25683 ; SSE2-NEXT:    paddb %xmm0, %xmm1
25684 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25685 ; SSE2-NEXT:    pxor %xmm0, %xmm0
25686 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
25687 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25688 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25689 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483678,2147483678,2147483678,2147483678]
25690 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
25691 ; SSE2-NEXT:    retq
25693 ; SSE3-LABEL: ult_30_v2i64:
25694 ; SSE3:       # %bb.0:
25695 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25696 ; SSE3-NEXT:    psrlw $1, %xmm1
25697 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25698 ; SSE3-NEXT:    psubb %xmm1, %xmm0
25699 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25700 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
25701 ; SSE3-NEXT:    pand %xmm1, %xmm2
25702 ; SSE3-NEXT:    psrlw $2, %xmm0
25703 ; SSE3-NEXT:    pand %xmm1, %xmm0
25704 ; SSE3-NEXT:    paddb %xmm2, %xmm0
25705 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25706 ; SSE3-NEXT:    psrlw $4, %xmm1
25707 ; SSE3-NEXT:    paddb %xmm0, %xmm1
25708 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25709 ; SSE3-NEXT:    pxor %xmm0, %xmm0
25710 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
25711 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25712 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25713 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483678,2147483678,2147483678,2147483678]
25714 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
25715 ; SSE3-NEXT:    retq
25717 ; SSSE3-LABEL: ult_30_v2i64:
25718 ; SSSE3:       # %bb.0:
25719 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25720 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
25721 ; SSSE3-NEXT:    pand %xmm1, %xmm2
25722 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25723 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
25724 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
25725 ; SSSE3-NEXT:    psrlw $4, %xmm0
25726 ; SSSE3-NEXT:    pand %xmm1, %xmm0
25727 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
25728 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
25729 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
25730 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
25731 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25732 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25733 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483678,2147483678,2147483678,2147483678]
25734 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
25735 ; SSSE3-NEXT:    retq
25737 ; SSE41-LABEL: ult_30_v2i64:
25738 ; SSE41:       # %bb.0:
25739 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25740 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
25741 ; SSE41-NEXT:    pand %xmm1, %xmm2
25742 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25743 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
25744 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
25745 ; SSE41-NEXT:    psrlw $4, %xmm0
25746 ; SSE41-NEXT:    pand %xmm1, %xmm0
25747 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
25748 ; SSE41-NEXT:    paddb %xmm4, %xmm3
25749 ; SSE41-NEXT:    pxor %xmm0, %xmm0
25750 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
25751 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
25752 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25753 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483678,2147483678,2147483678,2147483678]
25754 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
25755 ; SSE41-NEXT:    retq
25757 ; AVX1-LABEL: ult_30_v2i64:
25758 ; AVX1:       # %bb.0:
25759 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25760 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
25761 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25762 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25763 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
25764 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
25765 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25766 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25767 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25768 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25769 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [30,30]
25770 ; AVX1-NEXT:    # xmm1 = mem[0,0]
25771 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25772 ; AVX1-NEXT:    retq
25774 ; AVX2-LABEL: ult_30_v2i64:
25775 ; AVX2:       # %bb.0:
25776 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25777 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
25778 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25779 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25780 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
25781 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
25782 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25783 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25784 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25785 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25786 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [30,30]
25787 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25788 ; AVX2-NEXT:    retq
25790 ; AVX512VPOPCNTDQ-LABEL: ult_30_v2i64:
25791 ; AVX512VPOPCNTDQ:       # %bb.0:
25792 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25793 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
25794 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [30,30]
25795 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25796 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
25797 ; AVX512VPOPCNTDQ-NEXT:    retq
25799 ; AVX512VPOPCNTDQVL-LABEL: ult_30_v2i64:
25800 ; AVX512VPOPCNTDQVL:       # %bb.0:
25801 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
25802 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [30,30]
25803 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25804 ; AVX512VPOPCNTDQVL-NEXT:    retq
25806 ; BITALG_NOVLX-LABEL: ult_30_v2i64:
25807 ; BITALG_NOVLX:       # %bb.0:
25808 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25809 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
25810 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25811 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25812 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [30,30]
25813 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25814 ; BITALG_NOVLX-NEXT:    vzeroupper
25815 ; BITALG_NOVLX-NEXT:    retq
25817 ; BITALG-LABEL: ult_30_v2i64:
25818 ; BITALG:       # %bb.0:
25819 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
25820 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25821 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25822 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [30,30]
25823 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
25824 ; BITALG-NEXT:    retq
25825   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25826   %3 = icmp ult <2 x i64> %2, <i64 30, i64 30>
25827   %4 = sext <2 x i1> %3 to <2 x i64>
25828   ret <2 x i64> %4
25831 define <2 x i64> @ugt_30_v2i64(<2 x i64> %0) {
25832 ; SSE2-LABEL: ugt_30_v2i64:
25833 ; SSE2:       # %bb.0:
25834 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25835 ; SSE2-NEXT:    psrlw $1, %xmm1
25836 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25837 ; SSE2-NEXT:    psubb %xmm1, %xmm0
25838 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25839 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
25840 ; SSE2-NEXT:    pand %xmm1, %xmm2
25841 ; SSE2-NEXT:    psrlw $2, %xmm0
25842 ; SSE2-NEXT:    pand %xmm1, %xmm0
25843 ; SSE2-NEXT:    paddb %xmm2, %xmm0
25844 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25845 ; SSE2-NEXT:    psrlw $4, %xmm1
25846 ; SSE2-NEXT:    paddb %xmm0, %xmm1
25847 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25848 ; SSE2-NEXT:    pxor %xmm0, %xmm0
25849 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
25850 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25851 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25852 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25853 ; SSE2-NEXT:    retq
25855 ; SSE3-LABEL: ugt_30_v2i64:
25856 ; SSE3:       # %bb.0:
25857 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25858 ; SSE3-NEXT:    psrlw $1, %xmm1
25859 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25860 ; SSE3-NEXT:    psubb %xmm1, %xmm0
25861 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25862 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
25863 ; SSE3-NEXT:    pand %xmm1, %xmm2
25864 ; SSE3-NEXT:    psrlw $2, %xmm0
25865 ; SSE3-NEXT:    pand %xmm1, %xmm0
25866 ; SSE3-NEXT:    paddb %xmm2, %xmm0
25867 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
25868 ; SSE3-NEXT:    psrlw $4, %xmm1
25869 ; SSE3-NEXT:    paddb %xmm0, %xmm1
25870 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25871 ; SSE3-NEXT:    pxor %xmm0, %xmm0
25872 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
25873 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25874 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25875 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25876 ; SSE3-NEXT:    retq
25878 ; SSSE3-LABEL: ugt_30_v2i64:
25879 ; SSSE3:       # %bb.0:
25880 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25881 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
25882 ; SSSE3-NEXT:    pand %xmm1, %xmm2
25883 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25884 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
25885 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
25886 ; SSSE3-NEXT:    psrlw $4, %xmm0
25887 ; SSSE3-NEXT:    pand %xmm1, %xmm0
25888 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
25889 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
25890 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
25891 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
25892 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25893 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25894 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25895 ; SSSE3-NEXT:    retq
25897 ; SSE41-LABEL: ugt_30_v2i64:
25898 ; SSE41:       # %bb.0:
25899 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25900 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
25901 ; SSE41-NEXT:    pand %xmm1, %xmm2
25902 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25903 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
25904 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
25905 ; SSE41-NEXT:    psrlw $4, %xmm0
25906 ; SSE41-NEXT:    pand %xmm1, %xmm0
25907 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
25908 ; SSE41-NEXT:    paddb %xmm4, %xmm3
25909 ; SSE41-NEXT:    pxor %xmm0, %xmm0
25910 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
25911 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
25912 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25913 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
25914 ; SSE41-NEXT:    retq
25916 ; AVX1-LABEL: ugt_30_v2i64:
25917 ; AVX1:       # %bb.0:
25918 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25919 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
25920 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25921 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25922 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
25923 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
25924 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25925 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25926 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25927 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25928 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25929 ; AVX1-NEXT:    retq
25931 ; AVX2-LABEL: ugt_30_v2i64:
25932 ; AVX2:       # %bb.0:
25933 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
25934 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
25935 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
25936 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
25937 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
25938 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
25939 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
25940 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
25941 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25942 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25943 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25944 ; AVX2-NEXT:    retq
25946 ; AVX512VPOPCNTDQ-LABEL: ugt_30_v2i64:
25947 ; AVX512VPOPCNTDQ:       # %bb.0:
25948 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25949 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
25950 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25951 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
25952 ; AVX512VPOPCNTDQ-NEXT:    retq
25954 ; AVX512VPOPCNTDQVL-LABEL: ugt_30_v2i64:
25955 ; AVX512VPOPCNTDQVL:       # %bb.0:
25956 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
25957 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [30,30]
25958 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
25959 ; AVX512VPOPCNTDQVL-NEXT:    retq
25961 ; BITALG_NOVLX-LABEL: ugt_30_v2i64:
25962 ; BITALG_NOVLX:       # %bb.0:
25963 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
25964 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
25965 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25966 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25967 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
25968 ; BITALG_NOVLX-NEXT:    vzeroupper
25969 ; BITALG_NOVLX-NEXT:    retq
25971 ; BITALG-LABEL: ugt_30_v2i64:
25972 ; BITALG:       # %bb.0:
25973 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
25974 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
25975 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
25976 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [30,30]
25977 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
25978 ; BITALG-NEXT:    retq
25979   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25980   %3 = icmp ugt <2 x i64> %2, <i64 30, i64 30>
25981   %4 = sext <2 x i1> %3 to <2 x i64>
25982   ret <2 x i64> %4
25985 define <2 x i64> @ult_31_v2i64(<2 x i64> %0) {
25986 ; SSE2-LABEL: ult_31_v2i64:
25987 ; SSE2:       # %bb.0:
25988 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25989 ; SSE2-NEXT:    psrlw $1, %xmm1
25990 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
25991 ; SSE2-NEXT:    psubb %xmm1, %xmm0
25992 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
25993 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
25994 ; SSE2-NEXT:    pand %xmm1, %xmm2
25995 ; SSE2-NEXT:    psrlw $2, %xmm0
25996 ; SSE2-NEXT:    pand %xmm1, %xmm0
25997 ; SSE2-NEXT:    paddb %xmm2, %xmm0
25998 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
25999 ; SSE2-NEXT:    psrlw $4, %xmm1
26000 ; SSE2-NEXT:    paddb %xmm0, %xmm1
26001 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26002 ; SSE2-NEXT:    pxor %xmm0, %xmm0
26003 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
26004 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26005 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26006 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483679,2147483679,2147483679,2147483679]
26007 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
26008 ; SSE2-NEXT:    retq
26010 ; SSE3-LABEL: ult_31_v2i64:
26011 ; SSE3:       # %bb.0:
26012 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26013 ; SSE3-NEXT:    psrlw $1, %xmm1
26014 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26015 ; SSE3-NEXT:    psubb %xmm1, %xmm0
26016 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26017 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
26018 ; SSE3-NEXT:    pand %xmm1, %xmm2
26019 ; SSE3-NEXT:    psrlw $2, %xmm0
26020 ; SSE3-NEXT:    pand %xmm1, %xmm0
26021 ; SSE3-NEXT:    paddb %xmm2, %xmm0
26022 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26023 ; SSE3-NEXT:    psrlw $4, %xmm1
26024 ; SSE3-NEXT:    paddb %xmm0, %xmm1
26025 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26026 ; SSE3-NEXT:    pxor %xmm0, %xmm0
26027 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
26028 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26029 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26030 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483679,2147483679,2147483679,2147483679]
26031 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
26032 ; SSE3-NEXT:    retq
26034 ; SSSE3-LABEL: ult_31_v2i64:
26035 ; SSSE3:       # %bb.0:
26036 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26037 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
26038 ; SSSE3-NEXT:    pand %xmm1, %xmm2
26039 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26040 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
26041 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
26042 ; SSSE3-NEXT:    psrlw $4, %xmm0
26043 ; SSSE3-NEXT:    pand %xmm1, %xmm0
26044 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
26045 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
26046 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
26047 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
26048 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26049 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26050 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483679,2147483679,2147483679,2147483679]
26051 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
26052 ; SSSE3-NEXT:    retq
26054 ; SSE41-LABEL: ult_31_v2i64:
26055 ; SSE41:       # %bb.0:
26056 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26057 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
26058 ; SSE41-NEXT:    pand %xmm1, %xmm2
26059 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26060 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
26061 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
26062 ; SSE41-NEXT:    psrlw $4, %xmm0
26063 ; SSE41-NEXT:    pand %xmm1, %xmm0
26064 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
26065 ; SSE41-NEXT:    paddb %xmm4, %xmm3
26066 ; SSE41-NEXT:    pxor %xmm0, %xmm0
26067 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
26068 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26069 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26070 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483679,2147483679,2147483679,2147483679]
26071 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
26072 ; SSE41-NEXT:    retq
26074 ; AVX1-LABEL: ult_31_v2i64:
26075 ; AVX1:       # %bb.0:
26076 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26077 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
26078 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26079 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26080 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
26081 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
26082 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26083 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26084 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26085 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26086 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [31,31]
26087 ; AVX1-NEXT:    # xmm1 = mem[0,0]
26088 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26089 ; AVX1-NEXT:    retq
26091 ; AVX2-LABEL: ult_31_v2i64:
26092 ; AVX2:       # %bb.0:
26093 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26094 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
26095 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26096 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26097 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
26098 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
26099 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26100 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26101 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26102 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26103 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [31,31]
26104 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26105 ; AVX2-NEXT:    retq
26107 ; AVX512VPOPCNTDQ-LABEL: ult_31_v2i64:
26108 ; AVX512VPOPCNTDQ:       # %bb.0:
26109 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26110 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
26111 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [31,31]
26112 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26113 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
26114 ; AVX512VPOPCNTDQ-NEXT:    retq
26116 ; AVX512VPOPCNTDQVL-LABEL: ult_31_v2i64:
26117 ; AVX512VPOPCNTDQVL:       # %bb.0:
26118 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
26119 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [31,31]
26120 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26121 ; AVX512VPOPCNTDQVL-NEXT:    retq
26123 ; BITALG_NOVLX-LABEL: ult_31_v2i64:
26124 ; BITALG_NOVLX:       # %bb.0:
26125 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26126 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
26127 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26128 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26129 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [31,31]
26130 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26131 ; BITALG_NOVLX-NEXT:    vzeroupper
26132 ; BITALG_NOVLX-NEXT:    retq
26134 ; BITALG-LABEL: ult_31_v2i64:
26135 ; BITALG:       # %bb.0:
26136 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
26137 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26138 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26139 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [31,31]
26140 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26141 ; BITALG-NEXT:    retq
26142   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26143   %3 = icmp ult <2 x i64> %2, <i64 31, i64 31>
26144   %4 = sext <2 x i1> %3 to <2 x i64>
26145   ret <2 x i64> %4
26148 define <2 x i64> @ugt_31_v2i64(<2 x i64> %0) {
26149 ; SSE2-LABEL: ugt_31_v2i64:
26150 ; SSE2:       # %bb.0:
26151 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26152 ; SSE2-NEXT:    psrlw $1, %xmm1
26153 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26154 ; SSE2-NEXT:    psubb %xmm1, %xmm0
26155 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26156 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
26157 ; SSE2-NEXT:    pand %xmm1, %xmm2
26158 ; SSE2-NEXT:    psrlw $2, %xmm0
26159 ; SSE2-NEXT:    pand %xmm1, %xmm0
26160 ; SSE2-NEXT:    paddb %xmm2, %xmm0
26161 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26162 ; SSE2-NEXT:    psrlw $4, %xmm1
26163 ; SSE2-NEXT:    paddb %xmm0, %xmm1
26164 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26165 ; SSE2-NEXT:    pxor %xmm0, %xmm0
26166 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
26167 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26168 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26169 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26170 ; SSE2-NEXT:    retq
26172 ; SSE3-LABEL: ugt_31_v2i64:
26173 ; SSE3:       # %bb.0:
26174 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26175 ; SSE3-NEXT:    psrlw $1, %xmm1
26176 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26177 ; SSE3-NEXT:    psubb %xmm1, %xmm0
26178 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26179 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
26180 ; SSE3-NEXT:    pand %xmm1, %xmm2
26181 ; SSE3-NEXT:    psrlw $2, %xmm0
26182 ; SSE3-NEXT:    pand %xmm1, %xmm0
26183 ; SSE3-NEXT:    paddb %xmm2, %xmm0
26184 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26185 ; SSE3-NEXT:    psrlw $4, %xmm1
26186 ; SSE3-NEXT:    paddb %xmm0, %xmm1
26187 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26188 ; SSE3-NEXT:    pxor %xmm0, %xmm0
26189 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
26190 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26191 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26192 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26193 ; SSE3-NEXT:    retq
26195 ; SSSE3-LABEL: ugt_31_v2i64:
26196 ; SSSE3:       # %bb.0:
26197 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26198 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
26199 ; SSSE3-NEXT:    pand %xmm1, %xmm2
26200 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26201 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
26202 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
26203 ; SSSE3-NEXT:    psrlw $4, %xmm0
26204 ; SSSE3-NEXT:    pand %xmm1, %xmm0
26205 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
26206 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
26207 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
26208 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
26209 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26210 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26211 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26212 ; SSSE3-NEXT:    retq
26214 ; SSE41-LABEL: ugt_31_v2i64:
26215 ; SSE41:       # %bb.0:
26216 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26217 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
26218 ; SSE41-NEXT:    pand %xmm1, %xmm2
26219 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26220 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
26221 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
26222 ; SSE41-NEXT:    psrlw $4, %xmm0
26223 ; SSE41-NEXT:    pand %xmm1, %xmm0
26224 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
26225 ; SSE41-NEXT:    paddb %xmm4, %xmm3
26226 ; SSE41-NEXT:    pxor %xmm0, %xmm0
26227 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
26228 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26229 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26230 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26231 ; SSE41-NEXT:    retq
26233 ; AVX1-LABEL: ugt_31_v2i64:
26234 ; AVX1:       # %bb.0:
26235 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26236 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
26237 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26238 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26239 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
26240 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
26241 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26242 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26243 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26244 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26245 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26246 ; AVX1-NEXT:    retq
26248 ; AVX2-LABEL: ugt_31_v2i64:
26249 ; AVX2:       # %bb.0:
26250 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26251 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
26252 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26253 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26254 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
26255 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
26256 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26257 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26258 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26259 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26260 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26261 ; AVX2-NEXT:    retq
26263 ; AVX512VPOPCNTDQ-LABEL: ugt_31_v2i64:
26264 ; AVX512VPOPCNTDQ:       # %bb.0:
26265 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26266 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
26267 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26268 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
26269 ; AVX512VPOPCNTDQ-NEXT:    retq
26271 ; AVX512VPOPCNTDQVL-LABEL: ugt_31_v2i64:
26272 ; AVX512VPOPCNTDQVL:       # %bb.0:
26273 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
26274 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [31,31]
26275 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
26276 ; AVX512VPOPCNTDQVL-NEXT:    retq
26278 ; BITALG_NOVLX-LABEL: ugt_31_v2i64:
26279 ; BITALG_NOVLX:       # %bb.0:
26280 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26281 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
26282 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26283 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26284 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26285 ; BITALG_NOVLX-NEXT:    vzeroupper
26286 ; BITALG_NOVLX-NEXT:    retq
26288 ; BITALG-LABEL: ugt_31_v2i64:
26289 ; BITALG:       # %bb.0:
26290 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
26291 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26292 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26293 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [31,31]
26294 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
26295 ; BITALG-NEXT:    retq
26296   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26297   %3 = icmp ugt <2 x i64> %2, <i64 31, i64 31>
26298   %4 = sext <2 x i1> %3 to <2 x i64>
26299   ret <2 x i64> %4
26302 define <2 x i64> @ult_32_v2i64(<2 x i64> %0) {
26303 ; SSE2-LABEL: ult_32_v2i64:
26304 ; SSE2:       # %bb.0:
26305 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26306 ; SSE2-NEXT:    psrlw $1, %xmm1
26307 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26308 ; SSE2-NEXT:    psubb %xmm1, %xmm0
26309 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26310 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
26311 ; SSE2-NEXT:    pand %xmm1, %xmm2
26312 ; SSE2-NEXT:    psrlw $2, %xmm0
26313 ; SSE2-NEXT:    pand %xmm1, %xmm0
26314 ; SSE2-NEXT:    paddb %xmm2, %xmm0
26315 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26316 ; SSE2-NEXT:    psrlw $4, %xmm1
26317 ; SSE2-NEXT:    paddb %xmm0, %xmm1
26318 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26319 ; SSE2-NEXT:    pxor %xmm0, %xmm0
26320 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
26321 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26322 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26323 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483680,2147483680,2147483680,2147483680]
26324 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
26325 ; SSE2-NEXT:    retq
26327 ; SSE3-LABEL: ult_32_v2i64:
26328 ; SSE3:       # %bb.0:
26329 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26330 ; SSE3-NEXT:    psrlw $1, %xmm1
26331 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26332 ; SSE3-NEXT:    psubb %xmm1, %xmm0
26333 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26334 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
26335 ; SSE3-NEXT:    pand %xmm1, %xmm2
26336 ; SSE3-NEXT:    psrlw $2, %xmm0
26337 ; SSE3-NEXT:    pand %xmm1, %xmm0
26338 ; SSE3-NEXT:    paddb %xmm2, %xmm0
26339 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26340 ; SSE3-NEXT:    psrlw $4, %xmm1
26341 ; SSE3-NEXT:    paddb %xmm0, %xmm1
26342 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26343 ; SSE3-NEXT:    pxor %xmm0, %xmm0
26344 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
26345 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26346 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26347 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483680,2147483680,2147483680,2147483680]
26348 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
26349 ; SSE3-NEXT:    retq
26351 ; SSSE3-LABEL: ult_32_v2i64:
26352 ; SSSE3:       # %bb.0:
26353 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26354 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
26355 ; SSSE3-NEXT:    pand %xmm1, %xmm2
26356 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26357 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
26358 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
26359 ; SSSE3-NEXT:    psrlw $4, %xmm0
26360 ; SSSE3-NEXT:    pand %xmm1, %xmm0
26361 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
26362 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
26363 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
26364 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
26365 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26366 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26367 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483680,2147483680,2147483680,2147483680]
26368 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
26369 ; SSSE3-NEXT:    retq
26371 ; SSE41-LABEL: ult_32_v2i64:
26372 ; SSE41:       # %bb.0:
26373 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26374 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
26375 ; SSE41-NEXT:    pand %xmm1, %xmm2
26376 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26377 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
26378 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
26379 ; SSE41-NEXT:    psrlw $4, %xmm0
26380 ; SSE41-NEXT:    pand %xmm1, %xmm0
26381 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
26382 ; SSE41-NEXT:    paddb %xmm4, %xmm3
26383 ; SSE41-NEXT:    pxor %xmm0, %xmm0
26384 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
26385 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26386 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26387 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483680,2147483680,2147483680,2147483680]
26388 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
26389 ; SSE41-NEXT:    retq
26391 ; AVX1-LABEL: ult_32_v2i64:
26392 ; AVX1:       # %bb.0:
26393 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26394 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
26395 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26396 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26397 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
26398 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
26399 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26400 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26401 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26402 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26403 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [32,32]
26404 ; AVX1-NEXT:    # xmm1 = mem[0,0]
26405 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26406 ; AVX1-NEXT:    retq
26408 ; AVX2-LABEL: ult_32_v2i64:
26409 ; AVX2:       # %bb.0:
26410 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26411 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
26412 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26413 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26414 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
26415 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
26416 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26417 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26418 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26419 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26420 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [32,32]
26421 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26422 ; AVX2-NEXT:    retq
26424 ; AVX512VPOPCNTDQ-LABEL: ult_32_v2i64:
26425 ; AVX512VPOPCNTDQ:       # %bb.0:
26426 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26427 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
26428 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [32,32]
26429 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26430 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
26431 ; AVX512VPOPCNTDQ-NEXT:    retq
26433 ; AVX512VPOPCNTDQVL-LABEL: ult_32_v2i64:
26434 ; AVX512VPOPCNTDQVL:       # %bb.0:
26435 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
26436 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [32,32]
26437 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26438 ; AVX512VPOPCNTDQVL-NEXT:    retq
26440 ; BITALG_NOVLX-LABEL: ult_32_v2i64:
26441 ; BITALG_NOVLX:       # %bb.0:
26442 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26443 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
26444 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26445 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26446 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [32,32]
26447 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26448 ; BITALG_NOVLX-NEXT:    vzeroupper
26449 ; BITALG_NOVLX-NEXT:    retq
26451 ; BITALG-LABEL: ult_32_v2i64:
26452 ; BITALG:       # %bb.0:
26453 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
26454 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26455 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26456 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [32,32]
26457 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26458 ; BITALG-NEXT:    retq
26459   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26460   %3 = icmp ult <2 x i64> %2, <i64 32, i64 32>
26461   %4 = sext <2 x i1> %3 to <2 x i64>
26462   ret <2 x i64> %4
26465 define <2 x i64> @ugt_32_v2i64(<2 x i64> %0) {
26466 ; SSE2-LABEL: ugt_32_v2i64:
26467 ; SSE2:       # %bb.0:
26468 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26469 ; SSE2-NEXT:    psrlw $1, %xmm1
26470 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26471 ; SSE2-NEXT:    psubb %xmm1, %xmm0
26472 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26473 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
26474 ; SSE2-NEXT:    pand %xmm1, %xmm2
26475 ; SSE2-NEXT:    psrlw $2, %xmm0
26476 ; SSE2-NEXT:    pand %xmm1, %xmm0
26477 ; SSE2-NEXT:    paddb %xmm2, %xmm0
26478 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26479 ; SSE2-NEXT:    psrlw $4, %xmm1
26480 ; SSE2-NEXT:    paddb %xmm0, %xmm1
26481 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26482 ; SSE2-NEXT:    pxor %xmm0, %xmm0
26483 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
26484 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26485 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26486 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26487 ; SSE2-NEXT:    retq
26489 ; SSE3-LABEL: ugt_32_v2i64:
26490 ; SSE3:       # %bb.0:
26491 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26492 ; SSE3-NEXT:    psrlw $1, %xmm1
26493 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26494 ; SSE3-NEXT:    psubb %xmm1, %xmm0
26495 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26496 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
26497 ; SSE3-NEXT:    pand %xmm1, %xmm2
26498 ; SSE3-NEXT:    psrlw $2, %xmm0
26499 ; SSE3-NEXT:    pand %xmm1, %xmm0
26500 ; SSE3-NEXT:    paddb %xmm2, %xmm0
26501 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26502 ; SSE3-NEXT:    psrlw $4, %xmm1
26503 ; SSE3-NEXT:    paddb %xmm0, %xmm1
26504 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26505 ; SSE3-NEXT:    pxor %xmm0, %xmm0
26506 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
26507 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26508 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26509 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26510 ; SSE3-NEXT:    retq
26512 ; SSSE3-LABEL: ugt_32_v2i64:
26513 ; SSSE3:       # %bb.0:
26514 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26515 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
26516 ; SSSE3-NEXT:    pand %xmm1, %xmm2
26517 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26518 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
26519 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
26520 ; SSSE3-NEXT:    psrlw $4, %xmm0
26521 ; SSSE3-NEXT:    pand %xmm1, %xmm0
26522 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
26523 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
26524 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
26525 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
26526 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26527 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26528 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26529 ; SSSE3-NEXT:    retq
26531 ; SSE41-LABEL: ugt_32_v2i64:
26532 ; SSE41:       # %bb.0:
26533 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26534 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
26535 ; SSE41-NEXT:    pand %xmm1, %xmm2
26536 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26537 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
26538 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
26539 ; SSE41-NEXT:    psrlw $4, %xmm0
26540 ; SSE41-NEXT:    pand %xmm1, %xmm0
26541 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
26542 ; SSE41-NEXT:    paddb %xmm4, %xmm3
26543 ; SSE41-NEXT:    pxor %xmm0, %xmm0
26544 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
26545 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26546 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26547 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26548 ; SSE41-NEXT:    retq
26550 ; AVX1-LABEL: ugt_32_v2i64:
26551 ; AVX1:       # %bb.0:
26552 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26553 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
26554 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26555 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26556 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
26557 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
26558 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26559 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26560 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26561 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26562 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26563 ; AVX1-NEXT:    retq
26565 ; AVX2-LABEL: ugt_32_v2i64:
26566 ; AVX2:       # %bb.0:
26567 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26568 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
26569 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26570 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26571 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
26572 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
26573 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26574 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26575 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26576 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26577 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26578 ; AVX2-NEXT:    retq
26580 ; AVX512VPOPCNTDQ-LABEL: ugt_32_v2i64:
26581 ; AVX512VPOPCNTDQ:       # %bb.0:
26582 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26583 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
26584 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26585 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
26586 ; AVX512VPOPCNTDQ-NEXT:    retq
26588 ; AVX512VPOPCNTDQVL-LABEL: ugt_32_v2i64:
26589 ; AVX512VPOPCNTDQVL:       # %bb.0:
26590 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
26591 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [32,32]
26592 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
26593 ; AVX512VPOPCNTDQVL-NEXT:    retq
26595 ; BITALG_NOVLX-LABEL: ugt_32_v2i64:
26596 ; BITALG_NOVLX:       # %bb.0:
26597 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26598 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
26599 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26600 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26601 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26602 ; BITALG_NOVLX-NEXT:    vzeroupper
26603 ; BITALG_NOVLX-NEXT:    retq
26605 ; BITALG-LABEL: ugt_32_v2i64:
26606 ; BITALG:       # %bb.0:
26607 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
26608 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26609 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26610 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [32,32]
26611 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
26612 ; BITALG-NEXT:    retq
26613   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26614   %3 = icmp ugt <2 x i64> %2, <i64 32, i64 32>
26615   %4 = sext <2 x i1> %3 to <2 x i64>
26616   ret <2 x i64> %4
26619 define <2 x i64> @ult_33_v2i64(<2 x i64> %0) {
26620 ; SSE2-LABEL: ult_33_v2i64:
26621 ; SSE2:       # %bb.0:
26622 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26623 ; SSE2-NEXT:    psrlw $1, %xmm1
26624 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26625 ; SSE2-NEXT:    psubb %xmm1, %xmm0
26626 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26627 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
26628 ; SSE2-NEXT:    pand %xmm1, %xmm2
26629 ; SSE2-NEXT:    psrlw $2, %xmm0
26630 ; SSE2-NEXT:    pand %xmm1, %xmm0
26631 ; SSE2-NEXT:    paddb %xmm2, %xmm0
26632 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26633 ; SSE2-NEXT:    psrlw $4, %xmm1
26634 ; SSE2-NEXT:    paddb %xmm0, %xmm1
26635 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26636 ; SSE2-NEXT:    pxor %xmm0, %xmm0
26637 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
26638 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26639 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26640 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483681,2147483681,2147483681,2147483681]
26641 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
26642 ; SSE2-NEXT:    retq
26644 ; SSE3-LABEL: ult_33_v2i64:
26645 ; SSE3:       # %bb.0:
26646 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26647 ; SSE3-NEXT:    psrlw $1, %xmm1
26648 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26649 ; SSE3-NEXT:    psubb %xmm1, %xmm0
26650 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26651 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
26652 ; SSE3-NEXT:    pand %xmm1, %xmm2
26653 ; SSE3-NEXT:    psrlw $2, %xmm0
26654 ; SSE3-NEXT:    pand %xmm1, %xmm0
26655 ; SSE3-NEXT:    paddb %xmm2, %xmm0
26656 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26657 ; SSE3-NEXT:    psrlw $4, %xmm1
26658 ; SSE3-NEXT:    paddb %xmm0, %xmm1
26659 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26660 ; SSE3-NEXT:    pxor %xmm0, %xmm0
26661 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
26662 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26663 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26664 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483681,2147483681,2147483681,2147483681]
26665 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
26666 ; SSE3-NEXT:    retq
26668 ; SSSE3-LABEL: ult_33_v2i64:
26669 ; SSSE3:       # %bb.0:
26670 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26671 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
26672 ; SSSE3-NEXT:    pand %xmm1, %xmm2
26673 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26674 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
26675 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
26676 ; SSSE3-NEXT:    psrlw $4, %xmm0
26677 ; SSSE3-NEXT:    pand %xmm1, %xmm0
26678 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
26679 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
26680 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
26681 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
26682 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26683 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26684 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483681,2147483681,2147483681,2147483681]
26685 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
26686 ; SSSE3-NEXT:    retq
26688 ; SSE41-LABEL: ult_33_v2i64:
26689 ; SSE41:       # %bb.0:
26690 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26691 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
26692 ; SSE41-NEXT:    pand %xmm1, %xmm2
26693 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26694 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
26695 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
26696 ; SSE41-NEXT:    psrlw $4, %xmm0
26697 ; SSE41-NEXT:    pand %xmm1, %xmm0
26698 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
26699 ; SSE41-NEXT:    paddb %xmm4, %xmm3
26700 ; SSE41-NEXT:    pxor %xmm0, %xmm0
26701 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
26702 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26703 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26704 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483681,2147483681,2147483681,2147483681]
26705 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
26706 ; SSE41-NEXT:    retq
26708 ; AVX1-LABEL: ult_33_v2i64:
26709 ; AVX1:       # %bb.0:
26710 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26711 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
26712 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26713 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26714 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
26715 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
26716 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26717 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26718 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26719 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26720 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [33,33]
26721 ; AVX1-NEXT:    # xmm1 = mem[0,0]
26722 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26723 ; AVX1-NEXT:    retq
26725 ; AVX2-LABEL: ult_33_v2i64:
26726 ; AVX2:       # %bb.0:
26727 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26728 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
26729 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26730 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26731 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
26732 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
26733 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26734 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26735 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26736 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26737 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [33,33]
26738 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26739 ; AVX2-NEXT:    retq
26741 ; AVX512VPOPCNTDQ-LABEL: ult_33_v2i64:
26742 ; AVX512VPOPCNTDQ:       # %bb.0:
26743 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26744 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
26745 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [33,33]
26746 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26747 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
26748 ; AVX512VPOPCNTDQ-NEXT:    retq
26750 ; AVX512VPOPCNTDQVL-LABEL: ult_33_v2i64:
26751 ; AVX512VPOPCNTDQVL:       # %bb.0:
26752 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
26753 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [33,33]
26754 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26755 ; AVX512VPOPCNTDQVL-NEXT:    retq
26757 ; BITALG_NOVLX-LABEL: ult_33_v2i64:
26758 ; BITALG_NOVLX:       # %bb.0:
26759 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26760 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
26761 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26762 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26763 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [33,33]
26764 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26765 ; BITALG_NOVLX-NEXT:    vzeroupper
26766 ; BITALG_NOVLX-NEXT:    retq
26768 ; BITALG-LABEL: ult_33_v2i64:
26769 ; BITALG:       # %bb.0:
26770 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
26771 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26772 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26773 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [33,33]
26774 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
26775 ; BITALG-NEXT:    retq
26776   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26777   %3 = icmp ult <2 x i64> %2, <i64 33, i64 33>
26778   %4 = sext <2 x i1> %3 to <2 x i64>
26779   ret <2 x i64> %4
26782 define <2 x i64> @ugt_33_v2i64(<2 x i64> %0) {
26783 ; SSE2-LABEL: ugt_33_v2i64:
26784 ; SSE2:       # %bb.0:
26785 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26786 ; SSE2-NEXT:    psrlw $1, %xmm1
26787 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26788 ; SSE2-NEXT:    psubb %xmm1, %xmm0
26789 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26790 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
26791 ; SSE2-NEXT:    pand %xmm1, %xmm2
26792 ; SSE2-NEXT:    psrlw $2, %xmm0
26793 ; SSE2-NEXT:    pand %xmm1, %xmm0
26794 ; SSE2-NEXT:    paddb %xmm2, %xmm0
26795 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26796 ; SSE2-NEXT:    psrlw $4, %xmm1
26797 ; SSE2-NEXT:    paddb %xmm0, %xmm1
26798 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26799 ; SSE2-NEXT:    pxor %xmm0, %xmm0
26800 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
26801 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26802 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26803 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26804 ; SSE2-NEXT:    retq
26806 ; SSE3-LABEL: ugt_33_v2i64:
26807 ; SSE3:       # %bb.0:
26808 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26809 ; SSE3-NEXT:    psrlw $1, %xmm1
26810 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26811 ; SSE3-NEXT:    psubb %xmm1, %xmm0
26812 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26813 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
26814 ; SSE3-NEXT:    pand %xmm1, %xmm2
26815 ; SSE3-NEXT:    psrlw $2, %xmm0
26816 ; SSE3-NEXT:    pand %xmm1, %xmm0
26817 ; SSE3-NEXT:    paddb %xmm2, %xmm0
26818 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26819 ; SSE3-NEXT:    psrlw $4, %xmm1
26820 ; SSE3-NEXT:    paddb %xmm0, %xmm1
26821 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26822 ; SSE3-NEXT:    pxor %xmm0, %xmm0
26823 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
26824 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26825 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26826 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26827 ; SSE3-NEXT:    retq
26829 ; SSSE3-LABEL: ugt_33_v2i64:
26830 ; SSSE3:       # %bb.0:
26831 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26832 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
26833 ; SSSE3-NEXT:    pand %xmm1, %xmm2
26834 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26835 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
26836 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
26837 ; SSSE3-NEXT:    psrlw $4, %xmm0
26838 ; SSSE3-NEXT:    pand %xmm1, %xmm0
26839 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
26840 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
26841 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
26842 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
26843 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26844 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26845 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26846 ; SSSE3-NEXT:    retq
26848 ; SSE41-LABEL: ugt_33_v2i64:
26849 ; SSE41:       # %bb.0:
26850 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26851 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
26852 ; SSE41-NEXT:    pand %xmm1, %xmm2
26853 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26854 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
26855 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
26856 ; SSE41-NEXT:    psrlw $4, %xmm0
26857 ; SSE41-NEXT:    pand %xmm1, %xmm0
26858 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
26859 ; SSE41-NEXT:    paddb %xmm4, %xmm3
26860 ; SSE41-NEXT:    pxor %xmm0, %xmm0
26861 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
26862 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
26863 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26864 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
26865 ; SSE41-NEXT:    retq
26867 ; AVX1-LABEL: ugt_33_v2i64:
26868 ; AVX1:       # %bb.0:
26869 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26870 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
26871 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26872 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26873 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
26874 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
26875 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26876 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26877 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26878 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26879 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26880 ; AVX1-NEXT:    retq
26882 ; AVX2-LABEL: ugt_33_v2i64:
26883 ; AVX2:       # %bb.0:
26884 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26885 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
26886 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26887 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
26888 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
26889 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
26890 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
26891 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
26892 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26893 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26894 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26895 ; AVX2-NEXT:    retq
26897 ; AVX512VPOPCNTDQ-LABEL: ugt_33_v2i64:
26898 ; AVX512VPOPCNTDQ:       # %bb.0:
26899 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26900 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
26901 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26902 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
26903 ; AVX512VPOPCNTDQ-NEXT:    retq
26905 ; AVX512VPOPCNTDQVL-LABEL: ugt_33_v2i64:
26906 ; AVX512VPOPCNTDQVL:       # %bb.0:
26907 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
26908 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [33,33]
26909 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
26910 ; AVX512VPOPCNTDQVL-NEXT:    retq
26912 ; BITALG_NOVLX-LABEL: ugt_33_v2i64:
26913 ; BITALG_NOVLX:       # %bb.0:
26914 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
26915 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
26916 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26917 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26918 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
26919 ; BITALG_NOVLX-NEXT:    vzeroupper
26920 ; BITALG_NOVLX-NEXT:    retq
26922 ; BITALG-LABEL: ugt_33_v2i64:
26923 ; BITALG:       # %bb.0:
26924 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
26925 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
26926 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
26927 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [33,33]
26928 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
26929 ; BITALG-NEXT:    retq
26930   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26931   %3 = icmp ugt <2 x i64> %2, <i64 33, i64 33>
26932   %4 = sext <2 x i1> %3 to <2 x i64>
26933   ret <2 x i64> %4
26936 define <2 x i64> @ult_34_v2i64(<2 x i64> %0) {
26937 ; SSE2-LABEL: ult_34_v2i64:
26938 ; SSE2:       # %bb.0:
26939 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26940 ; SSE2-NEXT:    psrlw $1, %xmm1
26941 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26942 ; SSE2-NEXT:    psubb %xmm1, %xmm0
26943 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26944 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
26945 ; SSE2-NEXT:    pand %xmm1, %xmm2
26946 ; SSE2-NEXT:    psrlw $2, %xmm0
26947 ; SSE2-NEXT:    pand %xmm1, %xmm0
26948 ; SSE2-NEXT:    paddb %xmm2, %xmm0
26949 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
26950 ; SSE2-NEXT:    psrlw $4, %xmm1
26951 ; SSE2-NEXT:    paddb %xmm0, %xmm1
26952 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26953 ; SSE2-NEXT:    pxor %xmm0, %xmm0
26954 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
26955 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26956 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26957 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483682,2147483682,2147483682,2147483682]
26958 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
26959 ; SSE2-NEXT:    retq
26961 ; SSE3-LABEL: ult_34_v2i64:
26962 ; SSE3:       # %bb.0:
26963 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26964 ; SSE3-NEXT:    psrlw $1, %xmm1
26965 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26966 ; SSE3-NEXT:    psubb %xmm1, %xmm0
26967 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
26968 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
26969 ; SSE3-NEXT:    pand %xmm1, %xmm2
26970 ; SSE3-NEXT:    psrlw $2, %xmm0
26971 ; SSE3-NEXT:    pand %xmm1, %xmm0
26972 ; SSE3-NEXT:    paddb %xmm2, %xmm0
26973 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
26974 ; SSE3-NEXT:    psrlw $4, %xmm1
26975 ; SSE3-NEXT:    paddb %xmm0, %xmm1
26976 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26977 ; SSE3-NEXT:    pxor %xmm0, %xmm0
26978 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
26979 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
26980 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
26981 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483682,2147483682,2147483682,2147483682]
26982 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
26983 ; SSE3-NEXT:    retq
26985 ; SSSE3-LABEL: ult_34_v2i64:
26986 ; SSSE3:       # %bb.0:
26987 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
26988 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
26989 ; SSSE3-NEXT:    pand %xmm1, %xmm2
26990 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
26991 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
26992 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
26993 ; SSSE3-NEXT:    psrlw $4, %xmm0
26994 ; SSSE3-NEXT:    pand %xmm1, %xmm0
26995 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
26996 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
26997 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
26998 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
26999 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27000 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27001 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483682,2147483682,2147483682,2147483682]
27002 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
27003 ; SSSE3-NEXT:    retq
27005 ; SSE41-LABEL: ult_34_v2i64:
27006 ; SSE41:       # %bb.0:
27007 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27008 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
27009 ; SSE41-NEXT:    pand %xmm1, %xmm2
27010 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27011 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
27012 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
27013 ; SSE41-NEXT:    psrlw $4, %xmm0
27014 ; SSE41-NEXT:    pand %xmm1, %xmm0
27015 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
27016 ; SSE41-NEXT:    paddb %xmm4, %xmm3
27017 ; SSE41-NEXT:    pxor %xmm0, %xmm0
27018 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
27019 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27020 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27021 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483682,2147483682,2147483682,2147483682]
27022 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
27023 ; SSE41-NEXT:    retq
27025 ; AVX1-LABEL: ult_34_v2i64:
27026 ; AVX1:       # %bb.0:
27027 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27028 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
27029 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27030 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27031 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
27032 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
27033 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27034 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27035 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27036 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27037 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [34,34]
27038 ; AVX1-NEXT:    # xmm1 = mem[0,0]
27039 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27040 ; AVX1-NEXT:    retq
27042 ; AVX2-LABEL: ult_34_v2i64:
27043 ; AVX2:       # %bb.0:
27044 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27045 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
27046 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27047 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27048 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
27049 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
27050 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27051 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27052 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27053 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27054 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [34,34]
27055 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27056 ; AVX2-NEXT:    retq
27058 ; AVX512VPOPCNTDQ-LABEL: ult_34_v2i64:
27059 ; AVX512VPOPCNTDQ:       # %bb.0:
27060 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27061 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
27062 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [34,34]
27063 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27064 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
27065 ; AVX512VPOPCNTDQ-NEXT:    retq
27067 ; AVX512VPOPCNTDQVL-LABEL: ult_34_v2i64:
27068 ; AVX512VPOPCNTDQVL:       # %bb.0:
27069 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
27070 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [34,34]
27071 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27072 ; AVX512VPOPCNTDQVL-NEXT:    retq
27074 ; BITALG_NOVLX-LABEL: ult_34_v2i64:
27075 ; BITALG_NOVLX:       # %bb.0:
27076 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27077 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
27078 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27079 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27080 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [34,34]
27081 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27082 ; BITALG_NOVLX-NEXT:    vzeroupper
27083 ; BITALG_NOVLX-NEXT:    retq
27085 ; BITALG-LABEL: ult_34_v2i64:
27086 ; BITALG:       # %bb.0:
27087 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
27088 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27089 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27090 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [34,34]
27091 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27092 ; BITALG-NEXT:    retq
27093   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27094   %3 = icmp ult <2 x i64> %2, <i64 34, i64 34>
27095   %4 = sext <2 x i1> %3 to <2 x i64>
27096   ret <2 x i64> %4
27099 define <2 x i64> @ugt_34_v2i64(<2 x i64> %0) {
27100 ; SSE2-LABEL: ugt_34_v2i64:
27101 ; SSE2:       # %bb.0:
27102 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27103 ; SSE2-NEXT:    psrlw $1, %xmm1
27104 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27105 ; SSE2-NEXT:    psubb %xmm1, %xmm0
27106 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27107 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
27108 ; SSE2-NEXT:    pand %xmm1, %xmm2
27109 ; SSE2-NEXT:    psrlw $2, %xmm0
27110 ; SSE2-NEXT:    pand %xmm1, %xmm0
27111 ; SSE2-NEXT:    paddb %xmm2, %xmm0
27112 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27113 ; SSE2-NEXT:    psrlw $4, %xmm1
27114 ; SSE2-NEXT:    paddb %xmm0, %xmm1
27115 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27116 ; SSE2-NEXT:    pxor %xmm0, %xmm0
27117 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
27118 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27119 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27120 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27121 ; SSE2-NEXT:    retq
27123 ; SSE3-LABEL: ugt_34_v2i64:
27124 ; SSE3:       # %bb.0:
27125 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27126 ; SSE3-NEXT:    psrlw $1, %xmm1
27127 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27128 ; SSE3-NEXT:    psubb %xmm1, %xmm0
27129 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27130 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
27131 ; SSE3-NEXT:    pand %xmm1, %xmm2
27132 ; SSE3-NEXT:    psrlw $2, %xmm0
27133 ; SSE3-NEXT:    pand %xmm1, %xmm0
27134 ; SSE3-NEXT:    paddb %xmm2, %xmm0
27135 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27136 ; SSE3-NEXT:    psrlw $4, %xmm1
27137 ; SSE3-NEXT:    paddb %xmm0, %xmm1
27138 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27139 ; SSE3-NEXT:    pxor %xmm0, %xmm0
27140 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
27141 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27142 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27143 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27144 ; SSE3-NEXT:    retq
27146 ; SSSE3-LABEL: ugt_34_v2i64:
27147 ; SSSE3:       # %bb.0:
27148 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27149 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
27150 ; SSSE3-NEXT:    pand %xmm1, %xmm2
27151 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27152 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
27153 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
27154 ; SSSE3-NEXT:    psrlw $4, %xmm0
27155 ; SSSE3-NEXT:    pand %xmm1, %xmm0
27156 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
27157 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
27158 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
27159 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
27160 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27161 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27162 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27163 ; SSSE3-NEXT:    retq
27165 ; SSE41-LABEL: ugt_34_v2i64:
27166 ; SSE41:       # %bb.0:
27167 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27168 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
27169 ; SSE41-NEXT:    pand %xmm1, %xmm2
27170 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27171 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
27172 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
27173 ; SSE41-NEXT:    psrlw $4, %xmm0
27174 ; SSE41-NEXT:    pand %xmm1, %xmm0
27175 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
27176 ; SSE41-NEXT:    paddb %xmm4, %xmm3
27177 ; SSE41-NEXT:    pxor %xmm0, %xmm0
27178 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
27179 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27180 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27181 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27182 ; SSE41-NEXT:    retq
27184 ; AVX1-LABEL: ugt_34_v2i64:
27185 ; AVX1:       # %bb.0:
27186 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27187 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
27188 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27189 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27190 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
27191 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
27192 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27193 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27194 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27195 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27196 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27197 ; AVX1-NEXT:    retq
27199 ; AVX2-LABEL: ugt_34_v2i64:
27200 ; AVX2:       # %bb.0:
27201 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27202 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
27203 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27204 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27205 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
27206 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
27207 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27208 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27209 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27210 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27211 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27212 ; AVX2-NEXT:    retq
27214 ; AVX512VPOPCNTDQ-LABEL: ugt_34_v2i64:
27215 ; AVX512VPOPCNTDQ:       # %bb.0:
27216 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27217 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
27218 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27219 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
27220 ; AVX512VPOPCNTDQ-NEXT:    retq
27222 ; AVX512VPOPCNTDQVL-LABEL: ugt_34_v2i64:
27223 ; AVX512VPOPCNTDQVL:       # %bb.0:
27224 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
27225 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [34,34]
27226 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
27227 ; AVX512VPOPCNTDQVL-NEXT:    retq
27229 ; BITALG_NOVLX-LABEL: ugt_34_v2i64:
27230 ; BITALG_NOVLX:       # %bb.0:
27231 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27232 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
27233 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27234 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27235 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27236 ; BITALG_NOVLX-NEXT:    vzeroupper
27237 ; BITALG_NOVLX-NEXT:    retq
27239 ; BITALG-LABEL: ugt_34_v2i64:
27240 ; BITALG:       # %bb.0:
27241 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
27242 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27243 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27244 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [34,34]
27245 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
27246 ; BITALG-NEXT:    retq
27247   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27248   %3 = icmp ugt <2 x i64> %2, <i64 34, i64 34>
27249   %4 = sext <2 x i1> %3 to <2 x i64>
27250   ret <2 x i64> %4
27253 define <2 x i64> @ult_35_v2i64(<2 x i64> %0) {
27254 ; SSE2-LABEL: ult_35_v2i64:
27255 ; SSE2:       # %bb.0:
27256 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27257 ; SSE2-NEXT:    psrlw $1, %xmm1
27258 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27259 ; SSE2-NEXT:    psubb %xmm1, %xmm0
27260 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27261 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
27262 ; SSE2-NEXT:    pand %xmm1, %xmm2
27263 ; SSE2-NEXT:    psrlw $2, %xmm0
27264 ; SSE2-NEXT:    pand %xmm1, %xmm0
27265 ; SSE2-NEXT:    paddb %xmm2, %xmm0
27266 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27267 ; SSE2-NEXT:    psrlw $4, %xmm1
27268 ; SSE2-NEXT:    paddb %xmm0, %xmm1
27269 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27270 ; SSE2-NEXT:    pxor %xmm0, %xmm0
27271 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
27272 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27273 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27274 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483683,2147483683,2147483683,2147483683]
27275 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
27276 ; SSE2-NEXT:    retq
27278 ; SSE3-LABEL: ult_35_v2i64:
27279 ; SSE3:       # %bb.0:
27280 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27281 ; SSE3-NEXT:    psrlw $1, %xmm1
27282 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27283 ; SSE3-NEXT:    psubb %xmm1, %xmm0
27284 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27285 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
27286 ; SSE3-NEXT:    pand %xmm1, %xmm2
27287 ; SSE3-NEXT:    psrlw $2, %xmm0
27288 ; SSE3-NEXT:    pand %xmm1, %xmm0
27289 ; SSE3-NEXT:    paddb %xmm2, %xmm0
27290 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27291 ; SSE3-NEXT:    psrlw $4, %xmm1
27292 ; SSE3-NEXT:    paddb %xmm0, %xmm1
27293 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27294 ; SSE3-NEXT:    pxor %xmm0, %xmm0
27295 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
27296 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27297 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27298 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483683,2147483683,2147483683,2147483683]
27299 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
27300 ; SSE3-NEXT:    retq
27302 ; SSSE3-LABEL: ult_35_v2i64:
27303 ; SSSE3:       # %bb.0:
27304 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27305 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
27306 ; SSSE3-NEXT:    pand %xmm1, %xmm2
27307 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27308 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
27309 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
27310 ; SSSE3-NEXT:    psrlw $4, %xmm0
27311 ; SSSE3-NEXT:    pand %xmm1, %xmm0
27312 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
27313 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
27314 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
27315 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
27316 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27317 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27318 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483683,2147483683,2147483683,2147483683]
27319 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
27320 ; SSSE3-NEXT:    retq
27322 ; SSE41-LABEL: ult_35_v2i64:
27323 ; SSE41:       # %bb.0:
27324 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27325 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
27326 ; SSE41-NEXT:    pand %xmm1, %xmm2
27327 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27328 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
27329 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
27330 ; SSE41-NEXT:    psrlw $4, %xmm0
27331 ; SSE41-NEXT:    pand %xmm1, %xmm0
27332 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
27333 ; SSE41-NEXT:    paddb %xmm4, %xmm3
27334 ; SSE41-NEXT:    pxor %xmm0, %xmm0
27335 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
27336 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27337 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27338 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483683,2147483683,2147483683,2147483683]
27339 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
27340 ; SSE41-NEXT:    retq
27342 ; AVX1-LABEL: ult_35_v2i64:
27343 ; AVX1:       # %bb.0:
27344 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27345 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
27346 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27347 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27348 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
27349 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
27350 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27351 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27352 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27353 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27354 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [35,35]
27355 ; AVX1-NEXT:    # xmm1 = mem[0,0]
27356 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27357 ; AVX1-NEXT:    retq
27359 ; AVX2-LABEL: ult_35_v2i64:
27360 ; AVX2:       # %bb.0:
27361 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27362 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
27363 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27364 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27365 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
27366 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
27367 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27368 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27369 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27370 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27371 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [35,35]
27372 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27373 ; AVX2-NEXT:    retq
27375 ; AVX512VPOPCNTDQ-LABEL: ult_35_v2i64:
27376 ; AVX512VPOPCNTDQ:       # %bb.0:
27377 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27378 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
27379 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [35,35]
27380 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27381 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
27382 ; AVX512VPOPCNTDQ-NEXT:    retq
27384 ; AVX512VPOPCNTDQVL-LABEL: ult_35_v2i64:
27385 ; AVX512VPOPCNTDQVL:       # %bb.0:
27386 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
27387 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [35,35]
27388 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27389 ; AVX512VPOPCNTDQVL-NEXT:    retq
27391 ; BITALG_NOVLX-LABEL: ult_35_v2i64:
27392 ; BITALG_NOVLX:       # %bb.0:
27393 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27394 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
27395 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27396 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27397 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [35,35]
27398 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27399 ; BITALG_NOVLX-NEXT:    vzeroupper
27400 ; BITALG_NOVLX-NEXT:    retq
27402 ; BITALG-LABEL: ult_35_v2i64:
27403 ; BITALG:       # %bb.0:
27404 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
27405 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27406 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27407 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [35,35]
27408 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27409 ; BITALG-NEXT:    retq
27410   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27411   %3 = icmp ult <2 x i64> %2, <i64 35, i64 35>
27412   %4 = sext <2 x i1> %3 to <2 x i64>
27413   ret <2 x i64> %4
27416 define <2 x i64> @ugt_35_v2i64(<2 x i64> %0) {
27417 ; SSE2-LABEL: ugt_35_v2i64:
27418 ; SSE2:       # %bb.0:
27419 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27420 ; SSE2-NEXT:    psrlw $1, %xmm1
27421 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27422 ; SSE2-NEXT:    psubb %xmm1, %xmm0
27423 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27424 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
27425 ; SSE2-NEXT:    pand %xmm1, %xmm2
27426 ; SSE2-NEXT:    psrlw $2, %xmm0
27427 ; SSE2-NEXT:    pand %xmm1, %xmm0
27428 ; SSE2-NEXT:    paddb %xmm2, %xmm0
27429 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27430 ; SSE2-NEXT:    psrlw $4, %xmm1
27431 ; SSE2-NEXT:    paddb %xmm0, %xmm1
27432 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27433 ; SSE2-NEXT:    pxor %xmm0, %xmm0
27434 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
27435 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27436 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27437 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27438 ; SSE2-NEXT:    retq
27440 ; SSE3-LABEL: ugt_35_v2i64:
27441 ; SSE3:       # %bb.0:
27442 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27443 ; SSE3-NEXT:    psrlw $1, %xmm1
27444 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27445 ; SSE3-NEXT:    psubb %xmm1, %xmm0
27446 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27447 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
27448 ; SSE3-NEXT:    pand %xmm1, %xmm2
27449 ; SSE3-NEXT:    psrlw $2, %xmm0
27450 ; SSE3-NEXT:    pand %xmm1, %xmm0
27451 ; SSE3-NEXT:    paddb %xmm2, %xmm0
27452 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27453 ; SSE3-NEXT:    psrlw $4, %xmm1
27454 ; SSE3-NEXT:    paddb %xmm0, %xmm1
27455 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27456 ; SSE3-NEXT:    pxor %xmm0, %xmm0
27457 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
27458 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27459 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27460 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27461 ; SSE3-NEXT:    retq
27463 ; SSSE3-LABEL: ugt_35_v2i64:
27464 ; SSSE3:       # %bb.0:
27465 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27466 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
27467 ; SSSE3-NEXT:    pand %xmm1, %xmm2
27468 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27469 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
27470 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
27471 ; SSSE3-NEXT:    psrlw $4, %xmm0
27472 ; SSSE3-NEXT:    pand %xmm1, %xmm0
27473 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
27474 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
27475 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
27476 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
27477 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27478 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27479 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27480 ; SSSE3-NEXT:    retq
27482 ; SSE41-LABEL: ugt_35_v2i64:
27483 ; SSE41:       # %bb.0:
27484 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27485 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
27486 ; SSE41-NEXT:    pand %xmm1, %xmm2
27487 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27488 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
27489 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
27490 ; SSE41-NEXT:    psrlw $4, %xmm0
27491 ; SSE41-NEXT:    pand %xmm1, %xmm0
27492 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
27493 ; SSE41-NEXT:    paddb %xmm4, %xmm3
27494 ; SSE41-NEXT:    pxor %xmm0, %xmm0
27495 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
27496 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27497 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27498 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27499 ; SSE41-NEXT:    retq
27501 ; AVX1-LABEL: ugt_35_v2i64:
27502 ; AVX1:       # %bb.0:
27503 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27504 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
27505 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27506 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27507 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
27508 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
27509 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27510 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27511 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27512 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27513 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27514 ; AVX1-NEXT:    retq
27516 ; AVX2-LABEL: ugt_35_v2i64:
27517 ; AVX2:       # %bb.0:
27518 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27519 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
27520 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27521 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27522 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
27523 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
27524 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27525 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27526 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27527 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27528 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27529 ; AVX2-NEXT:    retq
27531 ; AVX512VPOPCNTDQ-LABEL: ugt_35_v2i64:
27532 ; AVX512VPOPCNTDQ:       # %bb.0:
27533 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27534 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
27535 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27536 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
27537 ; AVX512VPOPCNTDQ-NEXT:    retq
27539 ; AVX512VPOPCNTDQVL-LABEL: ugt_35_v2i64:
27540 ; AVX512VPOPCNTDQVL:       # %bb.0:
27541 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
27542 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [35,35]
27543 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
27544 ; AVX512VPOPCNTDQVL-NEXT:    retq
27546 ; BITALG_NOVLX-LABEL: ugt_35_v2i64:
27547 ; BITALG_NOVLX:       # %bb.0:
27548 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27549 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
27550 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27551 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27552 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27553 ; BITALG_NOVLX-NEXT:    vzeroupper
27554 ; BITALG_NOVLX-NEXT:    retq
27556 ; BITALG-LABEL: ugt_35_v2i64:
27557 ; BITALG:       # %bb.0:
27558 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
27559 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27560 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27561 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [35,35]
27562 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
27563 ; BITALG-NEXT:    retq
27564   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27565   %3 = icmp ugt <2 x i64> %2, <i64 35, i64 35>
27566   %4 = sext <2 x i1> %3 to <2 x i64>
27567   ret <2 x i64> %4
27570 define <2 x i64> @ult_36_v2i64(<2 x i64> %0) {
27571 ; SSE2-LABEL: ult_36_v2i64:
27572 ; SSE2:       # %bb.0:
27573 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27574 ; SSE2-NEXT:    psrlw $1, %xmm1
27575 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27576 ; SSE2-NEXT:    psubb %xmm1, %xmm0
27577 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27578 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
27579 ; SSE2-NEXT:    pand %xmm1, %xmm2
27580 ; SSE2-NEXT:    psrlw $2, %xmm0
27581 ; SSE2-NEXT:    pand %xmm1, %xmm0
27582 ; SSE2-NEXT:    paddb %xmm2, %xmm0
27583 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27584 ; SSE2-NEXT:    psrlw $4, %xmm1
27585 ; SSE2-NEXT:    paddb %xmm0, %xmm1
27586 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27587 ; SSE2-NEXT:    pxor %xmm0, %xmm0
27588 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
27589 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27590 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27591 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483684,2147483684,2147483684,2147483684]
27592 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
27593 ; SSE2-NEXT:    retq
27595 ; SSE3-LABEL: ult_36_v2i64:
27596 ; SSE3:       # %bb.0:
27597 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27598 ; SSE3-NEXT:    psrlw $1, %xmm1
27599 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27600 ; SSE3-NEXT:    psubb %xmm1, %xmm0
27601 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27602 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
27603 ; SSE3-NEXT:    pand %xmm1, %xmm2
27604 ; SSE3-NEXT:    psrlw $2, %xmm0
27605 ; SSE3-NEXT:    pand %xmm1, %xmm0
27606 ; SSE3-NEXT:    paddb %xmm2, %xmm0
27607 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27608 ; SSE3-NEXT:    psrlw $4, %xmm1
27609 ; SSE3-NEXT:    paddb %xmm0, %xmm1
27610 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27611 ; SSE3-NEXT:    pxor %xmm0, %xmm0
27612 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
27613 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27614 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27615 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483684,2147483684,2147483684,2147483684]
27616 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
27617 ; SSE3-NEXT:    retq
27619 ; SSSE3-LABEL: ult_36_v2i64:
27620 ; SSSE3:       # %bb.0:
27621 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27622 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
27623 ; SSSE3-NEXT:    pand %xmm1, %xmm2
27624 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27625 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
27626 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
27627 ; SSSE3-NEXT:    psrlw $4, %xmm0
27628 ; SSSE3-NEXT:    pand %xmm1, %xmm0
27629 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
27630 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
27631 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
27632 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
27633 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27634 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27635 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483684,2147483684,2147483684,2147483684]
27636 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
27637 ; SSSE3-NEXT:    retq
27639 ; SSE41-LABEL: ult_36_v2i64:
27640 ; SSE41:       # %bb.0:
27641 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27642 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
27643 ; SSE41-NEXT:    pand %xmm1, %xmm2
27644 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27645 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
27646 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
27647 ; SSE41-NEXT:    psrlw $4, %xmm0
27648 ; SSE41-NEXT:    pand %xmm1, %xmm0
27649 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
27650 ; SSE41-NEXT:    paddb %xmm4, %xmm3
27651 ; SSE41-NEXT:    pxor %xmm0, %xmm0
27652 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
27653 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27654 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27655 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483684,2147483684,2147483684,2147483684]
27656 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
27657 ; SSE41-NEXT:    retq
27659 ; AVX1-LABEL: ult_36_v2i64:
27660 ; AVX1:       # %bb.0:
27661 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27662 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
27663 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27664 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27665 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
27666 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
27667 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27668 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27669 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27670 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27671 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [36,36]
27672 ; AVX1-NEXT:    # xmm1 = mem[0,0]
27673 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27674 ; AVX1-NEXT:    retq
27676 ; AVX2-LABEL: ult_36_v2i64:
27677 ; AVX2:       # %bb.0:
27678 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27679 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
27680 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27681 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27682 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
27683 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
27684 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27685 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27686 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27687 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27688 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [36,36]
27689 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27690 ; AVX2-NEXT:    retq
27692 ; AVX512VPOPCNTDQ-LABEL: ult_36_v2i64:
27693 ; AVX512VPOPCNTDQ:       # %bb.0:
27694 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27695 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
27696 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [36,36]
27697 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27698 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
27699 ; AVX512VPOPCNTDQ-NEXT:    retq
27701 ; AVX512VPOPCNTDQVL-LABEL: ult_36_v2i64:
27702 ; AVX512VPOPCNTDQVL:       # %bb.0:
27703 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
27704 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [36,36]
27705 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27706 ; AVX512VPOPCNTDQVL-NEXT:    retq
27708 ; BITALG_NOVLX-LABEL: ult_36_v2i64:
27709 ; BITALG_NOVLX:       # %bb.0:
27710 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27711 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
27712 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27713 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27714 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [36,36]
27715 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27716 ; BITALG_NOVLX-NEXT:    vzeroupper
27717 ; BITALG_NOVLX-NEXT:    retq
27719 ; BITALG-LABEL: ult_36_v2i64:
27720 ; BITALG:       # %bb.0:
27721 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
27722 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27723 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27724 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [36,36]
27725 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27726 ; BITALG-NEXT:    retq
27727   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27728   %3 = icmp ult <2 x i64> %2, <i64 36, i64 36>
27729   %4 = sext <2 x i1> %3 to <2 x i64>
27730   ret <2 x i64> %4
27733 define <2 x i64> @ugt_36_v2i64(<2 x i64> %0) {
27734 ; SSE2-LABEL: ugt_36_v2i64:
27735 ; SSE2:       # %bb.0:
27736 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27737 ; SSE2-NEXT:    psrlw $1, %xmm1
27738 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27739 ; SSE2-NEXT:    psubb %xmm1, %xmm0
27740 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27741 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
27742 ; SSE2-NEXT:    pand %xmm1, %xmm2
27743 ; SSE2-NEXT:    psrlw $2, %xmm0
27744 ; SSE2-NEXT:    pand %xmm1, %xmm0
27745 ; SSE2-NEXT:    paddb %xmm2, %xmm0
27746 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27747 ; SSE2-NEXT:    psrlw $4, %xmm1
27748 ; SSE2-NEXT:    paddb %xmm0, %xmm1
27749 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27750 ; SSE2-NEXT:    pxor %xmm0, %xmm0
27751 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
27752 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27753 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27754 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27755 ; SSE2-NEXT:    retq
27757 ; SSE3-LABEL: ugt_36_v2i64:
27758 ; SSE3:       # %bb.0:
27759 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27760 ; SSE3-NEXT:    psrlw $1, %xmm1
27761 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27762 ; SSE3-NEXT:    psubb %xmm1, %xmm0
27763 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27764 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
27765 ; SSE3-NEXT:    pand %xmm1, %xmm2
27766 ; SSE3-NEXT:    psrlw $2, %xmm0
27767 ; SSE3-NEXT:    pand %xmm1, %xmm0
27768 ; SSE3-NEXT:    paddb %xmm2, %xmm0
27769 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27770 ; SSE3-NEXT:    psrlw $4, %xmm1
27771 ; SSE3-NEXT:    paddb %xmm0, %xmm1
27772 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27773 ; SSE3-NEXT:    pxor %xmm0, %xmm0
27774 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
27775 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27776 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27777 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27778 ; SSE3-NEXT:    retq
27780 ; SSSE3-LABEL: ugt_36_v2i64:
27781 ; SSSE3:       # %bb.0:
27782 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27783 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
27784 ; SSSE3-NEXT:    pand %xmm1, %xmm2
27785 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27786 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
27787 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
27788 ; SSSE3-NEXT:    psrlw $4, %xmm0
27789 ; SSSE3-NEXT:    pand %xmm1, %xmm0
27790 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
27791 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
27792 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
27793 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
27794 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27795 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27796 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27797 ; SSSE3-NEXT:    retq
27799 ; SSE41-LABEL: ugt_36_v2i64:
27800 ; SSE41:       # %bb.0:
27801 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27802 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
27803 ; SSE41-NEXT:    pand %xmm1, %xmm2
27804 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27805 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
27806 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
27807 ; SSE41-NEXT:    psrlw $4, %xmm0
27808 ; SSE41-NEXT:    pand %xmm1, %xmm0
27809 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
27810 ; SSE41-NEXT:    paddb %xmm4, %xmm3
27811 ; SSE41-NEXT:    pxor %xmm0, %xmm0
27812 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
27813 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
27814 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27815 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
27816 ; SSE41-NEXT:    retq
27818 ; AVX1-LABEL: ugt_36_v2i64:
27819 ; AVX1:       # %bb.0:
27820 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27821 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
27822 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27823 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27824 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
27825 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
27826 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27827 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27828 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27829 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27830 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27831 ; AVX1-NEXT:    retq
27833 ; AVX2-LABEL: ugt_36_v2i64:
27834 ; AVX2:       # %bb.0:
27835 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27836 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
27837 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27838 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27839 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
27840 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
27841 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27842 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27843 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27844 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27845 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27846 ; AVX2-NEXT:    retq
27848 ; AVX512VPOPCNTDQ-LABEL: ugt_36_v2i64:
27849 ; AVX512VPOPCNTDQ:       # %bb.0:
27850 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27851 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
27852 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27853 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
27854 ; AVX512VPOPCNTDQ-NEXT:    retq
27856 ; AVX512VPOPCNTDQVL-LABEL: ugt_36_v2i64:
27857 ; AVX512VPOPCNTDQVL:       # %bb.0:
27858 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
27859 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [36,36]
27860 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
27861 ; AVX512VPOPCNTDQVL-NEXT:    retq
27863 ; BITALG_NOVLX-LABEL: ugt_36_v2i64:
27864 ; BITALG_NOVLX:       # %bb.0:
27865 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
27866 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
27867 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27868 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27869 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
27870 ; BITALG_NOVLX-NEXT:    vzeroupper
27871 ; BITALG_NOVLX-NEXT:    retq
27873 ; BITALG-LABEL: ugt_36_v2i64:
27874 ; BITALG:       # %bb.0:
27875 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
27876 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27877 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27878 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [36,36]
27879 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
27880 ; BITALG-NEXT:    retq
27881   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27882   %3 = icmp ugt <2 x i64> %2, <i64 36, i64 36>
27883   %4 = sext <2 x i1> %3 to <2 x i64>
27884   ret <2 x i64> %4
27887 define <2 x i64> @ult_37_v2i64(<2 x i64> %0) {
27888 ; SSE2-LABEL: ult_37_v2i64:
27889 ; SSE2:       # %bb.0:
27890 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27891 ; SSE2-NEXT:    psrlw $1, %xmm1
27892 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27893 ; SSE2-NEXT:    psubb %xmm1, %xmm0
27894 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27895 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
27896 ; SSE2-NEXT:    pand %xmm1, %xmm2
27897 ; SSE2-NEXT:    psrlw $2, %xmm0
27898 ; SSE2-NEXT:    pand %xmm1, %xmm0
27899 ; SSE2-NEXT:    paddb %xmm2, %xmm0
27900 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
27901 ; SSE2-NEXT:    psrlw $4, %xmm1
27902 ; SSE2-NEXT:    paddb %xmm0, %xmm1
27903 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27904 ; SSE2-NEXT:    pxor %xmm0, %xmm0
27905 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
27906 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27907 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27908 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483685,2147483685,2147483685,2147483685]
27909 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
27910 ; SSE2-NEXT:    retq
27912 ; SSE3-LABEL: ult_37_v2i64:
27913 ; SSE3:       # %bb.0:
27914 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27915 ; SSE3-NEXT:    psrlw $1, %xmm1
27916 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27917 ; SSE3-NEXT:    psubb %xmm1, %xmm0
27918 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
27919 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
27920 ; SSE3-NEXT:    pand %xmm1, %xmm2
27921 ; SSE3-NEXT:    psrlw $2, %xmm0
27922 ; SSE3-NEXT:    pand %xmm1, %xmm0
27923 ; SSE3-NEXT:    paddb %xmm2, %xmm0
27924 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
27925 ; SSE3-NEXT:    psrlw $4, %xmm1
27926 ; SSE3-NEXT:    paddb %xmm0, %xmm1
27927 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27928 ; SSE3-NEXT:    pxor %xmm0, %xmm0
27929 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
27930 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27931 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27932 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483685,2147483685,2147483685,2147483685]
27933 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
27934 ; SSE3-NEXT:    retq
27936 ; SSSE3-LABEL: ult_37_v2i64:
27937 ; SSSE3:       # %bb.0:
27938 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27939 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
27940 ; SSSE3-NEXT:    pand %xmm1, %xmm2
27941 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27942 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
27943 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
27944 ; SSSE3-NEXT:    psrlw $4, %xmm0
27945 ; SSSE3-NEXT:    pand %xmm1, %xmm0
27946 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
27947 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
27948 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
27949 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
27950 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27951 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27952 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483685,2147483685,2147483685,2147483685]
27953 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
27954 ; SSSE3-NEXT:    retq
27956 ; SSE41-LABEL: ult_37_v2i64:
27957 ; SSE41:       # %bb.0:
27958 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27959 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
27960 ; SSE41-NEXT:    pand %xmm1, %xmm2
27961 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27962 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
27963 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
27964 ; SSE41-NEXT:    psrlw $4, %xmm0
27965 ; SSE41-NEXT:    pand %xmm1, %xmm0
27966 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
27967 ; SSE41-NEXT:    paddb %xmm4, %xmm3
27968 ; SSE41-NEXT:    pxor %xmm0, %xmm0
27969 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
27970 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
27971 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
27972 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483685,2147483685,2147483685,2147483685]
27973 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
27974 ; SSE41-NEXT:    retq
27976 ; AVX1-LABEL: ult_37_v2i64:
27977 ; AVX1:       # %bb.0:
27978 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27979 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
27980 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27981 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27982 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
27983 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
27984 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
27985 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
27986 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
27987 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
27988 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [37,37]
27989 ; AVX1-NEXT:    # xmm1 = mem[0,0]
27990 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
27991 ; AVX1-NEXT:    retq
27993 ; AVX2-LABEL: ult_37_v2i64:
27994 ; AVX2:       # %bb.0:
27995 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
27996 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
27997 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
27998 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
27999 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
28000 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
28001 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28002 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28003 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28004 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28005 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [37,37]
28006 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28007 ; AVX2-NEXT:    retq
28009 ; AVX512VPOPCNTDQ-LABEL: ult_37_v2i64:
28010 ; AVX512VPOPCNTDQ:       # %bb.0:
28011 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28012 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
28013 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [37,37]
28014 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28015 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
28016 ; AVX512VPOPCNTDQ-NEXT:    retq
28018 ; AVX512VPOPCNTDQVL-LABEL: ult_37_v2i64:
28019 ; AVX512VPOPCNTDQVL:       # %bb.0:
28020 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
28021 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [37,37]
28022 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28023 ; AVX512VPOPCNTDQVL-NEXT:    retq
28025 ; BITALG_NOVLX-LABEL: ult_37_v2i64:
28026 ; BITALG_NOVLX:       # %bb.0:
28027 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28028 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
28029 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28030 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28031 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [37,37]
28032 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28033 ; BITALG_NOVLX-NEXT:    vzeroupper
28034 ; BITALG_NOVLX-NEXT:    retq
28036 ; BITALG-LABEL: ult_37_v2i64:
28037 ; BITALG:       # %bb.0:
28038 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
28039 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28040 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28041 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [37,37]
28042 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28043 ; BITALG-NEXT:    retq
28044   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28045   %3 = icmp ult <2 x i64> %2, <i64 37, i64 37>
28046   %4 = sext <2 x i1> %3 to <2 x i64>
28047   ret <2 x i64> %4
28050 define <2 x i64> @ugt_37_v2i64(<2 x i64> %0) {
28051 ; SSE2-LABEL: ugt_37_v2i64:
28052 ; SSE2:       # %bb.0:
28053 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28054 ; SSE2-NEXT:    psrlw $1, %xmm1
28055 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28056 ; SSE2-NEXT:    psubb %xmm1, %xmm0
28057 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28058 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
28059 ; SSE2-NEXT:    pand %xmm1, %xmm2
28060 ; SSE2-NEXT:    psrlw $2, %xmm0
28061 ; SSE2-NEXT:    pand %xmm1, %xmm0
28062 ; SSE2-NEXT:    paddb %xmm2, %xmm0
28063 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28064 ; SSE2-NEXT:    psrlw $4, %xmm1
28065 ; SSE2-NEXT:    paddb %xmm0, %xmm1
28066 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28067 ; SSE2-NEXT:    pxor %xmm0, %xmm0
28068 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
28069 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28070 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28071 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28072 ; SSE2-NEXT:    retq
28074 ; SSE3-LABEL: ugt_37_v2i64:
28075 ; SSE3:       # %bb.0:
28076 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28077 ; SSE3-NEXT:    psrlw $1, %xmm1
28078 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28079 ; SSE3-NEXT:    psubb %xmm1, %xmm0
28080 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28081 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
28082 ; SSE3-NEXT:    pand %xmm1, %xmm2
28083 ; SSE3-NEXT:    psrlw $2, %xmm0
28084 ; SSE3-NEXT:    pand %xmm1, %xmm0
28085 ; SSE3-NEXT:    paddb %xmm2, %xmm0
28086 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28087 ; SSE3-NEXT:    psrlw $4, %xmm1
28088 ; SSE3-NEXT:    paddb %xmm0, %xmm1
28089 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28090 ; SSE3-NEXT:    pxor %xmm0, %xmm0
28091 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
28092 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28093 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28094 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28095 ; SSE3-NEXT:    retq
28097 ; SSSE3-LABEL: ugt_37_v2i64:
28098 ; SSSE3:       # %bb.0:
28099 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28100 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
28101 ; SSSE3-NEXT:    pand %xmm1, %xmm2
28102 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28103 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
28104 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
28105 ; SSSE3-NEXT:    psrlw $4, %xmm0
28106 ; SSSE3-NEXT:    pand %xmm1, %xmm0
28107 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
28108 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
28109 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
28110 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
28111 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28112 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28113 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28114 ; SSSE3-NEXT:    retq
28116 ; SSE41-LABEL: ugt_37_v2i64:
28117 ; SSE41:       # %bb.0:
28118 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28119 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
28120 ; SSE41-NEXT:    pand %xmm1, %xmm2
28121 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28122 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
28123 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
28124 ; SSE41-NEXT:    psrlw $4, %xmm0
28125 ; SSE41-NEXT:    pand %xmm1, %xmm0
28126 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
28127 ; SSE41-NEXT:    paddb %xmm4, %xmm3
28128 ; SSE41-NEXT:    pxor %xmm0, %xmm0
28129 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
28130 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28131 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28132 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28133 ; SSE41-NEXT:    retq
28135 ; AVX1-LABEL: ugt_37_v2i64:
28136 ; AVX1:       # %bb.0:
28137 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28138 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
28139 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28140 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28141 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
28142 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
28143 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28144 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28145 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28146 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28147 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28148 ; AVX1-NEXT:    retq
28150 ; AVX2-LABEL: ugt_37_v2i64:
28151 ; AVX2:       # %bb.0:
28152 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28153 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
28154 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28155 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28156 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
28157 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
28158 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28159 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28160 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28161 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28162 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28163 ; AVX2-NEXT:    retq
28165 ; AVX512VPOPCNTDQ-LABEL: ugt_37_v2i64:
28166 ; AVX512VPOPCNTDQ:       # %bb.0:
28167 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28168 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
28169 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28170 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
28171 ; AVX512VPOPCNTDQ-NEXT:    retq
28173 ; AVX512VPOPCNTDQVL-LABEL: ugt_37_v2i64:
28174 ; AVX512VPOPCNTDQVL:       # %bb.0:
28175 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
28176 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [37,37]
28177 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
28178 ; AVX512VPOPCNTDQVL-NEXT:    retq
28180 ; BITALG_NOVLX-LABEL: ugt_37_v2i64:
28181 ; BITALG_NOVLX:       # %bb.0:
28182 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28183 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
28184 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28185 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28186 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28187 ; BITALG_NOVLX-NEXT:    vzeroupper
28188 ; BITALG_NOVLX-NEXT:    retq
28190 ; BITALG-LABEL: ugt_37_v2i64:
28191 ; BITALG:       # %bb.0:
28192 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
28193 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28194 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28195 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [37,37]
28196 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
28197 ; BITALG-NEXT:    retq
28198   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28199   %3 = icmp ugt <2 x i64> %2, <i64 37, i64 37>
28200   %4 = sext <2 x i1> %3 to <2 x i64>
28201   ret <2 x i64> %4
28204 define <2 x i64> @ult_38_v2i64(<2 x i64> %0) {
28205 ; SSE2-LABEL: ult_38_v2i64:
28206 ; SSE2:       # %bb.0:
28207 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28208 ; SSE2-NEXT:    psrlw $1, %xmm1
28209 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28210 ; SSE2-NEXT:    psubb %xmm1, %xmm0
28211 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28212 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
28213 ; SSE2-NEXT:    pand %xmm1, %xmm2
28214 ; SSE2-NEXT:    psrlw $2, %xmm0
28215 ; SSE2-NEXT:    pand %xmm1, %xmm0
28216 ; SSE2-NEXT:    paddb %xmm2, %xmm0
28217 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28218 ; SSE2-NEXT:    psrlw $4, %xmm1
28219 ; SSE2-NEXT:    paddb %xmm0, %xmm1
28220 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28221 ; SSE2-NEXT:    pxor %xmm0, %xmm0
28222 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
28223 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28224 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28225 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483686,2147483686,2147483686,2147483686]
28226 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
28227 ; SSE2-NEXT:    retq
28229 ; SSE3-LABEL: ult_38_v2i64:
28230 ; SSE3:       # %bb.0:
28231 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28232 ; SSE3-NEXT:    psrlw $1, %xmm1
28233 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28234 ; SSE3-NEXT:    psubb %xmm1, %xmm0
28235 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28236 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
28237 ; SSE3-NEXT:    pand %xmm1, %xmm2
28238 ; SSE3-NEXT:    psrlw $2, %xmm0
28239 ; SSE3-NEXT:    pand %xmm1, %xmm0
28240 ; SSE3-NEXT:    paddb %xmm2, %xmm0
28241 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28242 ; SSE3-NEXT:    psrlw $4, %xmm1
28243 ; SSE3-NEXT:    paddb %xmm0, %xmm1
28244 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28245 ; SSE3-NEXT:    pxor %xmm0, %xmm0
28246 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
28247 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28248 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28249 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483686,2147483686,2147483686,2147483686]
28250 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
28251 ; SSE3-NEXT:    retq
28253 ; SSSE3-LABEL: ult_38_v2i64:
28254 ; SSSE3:       # %bb.0:
28255 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28256 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
28257 ; SSSE3-NEXT:    pand %xmm1, %xmm2
28258 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28259 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
28260 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
28261 ; SSSE3-NEXT:    psrlw $4, %xmm0
28262 ; SSSE3-NEXT:    pand %xmm1, %xmm0
28263 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
28264 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
28265 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
28266 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
28267 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28268 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28269 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483686,2147483686,2147483686,2147483686]
28270 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
28271 ; SSSE3-NEXT:    retq
28273 ; SSE41-LABEL: ult_38_v2i64:
28274 ; SSE41:       # %bb.0:
28275 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28276 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
28277 ; SSE41-NEXT:    pand %xmm1, %xmm2
28278 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28279 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
28280 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
28281 ; SSE41-NEXT:    psrlw $4, %xmm0
28282 ; SSE41-NEXT:    pand %xmm1, %xmm0
28283 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
28284 ; SSE41-NEXT:    paddb %xmm4, %xmm3
28285 ; SSE41-NEXT:    pxor %xmm0, %xmm0
28286 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
28287 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28288 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28289 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483686,2147483686,2147483686,2147483686]
28290 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
28291 ; SSE41-NEXT:    retq
28293 ; AVX1-LABEL: ult_38_v2i64:
28294 ; AVX1:       # %bb.0:
28295 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28296 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
28297 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28298 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28299 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
28300 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
28301 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28302 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28303 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28304 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28305 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [38,38]
28306 ; AVX1-NEXT:    # xmm1 = mem[0,0]
28307 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28308 ; AVX1-NEXT:    retq
28310 ; AVX2-LABEL: ult_38_v2i64:
28311 ; AVX2:       # %bb.0:
28312 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28313 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
28314 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28315 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28316 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
28317 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
28318 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28319 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28320 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28321 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28322 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [38,38]
28323 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28324 ; AVX2-NEXT:    retq
28326 ; AVX512VPOPCNTDQ-LABEL: ult_38_v2i64:
28327 ; AVX512VPOPCNTDQ:       # %bb.0:
28328 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28329 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
28330 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [38,38]
28331 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28332 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
28333 ; AVX512VPOPCNTDQ-NEXT:    retq
28335 ; AVX512VPOPCNTDQVL-LABEL: ult_38_v2i64:
28336 ; AVX512VPOPCNTDQVL:       # %bb.0:
28337 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
28338 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [38,38]
28339 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28340 ; AVX512VPOPCNTDQVL-NEXT:    retq
28342 ; BITALG_NOVLX-LABEL: ult_38_v2i64:
28343 ; BITALG_NOVLX:       # %bb.0:
28344 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28345 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
28346 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28347 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28348 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [38,38]
28349 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28350 ; BITALG_NOVLX-NEXT:    vzeroupper
28351 ; BITALG_NOVLX-NEXT:    retq
28353 ; BITALG-LABEL: ult_38_v2i64:
28354 ; BITALG:       # %bb.0:
28355 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
28356 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28357 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28358 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [38,38]
28359 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28360 ; BITALG-NEXT:    retq
28361   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28362   %3 = icmp ult <2 x i64> %2, <i64 38, i64 38>
28363   %4 = sext <2 x i1> %3 to <2 x i64>
28364   ret <2 x i64> %4
28367 define <2 x i64> @ugt_38_v2i64(<2 x i64> %0) {
28368 ; SSE2-LABEL: ugt_38_v2i64:
28369 ; SSE2:       # %bb.0:
28370 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28371 ; SSE2-NEXT:    psrlw $1, %xmm1
28372 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28373 ; SSE2-NEXT:    psubb %xmm1, %xmm0
28374 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28375 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
28376 ; SSE2-NEXT:    pand %xmm1, %xmm2
28377 ; SSE2-NEXT:    psrlw $2, %xmm0
28378 ; SSE2-NEXT:    pand %xmm1, %xmm0
28379 ; SSE2-NEXT:    paddb %xmm2, %xmm0
28380 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28381 ; SSE2-NEXT:    psrlw $4, %xmm1
28382 ; SSE2-NEXT:    paddb %xmm0, %xmm1
28383 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28384 ; SSE2-NEXT:    pxor %xmm0, %xmm0
28385 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
28386 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28387 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28388 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28389 ; SSE2-NEXT:    retq
28391 ; SSE3-LABEL: ugt_38_v2i64:
28392 ; SSE3:       # %bb.0:
28393 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28394 ; SSE3-NEXT:    psrlw $1, %xmm1
28395 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28396 ; SSE3-NEXT:    psubb %xmm1, %xmm0
28397 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28398 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
28399 ; SSE3-NEXT:    pand %xmm1, %xmm2
28400 ; SSE3-NEXT:    psrlw $2, %xmm0
28401 ; SSE3-NEXT:    pand %xmm1, %xmm0
28402 ; SSE3-NEXT:    paddb %xmm2, %xmm0
28403 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28404 ; SSE3-NEXT:    psrlw $4, %xmm1
28405 ; SSE3-NEXT:    paddb %xmm0, %xmm1
28406 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28407 ; SSE3-NEXT:    pxor %xmm0, %xmm0
28408 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
28409 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28410 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28411 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28412 ; SSE3-NEXT:    retq
28414 ; SSSE3-LABEL: ugt_38_v2i64:
28415 ; SSSE3:       # %bb.0:
28416 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28417 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
28418 ; SSSE3-NEXT:    pand %xmm1, %xmm2
28419 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28420 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
28421 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
28422 ; SSSE3-NEXT:    psrlw $4, %xmm0
28423 ; SSSE3-NEXT:    pand %xmm1, %xmm0
28424 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
28425 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
28426 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
28427 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
28428 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28429 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28430 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28431 ; SSSE3-NEXT:    retq
28433 ; SSE41-LABEL: ugt_38_v2i64:
28434 ; SSE41:       # %bb.0:
28435 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28436 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
28437 ; SSE41-NEXT:    pand %xmm1, %xmm2
28438 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28439 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
28440 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
28441 ; SSE41-NEXT:    psrlw $4, %xmm0
28442 ; SSE41-NEXT:    pand %xmm1, %xmm0
28443 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
28444 ; SSE41-NEXT:    paddb %xmm4, %xmm3
28445 ; SSE41-NEXT:    pxor %xmm0, %xmm0
28446 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
28447 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28448 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28449 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28450 ; SSE41-NEXT:    retq
28452 ; AVX1-LABEL: ugt_38_v2i64:
28453 ; AVX1:       # %bb.0:
28454 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28455 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
28456 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28457 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28458 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
28459 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
28460 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28461 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28462 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28463 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28464 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28465 ; AVX1-NEXT:    retq
28467 ; AVX2-LABEL: ugt_38_v2i64:
28468 ; AVX2:       # %bb.0:
28469 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28470 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
28471 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28472 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28473 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
28474 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
28475 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28476 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28477 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28478 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28479 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28480 ; AVX2-NEXT:    retq
28482 ; AVX512VPOPCNTDQ-LABEL: ugt_38_v2i64:
28483 ; AVX512VPOPCNTDQ:       # %bb.0:
28484 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28485 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
28486 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28487 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
28488 ; AVX512VPOPCNTDQ-NEXT:    retq
28490 ; AVX512VPOPCNTDQVL-LABEL: ugt_38_v2i64:
28491 ; AVX512VPOPCNTDQVL:       # %bb.0:
28492 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
28493 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [38,38]
28494 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
28495 ; AVX512VPOPCNTDQVL-NEXT:    retq
28497 ; BITALG_NOVLX-LABEL: ugt_38_v2i64:
28498 ; BITALG_NOVLX:       # %bb.0:
28499 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28500 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
28501 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28502 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28503 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28504 ; BITALG_NOVLX-NEXT:    vzeroupper
28505 ; BITALG_NOVLX-NEXT:    retq
28507 ; BITALG-LABEL: ugt_38_v2i64:
28508 ; BITALG:       # %bb.0:
28509 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
28510 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28511 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28512 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [38,38]
28513 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
28514 ; BITALG-NEXT:    retq
28515   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28516   %3 = icmp ugt <2 x i64> %2, <i64 38, i64 38>
28517   %4 = sext <2 x i1> %3 to <2 x i64>
28518   ret <2 x i64> %4
28521 define <2 x i64> @ult_39_v2i64(<2 x i64> %0) {
28522 ; SSE2-LABEL: ult_39_v2i64:
28523 ; SSE2:       # %bb.0:
28524 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28525 ; SSE2-NEXT:    psrlw $1, %xmm1
28526 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28527 ; SSE2-NEXT:    psubb %xmm1, %xmm0
28528 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28529 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
28530 ; SSE2-NEXT:    pand %xmm1, %xmm2
28531 ; SSE2-NEXT:    psrlw $2, %xmm0
28532 ; SSE2-NEXT:    pand %xmm1, %xmm0
28533 ; SSE2-NEXT:    paddb %xmm2, %xmm0
28534 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28535 ; SSE2-NEXT:    psrlw $4, %xmm1
28536 ; SSE2-NEXT:    paddb %xmm0, %xmm1
28537 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28538 ; SSE2-NEXT:    pxor %xmm0, %xmm0
28539 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
28540 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28541 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28542 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483687,2147483687,2147483687,2147483687]
28543 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
28544 ; SSE2-NEXT:    retq
28546 ; SSE3-LABEL: ult_39_v2i64:
28547 ; SSE3:       # %bb.0:
28548 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28549 ; SSE3-NEXT:    psrlw $1, %xmm1
28550 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28551 ; SSE3-NEXT:    psubb %xmm1, %xmm0
28552 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28553 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
28554 ; SSE3-NEXT:    pand %xmm1, %xmm2
28555 ; SSE3-NEXT:    psrlw $2, %xmm0
28556 ; SSE3-NEXT:    pand %xmm1, %xmm0
28557 ; SSE3-NEXT:    paddb %xmm2, %xmm0
28558 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28559 ; SSE3-NEXT:    psrlw $4, %xmm1
28560 ; SSE3-NEXT:    paddb %xmm0, %xmm1
28561 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28562 ; SSE3-NEXT:    pxor %xmm0, %xmm0
28563 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
28564 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28565 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28566 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483687,2147483687,2147483687,2147483687]
28567 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
28568 ; SSE3-NEXT:    retq
28570 ; SSSE3-LABEL: ult_39_v2i64:
28571 ; SSSE3:       # %bb.0:
28572 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28573 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
28574 ; SSSE3-NEXT:    pand %xmm1, %xmm2
28575 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28576 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
28577 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
28578 ; SSSE3-NEXT:    psrlw $4, %xmm0
28579 ; SSSE3-NEXT:    pand %xmm1, %xmm0
28580 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
28581 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
28582 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
28583 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
28584 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28585 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28586 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483687,2147483687,2147483687,2147483687]
28587 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
28588 ; SSSE3-NEXT:    retq
28590 ; SSE41-LABEL: ult_39_v2i64:
28591 ; SSE41:       # %bb.0:
28592 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28593 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
28594 ; SSE41-NEXT:    pand %xmm1, %xmm2
28595 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28596 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
28597 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
28598 ; SSE41-NEXT:    psrlw $4, %xmm0
28599 ; SSE41-NEXT:    pand %xmm1, %xmm0
28600 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
28601 ; SSE41-NEXT:    paddb %xmm4, %xmm3
28602 ; SSE41-NEXT:    pxor %xmm0, %xmm0
28603 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
28604 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28605 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28606 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483687,2147483687,2147483687,2147483687]
28607 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
28608 ; SSE41-NEXT:    retq
28610 ; AVX1-LABEL: ult_39_v2i64:
28611 ; AVX1:       # %bb.0:
28612 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28613 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
28614 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28615 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28616 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
28617 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
28618 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28619 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28620 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28621 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28622 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [39,39]
28623 ; AVX1-NEXT:    # xmm1 = mem[0,0]
28624 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28625 ; AVX1-NEXT:    retq
28627 ; AVX2-LABEL: ult_39_v2i64:
28628 ; AVX2:       # %bb.0:
28629 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28630 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
28631 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28632 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28633 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
28634 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
28635 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28636 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28637 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28638 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28639 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [39,39]
28640 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28641 ; AVX2-NEXT:    retq
28643 ; AVX512VPOPCNTDQ-LABEL: ult_39_v2i64:
28644 ; AVX512VPOPCNTDQ:       # %bb.0:
28645 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28646 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
28647 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [39,39]
28648 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28649 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
28650 ; AVX512VPOPCNTDQ-NEXT:    retq
28652 ; AVX512VPOPCNTDQVL-LABEL: ult_39_v2i64:
28653 ; AVX512VPOPCNTDQVL:       # %bb.0:
28654 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
28655 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [39,39]
28656 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28657 ; AVX512VPOPCNTDQVL-NEXT:    retq
28659 ; BITALG_NOVLX-LABEL: ult_39_v2i64:
28660 ; BITALG_NOVLX:       # %bb.0:
28661 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28662 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
28663 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28664 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28665 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [39,39]
28666 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28667 ; BITALG_NOVLX-NEXT:    vzeroupper
28668 ; BITALG_NOVLX-NEXT:    retq
28670 ; BITALG-LABEL: ult_39_v2i64:
28671 ; BITALG:       # %bb.0:
28672 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
28673 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28674 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28675 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [39,39]
28676 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28677 ; BITALG-NEXT:    retq
28678   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28679   %3 = icmp ult <2 x i64> %2, <i64 39, i64 39>
28680   %4 = sext <2 x i1> %3 to <2 x i64>
28681   ret <2 x i64> %4
28684 define <2 x i64> @ugt_39_v2i64(<2 x i64> %0) {
28685 ; SSE2-LABEL: ugt_39_v2i64:
28686 ; SSE2:       # %bb.0:
28687 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28688 ; SSE2-NEXT:    psrlw $1, %xmm1
28689 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28690 ; SSE2-NEXT:    psubb %xmm1, %xmm0
28691 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28692 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
28693 ; SSE2-NEXT:    pand %xmm1, %xmm2
28694 ; SSE2-NEXT:    psrlw $2, %xmm0
28695 ; SSE2-NEXT:    pand %xmm1, %xmm0
28696 ; SSE2-NEXT:    paddb %xmm2, %xmm0
28697 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28698 ; SSE2-NEXT:    psrlw $4, %xmm1
28699 ; SSE2-NEXT:    paddb %xmm0, %xmm1
28700 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28701 ; SSE2-NEXT:    pxor %xmm0, %xmm0
28702 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
28703 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28704 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28705 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28706 ; SSE2-NEXT:    retq
28708 ; SSE3-LABEL: ugt_39_v2i64:
28709 ; SSE3:       # %bb.0:
28710 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28711 ; SSE3-NEXT:    psrlw $1, %xmm1
28712 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28713 ; SSE3-NEXT:    psubb %xmm1, %xmm0
28714 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28715 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
28716 ; SSE3-NEXT:    pand %xmm1, %xmm2
28717 ; SSE3-NEXT:    psrlw $2, %xmm0
28718 ; SSE3-NEXT:    pand %xmm1, %xmm0
28719 ; SSE3-NEXT:    paddb %xmm2, %xmm0
28720 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28721 ; SSE3-NEXT:    psrlw $4, %xmm1
28722 ; SSE3-NEXT:    paddb %xmm0, %xmm1
28723 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28724 ; SSE3-NEXT:    pxor %xmm0, %xmm0
28725 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
28726 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28727 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28728 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28729 ; SSE3-NEXT:    retq
28731 ; SSSE3-LABEL: ugt_39_v2i64:
28732 ; SSSE3:       # %bb.0:
28733 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28734 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
28735 ; SSSE3-NEXT:    pand %xmm1, %xmm2
28736 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28737 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
28738 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
28739 ; SSSE3-NEXT:    psrlw $4, %xmm0
28740 ; SSSE3-NEXT:    pand %xmm1, %xmm0
28741 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
28742 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
28743 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
28744 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
28745 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28746 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28747 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28748 ; SSSE3-NEXT:    retq
28750 ; SSE41-LABEL: ugt_39_v2i64:
28751 ; SSE41:       # %bb.0:
28752 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28753 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
28754 ; SSE41-NEXT:    pand %xmm1, %xmm2
28755 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28756 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
28757 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
28758 ; SSE41-NEXT:    psrlw $4, %xmm0
28759 ; SSE41-NEXT:    pand %xmm1, %xmm0
28760 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
28761 ; SSE41-NEXT:    paddb %xmm4, %xmm3
28762 ; SSE41-NEXT:    pxor %xmm0, %xmm0
28763 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
28764 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
28765 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28766 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
28767 ; SSE41-NEXT:    retq
28769 ; AVX1-LABEL: ugt_39_v2i64:
28770 ; AVX1:       # %bb.0:
28771 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28772 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
28773 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28774 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28775 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
28776 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
28777 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28778 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28779 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28780 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28781 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28782 ; AVX1-NEXT:    retq
28784 ; AVX2-LABEL: ugt_39_v2i64:
28785 ; AVX2:       # %bb.0:
28786 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28787 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
28788 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28789 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28790 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
28791 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
28792 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28793 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28794 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28795 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28796 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28797 ; AVX2-NEXT:    retq
28799 ; AVX512VPOPCNTDQ-LABEL: ugt_39_v2i64:
28800 ; AVX512VPOPCNTDQ:       # %bb.0:
28801 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28802 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
28803 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28804 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
28805 ; AVX512VPOPCNTDQ-NEXT:    retq
28807 ; AVX512VPOPCNTDQVL-LABEL: ugt_39_v2i64:
28808 ; AVX512VPOPCNTDQVL:       # %bb.0:
28809 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
28810 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [39,39]
28811 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
28812 ; AVX512VPOPCNTDQVL-NEXT:    retq
28814 ; BITALG_NOVLX-LABEL: ugt_39_v2i64:
28815 ; BITALG_NOVLX:       # %bb.0:
28816 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28817 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
28818 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28819 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28820 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
28821 ; BITALG_NOVLX-NEXT:    vzeroupper
28822 ; BITALG_NOVLX-NEXT:    retq
28824 ; BITALG-LABEL: ugt_39_v2i64:
28825 ; BITALG:       # %bb.0:
28826 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
28827 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28828 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28829 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [39,39]
28830 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
28831 ; BITALG-NEXT:    retq
28832   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28833   %3 = icmp ugt <2 x i64> %2, <i64 39, i64 39>
28834   %4 = sext <2 x i1> %3 to <2 x i64>
28835   ret <2 x i64> %4
28838 define <2 x i64> @ult_40_v2i64(<2 x i64> %0) {
28839 ; SSE2-LABEL: ult_40_v2i64:
28840 ; SSE2:       # %bb.0:
28841 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28842 ; SSE2-NEXT:    psrlw $1, %xmm1
28843 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28844 ; SSE2-NEXT:    psubb %xmm1, %xmm0
28845 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28846 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
28847 ; SSE2-NEXT:    pand %xmm1, %xmm2
28848 ; SSE2-NEXT:    psrlw $2, %xmm0
28849 ; SSE2-NEXT:    pand %xmm1, %xmm0
28850 ; SSE2-NEXT:    paddb %xmm2, %xmm0
28851 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
28852 ; SSE2-NEXT:    psrlw $4, %xmm1
28853 ; SSE2-NEXT:    paddb %xmm0, %xmm1
28854 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28855 ; SSE2-NEXT:    pxor %xmm0, %xmm0
28856 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
28857 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28858 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28859 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483688,2147483688,2147483688,2147483688]
28860 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
28861 ; SSE2-NEXT:    retq
28863 ; SSE3-LABEL: ult_40_v2i64:
28864 ; SSE3:       # %bb.0:
28865 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28866 ; SSE3-NEXT:    psrlw $1, %xmm1
28867 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28868 ; SSE3-NEXT:    psubb %xmm1, %xmm0
28869 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
28870 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
28871 ; SSE3-NEXT:    pand %xmm1, %xmm2
28872 ; SSE3-NEXT:    psrlw $2, %xmm0
28873 ; SSE3-NEXT:    pand %xmm1, %xmm0
28874 ; SSE3-NEXT:    paddb %xmm2, %xmm0
28875 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
28876 ; SSE3-NEXT:    psrlw $4, %xmm1
28877 ; SSE3-NEXT:    paddb %xmm0, %xmm1
28878 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28879 ; SSE3-NEXT:    pxor %xmm0, %xmm0
28880 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
28881 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28882 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28883 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483688,2147483688,2147483688,2147483688]
28884 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
28885 ; SSE3-NEXT:    retq
28887 ; SSSE3-LABEL: ult_40_v2i64:
28888 ; SSSE3:       # %bb.0:
28889 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28890 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
28891 ; SSSE3-NEXT:    pand %xmm1, %xmm2
28892 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28893 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
28894 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
28895 ; SSSE3-NEXT:    psrlw $4, %xmm0
28896 ; SSSE3-NEXT:    pand %xmm1, %xmm0
28897 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
28898 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
28899 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
28900 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
28901 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28902 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28903 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483688,2147483688,2147483688,2147483688]
28904 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
28905 ; SSSE3-NEXT:    retq
28907 ; SSE41-LABEL: ult_40_v2i64:
28908 ; SSE41:       # %bb.0:
28909 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28910 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
28911 ; SSE41-NEXT:    pand %xmm1, %xmm2
28912 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28913 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
28914 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
28915 ; SSE41-NEXT:    psrlw $4, %xmm0
28916 ; SSE41-NEXT:    pand %xmm1, %xmm0
28917 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
28918 ; SSE41-NEXT:    paddb %xmm4, %xmm3
28919 ; SSE41-NEXT:    pxor %xmm0, %xmm0
28920 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
28921 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
28922 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
28923 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483688,2147483688,2147483688,2147483688]
28924 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
28925 ; SSE41-NEXT:    retq
28927 ; AVX1-LABEL: ult_40_v2i64:
28928 ; AVX1:       # %bb.0:
28929 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28930 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
28931 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28932 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28933 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
28934 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
28935 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28936 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28937 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28938 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28939 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [40,40]
28940 ; AVX1-NEXT:    # xmm1 = mem[0,0]
28941 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28942 ; AVX1-NEXT:    retq
28944 ; AVX2-LABEL: ult_40_v2i64:
28945 ; AVX2:       # %bb.0:
28946 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
28947 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
28948 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
28949 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
28950 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
28951 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
28952 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
28953 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
28954 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28955 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28956 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [40,40]
28957 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28958 ; AVX2-NEXT:    retq
28960 ; AVX512VPOPCNTDQ-LABEL: ult_40_v2i64:
28961 ; AVX512VPOPCNTDQ:       # %bb.0:
28962 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28963 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
28964 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [40,40]
28965 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28966 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
28967 ; AVX512VPOPCNTDQ-NEXT:    retq
28969 ; AVX512VPOPCNTDQVL-LABEL: ult_40_v2i64:
28970 ; AVX512VPOPCNTDQVL:       # %bb.0:
28971 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
28972 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [40,40]
28973 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28974 ; AVX512VPOPCNTDQVL-NEXT:    retq
28976 ; BITALG_NOVLX-LABEL: ult_40_v2i64:
28977 ; BITALG_NOVLX:       # %bb.0:
28978 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
28979 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
28980 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28981 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28982 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [40,40]
28983 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28984 ; BITALG_NOVLX-NEXT:    vzeroupper
28985 ; BITALG_NOVLX-NEXT:    retq
28987 ; BITALG-LABEL: ult_40_v2i64:
28988 ; BITALG:       # %bb.0:
28989 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
28990 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
28991 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
28992 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [40,40]
28993 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
28994 ; BITALG-NEXT:    retq
28995   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28996   %3 = icmp ult <2 x i64> %2, <i64 40, i64 40>
28997   %4 = sext <2 x i1> %3 to <2 x i64>
28998   ret <2 x i64> %4
29001 define <2 x i64> @ugt_40_v2i64(<2 x i64> %0) {
29002 ; SSE2-LABEL: ugt_40_v2i64:
29003 ; SSE2:       # %bb.0:
29004 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29005 ; SSE2-NEXT:    psrlw $1, %xmm1
29006 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29007 ; SSE2-NEXT:    psubb %xmm1, %xmm0
29008 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29009 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
29010 ; SSE2-NEXT:    pand %xmm1, %xmm2
29011 ; SSE2-NEXT:    psrlw $2, %xmm0
29012 ; SSE2-NEXT:    pand %xmm1, %xmm0
29013 ; SSE2-NEXT:    paddb %xmm2, %xmm0
29014 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29015 ; SSE2-NEXT:    psrlw $4, %xmm1
29016 ; SSE2-NEXT:    paddb %xmm0, %xmm1
29017 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29018 ; SSE2-NEXT:    pxor %xmm0, %xmm0
29019 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
29020 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29021 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29022 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29023 ; SSE2-NEXT:    retq
29025 ; SSE3-LABEL: ugt_40_v2i64:
29026 ; SSE3:       # %bb.0:
29027 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29028 ; SSE3-NEXT:    psrlw $1, %xmm1
29029 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29030 ; SSE3-NEXT:    psubb %xmm1, %xmm0
29031 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29032 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
29033 ; SSE3-NEXT:    pand %xmm1, %xmm2
29034 ; SSE3-NEXT:    psrlw $2, %xmm0
29035 ; SSE3-NEXT:    pand %xmm1, %xmm0
29036 ; SSE3-NEXT:    paddb %xmm2, %xmm0
29037 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29038 ; SSE3-NEXT:    psrlw $4, %xmm1
29039 ; SSE3-NEXT:    paddb %xmm0, %xmm1
29040 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29041 ; SSE3-NEXT:    pxor %xmm0, %xmm0
29042 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
29043 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29044 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29045 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29046 ; SSE3-NEXT:    retq
29048 ; SSSE3-LABEL: ugt_40_v2i64:
29049 ; SSSE3:       # %bb.0:
29050 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29051 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
29052 ; SSSE3-NEXT:    pand %xmm1, %xmm2
29053 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29054 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
29055 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
29056 ; SSSE3-NEXT:    psrlw $4, %xmm0
29057 ; SSSE3-NEXT:    pand %xmm1, %xmm0
29058 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
29059 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
29060 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
29061 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
29062 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29063 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29064 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29065 ; SSSE3-NEXT:    retq
29067 ; SSE41-LABEL: ugt_40_v2i64:
29068 ; SSE41:       # %bb.0:
29069 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29070 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
29071 ; SSE41-NEXT:    pand %xmm1, %xmm2
29072 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29073 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
29074 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
29075 ; SSE41-NEXT:    psrlw $4, %xmm0
29076 ; SSE41-NEXT:    pand %xmm1, %xmm0
29077 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
29078 ; SSE41-NEXT:    paddb %xmm4, %xmm3
29079 ; SSE41-NEXT:    pxor %xmm0, %xmm0
29080 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
29081 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29082 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29083 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29084 ; SSE41-NEXT:    retq
29086 ; AVX1-LABEL: ugt_40_v2i64:
29087 ; AVX1:       # %bb.0:
29088 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29089 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
29090 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29091 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29092 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
29093 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
29094 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29095 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29096 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29097 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29098 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29099 ; AVX1-NEXT:    retq
29101 ; AVX2-LABEL: ugt_40_v2i64:
29102 ; AVX2:       # %bb.0:
29103 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29104 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
29105 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29106 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29107 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
29108 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
29109 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29110 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29111 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29112 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29113 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29114 ; AVX2-NEXT:    retq
29116 ; AVX512VPOPCNTDQ-LABEL: ugt_40_v2i64:
29117 ; AVX512VPOPCNTDQ:       # %bb.0:
29118 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29119 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
29120 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29121 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
29122 ; AVX512VPOPCNTDQ-NEXT:    retq
29124 ; AVX512VPOPCNTDQVL-LABEL: ugt_40_v2i64:
29125 ; AVX512VPOPCNTDQVL:       # %bb.0:
29126 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
29127 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [40,40]
29128 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
29129 ; AVX512VPOPCNTDQVL-NEXT:    retq
29131 ; BITALG_NOVLX-LABEL: ugt_40_v2i64:
29132 ; BITALG_NOVLX:       # %bb.0:
29133 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29134 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
29135 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29136 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29137 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29138 ; BITALG_NOVLX-NEXT:    vzeroupper
29139 ; BITALG_NOVLX-NEXT:    retq
29141 ; BITALG-LABEL: ugt_40_v2i64:
29142 ; BITALG:       # %bb.0:
29143 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
29144 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29145 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29146 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [40,40]
29147 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
29148 ; BITALG-NEXT:    retq
29149   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
29150   %3 = icmp ugt <2 x i64> %2, <i64 40, i64 40>
29151   %4 = sext <2 x i1> %3 to <2 x i64>
29152   ret <2 x i64> %4
29155 define <2 x i64> @ult_41_v2i64(<2 x i64> %0) {
29156 ; SSE2-LABEL: ult_41_v2i64:
29157 ; SSE2:       # %bb.0:
29158 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29159 ; SSE2-NEXT:    psrlw $1, %xmm1
29160 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29161 ; SSE2-NEXT:    psubb %xmm1, %xmm0
29162 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29163 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
29164 ; SSE2-NEXT:    pand %xmm1, %xmm2
29165 ; SSE2-NEXT:    psrlw $2, %xmm0
29166 ; SSE2-NEXT:    pand %xmm1, %xmm0
29167 ; SSE2-NEXT:    paddb %xmm2, %xmm0
29168 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29169 ; SSE2-NEXT:    psrlw $4, %xmm1
29170 ; SSE2-NEXT:    paddb %xmm0, %xmm1
29171 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29172 ; SSE2-NEXT:    pxor %xmm0, %xmm0
29173 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
29174 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29175 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29176 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483689,2147483689,2147483689,2147483689]
29177 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
29178 ; SSE2-NEXT:    retq
29180 ; SSE3-LABEL: ult_41_v2i64:
29181 ; SSE3:       # %bb.0:
29182 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29183 ; SSE3-NEXT:    psrlw $1, %xmm1
29184 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29185 ; SSE3-NEXT:    psubb %xmm1, %xmm0
29186 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29187 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
29188 ; SSE3-NEXT:    pand %xmm1, %xmm2
29189 ; SSE3-NEXT:    psrlw $2, %xmm0
29190 ; SSE3-NEXT:    pand %xmm1, %xmm0
29191 ; SSE3-NEXT:    paddb %xmm2, %xmm0
29192 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29193 ; SSE3-NEXT:    psrlw $4, %xmm1
29194 ; SSE3-NEXT:    paddb %xmm0, %xmm1
29195 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29196 ; SSE3-NEXT:    pxor %xmm0, %xmm0
29197 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
29198 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29199 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29200 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483689,2147483689,2147483689,2147483689]
29201 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
29202 ; SSE3-NEXT:    retq
29204 ; SSSE3-LABEL: ult_41_v2i64:
29205 ; SSSE3:       # %bb.0:
29206 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29207 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
29208 ; SSSE3-NEXT:    pand %xmm1, %xmm2
29209 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29210 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
29211 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
29212 ; SSSE3-NEXT:    psrlw $4, %xmm0
29213 ; SSSE3-NEXT:    pand %xmm1, %xmm0
29214 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
29215 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
29216 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
29217 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
29218 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29219 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29220 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483689,2147483689,2147483689,2147483689]
29221 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
29222 ; SSSE3-NEXT:    retq
29224 ; SSE41-LABEL: ult_41_v2i64:
29225 ; SSE41:       # %bb.0:
29226 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29227 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
29228 ; SSE41-NEXT:    pand %xmm1, %xmm2
29229 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29230 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
29231 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
29232 ; SSE41-NEXT:    psrlw $4, %xmm0
29233 ; SSE41-NEXT:    pand %xmm1, %xmm0
29234 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
29235 ; SSE41-NEXT:    paddb %xmm4, %xmm3
29236 ; SSE41-NEXT:    pxor %xmm0, %xmm0
29237 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
29238 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29239 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29240 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483689,2147483689,2147483689,2147483689]
29241 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
29242 ; SSE41-NEXT:    retq
29244 ; AVX1-LABEL: ult_41_v2i64:
29245 ; AVX1:       # %bb.0:
29246 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29247 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
29248 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29249 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29250 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
29251 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
29252 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29253 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29254 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29255 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29256 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [41,41]
29257 ; AVX1-NEXT:    # xmm1 = mem[0,0]
29258 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29259 ; AVX1-NEXT:    retq
29261 ; AVX2-LABEL: ult_41_v2i64:
29262 ; AVX2:       # %bb.0:
29263 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29264 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
29265 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29266 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29267 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
29268 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
29269 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29270 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29271 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29272 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29273 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [41,41]
29274 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29275 ; AVX2-NEXT:    retq
29277 ; AVX512VPOPCNTDQ-LABEL: ult_41_v2i64:
29278 ; AVX512VPOPCNTDQ:       # %bb.0:
29279 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29280 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
29281 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [41,41]
29282 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29283 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
29284 ; AVX512VPOPCNTDQ-NEXT:    retq
29286 ; AVX512VPOPCNTDQVL-LABEL: ult_41_v2i64:
29287 ; AVX512VPOPCNTDQVL:       # %bb.0:
29288 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
29289 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [41,41]
29290 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29291 ; AVX512VPOPCNTDQVL-NEXT:    retq
29293 ; BITALG_NOVLX-LABEL: ult_41_v2i64:
29294 ; BITALG_NOVLX:       # %bb.0:
29295 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29296 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
29297 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29298 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29299 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [41,41]
29300 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29301 ; BITALG_NOVLX-NEXT:    vzeroupper
29302 ; BITALG_NOVLX-NEXT:    retq
29304 ; BITALG-LABEL: ult_41_v2i64:
29305 ; BITALG:       # %bb.0:
29306 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
29307 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29308 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29309 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [41,41]
29310 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29311 ; BITALG-NEXT:    retq
29312   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
29313   %3 = icmp ult <2 x i64> %2, <i64 41, i64 41>
29314   %4 = sext <2 x i1> %3 to <2 x i64>
29315   ret <2 x i64> %4
29318 define <2 x i64> @ugt_41_v2i64(<2 x i64> %0) {
29319 ; SSE2-LABEL: ugt_41_v2i64:
29320 ; SSE2:       # %bb.0:
29321 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29322 ; SSE2-NEXT:    psrlw $1, %xmm1
29323 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29324 ; SSE2-NEXT:    psubb %xmm1, %xmm0
29325 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29326 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
29327 ; SSE2-NEXT:    pand %xmm1, %xmm2
29328 ; SSE2-NEXT:    psrlw $2, %xmm0
29329 ; SSE2-NEXT:    pand %xmm1, %xmm0
29330 ; SSE2-NEXT:    paddb %xmm2, %xmm0
29331 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29332 ; SSE2-NEXT:    psrlw $4, %xmm1
29333 ; SSE2-NEXT:    paddb %xmm0, %xmm1
29334 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29335 ; SSE2-NEXT:    pxor %xmm0, %xmm0
29336 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
29337 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29338 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29339 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29340 ; SSE2-NEXT:    retq
29342 ; SSE3-LABEL: ugt_41_v2i64:
29343 ; SSE3:       # %bb.0:
29344 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29345 ; SSE3-NEXT:    psrlw $1, %xmm1
29346 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29347 ; SSE3-NEXT:    psubb %xmm1, %xmm0
29348 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29349 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
29350 ; SSE3-NEXT:    pand %xmm1, %xmm2
29351 ; SSE3-NEXT:    psrlw $2, %xmm0
29352 ; SSE3-NEXT:    pand %xmm1, %xmm0
29353 ; SSE3-NEXT:    paddb %xmm2, %xmm0
29354 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29355 ; SSE3-NEXT:    psrlw $4, %xmm1
29356 ; SSE3-NEXT:    paddb %xmm0, %xmm1
29357 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29358 ; SSE3-NEXT:    pxor %xmm0, %xmm0
29359 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
29360 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29361 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29362 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29363 ; SSE3-NEXT:    retq
29365 ; SSSE3-LABEL: ugt_41_v2i64:
29366 ; SSSE3:       # %bb.0:
29367 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29368 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
29369 ; SSSE3-NEXT:    pand %xmm1, %xmm2
29370 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29371 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
29372 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
29373 ; SSSE3-NEXT:    psrlw $4, %xmm0
29374 ; SSSE3-NEXT:    pand %xmm1, %xmm0
29375 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
29376 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
29377 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
29378 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
29379 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29380 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29381 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29382 ; SSSE3-NEXT:    retq
29384 ; SSE41-LABEL: ugt_41_v2i64:
29385 ; SSE41:       # %bb.0:
29386 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29387 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
29388 ; SSE41-NEXT:    pand %xmm1, %xmm2
29389 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29390 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
29391 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
29392 ; SSE41-NEXT:    psrlw $4, %xmm0
29393 ; SSE41-NEXT:    pand %xmm1, %xmm0
29394 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
29395 ; SSE41-NEXT:    paddb %xmm4, %xmm3
29396 ; SSE41-NEXT:    pxor %xmm0, %xmm0
29397 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
29398 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29399 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29400 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29401 ; SSE41-NEXT:    retq
29403 ; AVX1-LABEL: ugt_41_v2i64:
29404 ; AVX1:       # %bb.0:
29405 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29406 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
29407 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29408 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29409 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
29410 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
29411 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29412 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29413 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29414 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29415 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29416 ; AVX1-NEXT:    retq
29418 ; AVX2-LABEL: ugt_41_v2i64:
29419 ; AVX2:       # %bb.0:
29420 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29421 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
29422 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29423 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29424 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
29425 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
29426 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29427 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29428 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29429 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29430 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29431 ; AVX2-NEXT:    retq
29433 ; AVX512VPOPCNTDQ-LABEL: ugt_41_v2i64:
29434 ; AVX512VPOPCNTDQ:       # %bb.0:
29435 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29436 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
29437 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29438 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
29439 ; AVX512VPOPCNTDQ-NEXT:    retq
29441 ; AVX512VPOPCNTDQVL-LABEL: ugt_41_v2i64:
29442 ; AVX512VPOPCNTDQVL:       # %bb.0:
29443 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
29444 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [41,41]
29445 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
29446 ; AVX512VPOPCNTDQVL-NEXT:    retq
29448 ; BITALG_NOVLX-LABEL: ugt_41_v2i64:
29449 ; BITALG_NOVLX:       # %bb.0:
29450 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29451 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
29452 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29453 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29454 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29455 ; BITALG_NOVLX-NEXT:    vzeroupper
29456 ; BITALG_NOVLX-NEXT:    retq
29458 ; BITALG-LABEL: ugt_41_v2i64:
29459 ; BITALG:       # %bb.0:
29460 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
29461 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29462 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29463 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [41,41]
29464 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
29465 ; BITALG-NEXT:    retq
29466   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
29467   %3 = icmp ugt <2 x i64> %2, <i64 41, i64 41>
29468   %4 = sext <2 x i1> %3 to <2 x i64>
29469   ret <2 x i64> %4
29472 define <2 x i64> @ult_42_v2i64(<2 x i64> %0) {
29473 ; SSE2-LABEL: ult_42_v2i64:
29474 ; SSE2:       # %bb.0:
29475 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29476 ; SSE2-NEXT:    psrlw $1, %xmm1
29477 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29478 ; SSE2-NEXT:    psubb %xmm1, %xmm0
29479 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29480 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
29481 ; SSE2-NEXT:    pand %xmm1, %xmm2
29482 ; SSE2-NEXT:    psrlw $2, %xmm0
29483 ; SSE2-NEXT:    pand %xmm1, %xmm0
29484 ; SSE2-NEXT:    paddb %xmm2, %xmm0
29485 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29486 ; SSE2-NEXT:    psrlw $4, %xmm1
29487 ; SSE2-NEXT:    paddb %xmm0, %xmm1
29488 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29489 ; SSE2-NEXT:    pxor %xmm0, %xmm0
29490 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
29491 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29492 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29493 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483690,2147483690,2147483690,2147483690]
29494 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
29495 ; SSE2-NEXT:    retq
29497 ; SSE3-LABEL: ult_42_v2i64:
29498 ; SSE3:       # %bb.0:
29499 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29500 ; SSE3-NEXT:    psrlw $1, %xmm1
29501 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29502 ; SSE3-NEXT:    psubb %xmm1, %xmm0
29503 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29504 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
29505 ; SSE3-NEXT:    pand %xmm1, %xmm2
29506 ; SSE3-NEXT:    psrlw $2, %xmm0
29507 ; SSE3-NEXT:    pand %xmm1, %xmm0
29508 ; SSE3-NEXT:    paddb %xmm2, %xmm0
29509 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29510 ; SSE3-NEXT:    psrlw $4, %xmm1
29511 ; SSE3-NEXT:    paddb %xmm0, %xmm1
29512 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29513 ; SSE3-NEXT:    pxor %xmm0, %xmm0
29514 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
29515 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29516 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29517 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483690,2147483690,2147483690,2147483690]
29518 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
29519 ; SSE3-NEXT:    retq
29521 ; SSSE3-LABEL: ult_42_v2i64:
29522 ; SSSE3:       # %bb.0:
29523 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29524 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
29525 ; SSSE3-NEXT:    pand %xmm1, %xmm2
29526 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29527 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
29528 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
29529 ; SSSE3-NEXT:    psrlw $4, %xmm0
29530 ; SSSE3-NEXT:    pand %xmm1, %xmm0
29531 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
29532 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
29533 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
29534 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
29535 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29536 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29537 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483690,2147483690,2147483690,2147483690]
29538 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
29539 ; SSSE3-NEXT:    retq
29541 ; SSE41-LABEL: ult_42_v2i64:
29542 ; SSE41:       # %bb.0:
29543 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29544 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
29545 ; SSE41-NEXT:    pand %xmm1, %xmm2
29546 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29547 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
29548 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
29549 ; SSE41-NEXT:    psrlw $4, %xmm0
29550 ; SSE41-NEXT:    pand %xmm1, %xmm0
29551 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
29552 ; SSE41-NEXT:    paddb %xmm4, %xmm3
29553 ; SSE41-NEXT:    pxor %xmm0, %xmm0
29554 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
29555 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29556 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29557 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483690,2147483690,2147483690,2147483690]
29558 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
29559 ; SSE41-NEXT:    retq
29561 ; AVX1-LABEL: ult_42_v2i64:
29562 ; AVX1:       # %bb.0:
29563 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29564 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
29565 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29566 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29567 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
29568 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
29569 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29570 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29571 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29572 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29573 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [42,42]
29574 ; AVX1-NEXT:    # xmm1 = mem[0,0]
29575 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29576 ; AVX1-NEXT:    retq
29578 ; AVX2-LABEL: ult_42_v2i64:
29579 ; AVX2:       # %bb.0:
29580 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29581 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
29582 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29583 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29584 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
29585 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
29586 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29587 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29588 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29589 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29590 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [42,42]
29591 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29592 ; AVX2-NEXT:    retq
29594 ; AVX512VPOPCNTDQ-LABEL: ult_42_v2i64:
29595 ; AVX512VPOPCNTDQ:       # %bb.0:
29596 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29597 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
29598 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [42,42]
29599 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29600 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
29601 ; AVX512VPOPCNTDQ-NEXT:    retq
29603 ; AVX512VPOPCNTDQVL-LABEL: ult_42_v2i64:
29604 ; AVX512VPOPCNTDQVL:       # %bb.0:
29605 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
29606 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [42,42]
29607 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29608 ; AVX512VPOPCNTDQVL-NEXT:    retq
29610 ; BITALG_NOVLX-LABEL: ult_42_v2i64:
29611 ; BITALG_NOVLX:       # %bb.0:
29612 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29613 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
29614 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29615 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29616 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [42,42]
29617 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29618 ; BITALG_NOVLX-NEXT:    vzeroupper
29619 ; BITALG_NOVLX-NEXT:    retq
29621 ; BITALG-LABEL: ult_42_v2i64:
29622 ; BITALG:       # %bb.0:
29623 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
29624 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29625 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29626 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [42,42]
29627 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29628 ; BITALG-NEXT:    retq
29629   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
29630   %3 = icmp ult <2 x i64> %2, <i64 42, i64 42>
29631   %4 = sext <2 x i1> %3 to <2 x i64>
29632   ret <2 x i64> %4
29635 define <2 x i64> @ugt_42_v2i64(<2 x i64> %0) {
29636 ; SSE2-LABEL: ugt_42_v2i64:
29637 ; SSE2:       # %bb.0:
29638 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29639 ; SSE2-NEXT:    psrlw $1, %xmm1
29640 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29641 ; SSE2-NEXT:    psubb %xmm1, %xmm0
29642 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29643 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
29644 ; SSE2-NEXT:    pand %xmm1, %xmm2
29645 ; SSE2-NEXT:    psrlw $2, %xmm0
29646 ; SSE2-NEXT:    pand %xmm1, %xmm0
29647 ; SSE2-NEXT:    paddb %xmm2, %xmm0
29648 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29649 ; SSE2-NEXT:    psrlw $4, %xmm1
29650 ; SSE2-NEXT:    paddb %xmm0, %xmm1
29651 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29652 ; SSE2-NEXT:    pxor %xmm0, %xmm0
29653 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
29654 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29655 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29656 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29657 ; SSE2-NEXT:    retq
29659 ; SSE3-LABEL: ugt_42_v2i64:
29660 ; SSE3:       # %bb.0:
29661 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29662 ; SSE3-NEXT:    psrlw $1, %xmm1
29663 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29664 ; SSE3-NEXT:    psubb %xmm1, %xmm0
29665 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29666 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
29667 ; SSE3-NEXT:    pand %xmm1, %xmm2
29668 ; SSE3-NEXT:    psrlw $2, %xmm0
29669 ; SSE3-NEXT:    pand %xmm1, %xmm0
29670 ; SSE3-NEXT:    paddb %xmm2, %xmm0
29671 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29672 ; SSE3-NEXT:    psrlw $4, %xmm1
29673 ; SSE3-NEXT:    paddb %xmm0, %xmm1
29674 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29675 ; SSE3-NEXT:    pxor %xmm0, %xmm0
29676 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
29677 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29678 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29679 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29680 ; SSE3-NEXT:    retq
29682 ; SSSE3-LABEL: ugt_42_v2i64:
29683 ; SSSE3:       # %bb.0:
29684 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29685 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
29686 ; SSSE3-NEXT:    pand %xmm1, %xmm2
29687 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29688 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
29689 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
29690 ; SSSE3-NEXT:    psrlw $4, %xmm0
29691 ; SSSE3-NEXT:    pand %xmm1, %xmm0
29692 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
29693 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
29694 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
29695 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
29696 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29697 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29698 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29699 ; SSSE3-NEXT:    retq
29701 ; SSE41-LABEL: ugt_42_v2i64:
29702 ; SSE41:       # %bb.0:
29703 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29704 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
29705 ; SSE41-NEXT:    pand %xmm1, %xmm2
29706 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29707 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
29708 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
29709 ; SSE41-NEXT:    psrlw $4, %xmm0
29710 ; SSE41-NEXT:    pand %xmm1, %xmm0
29711 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
29712 ; SSE41-NEXT:    paddb %xmm4, %xmm3
29713 ; SSE41-NEXT:    pxor %xmm0, %xmm0
29714 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
29715 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29716 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29717 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29718 ; SSE41-NEXT:    retq
29720 ; AVX1-LABEL: ugt_42_v2i64:
29721 ; AVX1:       # %bb.0:
29722 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29723 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
29724 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29725 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29726 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
29727 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
29728 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29729 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29730 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29731 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29732 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29733 ; AVX1-NEXT:    retq
29735 ; AVX2-LABEL: ugt_42_v2i64:
29736 ; AVX2:       # %bb.0:
29737 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29738 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
29739 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29740 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29741 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
29742 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
29743 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29744 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29745 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29746 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29747 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29748 ; AVX2-NEXT:    retq
29750 ; AVX512VPOPCNTDQ-LABEL: ugt_42_v2i64:
29751 ; AVX512VPOPCNTDQ:       # %bb.0:
29752 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29753 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
29754 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29755 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
29756 ; AVX512VPOPCNTDQ-NEXT:    retq
29758 ; AVX512VPOPCNTDQVL-LABEL: ugt_42_v2i64:
29759 ; AVX512VPOPCNTDQVL:       # %bb.0:
29760 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
29761 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [42,42]
29762 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
29763 ; AVX512VPOPCNTDQVL-NEXT:    retq
29765 ; BITALG_NOVLX-LABEL: ugt_42_v2i64:
29766 ; BITALG_NOVLX:       # %bb.0:
29767 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29768 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
29769 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29770 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29771 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
29772 ; BITALG_NOVLX-NEXT:    vzeroupper
29773 ; BITALG_NOVLX-NEXT:    retq
29775 ; BITALG-LABEL: ugt_42_v2i64:
29776 ; BITALG:       # %bb.0:
29777 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
29778 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29779 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29780 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [42,42]
29781 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
29782 ; BITALG-NEXT:    retq
29783   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
29784   %3 = icmp ugt <2 x i64> %2, <i64 42, i64 42>
29785   %4 = sext <2 x i1> %3 to <2 x i64>
29786   ret <2 x i64> %4
29789 define <2 x i64> @ult_43_v2i64(<2 x i64> %0) {
29790 ; SSE2-LABEL: ult_43_v2i64:
29791 ; SSE2:       # %bb.0:
29792 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29793 ; SSE2-NEXT:    psrlw $1, %xmm1
29794 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29795 ; SSE2-NEXT:    psubb %xmm1, %xmm0
29796 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29797 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
29798 ; SSE2-NEXT:    pand %xmm1, %xmm2
29799 ; SSE2-NEXT:    psrlw $2, %xmm0
29800 ; SSE2-NEXT:    pand %xmm1, %xmm0
29801 ; SSE2-NEXT:    paddb %xmm2, %xmm0
29802 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29803 ; SSE2-NEXT:    psrlw $4, %xmm1
29804 ; SSE2-NEXT:    paddb %xmm0, %xmm1
29805 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29806 ; SSE2-NEXT:    pxor %xmm0, %xmm0
29807 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
29808 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29809 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29810 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483691,2147483691,2147483691,2147483691]
29811 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
29812 ; SSE2-NEXT:    retq
29814 ; SSE3-LABEL: ult_43_v2i64:
29815 ; SSE3:       # %bb.0:
29816 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29817 ; SSE3-NEXT:    psrlw $1, %xmm1
29818 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29819 ; SSE3-NEXT:    psubb %xmm1, %xmm0
29820 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29821 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
29822 ; SSE3-NEXT:    pand %xmm1, %xmm2
29823 ; SSE3-NEXT:    psrlw $2, %xmm0
29824 ; SSE3-NEXT:    pand %xmm1, %xmm0
29825 ; SSE3-NEXT:    paddb %xmm2, %xmm0
29826 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29827 ; SSE3-NEXT:    psrlw $4, %xmm1
29828 ; SSE3-NEXT:    paddb %xmm0, %xmm1
29829 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29830 ; SSE3-NEXT:    pxor %xmm0, %xmm0
29831 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
29832 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29833 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29834 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483691,2147483691,2147483691,2147483691]
29835 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
29836 ; SSE3-NEXT:    retq
29838 ; SSSE3-LABEL: ult_43_v2i64:
29839 ; SSSE3:       # %bb.0:
29840 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29841 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
29842 ; SSSE3-NEXT:    pand %xmm1, %xmm2
29843 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29844 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
29845 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
29846 ; SSSE3-NEXT:    psrlw $4, %xmm0
29847 ; SSSE3-NEXT:    pand %xmm1, %xmm0
29848 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
29849 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
29850 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
29851 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
29852 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29853 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29854 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483691,2147483691,2147483691,2147483691]
29855 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
29856 ; SSSE3-NEXT:    retq
29858 ; SSE41-LABEL: ult_43_v2i64:
29859 ; SSE41:       # %bb.0:
29860 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29861 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
29862 ; SSE41-NEXT:    pand %xmm1, %xmm2
29863 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29864 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
29865 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
29866 ; SSE41-NEXT:    psrlw $4, %xmm0
29867 ; SSE41-NEXT:    pand %xmm1, %xmm0
29868 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
29869 ; SSE41-NEXT:    paddb %xmm4, %xmm3
29870 ; SSE41-NEXT:    pxor %xmm0, %xmm0
29871 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
29872 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
29873 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29874 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483691,2147483691,2147483691,2147483691]
29875 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
29876 ; SSE41-NEXT:    retq
29878 ; AVX1-LABEL: ult_43_v2i64:
29879 ; AVX1:       # %bb.0:
29880 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29881 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
29882 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29883 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29884 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
29885 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
29886 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29887 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29888 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29889 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29890 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [43,43]
29891 ; AVX1-NEXT:    # xmm1 = mem[0,0]
29892 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29893 ; AVX1-NEXT:    retq
29895 ; AVX2-LABEL: ult_43_v2i64:
29896 ; AVX2:       # %bb.0:
29897 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
29898 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
29899 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
29900 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
29901 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
29902 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
29903 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
29904 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
29905 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29906 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29907 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [43,43]
29908 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29909 ; AVX2-NEXT:    retq
29911 ; AVX512VPOPCNTDQ-LABEL: ult_43_v2i64:
29912 ; AVX512VPOPCNTDQ:       # %bb.0:
29913 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29914 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
29915 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [43,43]
29916 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29917 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
29918 ; AVX512VPOPCNTDQ-NEXT:    retq
29920 ; AVX512VPOPCNTDQVL-LABEL: ult_43_v2i64:
29921 ; AVX512VPOPCNTDQVL:       # %bb.0:
29922 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
29923 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [43,43]
29924 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29925 ; AVX512VPOPCNTDQVL-NEXT:    retq
29927 ; BITALG_NOVLX-LABEL: ult_43_v2i64:
29928 ; BITALG_NOVLX:       # %bb.0:
29929 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
29930 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
29931 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29932 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29933 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [43,43]
29934 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29935 ; BITALG_NOVLX-NEXT:    vzeroupper
29936 ; BITALG_NOVLX-NEXT:    retq
29938 ; BITALG-LABEL: ult_43_v2i64:
29939 ; BITALG:       # %bb.0:
29940 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
29941 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
29942 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
29943 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [43,43]
29944 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
29945 ; BITALG-NEXT:    retq
29946   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
29947   %3 = icmp ult <2 x i64> %2, <i64 43, i64 43>
29948   %4 = sext <2 x i1> %3 to <2 x i64>
29949   ret <2 x i64> %4
29952 define <2 x i64> @ugt_43_v2i64(<2 x i64> %0) {
29953 ; SSE2-LABEL: ugt_43_v2i64:
29954 ; SSE2:       # %bb.0:
29955 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29956 ; SSE2-NEXT:    psrlw $1, %xmm1
29957 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29958 ; SSE2-NEXT:    psubb %xmm1, %xmm0
29959 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29960 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
29961 ; SSE2-NEXT:    pand %xmm1, %xmm2
29962 ; SSE2-NEXT:    psrlw $2, %xmm0
29963 ; SSE2-NEXT:    pand %xmm1, %xmm0
29964 ; SSE2-NEXT:    paddb %xmm2, %xmm0
29965 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
29966 ; SSE2-NEXT:    psrlw $4, %xmm1
29967 ; SSE2-NEXT:    paddb %xmm0, %xmm1
29968 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29969 ; SSE2-NEXT:    pxor %xmm0, %xmm0
29970 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
29971 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29972 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29973 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29974 ; SSE2-NEXT:    retq
29976 ; SSE3-LABEL: ugt_43_v2i64:
29977 ; SSE3:       # %bb.0:
29978 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29979 ; SSE3-NEXT:    psrlw $1, %xmm1
29980 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29981 ; SSE3-NEXT:    psubb %xmm1, %xmm0
29982 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
29983 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
29984 ; SSE3-NEXT:    pand %xmm1, %xmm2
29985 ; SSE3-NEXT:    psrlw $2, %xmm0
29986 ; SSE3-NEXT:    pand %xmm1, %xmm0
29987 ; SSE3-NEXT:    paddb %xmm2, %xmm0
29988 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
29989 ; SSE3-NEXT:    psrlw $4, %xmm1
29990 ; SSE3-NEXT:    paddb %xmm0, %xmm1
29991 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
29992 ; SSE3-NEXT:    pxor %xmm0, %xmm0
29993 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
29994 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
29995 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29996 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
29997 ; SSE3-NEXT:    retq
29999 ; SSSE3-LABEL: ugt_43_v2i64:
30000 ; SSSE3:       # %bb.0:
30001 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30002 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
30003 ; SSSE3-NEXT:    pand %xmm1, %xmm2
30004 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30005 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
30006 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
30007 ; SSSE3-NEXT:    psrlw $4, %xmm0
30008 ; SSSE3-NEXT:    pand %xmm1, %xmm0
30009 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
30010 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
30011 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
30012 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
30013 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30014 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30015 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30016 ; SSSE3-NEXT:    retq
30018 ; SSE41-LABEL: ugt_43_v2i64:
30019 ; SSE41:       # %bb.0:
30020 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30021 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
30022 ; SSE41-NEXT:    pand %xmm1, %xmm2
30023 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30024 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
30025 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
30026 ; SSE41-NEXT:    psrlw $4, %xmm0
30027 ; SSE41-NEXT:    pand %xmm1, %xmm0
30028 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
30029 ; SSE41-NEXT:    paddb %xmm4, %xmm3
30030 ; SSE41-NEXT:    pxor %xmm0, %xmm0
30031 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
30032 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30033 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30034 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30035 ; SSE41-NEXT:    retq
30037 ; AVX1-LABEL: ugt_43_v2i64:
30038 ; AVX1:       # %bb.0:
30039 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30040 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
30041 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30042 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30043 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
30044 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
30045 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30046 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30047 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30048 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30049 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30050 ; AVX1-NEXT:    retq
30052 ; AVX2-LABEL: ugt_43_v2i64:
30053 ; AVX2:       # %bb.0:
30054 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30055 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
30056 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30057 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30058 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
30059 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
30060 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30061 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30062 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30063 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30064 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30065 ; AVX2-NEXT:    retq
30067 ; AVX512VPOPCNTDQ-LABEL: ugt_43_v2i64:
30068 ; AVX512VPOPCNTDQ:       # %bb.0:
30069 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30070 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
30071 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30072 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
30073 ; AVX512VPOPCNTDQ-NEXT:    retq
30075 ; AVX512VPOPCNTDQVL-LABEL: ugt_43_v2i64:
30076 ; AVX512VPOPCNTDQVL:       # %bb.0:
30077 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
30078 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [43,43]
30079 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
30080 ; AVX512VPOPCNTDQVL-NEXT:    retq
30082 ; BITALG_NOVLX-LABEL: ugt_43_v2i64:
30083 ; BITALG_NOVLX:       # %bb.0:
30084 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30085 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
30086 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30087 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30088 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30089 ; BITALG_NOVLX-NEXT:    vzeroupper
30090 ; BITALG_NOVLX-NEXT:    retq
30092 ; BITALG-LABEL: ugt_43_v2i64:
30093 ; BITALG:       # %bb.0:
30094 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
30095 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30096 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30097 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [43,43]
30098 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
30099 ; BITALG-NEXT:    retq
30100   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
30101   %3 = icmp ugt <2 x i64> %2, <i64 43, i64 43>
30102   %4 = sext <2 x i1> %3 to <2 x i64>
30103   ret <2 x i64> %4
30106 define <2 x i64> @ult_44_v2i64(<2 x i64> %0) {
30107 ; SSE2-LABEL: ult_44_v2i64:
30108 ; SSE2:       # %bb.0:
30109 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30110 ; SSE2-NEXT:    psrlw $1, %xmm1
30111 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30112 ; SSE2-NEXT:    psubb %xmm1, %xmm0
30113 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30114 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
30115 ; SSE2-NEXT:    pand %xmm1, %xmm2
30116 ; SSE2-NEXT:    psrlw $2, %xmm0
30117 ; SSE2-NEXT:    pand %xmm1, %xmm0
30118 ; SSE2-NEXT:    paddb %xmm2, %xmm0
30119 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30120 ; SSE2-NEXT:    psrlw $4, %xmm1
30121 ; SSE2-NEXT:    paddb %xmm0, %xmm1
30122 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30123 ; SSE2-NEXT:    pxor %xmm0, %xmm0
30124 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
30125 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30126 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30127 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483692,2147483692,2147483692,2147483692]
30128 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
30129 ; SSE2-NEXT:    retq
30131 ; SSE3-LABEL: ult_44_v2i64:
30132 ; SSE3:       # %bb.0:
30133 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30134 ; SSE3-NEXT:    psrlw $1, %xmm1
30135 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30136 ; SSE3-NEXT:    psubb %xmm1, %xmm0
30137 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30138 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
30139 ; SSE3-NEXT:    pand %xmm1, %xmm2
30140 ; SSE3-NEXT:    psrlw $2, %xmm0
30141 ; SSE3-NEXT:    pand %xmm1, %xmm0
30142 ; SSE3-NEXT:    paddb %xmm2, %xmm0
30143 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30144 ; SSE3-NEXT:    psrlw $4, %xmm1
30145 ; SSE3-NEXT:    paddb %xmm0, %xmm1
30146 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30147 ; SSE3-NEXT:    pxor %xmm0, %xmm0
30148 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
30149 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30150 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30151 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483692,2147483692,2147483692,2147483692]
30152 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
30153 ; SSE3-NEXT:    retq
30155 ; SSSE3-LABEL: ult_44_v2i64:
30156 ; SSSE3:       # %bb.0:
30157 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30158 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
30159 ; SSSE3-NEXT:    pand %xmm1, %xmm2
30160 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30161 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
30162 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
30163 ; SSSE3-NEXT:    psrlw $4, %xmm0
30164 ; SSSE3-NEXT:    pand %xmm1, %xmm0
30165 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
30166 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
30167 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
30168 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
30169 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30170 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30171 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483692,2147483692,2147483692,2147483692]
30172 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
30173 ; SSSE3-NEXT:    retq
30175 ; SSE41-LABEL: ult_44_v2i64:
30176 ; SSE41:       # %bb.0:
30177 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30178 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
30179 ; SSE41-NEXT:    pand %xmm1, %xmm2
30180 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30181 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
30182 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
30183 ; SSE41-NEXT:    psrlw $4, %xmm0
30184 ; SSE41-NEXT:    pand %xmm1, %xmm0
30185 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
30186 ; SSE41-NEXT:    paddb %xmm4, %xmm3
30187 ; SSE41-NEXT:    pxor %xmm0, %xmm0
30188 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
30189 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30190 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30191 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483692,2147483692,2147483692,2147483692]
30192 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
30193 ; SSE41-NEXT:    retq
30195 ; AVX1-LABEL: ult_44_v2i64:
30196 ; AVX1:       # %bb.0:
30197 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30198 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
30199 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30200 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30201 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
30202 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
30203 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30204 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30205 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30206 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30207 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [44,44]
30208 ; AVX1-NEXT:    # xmm1 = mem[0,0]
30209 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30210 ; AVX1-NEXT:    retq
30212 ; AVX2-LABEL: ult_44_v2i64:
30213 ; AVX2:       # %bb.0:
30214 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30215 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
30216 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30217 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30218 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
30219 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
30220 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30221 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30222 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30223 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30224 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [44,44]
30225 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30226 ; AVX2-NEXT:    retq
30228 ; AVX512VPOPCNTDQ-LABEL: ult_44_v2i64:
30229 ; AVX512VPOPCNTDQ:       # %bb.0:
30230 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30231 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
30232 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [44,44]
30233 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30234 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
30235 ; AVX512VPOPCNTDQ-NEXT:    retq
30237 ; AVX512VPOPCNTDQVL-LABEL: ult_44_v2i64:
30238 ; AVX512VPOPCNTDQVL:       # %bb.0:
30239 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
30240 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [44,44]
30241 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30242 ; AVX512VPOPCNTDQVL-NEXT:    retq
30244 ; BITALG_NOVLX-LABEL: ult_44_v2i64:
30245 ; BITALG_NOVLX:       # %bb.0:
30246 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30247 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
30248 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30249 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30250 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [44,44]
30251 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30252 ; BITALG_NOVLX-NEXT:    vzeroupper
30253 ; BITALG_NOVLX-NEXT:    retq
30255 ; BITALG-LABEL: ult_44_v2i64:
30256 ; BITALG:       # %bb.0:
30257 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
30258 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30259 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30260 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [44,44]
30261 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30262 ; BITALG-NEXT:    retq
30263   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
30264   %3 = icmp ult <2 x i64> %2, <i64 44, i64 44>
30265   %4 = sext <2 x i1> %3 to <2 x i64>
30266   ret <2 x i64> %4
30269 define <2 x i64> @ugt_44_v2i64(<2 x i64> %0) {
30270 ; SSE2-LABEL: ugt_44_v2i64:
30271 ; SSE2:       # %bb.0:
30272 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30273 ; SSE2-NEXT:    psrlw $1, %xmm1
30274 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30275 ; SSE2-NEXT:    psubb %xmm1, %xmm0
30276 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30277 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
30278 ; SSE2-NEXT:    pand %xmm1, %xmm2
30279 ; SSE2-NEXT:    psrlw $2, %xmm0
30280 ; SSE2-NEXT:    pand %xmm1, %xmm0
30281 ; SSE2-NEXT:    paddb %xmm2, %xmm0
30282 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30283 ; SSE2-NEXT:    psrlw $4, %xmm1
30284 ; SSE2-NEXT:    paddb %xmm0, %xmm1
30285 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30286 ; SSE2-NEXT:    pxor %xmm0, %xmm0
30287 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
30288 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30289 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30290 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30291 ; SSE2-NEXT:    retq
30293 ; SSE3-LABEL: ugt_44_v2i64:
30294 ; SSE3:       # %bb.0:
30295 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30296 ; SSE3-NEXT:    psrlw $1, %xmm1
30297 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30298 ; SSE3-NEXT:    psubb %xmm1, %xmm0
30299 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30300 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
30301 ; SSE3-NEXT:    pand %xmm1, %xmm2
30302 ; SSE3-NEXT:    psrlw $2, %xmm0
30303 ; SSE3-NEXT:    pand %xmm1, %xmm0
30304 ; SSE3-NEXT:    paddb %xmm2, %xmm0
30305 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30306 ; SSE3-NEXT:    psrlw $4, %xmm1
30307 ; SSE3-NEXT:    paddb %xmm0, %xmm1
30308 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30309 ; SSE3-NEXT:    pxor %xmm0, %xmm0
30310 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
30311 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30312 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30313 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30314 ; SSE3-NEXT:    retq
30316 ; SSSE3-LABEL: ugt_44_v2i64:
30317 ; SSSE3:       # %bb.0:
30318 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30319 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
30320 ; SSSE3-NEXT:    pand %xmm1, %xmm2
30321 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30322 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
30323 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
30324 ; SSSE3-NEXT:    psrlw $4, %xmm0
30325 ; SSSE3-NEXT:    pand %xmm1, %xmm0
30326 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
30327 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
30328 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
30329 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
30330 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30331 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30332 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30333 ; SSSE3-NEXT:    retq
30335 ; SSE41-LABEL: ugt_44_v2i64:
30336 ; SSE41:       # %bb.0:
30337 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30338 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
30339 ; SSE41-NEXT:    pand %xmm1, %xmm2
30340 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30341 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
30342 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
30343 ; SSE41-NEXT:    psrlw $4, %xmm0
30344 ; SSE41-NEXT:    pand %xmm1, %xmm0
30345 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
30346 ; SSE41-NEXT:    paddb %xmm4, %xmm3
30347 ; SSE41-NEXT:    pxor %xmm0, %xmm0
30348 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
30349 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30350 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30351 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30352 ; SSE41-NEXT:    retq
30354 ; AVX1-LABEL: ugt_44_v2i64:
30355 ; AVX1:       # %bb.0:
30356 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30357 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
30358 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30359 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30360 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
30361 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
30362 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30363 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30364 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30365 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30366 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30367 ; AVX1-NEXT:    retq
30369 ; AVX2-LABEL: ugt_44_v2i64:
30370 ; AVX2:       # %bb.0:
30371 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30372 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
30373 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30374 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30375 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
30376 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
30377 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30378 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30379 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30380 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30381 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30382 ; AVX2-NEXT:    retq
30384 ; AVX512VPOPCNTDQ-LABEL: ugt_44_v2i64:
30385 ; AVX512VPOPCNTDQ:       # %bb.0:
30386 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30387 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
30388 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30389 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
30390 ; AVX512VPOPCNTDQ-NEXT:    retq
30392 ; AVX512VPOPCNTDQVL-LABEL: ugt_44_v2i64:
30393 ; AVX512VPOPCNTDQVL:       # %bb.0:
30394 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
30395 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [44,44]
30396 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
30397 ; AVX512VPOPCNTDQVL-NEXT:    retq
30399 ; BITALG_NOVLX-LABEL: ugt_44_v2i64:
30400 ; BITALG_NOVLX:       # %bb.0:
30401 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30402 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
30403 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30404 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30405 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30406 ; BITALG_NOVLX-NEXT:    vzeroupper
30407 ; BITALG_NOVLX-NEXT:    retq
30409 ; BITALG-LABEL: ugt_44_v2i64:
30410 ; BITALG:       # %bb.0:
30411 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
30412 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30413 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30414 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [44,44]
30415 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
30416 ; BITALG-NEXT:    retq
30417   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
30418   %3 = icmp ugt <2 x i64> %2, <i64 44, i64 44>
30419   %4 = sext <2 x i1> %3 to <2 x i64>
30420   ret <2 x i64> %4
30423 define <2 x i64> @ult_45_v2i64(<2 x i64> %0) {
30424 ; SSE2-LABEL: ult_45_v2i64:
30425 ; SSE2:       # %bb.0:
30426 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30427 ; SSE2-NEXT:    psrlw $1, %xmm1
30428 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30429 ; SSE2-NEXT:    psubb %xmm1, %xmm0
30430 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30431 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
30432 ; SSE2-NEXT:    pand %xmm1, %xmm2
30433 ; SSE2-NEXT:    psrlw $2, %xmm0
30434 ; SSE2-NEXT:    pand %xmm1, %xmm0
30435 ; SSE2-NEXT:    paddb %xmm2, %xmm0
30436 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30437 ; SSE2-NEXT:    psrlw $4, %xmm1
30438 ; SSE2-NEXT:    paddb %xmm0, %xmm1
30439 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30440 ; SSE2-NEXT:    pxor %xmm0, %xmm0
30441 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
30442 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30443 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30444 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483693,2147483693,2147483693,2147483693]
30445 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
30446 ; SSE2-NEXT:    retq
30448 ; SSE3-LABEL: ult_45_v2i64:
30449 ; SSE3:       # %bb.0:
30450 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30451 ; SSE3-NEXT:    psrlw $1, %xmm1
30452 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30453 ; SSE3-NEXT:    psubb %xmm1, %xmm0
30454 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30455 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
30456 ; SSE3-NEXT:    pand %xmm1, %xmm2
30457 ; SSE3-NEXT:    psrlw $2, %xmm0
30458 ; SSE3-NEXT:    pand %xmm1, %xmm0
30459 ; SSE3-NEXT:    paddb %xmm2, %xmm0
30460 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30461 ; SSE3-NEXT:    psrlw $4, %xmm1
30462 ; SSE3-NEXT:    paddb %xmm0, %xmm1
30463 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30464 ; SSE3-NEXT:    pxor %xmm0, %xmm0
30465 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
30466 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30467 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30468 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483693,2147483693,2147483693,2147483693]
30469 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
30470 ; SSE3-NEXT:    retq
30472 ; SSSE3-LABEL: ult_45_v2i64:
30473 ; SSSE3:       # %bb.0:
30474 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30475 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
30476 ; SSSE3-NEXT:    pand %xmm1, %xmm2
30477 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30478 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
30479 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
30480 ; SSSE3-NEXT:    psrlw $4, %xmm0
30481 ; SSSE3-NEXT:    pand %xmm1, %xmm0
30482 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
30483 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
30484 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
30485 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
30486 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30487 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30488 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483693,2147483693,2147483693,2147483693]
30489 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
30490 ; SSSE3-NEXT:    retq
30492 ; SSE41-LABEL: ult_45_v2i64:
30493 ; SSE41:       # %bb.0:
30494 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30495 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
30496 ; SSE41-NEXT:    pand %xmm1, %xmm2
30497 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30498 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
30499 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
30500 ; SSE41-NEXT:    psrlw $4, %xmm0
30501 ; SSE41-NEXT:    pand %xmm1, %xmm0
30502 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
30503 ; SSE41-NEXT:    paddb %xmm4, %xmm3
30504 ; SSE41-NEXT:    pxor %xmm0, %xmm0
30505 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
30506 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30507 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30508 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483693,2147483693,2147483693,2147483693]
30509 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
30510 ; SSE41-NEXT:    retq
30512 ; AVX1-LABEL: ult_45_v2i64:
30513 ; AVX1:       # %bb.0:
30514 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30515 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
30516 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30517 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30518 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
30519 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
30520 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30521 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30522 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30523 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30524 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [45,45]
30525 ; AVX1-NEXT:    # xmm1 = mem[0,0]
30526 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30527 ; AVX1-NEXT:    retq
30529 ; AVX2-LABEL: ult_45_v2i64:
30530 ; AVX2:       # %bb.0:
30531 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30532 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
30533 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30534 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30535 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
30536 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
30537 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30538 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30539 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30540 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30541 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [45,45]
30542 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30543 ; AVX2-NEXT:    retq
30545 ; AVX512VPOPCNTDQ-LABEL: ult_45_v2i64:
30546 ; AVX512VPOPCNTDQ:       # %bb.0:
30547 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30548 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
30549 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [45,45]
30550 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30551 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
30552 ; AVX512VPOPCNTDQ-NEXT:    retq
30554 ; AVX512VPOPCNTDQVL-LABEL: ult_45_v2i64:
30555 ; AVX512VPOPCNTDQVL:       # %bb.0:
30556 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
30557 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [45,45]
30558 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30559 ; AVX512VPOPCNTDQVL-NEXT:    retq
30561 ; BITALG_NOVLX-LABEL: ult_45_v2i64:
30562 ; BITALG_NOVLX:       # %bb.0:
30563 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30564 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
30565 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30566 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30567 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [45,45]
30568 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30569 ; BITALG_NOVLX-NEXT:    vzeroupper
30570 ; BITALG_NOVLX-NEXT:    retq
30572 ; BITALG-LABEL: ult_45_v2i64:
30573 ; BITALG:       # %bb.0:
30574 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
30575 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30576 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30577 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [45,45]
30578 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30579 ; BITALG-NEXT:    retq
30580   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
30581   %3 = icmp ult <2 x i64> %2, <i64 45, i64 45>
30582   %4 = sext <2 x i1> %3 to <2 x i64>
30583   ret <2 x i64> %4
30586 define <2 x i64> @ugt_45_v2i64(<2 x i64> %0) {
30587 ; SSE2-LABEL: ugt_45_v2i64:
30588 ; SSE2:       # %bb.0:
30589 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30590 ; SSE2-NEXT:    psrlw $1, %xmm1
30591 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30592 ; SSE2-NEXT:    psubb %xmm1, %xmm0
30593 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30594 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
30595 ; SSE2-NEXT:    pand %xmm1, %xmm2
30596 ; SSE2-NEXT:    psrlw $2, %xmm0
30597 ; SSE2-NEXT:    pand %xmm1, %xmm0
30598 ; SSE2-NEXT:    paddb %xmm2, %xmm0
30599 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30600 ; SSE2-NEXT:    psrlw $4, %xmm1
30601 ; SSE2-NEXT:    paddb %xmm0, %xmm1
30602 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30603 ; SSE2-NEXT:    pxor %xmm0, %xmm0
30604 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
30605 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30606 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30607 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30608 ; SSE2-NEXT:    retq
30610 ; SSE3-LABEL: ugt_45_v2i64:
30611 ; SSE3:       # %bb.0:
30612 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30613 ; SSE3-NEXT:    psrlw $1, %xmm1
30614 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30615 ; SSE3-NEXT:    psubb %xmm1, %xmm0
30616 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30617 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
30618 ; SSE3-NEXT:    pand %xmm1, %xmm2
30619 ; SSE3-NEXT:    psrlw $2, %xmm0
30620 ; SSE3-NEXT:    pand %xmm1, %xmm0
30621 ; SSE3-NEXT:    paddb %xmm2, %xmm0
30622 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30623 ; SSE3-NEXT:    psrlw $4, %xmm1
30624 ; SSE3-NEXT:    paddb %xmm0, %xmm1
30625 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30626 ; SSE3-NEXT:    pxor %xmm0, %xmm0
30627 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
30628 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30629 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30630 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30631 ; SSE3-NEXT:    retq
30633 ; SSSE3-LABEL: ugt_45_v2i64:
30634 ; SSSE3:       # %bb.0:
30635 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30636 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
30637 ; SSSE3-NEXT:    pand %xmm1, %xmm2
30638 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30639 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
30640 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
30641 ; SSSE3-NEXT:    psrlw $4, %xmm0
30642 ; SSSE3-NEXT:    pand %xmm1, %xmm0
30643 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
30644 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
30645 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
30646 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
30647 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30648 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30649 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30650 ; SSSE3-NEXT:    retq
30652 ; SSE41-LABEL: ugt_45_v2i64:
30653 ; SSE41:       # %bb.0:
30654 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30655 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
30656 ; SSE41-NEXT:    pand %xmm1, %xmm2
30657 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30658 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
30659 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
30660 ; SSE41-NEXT:    psrlw $4, %xmm0
30661 ; SSE41-NEXT:    pand %xmm1, %xmm0
30662 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
30663 ; SSE41-NEXT:    paddb %xmm4, %xmm3
30664 ; SSE41-NEXT:    pxor %xmm0, %xmm0
30665 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
30666 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30667 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30668 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30669 ; SSE41-NEXT:    retq
30671 ; AVX1-LABEL: ugt_45_v2i64:
30672 ; AVX1:       # %bb.0:
30673 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30674 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
30675 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30676 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30677 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
30678 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
30679 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30680 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30681 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30682 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30683 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30684 ; AVX1-NEXT:    retq
30686 ; AVX2-LABEL: ugt_45_v2i64:
30687 ; AVX2:       # %bb.0:
30688 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30689 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
30690 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30691 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30692 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
30693 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
30694 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30695 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30696 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30697 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30698 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30699 ; AVX2-NEXT:    retq
30701 ; AVX512VPOPCNTDQ-LABEL: ugt_45_v2i64:
30702 ; AVX512VPOPCNTDQ:       # %bb.0:
30703 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30704 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
30705 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30706 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
30707 ; AVX512VPOPCNTDQ-NEXT:    retq
30709 ; AVX512VPOPCNTDQVL-LABEL: ugt_45_v2i64:
30710 ; AVX512VPOPCNTDQVL:       # %bb.0:
30711 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
30712 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [45,45]
30713 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
30714 ; AVX512VPOPCNTDQVL-NEXT:    retq
30716 ; BITALG_NOVLX-LABEL: ugt_45_v2i64:
30717 ; BITALG_NOVLX:       # %bb.0:
30718 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30719 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
30720 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30721 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30722 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
30723 ; BITALG_NOVLX-NEXT:    vzeroupper
30724 ; BITALG_NOVLX-NEXT:    retq
30726 ; BITALG-LABEL: ugt_45_v2i64:
30727 ; BITALG:       # %bb.0:
30728 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
30729 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30730 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30731 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [45,45]
30732 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
30733 ; BITALG-NEXT:    retq
30734   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
30735   %3 = icmp ugt <2 x i64> %2, <i64 45, i64 45>
30736   %4 = sext <2 x i1> %3 to <2 x i64>
30737   ret <2 x i64> %4
30740 define <2 x i64> @ult_46_v2i64(<2 x i64> %0) {
30741 ; SSE2-LABEL: ult_46_v2i64:
30742 ; SSE2:       # %bb.0:
30743 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30744 ; SSE2-NEXT:    psrlw $1, %xmm1
30745 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30746 ; SSE2-NEXT:    psubb %xmm1, %xmm0
30747 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30748 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
30749 ; SSE2-NEXT:    pand %xmm1, %xmm2
30750 ; SSE2-NEXT:    psrlw $2, %xmm0
30751 ; SSE2-NEXT:    pand %xmm1, %xmm0
30752 ; SSE2-NEXT:    paddb %xmm2, %xmm0
30753 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30754 ; SSE2-NEXT:    psrlw $4, %xmm1
30755 ; SSE2-NEXT:    paddb %xmm0, %xmm1
30756 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30757 ; SSE2-NEXT:    pxor %xmm0, %xmm0
30758 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
30759 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30760 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30761 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483694,2147483694,2147483694,2147483694]
30762 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
30763 ; SSE2-NEXT:    retq
30765 ; SSE3-LABEL: ult_46_v2i64:
30766 ; SSE3:       # %bb.0:
30767 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30768 ; SSE3-NEXT:    psrlw $1, %xmm1
30769 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30770 ; SSE3-NEXT:    psubb %xmm1, %xmm0
30771 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30772 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
30773 ; SSE3-NEXT:    pand %xmm1, %xmm2
30774 ; SSE3-NEXT:    psrlw $2, %xmm0
30775 ; SSE3-NEXT:    pand %xmm1, %xmm0
30776 ; SSE3-NEXT:    paddb %xmm2, %xmm0
30777 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30778 ; SSE3-NEXT:    psrlw $4, %xmm1
30779 ; SSE3-NEXT:    paddb %xmm0, %xmm1
30780 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30781 ; SSE3-NEXT:    pxor %xmm0, %xmm0
30782 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
30783 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30784 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30785 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483694,2147483694,2147483694,2147483694]
30786 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
30787 ; SSE3-NEXT:    retq
30789 ; SSSE3-LABEL: ult_46_v2i64:
30790 ; SSSE3:       # %bb.0:
30791 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30792 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
30793 ; SSSE3-NEXT:    pand %xmm1, %xmm2
30794 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30795 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
30796 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
30797 ; SSSE3-NEXT:    psrlw $4, %xmm0
30798 ; SSSE3-NEXT:    pand %xmm1, %xmm0
30799 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
30800 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
30801 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
30802 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
30803 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30804 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30805 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483694,2147483694,2147483694,2147483694]
30806 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
30807 ; SSSE3-NEXT:    retq
30809 ; SSE41-LABEL: ult_46_v2i64:
30810 ; SSE41:       # %bb.0:
30811 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30812 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
30813 ; SSE41-NEXT:    pand %xmm1, %xmm2
30814 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30815 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
30816 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
30817 ; SSE41-NEXT:    psrlw $4, %xmm0
30818 ; SSE41-NEXT:    pand %xmm1, %xmm0
30819 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
30820 ; SSE41-NEXT:    paddb %xmm4, %xmm3
30821 ; SSE41-NEXT:    pxor %xmm0, %xmm0
30822 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
30823 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
30824 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30825 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483694,2147483694,2147483694,2147483694]
30826 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
30827 ; SSE41-NEXT:    retq
30829 ; AVX1-LABEL: ult_46_v2i64:
30830 ; AVX1:       # %bb.0:
30831 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30832 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
30833 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30834 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30835 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
30836 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
30837 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30838 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30839 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30840 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30841 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [46,46]
30842 ; AVX1-NEXT:    # xmm1 = mem[0,0]
30843 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30844 ; AVX1-NEXT:    retq
30846 ; AVX2-LABEL: ult_46_v2i64:
30847 ; AVX2:       # %bb.0:
30848 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30849 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
30850 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30851 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30852 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
30853 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
30854 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30855 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30856 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30857 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30858 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [46,46]
30859 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30860 ; AVX2-NEXT:    retq
30862 ; AVX512VPOPCNTDQ-LABEL: ult_46_v2i64:
30863 ; AVX512VPOPCNTDQ:       # %bb.0:
30864 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30865 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
30866 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [46,46]
30867 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30868 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
30869 ; AVX512VPOPCNTDQ-NEXT:    retq
30871 ; AVX512VPOPCNTDQVL-LABEL: ult_46_v2i64:
30872 ; AVX512VPOPCNTDQVL:       # %bb.0:
30873 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
30874 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [46,46]
30875 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30876 ; AVX512VPOPCNTDQVL-NEXT:    retq
30878 ; BITALG_NOVLX-LABEL: ult_46_v2i64:
30879 ; BITALG_NOVLX:       # %bb.0:
30880 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
30881 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
30882 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30883 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30884 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [46,46]
30885 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30886 ; BITALG_NOVLX-NEXT:    vzeroupper
30887 ; BITALG_NOVLX-NEXT:    retq
30889 ; BITALG-LABEL: ult_46_v2i64:
30890 ; BITALG:       # %bb.0:
30891 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
30892 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30893 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
30894 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [46,46]
30895 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
30896 ; BITALG-NEXT:    retq
30897   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
30898   %3 = icmp ult <2 x i64> %2, <i64 46, i64 46>
30899   %4 = sext <2 x i1> %3 to <2 x i64>
30900   ret <2 x i64> %4
30903 define <2 x i64> @ugt_46_v2i64(<2 x i64> %0) {
30904 ; SSE2-LABEL: ugt_46_v2i64:
30905 ; SSE2:       # %bb.0:
30906 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30907 ; SSE2-NEXT:    psrlw $1, %xmm1
30908 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30909 ; SSE2-NEXT:    psubb %xmm1, %xmm0
30910 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30911 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
30912 ; SSE2-NEXT:    pand %xmm1, %xmm2
30913 ; SSE2-NEXT:    psrlw $2, %xmm0
30914 ; SSE2-NEXT:    pand %xmm1, %xmm0
30915 ; SSE2-NEXT:    paddb %xmm2, %xmm0
30916 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
30917 ; SSE2-NEXT:    psrlw $4, %xmm1
30918 ; SSE2-NEXT:    paddb %xmm0, %xmm1
30919 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30920 ; SSE2-NEXT:    pxor %xmm0, %xmm0
30921 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
30922 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30923 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30924 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30925 ; SSE2-NEXT:    retq
30927 ; SSE3-LABEL: ugt_46_v2i64:
30928 ; SSE3:       # %bb.0:
30929 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30930 ; SSE3-NEXT:    psrlw $1, %xmm1
30931 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30932 ; SSE3-NEXT:    psubb %xmm1, %xmm0
30933 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
30934 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
30935 ; SSE3-NEXT:    pand %xmm1, %xmm2
30936 ; SSE3-NEXT:    psrlw $2, %xmm0
30937 ; SSE3-NEXT:    pand %xmm1, %xmm0
30938 ; SSE3-NEXT:    paddb %xmm2, %xmm0
30939 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
30940 ; SSE3-NEXT:    psrlw $4, %xmm1
30941 ; SSE3-NEXT:    paddb %xmm0, %xmm1
30942 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
30943 ; SSE3-NEXT:    pxor %xmm0, %xmm0
30944 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
30945 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30946 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30947 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30948 ; SSE3-NEXT:    retq
30950 ; SSSE3-LABEL: ugt_46_v2i64:
30951 ; SSSE3:       # %bb.0:
30952 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30953 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
30954 ; SSSE3-NEXT:    pand %xmm1, %xmm2
30955 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30956 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
30957 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
30958 ; SSSE3-NEXT:    psrlw $4, %xmm0
30959 ; SSSE3-NEXT:    pand %xmm1, %xmm0
30960 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
30961 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
30962 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
30963 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
30964 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30965 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30966 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30967 ; SSSE3-NEXT:    retq
30969 ; SSE41-LABEL: ugt_46_v2i64:
30970 ; SSE41:       # %bb.0:
30971 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30972 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
30973 ; SSE41-NEXT:    pand %xmm1, %xmm2
30974 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30975 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
30976 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
30977 ; SSE41-NEXT:    psrlw $4, %xmm0
30978 ; SSE41-NEXT:    pand %xmm1, %xmm0
30979 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
30980 ; SSE41-NEXT:    paddb %xmm4, %xmm3
30981 ; SSE41-NEXT:    pxor %xmm0, %xmm0
30982 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
30983 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
30984 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30985 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
30986 ; SSE41-NEXT:    retq
30988 ; AVX1-LABEL: ugt_46_v2i64:
30989 ; AVX1:       # %bb.0:
30990 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
30991 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
30992 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
30993 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
30994 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
30995 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
30996 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
30997 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
30998 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
30999 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31000 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31001 ; AVX1-NEXT:    retq
31003 ; AVX2-LABEL: ugt_46_v2i64:
31004 ; AVX2:       # %bb.0:
31005 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31006 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
31007 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31008 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31009 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
31010 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
31011 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31012 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31013 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31014 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31015 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31016 ; AVX2-NEXT:    retq
31018 ; AVX512VPOPCNTDQ-LABEL: ugt_46_v2i64:
31019 ; AVX512VPOPCNTDQ:       # %bb.0:
31020 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31021 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
31022 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31023 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
31024 ; AVX512VPOPCNTDQ-NEXT:    retq
31026 ; AVX512VPOPCNTDQVL-LABEL: ugt_46_v2i64:
31027 ; AVX512VPOPCNTDQVL:       # %bb.0:
31028 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
31029 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [46,46]
31030 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
31031 ; AVX512VPOPCNTDQVL-NEXT:    retq
31033 ; BITALG_NOVLX-LABEL: ugt_46_v2i64:
31034 ; BITALG_NOVLX:       # %bb.0:
31035 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31036 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
31037 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31038 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31039 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31040 ; BITALG_NOVLX-NEXT:    vzeroupper
31041 ; BITALG_NOVLX-NEXT:    retq
31043 ; BITALG-LABEL: ugt_46_v2i64:
31044 ; BITALG:       # %bb.0:
31045 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
31046 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31047 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31048 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [46,46]
31049 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
31050 ; BITALG-NEXT:    retq
31051   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
31052   %3 = icmp ugt <2 x i64> %2, <i64 46, i64 46>
31053   %4 = sext <2 x i1> %3 to <2 x i64>
31054   ret <2 x i64> %4
31057 define <2 x i64> @ult_47_v2i64(<2 x i64> %0) {
31058 ; SSE2-LABEL: ult_47_v2i64:
31059 ; SSE2:       # %bb.0:
31060 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31061 ; SSE2-NEXT:    psrlw $1, %xmm1
31062 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31063 ; SSE2-NEXT:    psubb %xmm1, %xmm0
31064 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31065 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
31066 ; SSE2-NEXT:    pand %xmm1, %xmm2
31067 ; SSE2-NEXT:    psrlw $2, %xmm0
31068 ; SSE2-NEXT:    pand %xmm1, %xmm0
31069 ; SSE2-NEXT:    paddb %xmm2, %xmm0
31070 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31071 ; SSE2-NEXT:    psrlw $4, %xmm1
31072 ; SSE2-NEXT:    paddb %xmm0, %xmm1
31073 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31074 ; SSE2-NEXT:    pxor %xmm0, %xmm0
31075 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
31076 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31077 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31078 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483695,2147483695,2147483695,2147483695]
31079 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
31080 ; SSE2-NEXT:    retq
31082 ; SSE3-LABEL: ult_47_v2i64:
31083 ; SSE3:       # %bb.0:
31084 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31085 ; SSE3-NEXT:    psrlw $1, %xmm1
31086 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31087 ; SSE3-NEXT:    psubb %xmm1, %xmm0
31088 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31089 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
31090 ; SSE3-NEXT:    pand %xmm1, %xmm2
31091 ; SSE3-NEXT:    psrlw $2, %xmm0
31092 ; SSE3-NEXT:    pand %xmm1, %xmm0
31093 ; SSE3-NEXT:    paddb %xmm2, %xmm0
31094 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31095 ; SSE3-NEXT:    psrlw $4, %xmm1
31096 ; SSE3-NEXT:    paddb %xmm0, %xmm1
31097 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31098 ; SSE3-NEXT:    pxor %xmm0, %xmm0
31099 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
31100 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31101 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31102 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483695,2147483695,2147483695,2147483695]
31103 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
31104 ; SSE3-NEXT:    retq
31106 ; SSSE3-LABEL: ult_47_v2i64:
31107 ; SSSE3:       # %bb.0:
31108 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31109 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
31110 ; SSSE3-NEXT:    pand %xmm1, %xmm2
31111 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31112 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
31113 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
31114 ; SSSE3-NEXT:    psrlw $4, %xmm0
31115 ; SSSE3-NEXT:    pand %xmm1, %xmm0
31116 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
31117 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
31118 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
31119 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
31120 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31121 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31122 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483695,2147483695,2147483695,2147483695]
31123 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
31124 ; SSSE3-NEXT:    retq
31126 ; SSE41-LABEL: ult_47_v2i64:
31127 ; SSE41:       # %bb.0:
31128 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31129 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
31130 ; SSE41-NEXT:    pand %xmm1, %xmm2
31131 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31132 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
31133 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
31134 ; SSE41-NEXT:    psrlw $4, %xmm0
31135 ; SSE41-NEXT:    pand %xmm1, %xmm0
31136 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
31137 ; SSE41-NEXT:    paddb %xmm4, %xmm3
31138 ; SSE41-NEXT:    pxor %xmm0, %xmm0
31139 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
31140 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31141 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31142 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483695,2147483695,2147483695,2147483695]
31143 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
31144 ; SSE41-NEXT:    retq
31146 ; AVX1-LABEL: ult_47_v2i64:
31147 ; AVX1:       # %bb.0:
31148 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31149 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
31150 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31151 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31152 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
31153 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
31154 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31155 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31156 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31157 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31158 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [47,47]
31159 ; AVX1-NEXT:    # xmm1 = mem[0,0]
31160 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31161 ; AVX1-NEXT:    retq
31163 ; AVX2-LABEL: ult_47_v2i64:
31164 ; AVX2:       # %bb.0:
31165 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31166 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
31167 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31168 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31169 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
31170 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
31171 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31172 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31173 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31174 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31175 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [47,47]
31176 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31177 ; AVX2-NEXT:    retq
31179 ; AVX512VPOPCNTDQ-LABEL: ult_47_v2i64:
31180 ; AVX512VPOPCNTDQ:       # %bb.0:
31181 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31182 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
31183 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [47,47]
31184 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31185 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
31186 ; AVX512VPOPCNTDQ-NEXT:    retq
31188 ; AVX512VPOPCNTDQVL-LABEL: ult_47_v2i64:
31189 ; AVX512VPOPCNTDQVL:       # %bb.0:
31190 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
31191 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [47,47]
31192 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31193 ; AVX512VPOPCNTDQVL-NEXT:    retq
31195 ; BITALG_NOVLX-LABEL: ult_47_v2i64:
31196 ; BITALG_NOVLX:       # %bb.0:
31197 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31198 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
31199 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31200 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31201 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [47,47]
31202 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31203 ; BITALG_NOVLX-NEXT:    vzeroupper
31204 ; BITALG_NOVLX-NEXT:    retq
31206 ; BITALG-LABEL: ult_47_v2i64:
31207 ; BITALG:       # %bb.0:
31208 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
31209 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31210 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31211 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [47,47]
31212 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31213 ; BITALG-NEXT:    retq
31214   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
31215   %3 = icmp ult <2 x i64> %2, <i64 47, i64 47>
31216   %4 = sext <2 x i1> %3 to <2 x i64>
31217   ret <2 x i64> %4
31220 define <2 x i64> @ugt_47_v2i64(<2 x i64> %0) {
31221 ; SSE2-LABEL: ugt_47_v2i64:
31222 ; SSE2:       # %bb.0:
31223 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31224 ; SSE2-NEXT:    psrlw $1, %xmm1
31225 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31226 ; SSE2-NEXT:    psubb %xmm1, %xmm0
31227 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31228 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
31229 ; SSE2-NEXT:    pand %xmm1, %xmm2
31230 ; SSE2-NEXT:    psrlw $2, %xmm0
31231 ; SSE2-NEXT:    pand %xmm1, %xmm0
31232 ; SSE2-NEXT:    paddb %xmm2, %xmm0
31233 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31234 ; SSE2-NEXT:    psrlw $4, %xmm1
31235 ; SSE2-NEXT:    paddb %xmm0, %xmm1
31236 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31237 ; SSE2-NEXT:    pxor %xmm0, %xmm0
31238 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
31239 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31240 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31241 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31242 ; SSE2-NEXT:    retq
31244 ; SSE3-LABEL: ugt_47_v2i64:
31245 ; SSE3:       # %bb.0:
31246 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31247 ; SSE3-NEXT:    psrlw $1, %xmm1
31248 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31249 ; SSE3-NEXT:    psubb %xmm1, %xmm0
31250 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31251 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
31252 ; SSE3-NEXT:    pand %xmm1, %xmm2
31253 ; SSE3-NEXT:    psrlw $2, %xmm0
31254 ; SSE3-NEXT:    pand %xmm1, %xmm0
31255 ; SSE3-NEXT:    paddb %xmm2, %xmm0
31256 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31257 ; SSE3-NEXT:    psrlw $4, %xmm1
31258 ; SSE3-NEXT:    paddb %xmm0, %xmm1
31259 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31260 ; SSE3-NEXT:    pxor %xmm0, %xmm0
31261 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
31262 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31263 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31264 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31265 ; SSE3-NEXT:    retq
31267 ; SSSE3-LABEL: ugt_47_v2i64:
31268 ; SSSE3:       # %bb.0:
31269 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31270 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
31271 ; SSSE3-NEXT:    pand %xmm1, %xmm2
31272 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31273 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
31274 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
31275 ; SSSE3-NEXT:    psrlw $4, %xmm0
31276 ; SSSE3-NEXT:    pand %xmm1, %xmm0
31277 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
31278 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
31279 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
31280 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
31281 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31282 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31283 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31284 ; SSSE3-NEXT:    retq
31286 ; SSE41-LABEL: ugt_47_v2i64:
31287 ; SSE41:       # %bb.0:
31288 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31289 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
31290 ; SSE41-NEXT:    pand %xmm1, %xmm2
31291 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31292 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
31293 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
31294 ; SSE41-NEXT:    psrlw $4, %xmm0
31295 ; SSE41-NEXT:    pand %xmm1, %xmm0
31296 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
31297 ; SSE41-NEXT:    paddb %xmm4, %xmm3
31298 ; SSE41-NEXT:    pxor %xmm0, %xmm0
31299 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
31300 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31301 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31302 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31303 ; SSE41-NEXT:    retq
31305 ; AVX1-LABEL: ugt_47_v2i64:
31306 ; AVX1:       # %bb.0:
31307 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31308 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
31309 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31310 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31311 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
31312 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
31313 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31314 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31315 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31316 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31317 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31318 ; AVX1-NEXT:    retq
31320 ; AVX2-LABEL: ugt_47_v2i64:
31321 ; AVX2:       # %bb.0:
31322 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31323 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
31324 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31325 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31326 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
31327 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
31328 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31329 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31330 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31331 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31332 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31333 ; AVX2-NEXT:    retq
31335 ; AVX512VPOPCNTDQ-LABEL: ugt_47_v2i64:
31336 ; AVX512VPOPCNTDQ:       # %bb.0:
31337 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31338 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
31339 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31340 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
31341 ; AVX512VPOPCNTDQ-NEXT:    retq
31343 ; AVX512VPOPCNTDQVL-LABEL: ugt_47_v2i64:
31344 ; AVX512VPOPCNTDQVL:       # %bb.0:
31345 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
31346 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [47,47]
31347 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
31348 ; AVX512VPOPCNTDQVL-NEXT:    retq
31350 ; BITALG_NOVLX-LABEL: ugt_47_v2i64:
31351 ; BITALG_NOVLX:       # %bb.0:
31352 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31353 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
31354 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31355 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31356 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31357 ; BITALG_NOVLX-NEXT:    vzeroupper
31358 ; BITALG_NOVLX-NEXT:    retq
31360 ; BITALG-LABEL: ugt_47_v2i64:
31361 ; BITALG:       # %bb.0:
31362 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
31363 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31364 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31365 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [47,47]
31366 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
31367 ; BITALG-NEXT:    retq
31368   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
31369   %3 = icmp ugt <2 x i64> %2, <i64 47, i64 47>
31370   %4 = sext <2 x i1> %3 to <2 x i64>
31371   ret <2 x i64> %4
31374 define <2 x i64> @ult_48_v2i64(<2 x i64> %0) {
31375 ; SSE2-LABEL: ult_48_v2i64:
31376 ; SSE2:       # %bb.0:
31377 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31378 ; SSE2-NEXT:    psrlw $1, %xmm1
31379 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31380 ; SSE2-NEXT:    psubb %xmm1, %xmm0
31381 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31382 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
31383 ; SSE2-NEXT:    pand %xmm1, %xmm2
31384 ; SSE2-NEXT:    psrlw $2, %xmm0
31385 ; SSE2-NEXT:    pand %xmm1, %xmm0
31386 ; SSE2-NEXT:    paddb %xmm2, %xmm0
31387 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31388 ; SSE2-NEXT:    psrlw $4, %xmm1
31389 ; SSE2-NEXT:    paddb %xmm0, %xmm1
31390 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31391 ; SSE2-NEXT:    pxor %xmm0, %xmm0
31392 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
31393 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31394 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31395 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483696,2147483696,2147483696,2147483696]
31396 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
31397 ; SSE2-NEXT:    retq
31399 ; SSE3-LABEL: ult_48_v2i64:
31400 ; SSE3:       # %bb.0:
31401 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31402 ; SSE3-NEXT:    psrlw $1, %xmm1
31403 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31404 ; SSE3-NEXT:    psubb %xmm1, %xmm0
31405 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31406 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
31407 ; SSE3-NEXT:    pand %xmm1, %xmm2
31408 ; SSE3-NEXT:    psrlw $2, %xmm0
31409 ; SSE3-NEXT:    pand %xmm1, %xmm0
31410 ; SSE3-NEXT:    paddb %xmm2, %xmm0
31411 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31412 ; SSE3-NEXT:    psrlw $4, %xmm1
31413 ; SSE3-NEXT:    paddb %xmm0, %xmm1
31414 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31415 ; SSE3-NEXT:    pxor %xmm0, %xmm0
31416 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
31417 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31418 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31419 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483696,2147483696,2147483696,2147483696]
31420 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
31421 ; SSE3-NEXT:    retq
31423 ; SSSE3-LABEL: ult_48_v2i64:
31424 ; SSSE3:       # %bb.0:
31425 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31426 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
31427 ; SSSE3-NEXT:    pand %xmm1, %xmm2
31428 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31429 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
31430 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
31431 ; SSSE3-NEXT:    psrlw $4, %xmm0
31432 ; SSSE3-NEXT:    pand %xmm1, %xmm0
31433 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
31434 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
31435 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
31436 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
31437 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31438 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31439 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483696,2147483696,2147483696,2147483696]
31440 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
31441 ; SSSE3-NEXT:    retq
31443 ; SSE41-LABEL: ult_48_v2i64:
31444 ; SSE41:       # %bb.0:
31445 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31446 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
31447 ; SSE41-NEXT:    pand %xmm1, %xmm2
31448 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31449 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
31450 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
31451 ; SSE41-NEXT:    psrlw $4, %xmm0
31452 ; SSE41-NEXT:    pand %xmm1, %xmm0
31453 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
31454 ; SSE41-NEXT:    paddb %xmm4, %xmm3
31455 ; SSE41-NEXT:    pxor %xmm0, %xmm0
31456 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
31457 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31458 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31459 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483696,2147483696,2147483696,2147483696]
31460 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
31461 ; SSE41-NEXT:    retq
31463 ; AVX1-LABEL: ult_48_v2i64:
31464 ; AVX1:       # %bb.0:
31465 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31466 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
31467 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31468 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31469 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
31470 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
31471 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31472 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31473 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31474 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31475 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [48,48]
31476 ; AVX1-NEXT:    # xmm1 = mem[0,0]
31477 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31478 ; AVX1-NEXT:    retq
31480 ; AVX2-LABEL: ult_48_v2i64:
31481 ; AVX2:       # %bb.0:
31482 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31483 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
31484 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31485 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31486 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
31487 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
31488 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31489 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31490 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31491 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31492 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [48,48]
31493 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31494 ; AVX2-NEXT:    retq
31496 ; AVX512VPOPCNTDQ-LABEL: ult_48_v2i64:
31497 ; AVX512VPOPCNTDQ:       # %bb.0:
31498 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31499 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
31500 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [48,48]
31501 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31502 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
31503 ; AVX512VPOPCNTDQ-NEXT:    retq
31505 ; AVX512VPOPCNTDQVL-LABEL: ult_48_v2i64:
31506 ; AVX512VPOPCNTDQVL:       # %bb.0:
31507 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
31508 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [48,48]
31509 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31510 ; AVX512VPOPCNTDQVL-NEXT:    retq
31512 ; BITALG_NOVLX-LABEL: ult_48_v2i64:
31513 ; BITALG_NOVLX:       # %bb.0:
31514 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31515 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
31516 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31517 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31518 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [48,48]
31519 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31520 ; BITALG_NOVLX-NEXT:    vzeroupper
31521 ; BITALG_NOVLX-NEXT:    retq
31523 ; BITALG-LABEL: ult_48_v2i64:
31524 ; BITALG:       # %bb.0:
31525 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
31526 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31527 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31528 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [48,48]
31529 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31530 ; BITALG-NEXT:    retq
31531   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
31532   %3 = icmp ult <2 x i64> %2, <i64 48, i64 48>
31533   %4 = sext <2 x i1> %3 to <2 x i64>
31534   ret <2 x i64> %4
31537 define <2 x i64> @ugt_48_v2i64(<2 x i64> %0) {
31538 ; SSE2-LABEL: ugt_48_v2i64:
31539 ; SSE2:       # %bb.0:
31540 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31541 ; SSE2-NEXT:    psrlw $1, %xmm1
31542 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31543 ; SSE2-NEXT:    psubb %xmm1, %xmm0
31544 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31545 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
31546 ; SSE2-NEXT:    pand %xmm1, %xmm2
31547 ; SSE2-NEXT:    psrlw $2, %xmm0
31548 ; SSE2-NEXT:    pand %xmm1, %xmm0
31549 ; SSE2-NEXT:    paddb %xmm2, %xmm0
31550 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31551 ; SSE2-NEXT:    psrlw $4, %xmm1
31552 ; SSE2-NEXT:    paddb %xmm0, %xmm1
31553 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31554 ; SSE2-NEXT:    pxor %xmm0, %xmm0
31555 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
31556 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31557 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31558 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31559 ; SSE2-NEXT:    retq
31561 ; SSE3-LABEL: ugt_48_v2i64:
31562 ; SSE3:       # %bb.0:
31563 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31564 ; SSE3-NEXT:    psrlw $1, %xmm1
31565 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31566 ; SSE3-NEXT:    psubb %xmm1, %xmm0
31567 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31568 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
31569 ; SSE3-NEXT:    pand %xmm1, %xmm2
31570 ; SSE3-NEXT:    psrlw $2, %xmm0
31571 ; SSE3-NEXT:    pand %xmm1, %xmm0
31572 ; SSE3-NEXT:    paddb %xmm2, %xmm0
31573 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31574 ; SSE3-NEXT:    psrlw $4, %xmm1
31575 ; SSE3-NEXT:    paddb %xmm0, %xmm1
31576 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31577 ; SSE3-NEXT:    pxor %xmm0, %xmm0
31578 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
31579 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31580 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31581 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31582 ; SSE3-NEXT:    retq
31584 ; SSSE3-LABEL: ugt_48_v2i64:
31585 ; SSSE3:       # %bb.0:
31586 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31587 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
31588 ; SSSE3-NEXT:    pand %xmm1, %xmm2
31589 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31590 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
31591 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
31592 ; SSSE3-NEXT:    psrlw $4, %xmm0
31593 ; SSSE3-NEXT:    pand %xmm1, %xmm0
31594 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
31595 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
31596 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
31597 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
31598 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31599 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31600 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31601 ; SSSE3-NEXT:    retq
31603 ; SSE41-LABEL: ugt_48_v2i64:
31604 ; SSE41:       # %bb.0:
31605 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31606 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
31607 ; SSE41-NEXT:    pand %xmm1, %xmm2
31608 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31609 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
31610 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
31611 ; SSE41-NEXT:    psrlw $4, %xmm0
31612 ; SSE41-NEXT:    pand %xmm1, %xmm0
31613 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
31614 ; SSE41-NEXT:    paddb %xmm4, %xmm3
31615 ; SSE41-NEXT:    pxor %xmm0, %xmm0
31616 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
31617 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31618 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31619 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31620 ; SSE41-NEXT:    retq
31622 ; AVX1-LABEL: ugt_48_v2i64:
31623 ; AVX1:       # %bb.0:
31624 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31625 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
31626 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31627 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31628 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
31629 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
31630 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31631 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31632 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31633 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31634 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31635 ; AVX1-NEXT:    retq
31637 ; AVX2-LABEL: ugt_48_v2i64:
31638 ; AVX2:       # %bb.0:
31639 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31640 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
31641 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31642 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31643 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
31644 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
31645 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31646 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31647 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31648 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31649 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31650 ; AVX2-NEXT:    retq
31652 ; AVX512VPOPCNTDQ-LABEL: ugt_48_v2i64:
31653 ; AVX512VPOPCNTDQ:       # %bb.0:
31654 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31655 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
31656 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31657 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
31658 ; AVX512VPOPCNTDQ-NEXT:    retq
31660 ; AVX512VPOPCNTDQVL-LABEL: ugt_48_v2i64:
31661 ; AVX512VPOPCNTDQVL:       # %bb.0:
31662 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
31663 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [48,48]
31664 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
31665 ; AVX512VPOPCNTDQVL-NEXT:    retq
31667 ; BITALG_NOVLX-LABEL: ugt_48_v2i64:
31668 ; BITALG_NOVLX:       # %bb.0:
31669 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31670 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
31671 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31672 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31673 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31674 ; BITALG_NOVLX-NEXT:    vzeroupper
31675 ; BITALG_NOVLX-NEXT:    retq
31677 ; BITALG-LABEL: ugt_48_v2i64:
31678 ; BITALG:       # %bb.0:
31679 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
31680 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31681 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31682 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [48,48]
31683 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
31684 ; BITALG-NEXT:    retq
31685   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
31686   %3 = icmp ugt <2 x i64> %2, <i64 48, i64 48>
31687   %4 = sext <2 x i1> %3 to <2 x i64>
31688   ret <2 x i64> %4
31691 define <2 x i64> @ult_49_v2i64(<2 x i64> %0) {
31692 ; SSE2-LABEL: ult_49_v2i64:
31693 ; SSE2:       # %bb.0:
31694 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31695 ; SSE2-NEXT:    psrlw $1, %xmm1
31696 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31697 ; SSE2-NEXT:    psubb %xmm1, %xmm0
31698 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31699 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
31700 ; SSE2-NEXT:    pand %xmm1, %xmm2
31701 ; SSE2-NEXT:    psrlw $2, %xmm0
31702 ; SSE2-NEXT:    pand %xmm1, %xmm0
31703 ; SSE2-NEXT:    paddb %xmm2, %xmm0
31704 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31705 ; SSE2-NEXT:    psrlw $4, %xmm1
31706 ; SSE2-NEXT:    paddb %xmm0, %xmm1
31707 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31708 ; SSE2-NEXT:    pxor %xmm0, %xmm0
31709 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
31710 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31711 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31712 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483697,2147483697,2147483697,2147483697]
31713 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
31714 ; SSE2-NEXT:    retq
31716 ; SSE3-LABEL: ult_49_v2i64:
31717 ; SSE3:       # %bb.0:
31718 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31719 ; SSE3-NEXT:    psrlw $1, %xmm1
31720 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31721 ; SSE3-NEXT:    psubb %xmm1, %xmm0
31722 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31723 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
31724 ; SSE3-NEXT:    pand %xmm1, %xmm2
31725 ; SSE3-NEXT:    psrlw $2, %xmm0
31726 ; SSE3-NEXT:    pand %xmm1, %xmm0
31727 ; SSE3-NEXT:    paddb %xmm2, %xmm0
31728 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31729 ; SSE3-NEXT:    psrlw $4, %xmm1
31730 ; SSE3-NEXT:    paddb %xmm0, %xmm1
31731 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31732 ; SSE3-NEXT:    pxor %xmm0, %xmm0
31733 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
31734 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31735 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31736 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483697,2147483697,2147483697,2147483697]
31737 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
31738 ; SSE3-NEXT:    retq
31740 ; SSSE3-LABEL: ult_49_v2i64:
31741 ; SSSE3:       # %bb.0:
31742 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31743 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
31744 ; SSSE3-NEXT:    pand %xmm1, %xmm2
31745 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31746 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
31747 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
31748 ; SSSE3-NEXT:    psrlw $4, %xmm0
31749 ; SSSE3-NEXT:    pand %xmm1, %xmm0
31750 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
31751 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
31752 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
31753 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
31754 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31755 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31756 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483697,2147483697,2147483697,2147483697]
31757 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
31758 ; SSSE3-NEXT:    retq
31760 ; SSE41-LABEL: ult_49_v2i64:
31761 ; SSE41:       # %bb.0:
31762 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31763 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
31764 ; SSE41-NEXT:    pand %xmm1, %xmm2
31765 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31766 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
31767 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
31768 ; SSE41-NEXT:    psrlw $4, %xmm0
31769 ; SSE41-NEXT:    pand %xmm1, %xmm0
31770 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
31771 ; SSE41-NEXT:    paddb %xmm4, %xmm3
31772 ; SSE41-NEXT:    pxor %xmm0, %xmm0
31773 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
31774 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
31775 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31776 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483697,2147483697,2147483697,2147483697]
31777 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
31778 ; SSE41-NEXT:    retq
31780 ; AVX1-LABEL: ult_49_v2i64:
31781 ; AVX1:       # %bb.0:
31782 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31783 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
31784 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31785 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31786 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
31787 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
31788 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31789 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31790 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31791 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31792 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [49,49]
31793 ; AVX1-NEXT:    # xmm1 = mem[0,0]
31794 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31795 ; AVX1-NEXT:    retq
31797 ; AVX2-LABEL: ult_49_v2i64:
31798 ; AVX2:       # %bb.0:
31799 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31800 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
31801 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31802 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31803 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
31804 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
31805 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31806 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31807 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31808 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31809 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [49,49]
31810 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31811 ; AVX2-NEXT:    retq
31813 ; AVX512VPOPCNTDQ-LABEL: ult_49_v2i64:
31814 ; AVX512VPOPCNTDQ:       # %bb.0:
31815 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31816 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
31817 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [49,49]
31818 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31819 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
31820 ; AVX512VPOPCNTDQ-NEXT:    retq
31822 ; AVX512VPOPCNTDQVL-LABEL: ult_49_v2i64:
31823 ; AVX512VPOPCNTDQVL:       # %bb.0:
31824 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
31825 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [49,49]
31826 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31827 ; AVX512VPOPCNTDQVL-NEXT:    retq
31829 ; BITALG_NOVLX-LABEL: ult_49_v2i64:
31830 ; BITALG_NOVLX:       # %bb.0:
31831 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31832 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
31833 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31834 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31835 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [49,49]
31836 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31837 ; BITALG_NOVLX-NEXT:    vzeroupper
31838 ; BITALG_NOVLX-NEXT:    retq
31840 ; BITALG-LABEL: ult_49_v2i64:
31841 ; BITALG:       # %bb.0:
31842 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
31843 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31844 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31845 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [49,49]
31846 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
31847 ; BITALG-NEXT:    retq
31848   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
31849   %3 = icmp ult <2 x i64> %2, <i64 49, i64 49>
31850   %4 = sext <2 x i1> %3 to <2 x i64>
31851   ret <2 x i64> %4
31854 define <2 x i64> @ugt_49_v2i64(<2 x i64> %0) {
31855 ; SSE2-LABEL: ugt_49_v2i64:
31856 ; SSE2:       # %bb.0:
31857 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31858 ; SSE2-NEXT:    psrlw $1, %xmm1
31859 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31860 ; SSE2-NEXT:    psubb %xmm1, %xmm0
31861 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31862 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
31863 ; SSE2-NEXT:    pand %xmm1, %xmm2
31864 ; SSE2-NEXT:    psrlw $2, %xmm0
31865 ; SSE2-NEXT:    pand %xmm1, %xmm0
31866 ; SSE2-NEXT:    paddb %xmm2, %xmm0
31867 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
31868 ; SSE2-NEXT:    psrlw $4, %xmm1
31869 ; SSE2-NEXT:    paddb %xmm0, %xmm1
31870 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31871 ; SSE2-NEXT:    pxor %xmm0, %xmm0
31872 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
31873 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31874 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31875 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31876 ; SSE2-NEXT:    retq
31878 ; SSE3-LABEL: ugt_49_v2i64:
31879 ; SSE3:       # %bb.0:
31880 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31881 ; SSE3-NEXT:    psrlw $1, %xmm1
31882 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31883 ; SSE3-NEXT:    psubb %xmm1, %xmm0
31884 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
31885 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
31886 ; SSE3-NEXT:    pand %xmm1, %xmm2
31887 ; SSE3-NEXT:    psrlw $2, %xmm0
31888 ; SSE3-NEXT:    pand %xmm1, %xmm0
31889 ; SSE3-NEXT:    paddb %xmm2, %xmm0
31890 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
31891 ; SSE3-NEXT:    psrlw $4, %xmm1
31892 ; SSE3-NEXT:    paddb %xmm0, %xmm1
31893 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
31894 ; SSE3-NEXT:    pxor %xmm0, %xmm0
31895 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
31896 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31897 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31898 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31899 ; SSE3-NEXT:    retq
31901 ; SSSE3-LABEL: ugt_49_v2i64:
31902 ; SSSE3:       # %bb.0:
31903 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31904 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
31905 ; SSSE3-NEXT:    pand %xmm1, %xmm2
31906 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31907 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
31908 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
31909 ; SSSE3-NEXT:    psrlw $4, %xmm0
31910 ; SSSE3-NEXT:    pand %xmm1, %xmm0
31911 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
31912 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
31913 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
31914 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
31915 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31916 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31917 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31918 ; SSSE3-NEXT:    retq
31920 ; SSE41-LABEL: ugt_49_v2i64:
31921 ; SSE41:       # %bb.0:
31922 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31923 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
31924 ; SSE41-NEXT:    pand %xmm1, %xmm2
31925 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31926 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
31927 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
31928 ; SSE41-NEXT:    psrlw $4, %xmm0
31929 ; SSE41-NEXT:    pand %xmm1, %xmm0
31930 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
31931 ; SSE41-NEXT:    paddb %xmm4, %xmm3
31932 ; SSE41-NEXT:    pxor %xmm0, %xmm0
31933 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
31934 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
31935 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31936 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
31937 ; SSE41-NEXT:    retq
31939 ; AVX1-LABEL: ugt_49_v2i64:
31940 ; AVX1:       # %bb.0:
31941 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31942 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
31943 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31944 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31945 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
31946 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
31947 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31948 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31949 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31950 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31951 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31952 ; AVX1-NEXT:    retq
31954 ; AVX2-LABEL: ugt_49_v2i64:
31955 ; AVX2:       # %bb.0:
31956 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
31957 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
31958 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
31959 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
31960 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
31961 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
31962 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
31963 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
31964 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31965 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31966 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31967 ; AVX2-NEXT:    retq
31969 ; AVX512VPOPCNTDQ-LABEL: ugt_49_v2i64:
31970 ; AVX512VPOPCNTDQ:       # %bb.0:
31971 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31972 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
31973 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31974 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
31975 ; AVX512VPOPCNTDQ-NEXT:    retq
31977 ; AVX512VPOPCNTDQVL-LABEL: ugt_49_v2i64:
31978 ; AVX512VPOPCNTDQVL:       # %bb.0:
31979 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
31980 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [49,49]
31981 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
31982 ; AVX512VPOPCNTDQVL-NEXT:    retq
31984 ; BITALG_NOVLX-LABEL: ugt_49_v2i64:
31985 ; BITALG_NOVLX:       # %bb.0:
31986 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
31987 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
31988 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31989 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31990 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
31991 ; BITALG_NOVLX-NEXT:    vzeroupper
31992 ; BITALG_NOVLX-NEXT:    retq
31994 ; BITALG-LABEL: ugt_49_v2i64:
31995 ; BITALG:       # %bb.0:
31996 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
31997 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
31998 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
31999 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [49,49]
32000 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
32001 ; BITALG-NEXT:    retq
32002   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
32003   %3 = icmp ugt <2 x i64> %2, <i64 49, i64 49>
32004   %4 = sext <2 x i1> %3 to <2 x i64>
32005   ret <2 x i64> %4
32008 define <2 x i64> @ult_50_v2i64(<2 x i64> %0) {
32009 ; SSE2-LABEL: ult_50_v2i64:
32010 ; SSE2:       # %bb.0:
32011 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32012 ; SSE2-NEXT:    psrlw $1, %xmm1
32013 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32014 ; SSE2-NEXT:    psubb %xmm1, %xmm0
32015 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32016 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
32017 ; SSE2-NEXT:    pand %xmm1, %xmm2
32018 ; SSE2-NEXT:    psrlw $2, %xmm0
32019 ; SSE2-NEXT:    pand %xmm1, %xmm0
32020 ; SSE2-NEXT:    paddb %xmm2, %xmm0
32021 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32022 ; SSE2-NEXT:    psrlw $4, %xmm1
32023 ; SSE2-NEXT:    paddb %xmm0, %xmm1
32024 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32025 ; SSE2-NEXT:    pxor %xmm0, %xmm0
32026 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
32027 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32028 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32029 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483698,2147483698,2147483698,2147483698]
32030 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
32031 ; SSE2-NEXT:    retq
32033 ; SSE3-LABEL: ult_50_v2i64:
32034 ; SSE3:       # %bb.0:
32035 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32036 ; SSE3-NEXT:    psrlw $1, %xmm1
32037 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32038 ; SSE3-NEXT:    psubb %xmm1, %xmm0
32039 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32040 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
32041 ; SSE3-NEXT:    pand %xmm1, %xmm2
32042 ; SSE3-NEXT:    psrlw $2, %xmm0
32043 ; SSE3-NEXT:    pand %xmm1, %xmm0
32044 ; SSE3-NEXT:    paddb %xmm2, %xmm0
32045 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32046 ; SSE3-NEXT:    psrlw $4, %xmm1
32047 ; SSE3-NEXT:    paddb %xmm0, %xmm1
32048 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32049 ; SSE3-NEXT:    pxor %xmm0, %xmm0
32050 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
32051 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32052 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32053 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483698,2147483698,2147483698,2147483698]
32054 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
32055 ; SSE3-NEXT:    retq
32057 ; SSSE3-LABEL: ult_50_v2i64:
32058 ; SSSE3:       # %bb.0:
32059 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32060 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
32061 ; SSSE3-NEXT:    pand %xmm1, %xmm2
32062 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32063 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
32064 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
32065 ; SSSE3-NEXT:    psrlw $4, %xmm0
32066 ; SSSE3-NEXT:    pand %xmm1, %xmm0
32067 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
32068 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
32069 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
32070 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
32071 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32072 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32073 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483698,2147483698,2147483698,2147483698]
32074 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
32075 ; SSSE3-NEXT:    retq
32077 ; SSE41-LABEL: ult_50_v2i64:
32078 ; SSE41:       # %bb.0:
32079 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32080 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
32081 ; SSE41-NEXT:    pand %xmm1, %xmm2
32082 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32083 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
32084 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
32085 ; SSE41-NEXT:    psrlw $4, %xmm0
32086 ; SSE41-NEXT:    pand %xmm1, %xmm0
32087 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
32088 ; SSE41-NEXT:    paddb %xmm4, %xmm3
32089 ; SSE41-NEXT:    pxor %xmm0, %xmm0
32090 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
32091 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32092 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32093 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483698,2147483698,2147483698,2147483698]
32094 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
32095 ; SSE41-NEXT:    retq
32097 ; AVX1-LABEL: ult_50_v2i64:
32098 ; AVX1:       # %bb.0:
32099 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32100 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
32101 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32102 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32103 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
32104 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
32105 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32106 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32107 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32108 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32109 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [50,50]
32110 ; AVX1-NEXT:    # xmm1 = mem[0,0]
32111 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32112 ; AVX1-NEXT:    retq
32114 ; AVX2-LABEL: ult_50_v2i64:
32115 ; AVX2:       # %bb.0:
32116 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32117 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
32118 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32119 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32120 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
32121 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
32122 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32123 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32124 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32125 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32126 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [50,50]
32127 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32128 ; AVX2-NEXT:    retq
32130 ; AVX512VPOPCNTDQ-LABEL: ult_50_v2i64:
32131 ; AVX512VPOPCNTDQ:       # %bb.0:
32132 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32133 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
32134 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [50,50]
32135 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32136 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
32137 ; AVX512VPOPCNTDQ-NEXT:    retq
32139 ; AVX512VPOPCNTDQVL-LABEL: ult_50_v2i64:
32140 ; AVX512VPOPCNTDQVL:       # %bb.0:
32141 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
32142 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [50,50]
32143 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32144 ; AVX512VPOPCNTDQVL-NEXT:    retq
32146 ; BITALG_NOVLX-LABEL: ult_50_v2i64:
32147 ; BITALG_NOVLX:       # %bb.0:
32148 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32149 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
32150 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32151 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32152 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [50,50]
32153 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32154 ; BITALG_NOVLX-NEXT:    vzeroupper
32155 ; BITALG_NOVLX-NEXT:    retq
32157 ; BITALG-LABEL: ult_50_v2i64:
32158 ; BITALG:       # %bb.0:
32159 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
32160 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32161 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32162 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [50,50]
32163 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32164 ; BITALG-NEXT:    retq
32165   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
32166   %3 = icmp ult <2 x i64> %2, <i64 50, i64 50>
32167   %4 = sext <2 x i1> %3 to <2 x i64>
32168   ret <2 x i64> %4
32171 define <2 x i64> @ugt_50_v2i64(<2 x i64> %0) {
32172 ; SSE2-LABEL: ugt_50_v2i64:
32173 ; SSE2:       # %bb.0:
32174 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32175 ; SSE2-NEXT:    psrlw $1, %xmm1
32176 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32177 ; SSE2-NEXT:    psubb %xmm1, %xmm0
32178 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32179 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
32180 ; SSE2-NEXT:    pand %xmm1, %xmm2
32181 ; SSE2-NEXT:    psrlw $2, %xmm0
32182 ; SSE2-NEXT:    pand %xmm1, %xmm0
32183 ; SSE2-NEXT:    paddb %xmm2, %xmm0
32184 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32185 ; SSE2-NEXT:    psrlw $4, %xmm1
32186 ; SSE2-NEXT:    paddb %xmm0, %xmm1
32187 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32188 ; SSE2-NEXT:    pxor %xmm0, %xmm0
32189 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
32190 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32191 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32192 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32193 ; SSE2-NEXT:    retq
32195 ; SSE3-LABEL: ugt_50_v2i64:
32196 ; SSE3:       # %bb.0:
32197 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32198 ; SSE3-NEXT:    psrlw $1, %xmm1
32199 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32200 ; SSE3-NEXT:    psubb %xmm1, %xmm0
32201 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32202 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
32203 ; SSE3-NEXT:    pand %xmm1, %xmm2
32204 ; SSE3-NEXT:    psrlw $2, %xmm0
32205 ; SSE3-NEXT:    pand %xmm1, %xmm0
32206 ; SSE3-NEXT:    paddb %xmm2, %xmm0
32207 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32208 ; SSE3-NEXT:    psrlw $4, %xmm1
32209 ; SSE3-NEXT:    paddb %xmm0, %xmm1
32210 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32211 ; SSE3-NEXT:    pxor %xmm0, %xmm0
32212 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
32213 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32214 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32215 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32216 ; SSE3-NEXT:    retq
32218 ; SSSE3-LABEL: ugt_50_v2i64:
32219 ; SSSE3:       # %bb.0:
32220 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32221 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
32222 ; SSSE3-NEXT:    pand %xmm1, %xmm2
32223 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32224 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
32225 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
32226 ; SSSE3-NEXT:    psrlw $4, %xmm0
32227 ; SSSE3-NEXT:    pand %xmm1, %xmm0
32228 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
32229 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
32230 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
32231 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
32232 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32233 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32234 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32235 ; SSSE3-NEXT:    retq
32237 ; SSE41-LABEL: ugt_50_v2i64:
32238 ; SSE41:       # %bb.0:
32239 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32240 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
32241 ; SSE41-NEXT:    pand %xmm1, %xmm2
32242 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32243 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
32244 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
32245 ; SSE41-NEXT:    psrlw $4, %xmm0
32246 ; SSE41-NEXT:    pand %xmm1, %xmm0
32247 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
32248 ; SSE41-NEXT:    paddb %xmm4, %xmm3
32249 ; SSE41-NEXT:    pxor %xmm0, %xmm0
32250 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
32251 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32252 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32253 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32254 ; SSE41-NEXT:    retq
32256 ; AVX1-LABEL: ugt_50_v2i64:
32257 ; AVX1:       # %bb.0:
32258 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32259 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
32260 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32261 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32262 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
32263 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
32264 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32265 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32266 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32267 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32268 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32269 ; AVX1-NEXT:    retq
32271 ; AVX2-LABEL: ugt_50_v2i64:
32272 ; AVX2:       # %bb.0:
32273 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32274 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
32275 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32276 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32277 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
32278 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
32279 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32280 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32281 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32282 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32283 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32284 ; AVX2-NEXT:    retq
32286 ; AVX512VPOPCNTDQ-LABEL: ugt_50_v2i64:
32287 ; AVX512VPOPCNTDQ:       # %bb.0:
32288 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32289 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
32290 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32291 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
32292 ; AVX512VPOPCNTDQ-NEXT:    retq
32294 ; AVX512VPOPCNTDQVL-LABEL: ugt_50_v2i64:
32295 ; AVX512VPOPCNTDQVL:       # %bb.0:
32296 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
32297 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [50,50]
32298 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
32299 ; AVX512VPOPCNTDQVL-NEXT:    retq
32301 ; BITALG_NOVLX-LABEL: ugt_50_v2i64:
32302 ; BITALG_NOVLX:       # %bb.0:
32303 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32304 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
32305 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32306 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32307 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32308 ; BITALG_NOVLX-NEXT:    vzeroupper
32309 ; BITALG_NOVLX-NEXT:    retq
32311 ; BITALG-LABEL: ugt_50_v2i64:
32312 ; BITALG:       # %bb.0:
32313 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
32314 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32315 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32316 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [50,50]
32317 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
32318 ; BITALG-NEXT:    retq
32319   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
32320   %3 = icmp ugt <2 x i64> %2, <i64 50, i64 50>
32321   %4 = sext <2 x i1> %3 to <2 x i64>
32322   ret <2 x i64> %4
32325 define <2 x i64> @ult_51_v2i64(<2 x i64> %0) {
32326 ; SSE2-LABEL: ult_51_v2i64:
32327 ; SSE2:       # %bb.0:
32328 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32329 ; SSE2-NEXT:    psrlw $1, %xmm1
32330 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32331 ; SSE2-NEXT:    psubb %xmm1, %xmm0
32332 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32333 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
32334 ; SSE2-NEXT:    pand %xmm1, %xmm2
32335 ; SSE2-NEXT:    psrlw $2, %xmm0
32336 ; SSE2-NEXT:    pand %xmm1, %xmm0
32337 ; SSE2-NEXT:    paddb %xmm2, %xmm0
32338 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32339 ; SSE2-NEXT:    psrlw $4, %xmm1
32340 ; SSE2-NEXT:    paddb %xmm0, %xmm1
32341 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32342 ; SSE2-NEXT:    pxor %xmm0, %xmm0
32343 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
32344 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32345 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32346 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483699,2147483699,2147483699,2147483699]
32347 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
32348 ; SSE2-NEXT:    retq
32350 ; SSE3-LABEL: ult_51_v2i64:
32351 ; SSE3:       # %bb.0:
32352 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32353 ; SSE3-NEXT:    psrlw $1, %xmm1
32354 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32355 ; SSE3-NEXT:    psubb %xmm1, %xmm0
32356 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32357 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
32358 ; SSE3-NEXT:    pand %xmm1, %xmm2
32359 ; SSE3-NEXT:    psrlw $2, %xmm0
32360 ; SSE3-NEXT:    pand %xmm1, %xmm0
32361 ; SSE3-NEXT:    paddb %xmm2, %xmm0
32362 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32363 ; SSE3-NEXT:    psrlw $4, %xmm1
32364 ; SSE3-NEXT:    paddb %xmm0, %xmm1
32365 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32366 ; SSE3-NEXT:    pxor %xmm0, %xmm0
32367 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
32368 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32369 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32370 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483699,2147483699,2147483699,2147483699]
32371 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
32372 ; SSE3-NEXT:    retq
32374 ; SSSE3-LABEL: ult_51_v2i64:
32375 ; SSSE3:       # %bb.0:
32376 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32377 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
32378 ; SSSE3-NEXT:    pand %xmm1, %xmm2
32379 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32380 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
32381 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
32382 ; SSSE3-NEXT:    psrlw $4, %xmm0
32383 ; SSSE3-NEXT:    pand %xmm1, %xmm0
32384 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
32385 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
32386 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
32387 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
32388 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32389 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32390 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483699,2147483699,2147483699,2147483699]
32391 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
32392 ; SSSE3-NEXT:    retq
32394 ; SSE41-LABEL: ult_51_v2i64:
32395 ; SSE41:       # %bb.0:
32396 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32397 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
32398 ; SSE41-NEXT:    pand %xmm1, %xmm2
32399 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32400 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
32401 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
32402 ; SSE41-NEXT:    psrlw $4, %xmm0
32403 ; SSE41-NEXT:    pand %xmm1, %xmm0
32404 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
32405 ; SSE41-NEXT:    paddb %xmm4, %xmm3
32406 ; SSE41-NEXT:    pxor %xmm0, %xmm0
32407 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
32408 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32409 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32410 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483699,2147483699,2147483699,2147483699]
32411 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
32412 ; SSE41-NEXT:    retq
32414 ; AVX1-LABEL: ult_51_v2i64:
32415 ; AVX1:       # %bb.0:
32416 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32417 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
32418 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32419 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32420 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
32421 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
32422 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32423 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32424 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32425 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32426 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [51,51]
32427 ; AVX1-NEXT:    # xmm1 = mem[0,0]
32428 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32429 ; AVX1-NEXT:    retq
32431 ; AVX2-LABEL: ult_51_v2i64:
32432 ; AVX2:       # %bb.0:
32433 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32434 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
32435 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32436 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32437 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
32438 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
32439 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32440 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32441 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32442 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32443 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [51,51]
32444 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32445 ; AVX2-NEXT:    retq
32447 ; AVX512VPOPCNTDQ-LABEL: ult_51_v2i64:
32448 ; AVX512VPOPCNTDQ:       # %bb.0:
32449 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32450 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
32451 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [51,51]
32452 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32453 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
32454 ; AVX512VPOPCNTDQ-NEXT:    retq
32456 ; AVX512VPOPCNTDQVL-LABEL: ult_51_v2i64:
32457 ; AVX512VPOPCNTDQVL:       # %bb.0:
32458 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
32459 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [51,51]
32460 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32461 ; AVX512VPOPCNTDQVL-NEXT:    retq
32463 ; BITALG_NOVLX-LABEL: ult_51_v2i64:
32464 ; BITALG_NOVLX:       # %bb.0:
32465 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32466 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
32467 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32468 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32469 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [51,51]
32470 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32471 ; BITALG_NOVLX-NEXT:    vzeroupper
32472 ; BITALG_NOVLX-NEXT:    retq
32474 ; BITALG-LABEL: ult_51_v2i64:
32475 ; BITALG:       # %bb.0:
32476 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
32477 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32478 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32479 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [51,51]
32480 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32481 ; BITALG-NEXT:    retq
32482   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
32483   %3 = icmp ult <2 x i64> %2, <i64 51, i64 51>
32484   %4 = sext <2 x i1> %3 to <2 x i64>
32485   ret <2 x i64> %4
32488 define <2 x i64> @ugt_51_v2i64(<2 x i64> %0) {
32489 ; SSE2-LABEL: ugt_51_v2i64:
32490 ; SSE2:       # %bb.0:
32491 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32492 ; SSE2-NEXT:    psrlw $1, %xmm1
32493 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32494 ; SSE2-NEXT:    psubb %xmm1, %xmm0
32495 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32496 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
32497 ; SSE2-NEXT:    pand %xmm1, %xmm2
32498 ; SSE2-NEXT:    psrlw $2, %xmm0
32499 ; SSE2-NEXT:    pand %xmm1, %xmm0
32500 ; SSE2-NEXT:    paddb %xmm2, %xmm0
32501 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32502 ; SSE2-NEXT:    psrlw $4, %xmm1
32503 ; SSE2-NEXT:    paddb %xmm0, %xmm1
32504 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32505 ; SSE2-NEXT:    pxor %xmm0, %xmm0
32506 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
32507 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32508 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32509 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32510 ; SSE2-NEXT:    retq
32512 ; SSE3-LABEL: ugt_51_v2i64:
32513 ; SSE3:       # %bb.0:
32514 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32515 ; SSE3-NEXT:    psrlw $1, %xmm1
32516 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32517 ; SSE3-NEXT:    psubb %xmm1, %xmm0
32518 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32519 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
32520 ; SSE3-NEXT:    pand %xmm1, %xmm2
32521 ; SSE3-NEXT:    psrlw $2, %xmm0
32522 ; SSE3-NEXT:    pand %xmm1, %xmm0
32523 ; SSE3-NEXT:    paddb %xmm2, %xmm0
32524 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32525 ; SSE3-NEXT:    psrlw $4, %xmm1
32526 ; SSE3-NEXT:    paddb %xmm0, %xmm1
32527 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32528 ; SSE3-NEXT:    pxor %xmm0, %xmm0
32529 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
32530 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32531 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32532 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32533 ; SSE3-NEXT:    retq
32535 ; SSSE3-LABEL: ugt_51_v2i64:
32536 ; SSSE3:       # %bb.0:
32537 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32538 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
32539 ; SSSE3-NEXT:    pand %xmm1, %xmm2
32540 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32541 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
32542 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
32543 ; SSSE3-NEXT:    psrlw $4, %xmm0
32544 ; SSSE3-NEXT:    pand %xmm1, %xmm0
32545 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
32546 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
32547 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
32548 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
32549 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32550 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32551 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32552 ; SSSE3-NEXT:    retq
32554 ; SSE41-LABEL: ugt_51_v2i64:
32555 ; SSE41:       # %bb.0:
32556 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32557 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
32558 ; SSE41-NEXT:    pand %xmm1, %xmm2
32559 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32560 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
32561 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
32562 ; SSE41-NEXT:    psrlw $4, %xmm0
32563 ; SSE41-NEXT:    pand %xmm1, %xmm0
32564 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
32565 ; SSE41-NEXT:    paddb %xmm4, %xmm3
32566 ; SSE41-NEXT:    pxor %xmm0, %xmm0
32567 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
32568 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32569 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32570 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32571 ; SSE41-NEXT:    retq
32573 ; AVX1-LABEL: ugt_51_v2i64:
32574 ; AVX1:       # %bb.0:
32575 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32576 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
32577 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32578 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32579 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
32580 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
32581 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32582 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32583 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32584 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32585 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32586 ; AVX1-NEXT:    retq
32588 ; AVX2-LABEL: ugt_51_v2i64:
32589 ; AVX2:       # %bb.0:
32590 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32591 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
32592 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32593 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32594 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
32595 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
32596 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32597 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32598 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32599 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32600 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32601 ; AVX2-NEXT:    retq
32603 ; AVX512VPOPCNTDQ-LABEL: ugt_51_v2i64:
32604 ; AVX512VPOPCNTDQ:       # %bb.0:
32605 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32606 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
32607 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32608 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
32609 ; AVX512VPOPCNTDQ-NEXT:    retq
32611 ; AVX512VPOPCNTDQVL-LABEL: ugt_51_v2i64:
32612 ; AVX512VPOPCNTDQVL:       # %bb.0:
32613 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
32614 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [51,51]
32615 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
32616 ; AVX512VPOPCNTDQVL-NEXT:    retq
32618 ; BITALG_NOVLX-LABEL: ugt_51_v2i64:
32619 ; BITALG_NOVLX:       # %bb.0:
32620 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32621 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
32622 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32623 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32624 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32625 ; BITALG_NOVLX-NEXT:    vzeroupper
32626 ; BITALG_NOVLX-NEXT:    retq
32628 ; BITALG-LABEL: ugt_51_v2i64:
32629 ; BITALG:       # %bb.0:
32630 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
32631 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32632 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32633 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [51,51]
32634 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
32635 ; BITALG-NEXT:    retq
32636   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
32637   %3 = icmp ugt <2 x i64> %2, <i64 51, i64 51>
32638   %4 = sext <2 x i1> %3 to <2 x i64>
32639   ret <2 x i64> %4
32642 define <2 x i64> @ult_52_v2i64(<2 x i64> %0) {
32643 ; SSE2-LABEL: ult_52_v2i64:
32644 ; SSE2:       # %bb.0:
32645 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32646 ; SSE2-NEXT:    psrlw $1, %xmm1
32647 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32648 ; SSE2-NEXT:    psubb %xmm1, %xmm0
32649 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32650 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
32651 ; SSE2-NEXT:    pand %xmm1, %xmm2
32652 ; SSE2-NEXT:    psrlw $2, %xmm0
32653 ; SSE2-NEXT:    pand %xmm1, %xmm0
32654 ; SSE2-NEXT:    paddb %xmm2, %xmm0
32655 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32656 ; SSE2-NEXT:    psrlw $4, %xmm1
32657 ; SSE2-NEXT:    paddb %xmm0, %xmm1
32658 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32659 ; SSE2-NEXT:    pxor %xmm0, %xmm0
32660 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
32661 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32662 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32663 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483700,2147483700,2147483700,2147483700]
32664 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
32665 ; SSE2-NEXT:    retq
32667 ; SSE3-LABEL: ult_52_v2i64:
32668 ; SSE3:       # %bb.0:
32669 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32670 ; SSE3-NEXT:    psrlw $1, %xmm1
32671 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32672 ; SSE3-NEXT:    psubb %xmm1, %xmm0
32673 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32674 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
32675 ; SSE3-NEXT:    pand %xmm1, %xmm2
32676 ; SSE3-NEXT:    psrlw $2, %xmm0
32677 ; SSE3-NEXT:    pand %xmm1, %xmm0
32678 ; SSE3-NEXT:    paddb %xmm2, %xmm0
32679 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32680 ; SSE3-NEXT:    psrlw $4, %xmm1
32681 ; SSE3-NEXT:    paddb %xmm0, %xmm1
32682 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32683 ; SSE3-NEXT:    pxor %xmm0, %xmm0
32684 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
32685 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32686 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32687 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483700,2147483700,2147483700,2147483700]
32688 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
32689 ; SSE3-NEXT:    retq
32691 ; SSSE3-LABEL: ult_52_v2i64:
32692 ; SSSE3:       # %bb.0:
32693 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32694 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
32695 ; SSSE3-NEXT:    pand %xmm1, %xmm2
32696 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32697 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
32698 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
32699 ; SSSE3-NEXT:    psrlw $4, %xmm0
32700 ; SSSE3-NEXT:    pand %xmm1, %xmm0
32701 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
32702 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
32703 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
32704 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
32705 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32706 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32707 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483700,2147483700,2147483700,2147483700]
32708 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
32709 ; SSSE3-NEXT:    retq
32711 ; SSE41-LABEL: ult_52_v2i64:
32712 ; SSE41:       # %bb.0:
32713 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32714 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
32715 ; SSE41-NEXT:    pand %xmm1, %xmm2
32716 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32717 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
32718 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
32719 ; SSE41-NEXT:    psrlw $4, %xmm0
32720 ; SSE41-NEXT:    pand %xmm1, %xmm0
32721 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
32722 ; SSE41-NEXT:    paddb %xmm4, %xmm3
32723 ; SSE41-NEXT:    pxor %xmm0, %xmm0
32724 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
32725 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32726 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32727 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483700,2147483700,2147483700,2147483700]
32728 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
32729 ; SSE41-NEXT:    retq
32731 ; AVX1-LABEL: ult_52_v2i64:
32732 ; AVX1:       # %bb.0:
32733 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32734 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
32735 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32736 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32737 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
32738 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
32739 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32740 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32741 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32742 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32743 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [52,52]
32744 ; AVX1-NEXT:    # xmm1 = mem[0,0]
32745 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32746 ; AVX1-NEXT:    retq
32748 ; AVX2-LABEL: ult_52_v2i64:
32749 ; AVX2:       # %bb.0:
32750 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32751 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
32752 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32753 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32754 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
32755 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
32756 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32757 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32758 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32759 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32760 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [52,52]
32761 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32762 ; AVX2-NEXT:    retq
32764 ; AVX512VPOPCNTDQ-LABEL: ult_52_v2i64:
32765 ; AVX512VPOPCNTDQ:       # %bb.0:
32766 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32767 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
32768 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [52,52]
32769 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32770 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
32771 ; AVX512VPOPCNTDQ-NEXT:    retq
32773 ; AVX512VPOPCNTDQVL-LABEL: ult_52_v2i64:
32774 ; AVX512VPOPCNTDQVL:       # %bb.0:
32775 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
32776 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [52,52]
32777 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32778 ; AVX512VPOPCNTDQVL-NEXT:    retq
32780 ; BITALG_NOVLX-LABEL: ult_52_v2i64:
32781 ; BITALG_NOVLX:       # %bb.0:
32782 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32783 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
32784 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32785 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32786 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [52,52]
32787 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32788 ; BITALG_NOVLX-NEXT:    vzeroupper
32789 ; BITALG_NOVLX-NEXT:    retq
32791 ; BITALG-LABEL: ult_52_v2i64:
32792 ; BITALG:       # %bb.0:
32793 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
32794 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32795 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32796 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [52,52]
32797 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
32798 ; BITALG-NEXT:    retq
32799   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
32800   %3 = icmp ult <2 x i64> %2, <i64 52, i64 52>
32801   %4 = sext <2 x i1> %3 to <2 x i64>
32802   ret <2 x i64> %4
32805 define <2 x i64> @ugt_52_v2i64(<2 x i64> %0) {
32806 ; SSE2-LABEL: ugt_52_v2i64:
32807 ; SSE2:       # %bb.0:
32808 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32809 ; SSE2-NEXT:    psrlw $1, %xmm1
32810 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32811 ; SSE2-NEXT:    psubb %xmm1, %xmm0
32812 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32813 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
32814 ; SSE2-NEXT:    pand %xmm1, %xmm2
32815 ; SSE2-NEXT:    psrlw $2, %xmm0
32816 ; SSE2-NEXT:    pand %xmm1, %xmm0
32817 ; SSE2-NEXT:    paddb %xmm2, %xmm0
32818 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32819 ; SSE2-NEXT:    psrlw $4, %xmm1
32820 ; SSE2-NEXT:    paddb %xmm0, %xmm1
32821 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32822 ; SSE2-NEXT:    pxor %xmm0, %xmm0
32823 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
32824 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32825 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32826 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32827 ; SSE2-NEXT:    retq
32829 ; SSE3-LABEL: ugt_52_v2i64:
32830 ; SSE3:       # %bb.0:
32831 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32832 ; SSE3-NEXT:    psrlw $1, %xmm1
32833 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32834 ; SSE3-NEXT:    psubb %xmm1, %xmm0
32835 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32836 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
32837 ; SSE3-NEXT:    pand %xmm1, %xmm2
32838 ; SSE3-NEXT:    psrlw $2, %xmm0
32839 ; SSE3-NEXT:    pand %xmm1, %xmm0
32840 ; SSE3-NEXT:    paddb %xmm2, %xmm0
32841 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32842 ; SSE3-NEXT:    psrlw $4, %xmm1
32843 ; SSE3-NEXT:    paddb %xmm0, %xmm1
32844 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32845 ; SSE3-NEXT:    pxor %xmm0, %xmm0
32846 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
32847 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32848 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32849 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32850 ; SSE3-NEXT:    retq
32852 ; SSSE3-LABEL: ugt_52_v2i64:
32853 ; SSSE3:       # %bb.0:
32854 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32855 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
32856 ; SSSE3-NEXT:    pand %xmm1, %xmm2
32857 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32858 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
32859 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
32860 ; SSSE3-NEXT:    psrlw $4, %xmm0
32861 ; SSSE3-NEXT:    pand %xmm1, %xmm0
32862 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
32863 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
32864 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
32865 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
32866 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32867 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32868 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32869 ; SSSE3-NEXT:    retq
32871 ; SSE41-LABEL: ugt_52_v2i64:
32872 ; SSE41:       # %bb.0:
32873 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32874 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
32875 ; SSE41-NEXT:    pand %xmm1, %xmm2
32876 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32877 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
32878 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
32879 ; SSE41-NEXT:    psrlw $4, %xmm0
32880 ; SSE41-NEXT:    pand %xmm1, %xmm0
32881 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
32882 ; SSE41-NEXT:    paddb %xmm4, %xmm3
32883 ; SSE41-NEXT:    pxor %xmm0, %xmm0
32884 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
32885 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
32886 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32887 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
32888 ; SSE41-NEXT:    retq
32890 ; AVX1-LABEL: ugt_52_v2i64:
32891 ; AVX1:       # %bb.0:
32892 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32893 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
32894 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32895 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32896 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
32897 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
32898 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32899 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32900 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32901 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32902 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32903 ; AVX1-NEXT:    retq
32905 ; AVX2-LABEL: ugt_52_v2i64:
32906 ; AVX2:       # %bb.0:
32907 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
32908 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
32909 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
32910 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
32911 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
32912 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
32913 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
32914 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
32915 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32916 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32917 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32918 ; AVX2-NEXT:    retq
32920 ; AVX512VPOPCNTDQ-LABEL: ugt_52_v2i64:
32921 ; AVX512VPOPCNTDQ:       # %bb.0:
32922 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32923 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
32924 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32925 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
32926 ; AVX512VPOPCNTDQ-NEXT:    retq
32928 ; AVX512VPOPCNTDQVL-LABEL: ugt_52_v2i64:
32929 ; AVX512VPOPCNTDQVL:       # %bb.0:
32930 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
32931 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [52,52]
32932 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
32933 ; AVX512VPOPCNTDQVL-NEXT:    retq
32935 ; BITALG_NOVLX-LABEL: ugt_52_v2i64:
32936 ; BITALG_NOVLX:       # %bb.0:
32937 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
32938 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
32939 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32940 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32941 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
32942 ; BITALG_NOVLX-NEXT:    vzeroupper
32943 ; BITALG_NOVLX-NEXT:    retq
32945 ; BITALG-LABEL: ugt_52_v2i64:
32946 ; BITALG:       # %bb.0:
32947 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
32948 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
32949 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
32950 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [52,52]
32951 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
32952 ; BITALG-NEXT:    retq
32953   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
32954   %3 = icmp ugt <2 x i64> %2, <i64 52, i64 52>
32955   %4 = sext <2 x i1> %3 to <2 x i64>
32956   ret <2 x i64> %4
32959 define <2 x i64> @ult_53_v2i64(<2 x i64> %0) {
32960 ; SSE2-LABEL: ult_53_v2i64:
32961 ; SSE2:       # %bb.0:
32962 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32963 ; SSE2-NEXT:    psrlw $1, %xmm1
32964 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32965 ; SSE2-NEXT:    psubb %xmm1, %xmm0
32966 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32967 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
32968 ; SSE2-NEXT:    pand %xmm1, %xmm2
32969 ; SSE2-NEXT:    psrlw $2, %xmm0
32970 ; SSE2-NEXT:    pand %xmm1, %xmm0
32971 ; SSE2-NEXT:    paddb %xmm2, %xmm0
32972 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
32973 ; SSE2-NEXT:    psrlw $4, %xmm1
32974 ; SSE2-NEXT:    paddb %xmm0, %xmm1
32975 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32976 ; SSE2-NEXT:    pxor %xmm0, %xmm0
32977 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
32978 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
32979 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32980 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483701,2147483701,2147483701,2147483701]
32981 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
32982 ; SSE2-NEXT:    retq
32984 ; SSE3-LABEL: ult_53_v2i64:
32985 ; SSE3:       # %bb.0:
32986 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32987 ; SSE3-NEXT:    psrlw $1, %xmm1
32988 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
32989 ; SSE3-NEXT:    psubb %xmm1, %xmm0
32990 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
32991 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
32992 ; SSE3-NEXT:    pand %xmm1, %xmm2
32993 ; SSE3-NEXT:    psrlw $2, %xmm0
32994 ; SSE3-NEXT:    pand %xmm1, %xmm0
32995 ; SSE3-NEXT:    paddb %xmm2, %xmm0
32996 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
32997 ; SSE3-NEXT:    psrlw $4, %xmm1
32998 ; SSE3-NEXT:    paddb %xmm0, %xmm1
32999 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33000 ; SSE3-NEXT:    pxor %xmm0, %xmm0
33001 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
33002 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33003 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33004 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483701,2147483701,2147483701,2147483701]
33005 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
33006 ; SSE3-NEXT:    retq
33008 ; SSSE3-LABEL: ult_53_v2i64:
33009 ; SSSE3:       # %bb.0:
33010 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33011 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
33012 ; SSSE3-NEXT:    pand %xmm1, %xmm2
33013 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33014 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
33015 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
33016 ; SSSE3-NEXT:    psrlw $4, %xmm0
33017 ; SSSE3-NEXT:    pand %xmm1, %xmm0
33018 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
33019 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
33020 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
33021 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
33022 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33023 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33024 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483701,2147483701,2147483701,2147483701]
33025 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
33026 ; SSSE3-NEXT:    retq
33028 ; SSE41-LABEL: ult_53_v2i64:
33029 ; SSE41:       # %bb.0:
33030 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33031 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
33032 ; SSE41-NEXT:    pand %xmm1, %xmm2
33033 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33034 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
33035 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
33036 ; SSE41-NEXT:    psrlw $4, %xmm0
33037 ; SSE41-NEXT:    pand %xmm1, %xmm0
33038 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
33039 ; SSE41-NEXT:    paddb %xmm4, %xmm3
33040 ; SSE41-NEXT:    pxor %xmm0, %xmm0
33041 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
33042 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33043 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33044 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483701,2147483701,2147483701,2147483701]
33045 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
33046 ; SSE41-NEXT:    retq
33048 ; AVX1-LABEL: ult_53_v2i64:
33049 ; AVX1:       # %bb.0:
33050 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33051 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
33052 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33053 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33054 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
33055 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
33056 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33057 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33058 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33059 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33060 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [53,53]
33061 ; AVX1-NEXT:    # xmm1 = mem[0,0]
33062 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33063 ; AVX1-NEXT:    retq
33065 ; AVX2-LABEL: ult_53_v2i64:
33066 ; AVX2:       # %bb.0:
33067 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33068 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
33069 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33070 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33071 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
33072 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
33073 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33074 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33075 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33076 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33077 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [53,53]
33078 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33079 ; AVX2-NEXT:    retq
33081 ; AVX512VPOPCNTDQ-LABEL: ult_53_v2i64:
33082 ; AVX512VPOPCNTDQ:       # %bb.0:
33083 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33084 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
33085 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [53,53]
33086 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33087 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
33088 ; AVX512VPOPCNTDQ-NEXT:    retq
33090 ; AVX512VPOPCNTDQVL-LABEL: ult_53_v2i64:
33091 ; AVX512VPOPCNTDQVL:       # %bb.0:
33092 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
33093 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [53,53]
33094 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33095 ; AVX512VPOPCNTDQVL-NEXT:    retq
33097 ; BITALG_NOVLX-LABEL: ult_53_v2i64:
33098 ; BITALG_NOVLX:       # %bb.0:
33099 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33100 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
33101 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33102 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33103 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [53,53]
33104 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33105 ; BITALG_NOVLX-NEXT:    vzeroupper
33106 ; BITALG_NOVLX-NEXT:    retq
33108 ; BITALG-LABEL: ult_53_v2i64:
33109 ; BITALG:       # %bb.0:
33110 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
33111 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33112 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33113 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [53,53]
33114 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33115 ; BITALG-NEXT:    retq
33116   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
33117   %3 = icmp ult <2 x i64> %2, <i64 53, i64 53>
33118   %4 = sext <2 x i1> %3 to <2 x i64>
33119   ret <2 x i64> %4
33122 define <2 x i64> @ugt_53_v2i64(<2 x i64> %0) {
33123 ; SSE2-LABEL: ugt_53_v2i64:
33124 ; SSE2:       # %bb.0:
33125 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33126 ; SSE2-NEXT:    psrlw $1, %xmm1
33127 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33128 ; SSE2-NEXT:    psubb %xmm1, %xmm0
33129 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33130 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
33131 ; SSE2-NEXT:    pand %xmm1, %xmm2
33132 ; SSE2-NEXT:    psrlw $2, %xmm0
33133 ; SSE2-NEXT:    pand %xmm1, %xmm0
33134 ; SSE2-NEXT:    paddb %xmm2, %xmm0
33135 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33136 ; SSE2-NEXT:    psrlw $4, %xmm1
33137 ; SSE2-NEXT:    paddb %xmm0, %xmm1
33138 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33139 ; SSE2-NEXT:    pxor %xmm0, %xmm0
33140 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
33141 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33142 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33143 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33144 ; SSE2-NEXT:    retq
33146 ; SSE3-LABEL: ugt_53_v2i64:
33147 ; SSE3:       # %bb.0:
33148 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33149 ; SSE3-NEXT:    psrlw $1, %xmm1
33150 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33151 ; SSE3-NEXT:    psubb %xmm1, %xmm0
33152 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33153 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
33154 ; SSE3-NEXT:    pand %xmm1, %xmm2
33155 ; SSE3-NEXT:    psrlw $2, %xmm0
33156 ; SSE3-NEXT:    pand %xmm1, %xmm0
33157 ; SSE3-NEXT:    paddb %xmm2, %xmm0
33158 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33159 ; SSE3-NEXT:    psrlw $4, %xmm1
33160 ; SSE3-NEXT:    paddb %xmm0, %xmm1
33161 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33162 ; SSE3-NEXT:    pxor %xmm0, %xmm0
33163 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
33164 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33165 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33166 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33167 ; SSE3-NEXT:    retq
33169 ; SSSE3-LABEL: ugt_53_v2i64:
33170 ; SSSE3:       # %bb.0:
33171 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33172 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
33173 ; SSSE3-NEXT:    pand %xmm1, %xmm2
33174 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33175 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
33176 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
33177 ; SSSE3-NEXT:    psrlw $4, %xmm0
33178 ; SSSE3-NEXT:    pand %xmm1, %xmm0
33179 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
33180 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
33181 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
33182 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
33183 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33184 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33185 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33186 ; SSSE3-NEXT:    retq
33188 ; SSE41-LABEL: ugt_53_v2i64:
33189 ; SSE41:       # %bb.0:
33190 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33191 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
33192 ; SSE41-NEXT:    pand %xmm1, %xmm2
33193 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33194 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
33195 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
33196 ; SSE41-NEXT:    psrlw $4, %xmm0
33197 ; SSE41-NEXT:    pand %xmm1, %xmm0
33198 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
33199 ; SSE41-NEXT:    paddb %xmm4, %xmm3
33200 ; SSE41-NEXT:    pxor %xmm0, %xmm0
33201 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
33202 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33203 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33204 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33205 ; SSE41-NEXT:    retq
33207 ; AVX1-LABEL: ugt_53_v2i64:
33208 ; AVX1:       # %bb.0:
33209 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33210 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
33211 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33212 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33213 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
33214 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
33215 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33216 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33217 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33218 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33219 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33220 ; AVX1-NEXT:    retq
33222 ; AVX2-LABEL: ugt_53_v2i64:
33223 ; AVX2:       # %bb.0:
33224 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33225 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
33226 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33227 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33228 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
33229 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
33230 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33231 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33232 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33233 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33234 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33235 ; AVX2-NEXT:    retq
33237 ; AVX512VPOPCNTDQ-LABEL: ugt_53_v2i64:
33238 ; AVX512VPOPCNTDQ:       # %bb.0:
33239 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33240 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
33241 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33242 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
33243 ; AVX512VPOPCNTDQ-NEXT:    retq
33245 ; AVX512VPOPCNTDQVL-LABEL: ugt_53_v2i64:
33246 ; AVX512VPOPCNTDQVL:       # %bb.0:
33247 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
33248 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [53,53]
33249 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
33250 ; AVX512VPOPCNTDQVL-NEXT:    retq
33252 ; BITALG_NOVLX-LABEL: ugt_53_v2i64:
33253 ; BITALG_NOVLX:       # %bb.0:
33254 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33255 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
33256 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33257 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33258 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33259 ; BITALG_NOVLX-NEXT:    vzeroupper
33260 ; BITALG_NOVLX-NEXT:    retq
33262 ; BITALG-LABEL: ugt_53_v2i64:
33263 ; BITALG:       # %bb.0:
33264 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
33265 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33266 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33267 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [53,53]
33268 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
33269 ; BITALG-NEXT:    retq
33270   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
33271   %3 = icmp ugt <2 x i64> %2, <i64 53, i64 53>
33272   %4 = sext <2 x i1> %3 to <2 x i64>
33273   ret <2 x i64> %4
33276 define <2 x i64> @ult_54_v2i64(<2 x i64> %0) {
33277 ; SSE2-LABEL: ult_54_v2i64:
33278 ; SSE2:       # %bb.0:
33279 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33280 ; SSE2-NEXT:    psrlw $1, %xmm1
33281 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33282 ; SSE2-NEXT:    psubb %xmm1, %xmm0
33283 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33284 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
33285 ; SSE2-NEXT:    pand %xmm1, %xmm2
33286 ; SSE2-NEXT:    psrlw $2, %xmm0
33287 ; SSE2-NEXT:    pand %xmm1, %xmm0
33288 ; SSE2-NEXT:    paddb %xmm2, %xmm0
33289 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33290 ; SSE2-NEXT:    psrlw $4, %xmm1
33291 ; SSE2-NEXT:    paddb %xmm0, %xmm1
33292 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33293 ; SSE2-NEXT:    pxor %xmm0, %xmm0
33294 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
33295 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33296 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33297 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483702,2147483702,2147483702,2147483702]
33298 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
33299 ; SSE2-NEXT:    retq
33301 ; SSE3-LABEL: ult_54_v2i64:
33302 ; SSE3:       # %bb.0:
33303 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33304 ; SSE3-NEXT:    psrlw $1, %xmm1
33305 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33306 ; SSE3-NEXT:    psubb %xmm1, %xmm0
33307 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33308 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
33309 ; SSE3-NEXT:    pand %xmm1, %xmm2
33310 ; SSE3-NEXT:    psrlw $2, %xmm0
33311 ; SSE3-NEXT:    pand %xmm1, %xmm0
33312 ; SSE3-NEXT:    paddb %xmm2, %xmm0
33313 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33314 ; SSE3-NEXT:    psrlw $4, %xmm1
33315 ; SSE3-NEXT:    paddb %xmm0, %xmm1
33316 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33317 ; SSE3-NEXT:    pxor %xmm0, %xmm0
33318 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
33319 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33320 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33321 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483702,2147483702,2147483702,2147483702]
33322 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
33323 ; SSE3-NEXT:    retq
33325 ; SSSE3-LABEL: ult_54_v2i64:
33326 ; SSSE3:       # %bb.0:
33327 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33328 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
33329 ; SSSE3-NEXT:    pand %xmm1, %xmm2
33330 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33331 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
33332 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
33333 ; SSSE3-NEXT:    psrlw $4, %xmm0
33334 ; SSSE3-NEXT:    pand %xmm1, %xmm0
33335 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
33336 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
33337 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
33338 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
33339 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33340 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33341 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483702,2147483702,2147483702,2147483702]
33342 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
33343 ; SSSE3-NEXT:    retq
33345 ; SSE41-LABEL: ult_54_v2i64:
33346 ; SSE41:       # %bb.0:
33347 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33348 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
33349 ; SSE41-NEXT:    pand %xmm1, %xmm2
33350 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33351 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
33352 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
33353 ; SSE41-NEXT:    psrlw $4, %xmm0
33354 ; SSE41-NEXT:    pand %xmm1, %xmm0
33355 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
33356 ; SSE41-NEXT:    paddb %xmm4, %xmm3
33357 ; SSE41-NEXT:    pxor %xmm0, %xmm0
33358 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
33359 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33360 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33361 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483702,2147483702,2147483702,2147483702]
33362 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
33363 ; SSE41-NEXT:    retq
33365 ; AVX1-LABEL: ult_54_v2i64:
33366 ; AVX1:       # %bb.0:
33367 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33368 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
33369 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33370 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33371 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
33372 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
33373 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33374 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33375 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33376 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33377 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [54,54]
33378 ; AVX1-NEXT:    # xmm1 = mem[0,0]
33379 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33380 ; AVX1-NEXT:    retq
33382 ; AVX2-LABEL: ult_54_v2i64:
33383 ; AVX2:       # %bb.0:
33384 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33385 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
33386 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33387 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33388 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
33389 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
33390 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33391 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33392 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33393 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33394 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [54,54]
33395 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33396 ; AVX2-NEXT:    retq
33398 ; AVX512VPOPCNTDQ-LABEL: ult_54_v2i64:
33399 ; AVX512VPOPCNTDQ:       # %bb.0:
33400 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33401 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
33402 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [54,54]
33403 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33404 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
33405 ; AVX512VPOPCNTDQ-NEXT:    retq
33407 ; AVX512VPOPCNTDQVL-LABEL: ult_54_v2i64:
33408 ; AVX512VPOPCNTDQVL:       # %bb.0:
33409 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
33410 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [54,54]
33411 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33412 ; AVX512VPOPCNTDQVL-NEXT:    retq
33414 ; BITALG_NOVLX-LABEL: ult_54_v2i64:
33415 ; BITALG_NOVLX:       # %bb.0:
33416 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33417 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
33418 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33419 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33420 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [54,54]
33421 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33422 ; BITALG_NOVLX-NEXT:    vzeroupper
33423 ; BITALG_NOVLX-NEXT:    retq
33425 ; BITALG-LABEL: ult_54_v2i64:
33426 ; BITALG:       # %bb.0:
33427 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
33428 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33429 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33430 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [54,54]
33431 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33432 ; BITALG-NEXT:    retq
33433   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
33434   %3 = icmp ult <2 x i64> %2, <i64 54, i64 54>
33435   %4 = sext <2 x i1> %3 to <2 x i64>
33436   ret <2 x i64> %4
33439 define <2 x i64> @ugt_54_v2i64(<2 x i64> %0) {
33440 ; SSE2-LABEL: ugt_54_v2i64:
33441 ; SSE2:       # %bb.0:
33442 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33443 ; SSE2-NEXT:    psrlw $1, %xmm1
33444 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33445 ; SSE2-NEXT:    psubb %xmm1, %xmm0
33446 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33447 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
33448 ; SSE2-NEXT:    pand %xmm1, %xmm2
33449 ; SSE2-NEXT:    psrlw $2, %xmm0
33450 ; SSE2-NEXT:    pand %xmm1, %xmm0
33451 ; SSE2-NEXT:    paddb %xmm2, %xmm0
33452 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33453 ; SSE2-NEXT:    psrlw $4, %xmm1
33454 ; SSE2-NEXT:    paddb %xmm0, %xmm1
33455 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33456 ; SSE2-NEXT:    pxor %xmm0, %xmm0
33457 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
33458 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33459 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33460 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33461 ; SSE2-NEXT:    retq
33463 ; SSE3-LABEL: ugt_54_v2i64:
33464 ; SSE3:       # %bb.0:
33465 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33466 ; SSE3-NEXT:    psrlw $1, %xmm1
33467 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33468 ; SSE3-NEXT:    psubb %xmm1, %xmm0
33469 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33470 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
33471 ; SSE3-NEXT:    pand %xmm1, %xmm2
33472 ; SSE3-NEXT:    psrlw $2, %xmm0
33473 ; SSE3-NEXT:    pand %xmm1, %xmm0
33474 ; SSE3-NEXT:    paddb %xmm2, %xmm0
33475 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33476 ; SSE3-NEXT:    psrlw $4, %xmm1
33477 ; SSE3-NEXT:    paddb %xmm0, %xmm1
33478 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33479 ; SSE3-NEXT:    pxor %xmm0, %xmm0
33480 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
33481 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33482 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33483 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33484 ; SSE3-NEXT:    retq
33486 ; SSSE3-LABEL: ugt_54_v2i64:
33487 ; SSSE3:       # %bb.0:
33488 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33489 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
33490 ; SSSE3-NEXT:    pand %xmm1, %xmm2
33491 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33492 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
33493 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
33494 ; SSSE3-NEXT:    psrlw $4, %xmm0
33495 ; SSSE3-NEXT:    pand %xmm1, %xmm0
33496 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
33497 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
33498 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
33499 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
33500 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33501 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33502 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33503 ; SSSE3-NEXT:    retq
33505 ; SSE41-LABEL: ugt_54_v2i64:
33506 ; SSE41:       # %bb.0:
33507 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33508 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
33509 ; SSE41-NEXT:    pand %xmm1, %xmm2
33510 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33511 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
33512 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
33513 ; SSE41-NEXT:    psrlw $4, %xmm0
33514 ; SSE41-NEXT:    pand %xmm1, %xmm0
33515 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
33516 ; SSE41-NEXT:    paddb %xmm4, %xmm3
33517 ; SSE41-NEXT:    pxor %xmm0, %xmm0
33518 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
33519 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33520 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33521 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33522 ; SSE41-NEXT:    retq
33524 ; AVX1-LABEL: ugt_54_v2i64:
33525 ; AVX1:       # %bb.0:
33526 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33527 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
33528 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33529 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33530 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
33531 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
33532 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33533 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33534 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33535 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33536 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33537 ; AVX1-NEXT:    retq
33539 ; AVX2-LABEL: ugt_54_v2i64:
33540 ; AVX2:       # %bb.0:
33541 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33542 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
33543 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33544 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33545 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
33546 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
33547 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33548 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33549 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33550 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33551 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33552 ; AVX2-NEXT:    retq
33554 ; AVX512VPOPCNTDQ-LABEL: ugt_54_v2i64:
33555 ; AVX512VPOPCNTDQ:       # %bb.0:
33556 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33557 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
33558 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33559 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
33560 ; AVX512VPOPCNTDQ-NEXT:    retq
33562 ; AVX512VPOPCNTDQVL-LABEL: ugt_54_v2i64:
33563 ; AVX512VPOPCNTDQVL:       # %bb.0:
33564 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
33565 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [54,54]
33566 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
33567 ; AVX512VPOPCNTDQVL-NEXT:    retq
33569 ; BITALG_NOVLX-LABEL: ugt_54_v2i64:
33570 ; BITALG_NOVLX:       # %bb.0:
33571 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33572 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
33573 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33574 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33575 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33576 ; BITALG_NOVLX-NEXT:    vzeroupper
33577 ; BITALG_NOVLX-NEXT:    retq
33579 ; BITALG-LABEL: ugt_54_v2i64:
33580 ; BITALG:       # %bb.0:
33581 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
33582 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33583 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33584 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [54,54]
33585 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
33586 ; BITALG-NEXT:    retq
33587   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
33588   %3 = icmp ugt <2 x i64> %2, <i64 54, i64 54>
33589   %4 = sext <2 x i1> %3 to <2 x i64>
33590   ret <2 x i64> %4
33593 define <2 x i64> @ult_55_v2i64(<2 x i64> %0) {
33594 ; SSE2-LABEL: ult_55_v2i64:
33595 ; SSE2:       # %bb.0:
33596 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33597 ; SSE2-NEXT:    psrlw $1, %xmm1
33598 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33599 ; SSE2-NEXT:    psubb %xmm1, %xmm0
33600 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33601 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
33602 ; SSE2-NEXT:    pand %xmm1, %xmm2
33603 ; SSE2-NEXT:    psrlw $2, %xmm0
33604 ; SSE2-NEXT:    pand %xmm1, %xmm0
33605 ; SSE2-NEXT:    paddb %xmm2, %xmm0
33606 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33607 ; SSE2-NEXT:    psrlw $4, %xmm1
33608 ; SSE2-NEXT:    paddb %xmm0, %xmm1
33609 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33610 ; SSE2-NEXT:    pxor %xmm0, %xmm0
33611 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
33612 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33613 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33614 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483703,2147483703,2147483703,2147483703]
33615 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
33616 ; SSE2-NEXT:    retq
33618 ; SSE3-LABEL: ult_55_v2i64:
33619 ; SSE3:       # %bb.0:
33620 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33621 ; SSE3-NEXT:    psrlw $1, %xmm1
33622 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33623 ; SSE3-NEXT:    psubb %xmm1, %xmm0
33624 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33625 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
33626 ; SSE3-NEXT:    pand %xmm1, %xmm2
33627 ; SSE3-NEXT:    psrlw $2, %xmm0
33628 ; SSE3-NEXT:    pand %xmm1, %xmm0
33629 ; SSE3-NEXT:    paddb %xmm2, %xmm0
33630 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33631 ; SSE3-NEXT:    psrlw $4, %xmm1
33632 ; SSE3-NEXT:    paddb %xmm0, %xmm1
33633 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33634 ; SSE3-NEXT:    pxor %xmm0, %xmm0
33635 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
33636 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33637 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33638 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483703,2147483703,2147483703,2147483703]
33639 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
33640 ; SSE3-NEXT:    retq
33642 ; SSSE3-LABEL: ult_55_v2i64:
33643 ; SSSE3:       # %bb.0:
33644 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33645 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
33646 ; SSSE3-NEXT:    pand %xmm1, %xmm2
33647 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33648 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
33649 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
33650 ; SSSE3-NEXT:    psrlw $4, %xmm0
33651 ; SSSE3-NEXT:    pand %xmm1, %xmm0
33652 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
33653 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
33654 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
33655 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
33656 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33657 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33658 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483703,2147483703,2147483703,2147483703]
33659 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
33660 ; SSSE3-NEXT:    retq
33662 ; SSE41-LABEL: ult_55_v2i64:
33663 ; SSE41:       # %bb.0:
33664 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33665 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
33666 ; SSE41-NEXT:    pand %xmm1, %xmm2
33667 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33668 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
33669 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
33670 ; SSE41-NEXT:    psrlw $4, %xmm0
33671 ; SSE41-NEXT:    pand %xmm1, %xmm0
33672 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
33673 ; SSE41-NEXT:    paddb %xmm4, %xmm3
33674 ; SSE41-NEXT:    pxor %xmm0, %xmm0
33675 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
33676 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33677 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33678 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483703,2147483703,2147483703,2147483703]
33679 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
33680 ; SSE41-NEXT:    retq
33682 ; AVX1-LABEL: ult_55_v2i64:
33683 ; AVX1:       # %bb.0:
33684 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33685 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
33686 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33687 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33688 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
33689 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
33690 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33691 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33692 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33693 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33694 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [55,55]
33695 ; AVX1-NEXT:    # xmm1 = mem[0,0]
33696 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33697 ; AVX1-NEXT:    retq
33699 ; AVX2-LABEL: ult_55_v2i64:
33700 ; AVX2:       # %bb.0:
33701 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33702 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
33703 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33704 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33705 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
33706 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
33707 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33708 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33709 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33710 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33711 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [55,55]
33712 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33713 ; AVX2-NEXT:    retq
33715 ; AVX512VPOPCNTDQ-LABEL: ult_55_v2i64:
33716 ; AVX512VPOPCNTDQ:       # %bb.0:
33717 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33718 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
33719 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [55,55]
33720 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33721 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
33722 ; AVX512VPOPCNTDQ-NEXT:    retq
33724 ; AVX512VPOPCNTDQVL-LABEL: ult_55_v2i64:
33725 ; AVX512VPOPCNTDQVL:       # %bb.0:
33726 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
33727 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [55,55]
33728 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33729 ; AVX512VPOPCNTDQVL-NEXT:    retq
33731 ; BITALG_NOVLX-LABEL: ult_55_v2i64:
33732 ; BITALG_NOVLX:       # %bb.0:
33733 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33734 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
33735 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33736 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33737 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [55,55]
33738 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33739 ; BITALG_NOVLX-NEXT:    vzeroupper
33740 ; BITALG_NOVLX-NEXT:    retq
33742 ; BITALG-LABEL: ult_55_v2i64:
33743 ; BITALG:       # %bb.0:
33744 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
33745 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33746 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33747 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [55,55]
33748 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
33749 ; BITALG-NEXT:    retq
33750   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
33751   %3 = icmp ult <2 x i64> %2, <i64 55, i64 55>
33752   %4 = sext <2 x i1> %3 to <2 x i64>
33753   ret <2 x i64> %4
33756 define <2 x i64> @ugt_55_v2i64(<2 x i64> %0) {
33757 ; SSE2-LABEL: ugt_55_v2i64:
33758 ; SSE2:       # %bb.0:
33759 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33760 ; SSE2-NEXT:    psrlw $1, %xmm1
33761 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33762 ; SSE2-NEXT:    psubb %xmm1, %xmm0
33763 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33764 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
33765 ; SSE2-NEXT:    pand %xmm1, %xmm2
33766 ; SSE2-NEXT:    psrlw $2, %xmm0
33767 ; SSE2-NEXT:    pand %xmm1, %xmm0
33768 ; SSE2-NEXT:    paddb %xmm2, %xmm0
33769 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33770 ; SSE2-NEXT:    psrlw $4, %xmm1
33771 ; SSE2-NEXT:    paddb %xmm0, %xmm1
33772 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33773 ; SSE2-NEXT:    pxor %xmm0, %xmm0
33774 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
33775 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33776 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33777 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33778 ; SSE2-NEXT:    retq
33780 ; SSE3-LABEL: ugt_55_v2i64:
33781 ; SSE3:       # %bb.0:
33782 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33783 ; SSE3-NEXT:    psrlw $1, %xmm1
33784 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33785 ; SSE3-NEXT:    psubb %xmm1, %xmm0
33786 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33787 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
33788 ; SSE3-NEXT:    pand %xmm1, %xmm2
33789 ; SSE3-NEXT:    psrlw $2, %xmm0
33790 ; SSE3-NEXT:    pand %xmm1, %xmm0
33791 ; SSE3-NEXT:    paddb %xmm2, %xmm0
33792 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33793 ; SSE3-NEXT:    psrlw $4, %xmm1
33794 ; SSE3-NEXT:    paddb %xmm0, %xmm1
33795 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33796 ; SSE3-NEXT:    pxor %xmm0, %xmm0
33797 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
33798 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33799 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33800 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33801 ; SSE3-NEXT:    retq
33803 ; SSSE3-LABEL: ugt_55_v2i64:
33804 ; SSSE3:       # %bb.0:
33805 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33806 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
33807 ; SSSE3-NEXT:    pand %xmm1, %xmm2
33808 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33809 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
33810 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
33811 ; SSSE3-NEXT:    psrlw $4, %xmm0
33812 ; SSSE3-NEXT:    pand %xmm1, %xmm0
33813 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
33814 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
33815 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
33816 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
33817 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33818 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33819 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33820 ; SSSE3-NEXT:    retq
33822 ; SSE41-LABEL: ugt_55_v2i64:
33823 ; SSE41:       # %bb.0:
33824 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33825 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
33826 ; SSE41-NEXT:    pand %xmm1, %xmm2
33827 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33828 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
33829 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
33830 ; SSE41-NEXT:    psrlw $4, %xmm0
33831 ; SSE41-NEXT:    pand %xmm1, %xmm0
33832 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
33833 ; SSE41-NEXT:    paddb %xmm4, %xmm3
33834 ; SSE41-NEXT:    pxor %xmm0, %xmm0
33835 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
33836 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
33837 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33838 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
33839 ; SSE41-NEXT:    retq
33841 ; AVX1-LABEL: ugt_55_v2i64:
33842 ; AVX1:       # %bb.0:
33843 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33844 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
33845 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33846 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33847 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
33848 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
33849 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33850 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33851 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33852 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33853 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33854 ; AVX1-NEXT:    retq
33856 ; AVX2-LABEL: ugt_55_v2i64:
33857 ; AVX2:       # %bb.0:
33858 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33859 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
33860 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33861 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
33862 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
33863 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
33864 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
33865 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
33866 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33867 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33868 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33869 ; AVX2-NEXT:    retq
33871 ; AVX512VPOPCNTDQ-LABEL: ugt_55_v2i64:
33872 ; AVX512VPOPCNTDQ:       # %bb.0:
33873 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33874 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
33875 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33876 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
33877 ; AVX512VPOPCNTDQ-NEXT:    retq
33879 ; AVX512VPOPCNTDQVL-LABEL: ugt_55_v2i64:
33880 ; AVX512VPOPCNTDQVL:       # %bb.0:
33881 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
33882 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [55,55]
33883 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
33884 ; AVX512VPOPCNTDQVL-NEXT:    retq
33886 ; BITALG_NOVLX-LABEL: ugt_55_v2i64:
33887 ; BITALG_NOVLX:       # %bb.0:
33888 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
33889 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
33890 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33891 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33892 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
33893 ; BITALG_NOVLX-NEXT:    vzeroupper
33894 ; BITALG_NOVLX-NEXT:    retq
33896 ; BITALG-LABEL: ugt_55_v2i64:
33897 ; BITALG:       # %bb.0:
33898 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
33899 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
33900 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
33901 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [55,55]
33902 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
33903 ; BITALG-NEXT:    retq
33904   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
33905   %3 = icmp ugt <2 x i64> %2, <i64 55, i64 55>
33906   %4 = sext <2 x i1> %3 to <2 x i64>
33907   ret <2 x i64> %4
33910 define <2 x i64> @ult_56_v2i64(<2 x i64> %0) {
33911 ; SSE2-LABEL: ult_56_v2i64:
33912 ; SSE2:       # %bb.0:
33913 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33914 ; SSE2-NEXT:    psrlw $1, %xmm1
33915 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33916 ; SSE2-NEXT:    psubb %xmm1, %xmm0
33917 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33918 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
33919 ; SSE2-NEXT:    pand %xmm1, %xmm2
33920 ; SSE2-NEXT:    psrlw $2, %xmm0
33921 ; SSE2-NEXT:    pand %xmm1, %xmm0
33922 ; SSE2-NEXT:    paddb %xmm2, %xmm0
33923 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
33924 ; SSE2-NEXT:    psrlw $4, %xmm1
33925 ; SSE2-NEXT:    paddb %xmm0, %xmm1
33926 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33927 ; SSE2-NEXT:    pxor %xmm0, %xmm0
33928 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
33929 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33930 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33931 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483704,2147483704,2147483704,2147483704]
33932 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
33933 ; SSE2-NEXT:    retq
33935 ; SSE3-LABEL: ult_56_v2i64:
33936 ; SSE3:       # %bb.0:
33937 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33938 ; SSE3-NEXT:    psrlw $1, %xmm1
33939 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33940 ; SSE3-NEXT:    psubb %xmm1, %xmm0
33941 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
33942 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
33943 ; SSE3-NEXT:    pand %xmm1, %xmm2
33944 ; SSE3-NEXT:    psrlw $2, %xmm0
33945 ; SSE3-NEXT:    pand %xmm1, %xmm0
33946 ; SSE3-NEXT:    paddb %xmm2, %xmm0
33947 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
33948 ; SSE3-NEXT:    psrlw $4, %xmm1
33949 ; SSE3-NEXT:    paddb %xmm0, %xmm1
33950 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33951 ; SSE3-NEXT:    pxor %xmm0, %xmm0
33952 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
33953 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33954 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33955 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483704,2147483704,2147483704,2147483704]
33956 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
33957 ; SSE3-NEXT:    retq
33959 ; SSSE3-LABEL: ult_56_v2i64:
33960 ; SSSE3:       # %bb.0:
33961 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33962 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
33963 ; SSSE3-NEXT:    pand %xmm1, %xmm2
33964 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33965 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
33966 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
33967 ; SSSE3-NEXT:    psrlw $4, %xmm0
33968 ; SSSE3-NEXT:    pand %xmm1, %xmm0
33969 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
33970 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
33971 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
33972 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
33973 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33974 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33975 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483704,2147483704,2147483704,2147483704]
33976 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
33977 ; SSSE3-NEXT:    retq
33979 ; SSE41-LABEL: ult_56_v2i64:
33980 ; SSE41:       # %bb.0:
33981 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
33982 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
33983 ; SSE41-NEXT:    pand %xmm1, %xmm2
33984 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
33985 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
33986 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
33987 ; SSE41-NEXT:    psrlw $4, %xmm0
33988 ; SSE41-NEXT:    pand %xmm1, %xmm0
33989 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
33990 ; SSE41-NEXT:    paddb %xmm4, %xmm3
33991 ; SSE41-NEXT:    pxor %xmm0, %xmm0
33992 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
33993 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
33994 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
33995 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483704,2147483704,2147483704,2147483704]
33996 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
33997 ; SSE41-NEXT:    retq
33999 ; AVX1-LABEL: ult_56_v2i64:
34000 ; AVX1:       # %bb.0:
34001 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34002 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
34003 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34004 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34005 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
34006 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
34007 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34008 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34009 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34010 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34011 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [56,56]
34012 ; AVX1-NEXT:    # xmm1 = mem[0,0]
34013 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34014 ; AVX1-NEXT:    retq
34016 ; AVX2-LABEL: ult_56_v2i64:
34017 ; AVX2:       # %bb.0:
34018 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34019 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
34020 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34021 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34022 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
34023 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
34024 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34025 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34026 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34027 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34028 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [56,56]
34029 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34030 ; AVX2-NEXT:    retq
34032 ; AVX512VPOPCNTDQ-LABEL: ult_56_v2i64:
34033 ; AVX512VPOPCNTDQ:       # %bb.0:
34034 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34035 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
34036 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [56,56]
34037 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34038 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
34039 ; AVX512VPOPCNTDQ-NEXT:    retq
34041 ; AVX512VPOPCNTDQVL-LABEL: ult_56_v2i64:
34042 ; AVX512VPOPCNTDQVL:       # %bb.0:
34043 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
34044 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [56,56]
34045 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34046 ; AVX512VPOPCNTDQVL-NEXT:    retq
34048 ; BITALG_NOVLX-LABEL: ult_56_v2i64:
34049 ; BITALG_NOVLX:       # %bb.0:
34050 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34051 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
34052 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34053 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34054 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [56,56]
34055 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34056 ; BITALG_NOVLX-NEXT:    vzeroupper
34057 ; BITALG_NOVLX-NEXT:    retq
34059 ; BITALG-LABEL: ult_56_v2i64:
34060 ; BITALG:       # %bb.0:
34061 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
34062 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34063 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34064 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [56,56]
34065 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34066 ; BITALG-NEXT:    retq
34067   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
34068   %3 = icmp ult <2 x i64> %2, <i64 56, i64 56>
34069   %4 = sext <2 x i1> %3 to <2 x i64>
34070   ret <2 x i64> %4
34073 define <2 x i64> @ugt_56_v2i64(<2 x i64> %0) {
34074 ; SSE2-LABEL: ugt_56_v2i64:
34075 ; SSE2:       # %bb.0:
34076 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34077 ; SSE2-NEXT:    psrlw $1, %xmm1
34078 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34079 ; SSE2-NEXT:    psubb %xmm1, %xmm0
34080 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34081 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
34082 ; SSE2-NEXT:    pand %xmm1, %xmm2
34083 ; SSE2-NEXT:    psrlw $2, %xmm0
34084 ; SSE2-NEXT:    pand %xmm1, %xmm0
34085 ; SSE2-NEXT:    paddb %xmm2, %xmm0
34086 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34087 ; SSE2-NEXT:    psrlw $4, %xmm1
34088 ; SSE2-NEXT:    paddb %xmm0, %xmm1
34089 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34090 ; SSE2-NEXT:    pxor %xmm0, %xmm0
34091 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
34092 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34093 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34094 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34095 ; SSE2-NEXT:    retq
34097 ; SSE3-LABEL: ugt_56_v2i64:
34098 ; SSE3:       # %bb.0:
34099 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34100 ; SSE3-NEXT:    psrlw $1, %xmm1
34101 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34102 ; SSE3-NEXT:    psubb %xmm1, %xmm0
34103 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34104 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
34105 ; SSE3-NEXT:    pand %xmm1, %xmm2
34106 ; SSE3-NEXT:    psrlw $2, %xmm0
34107 ; SSE3-NEXT:    pand %xmm1, %xmm0
34108 ; SSE3-NEXT:    paddb %xmm2, %xmm0
34109 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34110 ; SSE3-NEXT:    psrlw $4, %xmm1
34111 ; SSE3-NEXT:    paddb %xmm0, %xmm1
34112 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34113 ; SSE3-NEXT:    pxor %xmm0, %xmm0
34114 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
34115 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34116 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34117 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34118 ; SSE3-NEXT:    retq
34120 ; SSSE3-LABEL: ugt_56_v2i64:
34121 ; SSSE3:       # %bb.0:
34122 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34123 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
34124 ; SSSE3-NEXT:    pand %xmm1, %xmm2
34125 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34126 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
34127 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
34128 ; SSSE3-NEXT:    psrlw $4, %xmm0
34129 ; SSSE3-NEXT:    pand %xmm1, %xmm0
34130 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
34131 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
34132 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
34133 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
34134 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34135 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34136 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34137 ; SSSE3-NEXT:    retq
34139 ; SSE41-LABEL: ugt_56_v2i64:
34140 ; SSE41:       # %bb.0:
34141 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34142 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
34143 ; SSE41-NEXT:    pand %xmm1, %xmm2
34144 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34145 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
34146 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
34147 ; SSE41-NEXT:    psrlw $4, %xmm0
34148 ; SSE41-NEXT:    pand %xmm1, %xmm0
34149 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
34150 ; SSE41-NEXT:    paddb %xmm4, %xmm3
34151 ; SSE41-NEXT:    pxor %xmm0, %xmm0
34152 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
34153 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34154 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34155 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34156 ; SSE41-NEXT:    retq
34158 ; AVX1-LABEL: ugt_56_v2i64:
34159 ; AVX1:       # %bb.0:
34160 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34161 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
34162 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34163 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34164 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
34165 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
34166 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34167 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34168 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34169 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34170 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34171 ; AVX1-NEXT:    retq
34173 ; AVX2-LABEL: ugt_56_v2i64:
34174 ; AVX2:       # %bb.0:
34175 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34176 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
34177 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34178 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34179 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
34180 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
34181 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34182 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34183 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34184 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34185 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34186 ; AVX2-NEXT:    retq
34188 ; AVX512VPOPCNTDQ-LABEL: ugt_56_v2i64:
34189 ; AVX512VPOPCNTDQ:       # %bb.0:
34190 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34191 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
34192 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34193 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
34194 ; AVX512VPOPCNTDQ-NEXT:    retq
34196 ; AVX512VPOPCNTDQVL-LABEL: ugt_56_v2i64:
34197 ; AVX512VPOPCNTDQVL:       # %bb.0:
34198 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
34199 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [56,56]
34200 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
34201 ; AVX512VPOPCNTDQVL-NEXT:    retq
34203 ; BITALG_NOVLX-LABEL: ugt_56_v2i64:
34204 ; BITALG_NOVLX:       # %bb.0:
34205 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34206 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
34207 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34208 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34209 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34210 ; BITALG_NOVLX-NEXT:    vzeroupper
34211 ; BITALG_NOVLX-NEXT:    retq
34213 ; BITALG-LABEL: ugt_56_v2i64:
34214 ; BITALG:       # %bb.0:
34215 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
34216 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34217 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34218 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [56,56]
34219 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
34220 ; BITALG-NEXT:    retq
34221   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
34222   %3 = icmp ugt <2 x i64> %2, <i64 56, i64 56>
34223   %4 = sext <2 x i1> %3 to <2 x i64>
34224   ret <2 x i64> %4
34227 define <2 x i64> @ult_57_v2i64(<2 x i64> %0) {
34228 ; SSE2-LABEL: ult_57_v2i64:
34229 ; SSE2:       # %bb.0:
34230 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34231 ; SSE2-NEXT:    psrlw $1, %xmm1
34232 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34233 ; SSE2-NEXT:    psubb %xmm1, %xmm0
34234 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34235 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
34236 ; SSE2-NEXT:    pand %xmm1, %xmm2
34237 ; SSE2-NEXT:    psrlw $2, %xmm0
34238 ; SSE2-NEXT:    pand %xmm1, %xmm0
34239 ; SSE2-NEXT:    paddb %xmm2, %xmm0
34240 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34241 ; SSE2-NEXT:    psrlw $4, %xmm1
34242 ; SSE2-NEXT:    paddb %xmm0, %xmm1
34243 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34244 ; SSE2-NEXT:    pxor %xmm0, %xmm0
34245 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
34246 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34247 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34248 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483705,2147483705,2147483705,2147483705]
34249 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
34250 ; SSE2-NEXT:    retq
34252 ; SSE3-LABEL: ult_57_v2i64:
34253 ; SSE3:       # %bb.0:
34254 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34255 ; SSE3-NEXT:    psrlw $1, %xmm1
34256 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34257 ; SSE3-NEXT:    psubb %xmm1, %xmm0
34258 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34259 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
34260 ; SSE3-NEXT:    pand %xmm1, %xmm2
34261 ; SSE3-NEXT:    psrlw $2, %xmm0
34262 ; SSE3-NEXT:    pand %xmm1, %xmm0
34263 ; SSE3-NEXT:    paddb %xmm2, %xmm0
34264 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34265 ; SSE3-NEXT:    psrlw $4, %xmm1
34266 ; SSE3-NEXT:    paddb %xmm0, %xmm1
34267 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34268 ; SSE3-NEXT:    pxor %xmm0, %xmm0
34269 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
34270 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34271 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34272 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483705,2147483705,2147483705,2147483705]
34273 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
34274 ; SSE3-NEXT:    retq
34276 ; SSSE3-LABEL: ult_57_v2i64:
34277 ; SSSE3:       # %bb.0:
34278 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34279 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
34280 ; SSSE3-NEXT:    pand %xmm1, %xmm2
34281 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34282 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
34283 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
34284 ; SSSE3-NEXT:    psrlw $4, %xmm0
34285 ; SSSE3-NEXT:    pand %xmm1, %xmm0
34286 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
34287 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
34288 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
34289 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
34290 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34291 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34292 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483705,2147483705,2147483705,2147483705]
34293 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
34294 ; SSSE3-NEXT:    retq
34296 ; SSE41-LABEL: ult_57_v2i64:
34297 ; SSE41:       # %bb.0:
34298 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34299 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
34300 ; SSE41-NEXT:    pand %xmm1, %xmm2
34301 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34302 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
34303 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
34304 ; SSE41-NEXT:    psrlw $4, %xmm0
34305 ; SSE41-NEXT:    pand %xmm1, %xmm0
34306 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
34307 ; SSE41-NEXT:    paddb %xmm4, %xmm3
34308 ; SSE41-NEXT:    pxor %xmm0, %xmm0
34309 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
34310 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34311 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34312 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483705,2147483705,2147483705,2147483705]
34313 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
34314 ; SSE41-NEXT:    retq
34316 ; AVX1-LABEL: ult_57_v2i64:
34317 ; AVX1:       # %bb.0:
34318 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34319 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
34320 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34321 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34322 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
34323 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
34324 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34325 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34326 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34327 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34328 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [57,57]
34329 ; AVX1-NEXT:    # xmm1 = mem[0,0]
34330 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34331 ; AVX1-NEXT:    retq
34333 ; AVX2-LABEL: ult_57_v2i64:
34334 ; AVX2:       # %bb.0:
34335 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34336 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
34337 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34338 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34339 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
34340 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
34341 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34342 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34343 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34344 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34345 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [57,57]
34346 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34347 ; AVX2-NEXT:    retq
34349 ; AVX512VPOPCNTDQ-LABEL: ult_57_v2i64:
34350 ; AVX512VPOPCNTDQ:       # %bb.0:
34351 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34352 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
34353 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [57,57]
34354 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34355 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
34356 ; AVX512VPOPCNTDQ-NEXT:    retq
34358 ; AVX512VPOPCNTDQVL-LABEL: ult_57_v2i64:
34359 ; AVX512VPOPCNTDQVL:       # %bb.0:
34360 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
34361 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [57,57]
34362 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34363 ; AVX512VPOPCNTDQVL-NEXT:    retq
34365 ; BITALG_NOVLX-LABEL: ult_57_v2i64:
34366 ; BITALG_NOVLX:       # %bb.0:
34367 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34368 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
34369 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34370 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34371 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [57,57]
34372 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34373 ; BITALG_NOVLX-NEXT:    vzeroupper
34374 ; BITALG_NOVLX-NEXT:    retq
34376 ; BITALG-LABEL: ult_57_v2i64:
34377 ; BITALG:       # %bb.0:
34378 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
34379 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34380 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34381 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [57,57]
34382 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34383 ; BITALG-NEXT:    retq
34384   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
34385   %3 = icmp ult <2 x i64> %2, <i64 57, i64 57>
34386   %4 = sext <2 x i1> %3 to <2 x i64>
34387   ret <2 x i64> %4
34390 define <2 x i64> @ugt_57_v2i64(<2 x i64> %0) {
34391 ; SSE2-LABEL: ugt_57_v2i64:
34392 ; SSE2:       # %bb.0:
34393 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34394 ; SSE2-NEXT:    psrlw $1, %xmm1
34395 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34396 ; SSE2-NEXT:    psubb %xmm1, %xmm0
34397 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34398 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
34399 ; SSE2-NEXT:    pand %xmm1, %xmm2
34400 ; SSE2-NEXT:    psrlw $2, %xmm0
34401 ; SSE2-NEXT:    pand %xmm1, %xmm0
34402 ; SSE2-NEXT:    paddb %xmm2, %xmm0
34403 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34404 ; SSE2-NEXT:    psrlw $4, %xmm1
34405 ; SSE2-NEXT:    paddb %xmm0, %xmm1
34406 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34407 ; SSE2-NEXT:    pxor %xmm0, %xmm0
34408 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
34409 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34410 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34411 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34412 ; SSE2-NEXT:    retq
34414 ; SSE3-LABEL: ugt_57_v2i64:
34415 ; SSE3:       # %bb.0:
34416 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34417 ; SSE3-NEXT:    psrlw $1, %xmm1
34418 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34419 ; SSE3-NEXT:    psubb %xmm1, %xmm0
34420 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34421 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
34422 ; SSE3-NEXT:    pand %xmm1, %xmm2
34423 ; SSE3-NEXT:    psrlw $2, %xmm0
34424 ; SSE3-NEXT:    pand %xmm1, %xmm0
34425 ; SSE3-NEXT:    paddb %xmm2, %xmm0
34426 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34427 ; SSE3-NEXT:    psrlw $4, %xmm1
34428 ; SSE3-NEXT:    paddb %xmm0, %xmm1
34429 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34430 ; SSE3-NEXT:    pxor %xmm0, %xmm0
34431 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
34432 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34433 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34434 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34435 ; SSE3-NEXT:    retq
34437 ; SSSE3-LABEL: ugt_57_v2i64:
34438 ; SSSE3:       # %bb.0:
34439 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34440 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
34441 ; SSSE3-NEXT:    pand %xmm1, %xmm2
34442 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34443 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
34444 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
34445 ; SSSE3-NEXT:    psrlw $4, %xmm0
34446 ; SSSE3-NEXT:    pand %xmm1, %xmm0
34447 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
34448 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
34449 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
34450 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
34451 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34452 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34453 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34454 ; SSSE3-NEXT:    retq
34456 ; SSE41-LABEL: ugt_57_v2i64:
34457 ; SSE41:       # %bb.0:
34458 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34459 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
34460 ; SSE41-NEXT:    pand %xmm1, %xmm2
34461 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34462 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
34463 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
34464 ; SSE41-NEXT:    psrlw $4, %xmm0
34465 ; SSE41-NEXT:    pand %xmm1, %xmm0
34466 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
34467 ; SSE41-NEXT:    paddb %xmm4, %xmm3
34468 ; SSE41-NEXT:    pxor %xmm0, %xmm0
34469 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
34470 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34471 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34472 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34473 ; SSE41-NEXT:    retq
34475 ; AVX1-LABEL: ugt_57_v2i64:
34476 ; AVX1:       # %bb.0:
34477 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34478 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
34479 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34480 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34481 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
34482 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
34483 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34484 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34485 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34486 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34487 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34488 ; AVX1-NEXT:    retq
34490 ; AVX2-LABEL: ugt_57_v2i64:
34491 ; AVX2:       # %bb.0:
34492 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34493 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
34494 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34495 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34496 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
34497 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
34498 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34499 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34500 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34501 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34502 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34503 ; AVX2-NEXT:    retq
34505 ; AVX512VPOPCNTDQ-LABEL: ugt_57_v2i64:
34506 ; AVX512VPOPCNTDQ:       # %bb.0:
34507 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34508 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
34509 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34510 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
34511 ; AVX512VPOPCNTDQ-NEXT:    retq
34513 ; AVX512VPOPCNTDQVL-LABEL: ugt_57_v2i64:
34514 ; AVX512VPOPCNTDQVL:       # %bb.0:
34515 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
34516 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [57,57]
34517 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
34518 ; AVX512VPOPCNTDQVL-NEXT:    retq
34520 ; BITALG_NOVLX-LABEL: ugt_57_v2i64:
34521 ; BITALG_NOVLX:       # %bb.0:
34522 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34523 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
34524 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34525 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34526 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34527 ; BITALG_NOVLX-NEXT:    vzeroupper
34528 ; BITALG_NOVLX-NEXT:    retq
34530 ; BITALG-LABEL: ugt_57_v2i64:
34531 ; BITALG:       # %bb.0:
34532 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
34533 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34534 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34535 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [57,57]
34536 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
34537 ; BITALG-NEXT:    retq
34538   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
34539   %3 = icmp ugt <2 x i64> %2, <i64 57, i64 57>
34540   %4 = sext <2 x i1> %3 to <2 x i64>
34541   ret <2 x i64> %4
34544 define <2 x i64> @ult_58_v2i64(<2 x i64> %0) {
34545 ; SSE2-LABEL: ult_58_v2i64:
34546 ; SSE2:       # %bb.0:
34547 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34548 ; SSE2-NEXT:    psrlw $1, %xmm1
34549 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34550 ; SSE2-NEXT:    psubb %xmm1, %xmm0
34551 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34552 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
34553 ; SSE2-NEXT:    pand %xmm1, %xmm2
34554 ; SSE2-NEXT:    psrlw $2, %xmm0
34555 ; SSE2-NEXT:    pand %xmm1, %xmm0
34556 ; SSE2-NEXT:    paddb %xmm2, %xmm0
34557 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34558 ; SSE2-NEXT:    psrlw $4, %xmm1
34559 ; SSE2-NEXT:    paddb %xmm0, %xmm1
34560 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34561 ; SSE2-NEXT:    pxor %xmm0, %xmm0
34562 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
34563 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34564 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34565 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483706,2147483706,2147483706,2147483706]
34566 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
34567 ; SSE2-NEXT:    retq
34569 ; SSE3-LABEL: ult_58_v2i64:
34570 ; SSE3:       # %bb.0:
34571 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34572 ; SSE3-NEXT:    psrlw $1, %xmm1
34573 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34574 ; SSE3-NEXT:    psubb %xmm1, %xmm0
34575 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34576 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
34577 ; SSE3-NEXT:    pand %xmm1, %xmm2
34578 ; SSE3-NEXT:    psrlw $2, %xmm0
34579 ; SSE3-NEXT:    pand %xmm1, %xmm0
34580 ; SSE3-NEXT:    paddb %xmm2, %xmm0
34581 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34582 ; SSE3-NEXT:    psrlw $4, %xmm1
34583 ; SSE3-NEXT:    paddb %xmm0, %xmm1
34584 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34585 ; SSE3-NEXT:    pxor %xmm0, %xmm0
34586 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
34587 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34588 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34589 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483706,2147483706,2147483706,2147483706]
34590 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
34591 ; SSE3-NEXT:    retq
34593 ; SSSE3-LABEL: ult_58_v2i64:
34594 ; SSSE3:       # %bb.0:
34595 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34596 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
34597 ; SSSE3-NEXT:    pand %xmm1, %xmm2
34598 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34599 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
34600 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
34601 ; SSSE3-NEXT:    psrlw $4, %xmm0
34602 ; SSSE3-NEXT:    pand %xmm1, %xmm0
34603 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
34604 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
34605 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
34606 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
34607 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34608 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34609 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483706,2147483706,2147483706,2147483706]
34610 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
34611 ; SSSE3-NEXT:    retq
34613 ; SSE41-LABEL: ult_58_v2i64:
34614 ; SSE41:       # %bb.0:
34615 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34616 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
34617 ; SSE41-NEXT:    pand %xmm1, %xmm2
34618 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34619 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
34620 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
34621 ; SSE41-NEXT:    psrlw $4, %xmm0
34622 ; SSE41-NEXT:    pand %xmm1, %xmm0
34623 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
34624 ; SSE41-NEXT:    paddb %xmm4, %xmm3
34625 ; SSE41-NEXT:    pxor %xmm0, %xmm0
34626 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
34627 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34628 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34629 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483706,2147483706,2147483706,2147483706]
34630 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
34631 ; SSE41-NEXT:    retq
34633 ; AVX1-LABEL: ult_58_v2i64:
34634 ; AVX1:       # %bb.0:
34635 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34636 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
34637 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34638 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34639 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
34640 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
34641 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34642 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34643 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34644 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34645 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [58,58]
34646 ; AVX1-NEXT:    # xmm1 = mem[0,0]
34647 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34648 ; AVX1-NEXT:    retq
34650 ; AVX2-LABEL: ult_58_v2i64:
34651 ; AVX2:       # %bb.0:
34652 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34653 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
34654 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34655 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34656 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
34657 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
34658 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34659 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34660 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34661 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34662 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [58,58]
34663 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34664 ; AVX2-NEXT:    retq
34666 ; AVX512VPOPCNTDQ-LABEL: ult_58_v2i64:
34667 ; AVX512VPOPCNTDQ:       # %bb.0:
34668 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34669 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
34670 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [58,58]
34671 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34672 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
34673 ; AVX512VPOPCNTDQ-NEXT:    retq
34675 ; AVX512VPOPCNTDQVL-LABEL: ult_58_v2i64:
34676 ; AVX512VPOPCNTDQVL:       # %bb.0:
34677 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
34678 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [58,58]
34679 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34680 ; AVX512VPOPCNTDQVL-NEXT:    retq
34682 ; BITALG_NOVLX-LABEL: ult_58_v2i64:
34683 ; BITALG_NOVLX:       # %bb.0:
34684 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34685 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
34686 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34687 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34688 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [58,58]
34689 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34690 ; BITALG_NOVLX-NEXT:    vzeroupper
34691 ; BITALG_NOVLX-NEXT:    retq
34693 ; BITALG-LABEL: ult_58_v2i64:
34694 ; BITALG:       # %bb.0:
34695 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
34696 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34697 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34698 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [58,58]
34699 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34700 ; BITALG-NEXT:    retq
34701   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
34702   %3 = icmp ult <2 x i64> %2, <i64 58, i64 58>
34703   %4 = sext <2 x i1> %3 to <2 x i64>
34704   ret <2 x i64> %4
34707 define <2 x i64> @ugt_58_v2i64(<2 x i64> %0) {
34708 ; SSE2-LABEL: ugt_58_v2i64:
34709 ; SSE2:       # %bb.0:
34710 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34711 ; SSE2-NEXT:    psrlw $1, %xmm1
34712 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34713 ; SSE2-NEXT:    psubb %xmm1, %xmm0
34714 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34715 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
34716 ; SSE2-NEXT:    pand %xmm1, %xmm2
34717 ; SSE2-NEXT:    psrlw $2, %xmm0
34718 ; SSE2-NEXT:    pand %xmm1, %xmm0
34719 ; SSE2-NEXT:    paddb %xmm2, %xmm0
34720 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34721 ; SSE2-NEXT:    psrlw $4, %xmm1
34722 ; SSE2-NEXT:    paddb %xmm0, %xmm1
34723 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34724 ; SSE2-NEXT:    pxor %xmm0, %xmm0
34725 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
34726 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34727 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34728 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34729 ; SSE2-NEXT:    retq
34731 ; SSE3-LABEL: ugt_58_v2i64:
34732 ; SSE3:       # %bb.0:
34733 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34734 ; SSE3-NEXT:    psrlw $1, %xmm1
34735 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34736 ; SSE3-NEXT:    psubb %xmm1, %xmm0
34737 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34738 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
34739 ; SSE3-NEXT:    pand %xmm1, %xmm2
34740 ; SSE3-NEXT:    psrlw $2, %xmm0
34741 ; SSE3-NEXT:    pand %xmm1, %xmm0
34742 ; SSE3-NEXT:    paddb %xmm2, %xmm0
34743 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34744 ; SSE3-NEXT:    psrlw $4, %xmm1
34745 ; SSE3-NEXT:    paddb %xmm0, %xmm1
34746 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34747 ; SSE3-NEXT:    pxor %xmm0, %xmm0
34748 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
34749 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34750 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34751 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34752 ; SSE3-NEXT:    retq
34754 ; SSSE3-LABEL: ugt_58_v2i64:
34755 ; SSSE3:       # %bb.0:
34756 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34757 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
34758 ; SSSE3-NEXT:    pand %xmm1, %xmm2
34759 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34760 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
34761 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
34762 ; SSSE3-NEXT:    psrlw $4, %xmm0
34763 ; SSSE3-NEXT:    pand %xmm1, %xmm0
34764 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
34765 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
34766 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
34767 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
34768 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34769 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34770 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34771 ; SSSE3-NEXT:    retq
34773 ; SSE41-LABEL: ugt_58_v2i64:
34774 ; SSE41:       # %bb.0:
34775 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34776 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
34777 ; SSE41-NEXT:    pand %xmm1, %xmm2
34778 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34779 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
34780 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
34781 ; SSE41-NEXT:    psrlw $4, %xmm0
34782 ; SSE41-NEXT:    pand %xmm1, %xmm0
34783 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
34784 ; SSE41-NEXT:    paddb %xmm4, %xmm3
34785 ; SSE41-NEXT:    pxor %xmm0, %xmm0
34786 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
34787 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
34788 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34789 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
34790 ; SSE41-NEXT:    retq
34792 ; AVX1-LABEL: ugt_58_v2i64:
34793 ; AVX1:       # %bb.0:
34794 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34795 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
34796 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34797 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34798 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
34799 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
34800 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34801 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34802 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34803 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34804 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34805 ; AVX1-NEXT:    retq
34807 ; AVX2-LABEL: ugt_58_v2i64:
34808 ; AVX2:       # %bb.0:
34809 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34810 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
34811 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34812 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34813 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
34814 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
34815 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34816 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34817 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34818 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34819 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34820 ; AVX2-NEXT:    retq
34822 ; AVX512VPOPCNTDQ-LABEL: ugt_58_v2i64:
34823 ; AVX512VPOPCNTDQ:       # %bb.0:
34824 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34825 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
34826 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34827 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
34828 ; AVX512VPOPCNTDQ-NEXT:    retq
34830 ; AVX512VPOPCNTDQVL-LABEL: ugt_58_v2i64:
34831 ; AVX512VPOPCNTDQVL:       # %bb.0:
34832 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
34833 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [58,58]
34834 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
34835 ; AVX512VPOPCNTDQVL-NEXT:    retq
34837 ; BITALG_NOVLX-LABEL: ugt_58_v2i64:
34838 ; BITALG_NOVLX:       # %bb.0:
34839 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34840 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
34841 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34842 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34843 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
34844 ; BITALG_NOVLX-NEXT:    vzeroupper
34845 ; BITALG_NOVLX-NEXT:    retq
34847 ; BITALG-LABEL: ugt_58_v2i64:
34848 ; BITALG:       # %bb.0:
34849 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
34850 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34851 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34852 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [58,58]
34853 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
34854 ; BITALG-NEXT:    retq
34855   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
34856   %3 = icmp ugt <2 x i64> %2, <i64 58, i64 58>
34857   %4 = sext <2 x i1> %3 to <2 x i64>
34858   ret <2 x i64> %4
34861 define <2 x i64> @ult_59_v2i64(<2 x i64> %0) {
34862 ; SSE2-LABEL: ult_59_v2i64:
34863 ; SSE2:       # %bb.0:
34864 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34865 ; SSE2-NEXT:    psrlw $1, %xmm1
34866 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34867 ; SSE2-NEXT:    psubb %xmm1, %xmm0
34868 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34869 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
34870 ; SSE2-NEXT:    pand %xmm1, %xmm2
34871 ; SSE2-NEXT:    psrlw $2, %xmm0
34872 ; SSE2-NEXT:    pand %xmm1, %xmm0
34873 ; SSE2-NEXT:    paddb %xmm2, %xmm0
34874 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
34875 ; SSE2-NEXT:    psrlw $4, %xmm1
34876 ; SSE2-NEXT:    paddb %xmm0, %xmm1
34877 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34878 ; SSE2-NEXT:    pxor %xmm0, %xmm0
34879 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
34880 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34881 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34882 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483707,2147483707,2147483707,2147483707]
34883 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
34884 ; SSE2-NEXT:    retq
34886 ; SSE3-LABEL: ult_59_v2i64:
34887 ; SSE3:       # %bb.0:
34888 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34889 ; SSE3-NEXT:    psrlw $1, %xmm1
34890 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34891 ; SSE3-NEXT:    psubb %xmm1, %xmm0
34892 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
34893 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
34894 ; SSE3-NEXT:    pand %xmm1, %xmm2
34895 ; SSE3-NEXT:    psrlw $2, %xmm0
34896 ; SSE3-NEXT:    pand %xmm1, %xmm0
34897 ; SSE3-NEXT:    paddb %xmm2, %xmm0
34898 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
34899 ; SSE3-NEXT:    psrlw $4, %xmm1
34900 ; SSE3-NEXT:    paddb %xmm0, %xmm1
34901 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34902 ; SSE3-NEXT:    pxor %xmm0, %xmm0
34903 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
34904 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34905 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34906 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483707,2147483707,2147483707,2147483707]
34907 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
34908 ; SSE3-NEXT:    retq
34910 ; SSSE3-LABEL: ult_59_v2i64:
34911 ; SSSE3:       # %bb.0:
34912 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34913 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
34914 ; SSSE3-NEXT:    pand %xmm1, %xmm2
34915 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34916 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
34917 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
34918 ; SSSE3-NEXT:    psrlw $4, %xmm0
34919 ; SSSE3-NEXT:    pand %xmm1, %xmm0
34920 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
34921 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
34922 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
34923 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
34924 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34925 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34926 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483707,2147483707,2147483707,2147483707]
34927 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
34928 ; SSSE3-NEXT:    retq
34930 ; SSE41-LABEL: ult_59_v2i64:
34931 ; SSE41:       # %bb.0:
34932 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34933 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
34934 ; SSE41-NEXT:    pand %xmm1, %xmm2
34935 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34936 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
34937 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
34938 ; SSE41-NEXT:    psrlw $4, %xmm0
34939 ; SSE41-NEXT:    pand %xmm1, %xmm0
34940 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
34941 ; SSE41-NEXT:    paddb %xmm4, %xmm3
34942 ; SSE41-NEXT:    pxor %xmm0, %xmm0
34943 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
34944 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
34945 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
34946 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483707,2147483707,2147483707,2147483707]
34947 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
34948 ; SSE41-NEXT:    retq
34950 ; AVX1-LABEL: ult_59_v2i64:
34951 ; AVX1:       # %bb.0:
34952 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34953 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
34954 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34955 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34956 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
34957 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
34958 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34959 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34960 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34961 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34962 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [59,59]
34963 ; AVX1-NEXT:    # xmm1 = mem[0,0]
34964 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34965 ; AVX1-NEXT:    retq
34967 ; AVX2-LABEL: ult_59_v2i64:
34968 ; AVX2:       # %bb.0:
34969 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
34970 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
34971 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
34972 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
34973 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
34974 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
34975 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
34976 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
34977 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
34978 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
34979 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [59,59]
34980 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34981 ; AVX2-NEXT:    retq
34983 ; AVX512VPOPCNTDQ-LABEL: ult_59_v2i64:
34984 ; AVX512VPOPCNTDQ:       # %bb.0:
34985 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
34986 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
34987 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [59,59]
34988 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34989 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
34990 ; AVX512VPOPCNTDQ-NEXT:    retq
34992 ; AVX512VPOPCNTDQVL-LABEL: ult_59_v2i64:
34993 ; AVX512VPOPCNTDQVL:       # %bb.0:
34994 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
34995 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [59,59]
34996 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
34997 ; AVX512VPOPCNTDQVL-NEXT:    retq
34999 ; BITALG_NOVLX-LABEL: ult_59_v2i64:
35000 ; BITALG_NOVLX:       # %bb.0:
35001 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35002 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
35003 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35004 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35005 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [59,59]
35006 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35007 ; BITALG_NOVLX-NEXT:    vzeroupper
35008 ; BITALG_NOVLX-NEXT:    retq
35010 ; BITALG-LABEL: ult_59_v2i64:
35011 ; BITALG:       # %bb.0:
35012 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
35013 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35014 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35015 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [59,59]
35016 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35017 ; BITALG-NEXT:    retq
35018   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
35019   %3 = icmp ult <2 x i64> %2, <i64 59, i64 59>
35020   %4 = sext <2 x i1> %3 to <2 x i64>
35021   ret <2 x i64> %4
35024 define <2 x i64> @ugt_59_v2i64(<2 x i64> %0) {
35025 ; SSE2-LABEL: ugt_59_v2i64:
35026 ; SSE2:       # %bb.0:
35027 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35028 ; SSE2-NEXT:    psrlw $1, %xmm1
35029 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35030 ; SSE2-NEXT:    psubb %xmm1, %xmm0
35031 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35032 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
35033 ; SSE2-NEXT:    pand %xmm1, %xmm2
35034 ; SSE2-NEXT:    psrlw $2, %xmm0
35035 ; SSE2-NEXT:    pand %xmm1, %xmm0
35036 ; SSE2-NEXT:    paddb %xmm2, %xmm0
35037 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35038 ; SSE2-NEXT:    psrlw $4, %xmm1
35039 ; SSE2-NEXT:    paddb %xmm0, %xmm1
35040 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35041 ; SSE2-NEXT:    pxor %xmm0, %xmm0
35042 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
35043 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35044 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35045 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35046 ; SSE2-NEXT:    retq
35048 ; SSE3-LABEL: ugt_59_v2i64:
35049 ; SSE3:       # %bb.0:
35050 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35051 ; SSE3-NEXT:    psrlw $1, %xmm1
35052 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35053 ; SSE3-NEXT:    psubb %xmm1, %xmm0
35054 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35055 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
35056 ; SSE3-NEXT:    pand %xmm1, %xmm2
35057 ; SSE3-NEXT:    psrlw $2, %xmm0
35058 ; SSE3-NEXT:    pand %xmm1, %xmm0
35059 ; SSE3-NEXT:    paddb %xmm2, %xmm0
35060 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35061 ; SSE3-NEXT:    psrlw $4, %xmm1
35062 ; SSE3-NEXT:    paddb %xmm0, %xmm1
35063 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35064 ; SSE3-NEXT:    pxor %xmm0, %xmm0
35065 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
35066 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35067 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35068 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35069 ; SSE3-NEXT:    retq
35071 ; SSSE3-LABEL: ugt_59_v2i64:
35072 ; SSSE3:       # %bb.0:
35073 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35074 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
35075 ; SSSE3-NEXT:    pand %xmm1, %xmm2
35076 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35077 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
35078 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
35079 ; SSSE3-NEXT:    psrlw $4, %xmm0
35080 ; SSSE3-NEXT:    pand %xmm1, %xmm0
35081 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
35082 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
35083 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
35084 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
35085 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35086 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35087 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35088 ; SSSE3-NEXT:    retq
35090 ; SSE41-LABEL: ugt_59_v2i64:
35091 ; SSE41:       # %bb.0:
35092 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35093 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
35094 ; SSE41-NEXT:    pand %xmm1, %xmm2
35095 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35096 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
35097 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
35098 ; SSE41-NEXT:    psrlw $4, %xmm0
35099 ; SSE41-NEXT:    pand %xmm1, %xmm0
35100 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
35101 ; SSE41-NEXT:    paddb %xmm4, %xmm3
35102 ; SSE41-NEXT:    pxor %xmm0, %xmm0
35103 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
35104 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35105 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35106 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35107 ; SSE41-NEXT:    retq
35109 ; AVX1-LABEL: ugt_59_v2i64:
35110 ; AVX1:       # %bb.0:
35111 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35112 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
35113 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35114 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35115 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
35116 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
35117 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35118 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35119 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35120 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35121 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35122 ; AVX1-NEXT:    retq
35124 ; AVX2-LABEL: ugt_59_v2i64:
35125 ; AVX2:       # %bb.0:
35126 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35127 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
35128 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35129 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35130 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
35131 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
35132 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35133 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35134 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35135 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35136 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35137 ; AVX2-NEXT:    retq
35139 ; AVX512VPOPCNTDQ-LABEL: ugt_59_v2i64:
35140 ; AVX512VPOPCNTDQ:       # %bb.0:
35141 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35142 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
35143 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35144 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
35145 ; AVX512VPOPCNTDQ-NEXT:    retq
35147 ; AVX512VPOPCNTDQVL-LABEL: ugt_59_v2i64:
35148 ; AVX512VPOPCNTDQVL:       # %bb.0:
35149 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
35150 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [59,59]
35151 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
35152 ; AVX512VPOPCNTDQVL-NEXT:    retq
35154 ; BITALG_NOVLX-LABEL: ugt_59_v2i64:
35155 ; BITALG_NOVLX:       # %bb.0:
35156 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35157 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
35158 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35159 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35160 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35161 ; BITALG_NOVLX-NEXT:    vzeroupper
35162 ; BITALG_NOVLX-NEXT:    retq
35164 ; BITALG-LABEL: ugt_59_v2i64:
35165 ; BITALG:       # %bb.0:
35166 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
35167 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35168 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35169 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [59,59]
35170 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
35171 ; BITALG-NEXT:    retq
35172   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
35173   %3 = icmp ugt <2 x i64> %2, <i64 59, i64 59>
35174   %4 = sext <2 x i1> %3 to <2 x i64>
35175   ret <2 x i64> %4
35178 define <2 x i64> @ult_60_v2i64(<2 x i64> %0) {
35179 ; SSE2-LABEL: ult_60_v2i64:
35180 ; SSE2:       # %bb.0:
35181 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35182 ; SSE2-NEXT:    psrlw $1, %xmm1
35183 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35184 ; SSE2-NEXT:    psubb %xmm1, %xmm0
35185 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35186 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
35187 ; SSE2-NEXT:    pand %xmm1, %xmm2
35188 ; SSE2-NEXT:    psrlw $2, %xmm0
35189 ; SSE2-NEXT:    pand %xmm1, %xmm0
35190 ; SSE2-NEXT:    paddb %xmm2, %xmm0
35191 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35192 ; SSE2-NEXT:    psrlw $4, %xmm1
35193 ; SSE2-NEXT:    paddb %xmm0, %xmm1
35194 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35195 ; SSE2-NEXT:    pxor %xmm0, %xmm0
35196 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
35197 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35198 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35199 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483708,2147483708,2147483708,2147483708]
35200 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
35201 ; SSE2-NEXT:    retq
35203 ; SSE3-LABEL: ult_60_v2i64:
35204 ; SSE3:       # %bb.0:
35205 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35206 ; SSE3-NEXT:    psrlw $1, %xmm1
35207 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35208 ; SSE3-NEXT:    psubb %xmm1, %xmm0
35209 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35210 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
35211 ; SSE3-NEXT:    pand %xmm1, %xmm2
35212 ; SSE3-NEXT:    psrlw $2, %xmm0
35213 ; SSE3-NEXT:    pand %xmm1, %xmm0
35214 ; SSE3-NEXT:    paddb %xmm2, %xmm0
35215 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35216 ; SSE3-NEXT:    psrlw $4, %xmm1
35217 ; SSE3-NEXT:    paddb %xmm0, %xmm1
35218 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35219 ; SSE3-NEXT:    pxor %xmm0, %xmm0
35220 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
35221 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35222 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35223 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483708,2147483708,2147483708,2147483708]
35224 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
35225 ; SSE3-NEXT:    retq
35227 ; SSSE3-LABEL: ult_60_v2i64:
35228 ; SSSE3:       # %bb.0:
35229 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35230 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
35231 ; SSSE3-NEXT:    pand %xmm1, %xmm2
35232 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35233 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
35234 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
35235 ; SSSE3-NEXT:    psrlw $4, %xmm0
35236 ; SSSE3-NEXT:    pand %xmm1, %xmm0
35237 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
35238 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
35239 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
35240 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
35241 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35242 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35243 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483708,2147483708,2147483708,2147483708]
35244 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
35245 ; SSSE3-NEXT:    retq
35247 ; SSE41-LABEL: ult_60_v2i64:
35248 ; SSE41:       # %bb.0:
35249 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35250 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
35251 ; SSE41-NEXT:    pand %xmm1, %xmm2
35252 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35253 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
35254 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
35255 ; SSE41-NEXT:    psrlw $4, %xmm0
35256 ; SSE41-NEXT:    pand %xmm1, %xmm0
35257 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
35258 ; SSE41-NEXT:    paddb %xmm4, %xmm3
35259 ; SSE41-NEXT:    pxor %xmm0, %xmm0
35260 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
35261 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35262 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35263 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483708,2147483708,2147483708,2147483708]
35264 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
35265 ; SSE41-NEXT:    retq
35267 ; AVX1-LABEL: ult_60_v2i64:
35268 ; AVX1:       # %bb.0:
35269 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35270 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
35271 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35272 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35273 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
35274 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
35275 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35276 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35277 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35278 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35279 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [60,60]
35280 ; AVX1-NEXT:    # xmm1 = mem[0,0]
35281 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35282 ; AVX1-NEXT:    retq
35284 ; AVX2-LABEL: ult_60_v2i64:
35285 ; AVX2:       # %bb.0:
35286 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35287 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
35288 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35289 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35290 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
35291 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
35292 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35293 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35294 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35295 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35296 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [60,60]
35297 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35298 ; AVX2-NEXT:    retq
35300 ; AVX512VPOPCNTDQ-LABEL: ult_60_v2i64:
35301 ; AVX512VPOPCNTDQ:       # %bb.0:
35302 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35303 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
35304 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [60,60]
35305 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35306 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
35307 ; AVX512VPOPCNTDQ-NEXT:    retq
35309 ; AVX512VPOPCNTDQVL-LABEL: ult_60_v2i64:
35310 ; AVX512VPOPCNTDQVL:       # %bb.0:
35311 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
35312 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [60,60]
35313 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35314 ; AVX512VPOPCNTDQVL-NEXT:    retq
35316 ; BITALG_NOVLX-LABEL: ult_60_v2i64:
35317 ; BITALG_NOVLX:       # %bb.0:
35318 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35319 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
35320 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35321 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35322 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [60,60]
35323 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35324 ; BITALG_NOVLX-NEXT:    vzeroupper
35325 ; BITALG_NOVLX-NEXT:    retq
35327 ; BITALG-LABEL: ult_60_v2i64:
35328 ; BITALG:       # %bb.0:
35329 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
35330 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35331 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35332 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [60,60]
35333 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35334 ; BITALG-NEXT:    retq
35335   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
35336   %3 = icmp ult <2 x i64> %2, <i64 60, i64 60>
35337   %4 = sext <2 x i1> %3 to <2 x i64>
35338   ret <2 x i64> %4
35341 define <2 x i64> @ugt_60_v2i64(<2 x i64> %0) {
35342 ; SSE2-LABEL: ugt_60_v2i64:
35343 ; SSE2:       # %bb.0:
35344 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35345 ; SSE2-NEXT:    psrlw $1, %xmm1
35346 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35347 ; SSE2-NEXT:    psubb %xmm1, %xmm0
35348 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35349 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
35350 ; SSE2-NEXT:    pand %xmm1, %xmm2
35351 ; SSE2-NEXT:    psrlw $2, %xmm0
35352 ; SSE2-NEXT:    pand %xmm1, %xmm0
35353 ; SSE2-NEXT:    paddb %xmm2, %xmm0
35354 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35355 ; SSE2-NEXT:    psrlw $4, %xmm1
35356 ; SSE2-NEXT:    paddb %xmm0, %xmm1
35357 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35358 ; SSE2-NEXT:    pxor %xmm0, %xmm0
35359 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
35360 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35361 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35362 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35363 ; SSE2-NEXT:    retq
35365 ; SSE3-LABEL: ugt_60_v2i64:
35366 ; SSE3:       # %bb.0:
35367 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35368 ; SSE3-NEXT:    psrlw $1, %xmm1
35369 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35370 ; SSE3-NEXT:    psubb %xmm1, %xmm0
35371 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35372 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
35373 ; SSE3-NEXT:    pand %xmm1, %xmm2
35374 ; SSE3-NEXT:    psrlw $2, %xmm0
35375 ; SSE3-NEXT:    pand %xmm1, %xmm0
35376 ; SSE3-NEXT:    paddb %xmm2, %xmm0
35377 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35378 ; SSE3-NEXT:    psrlw $4, %xmm1
35379 ; SSE3-NEXT:    paddb %xmm0, %xmm1
35380 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35381 ; SSE3-NEXT:    pxor %xmm0, %xmm0
35382 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
35383 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35384 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35385 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35386 ; SSE3-NEXT:    retq
35388 ; SSSE3-LABEL: ugt_60_v2i64:
35389 ; SSSE3:       # %bb.0:
35390 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35391 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
35392 ; SSSE3-NEXT:    pand %xmm1, %xmm2
35393 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35394 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
35395 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
35396 ; SSSE3-NEXT:    psrlw $4, %xmm0
35397 ; SSSE3-NEXT:    pand %xmm1, %xmm0
35398 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
35399 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
35400 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
35401 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
35402 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35403 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35404 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35405 ; SSSE3-NEXT:    retq
35407 ; SSE41-LABEL: ugt_60_v2i64:
35408 ; SSE41:       # %bb.0:
35409 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35410 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
35411 ; SSE41-NEXT:    pand %xmm1, %xmm2
35412 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35413 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
35414 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
35415 ; SSE41-NEXT:    psrlw $4, %xmm0
35416 ; SSE41-NEXT:    pand %xmm1, %xmm0
35417 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
35418 ; SSE41-NEXT:    paddb %xmm4, %xmm3
35419 ; SSE41-NEXT:    pxor %xmm0, %xmm0
35420 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
35421 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35422 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35423 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35424 ; SSE41-NEXT:    retq
35426 ; AVX1-LABEL: ugt_60_v2i64:
35427 ; AVX1:       # %bb.0:
35428 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35429 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
35430 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35431 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35432 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
35433 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
35434 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35435 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35436 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35437 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35438 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35439 ; AVX1-NEXT:    retq
35441 ; AVX2-LABEL: ugt_60_v2i64:
35442 ; AVX2:       # %bb.0:
35443 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35444 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
35445 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35446 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35447 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
35448 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
35449 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35450 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35451 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35452 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35453 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35454 ; AVX2-NEXT:    retq
35456 ; AVX512VPOPCNTDQ-LABEL: ugt_60_v2i64:
35457 ; AVX512VPOPCNTDQ:       # %bb.0:
35458 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35459 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
35460 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35461 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
35462 ; AVX512VPOPCNTDQ-NEXT:    retq
35464 ; AVX512VPOPCNTDQVL-LABEL: ugt_60_v2i64:
35465 ; AVX512VPOPCNTDQVL:       # %bb.0:
35466 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
35467 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [60,60]
35468 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
35469 ; AVX512VPOPCNTDQVL-NEXT:    retq
35471 ; BITALG_NOVLX-LABEL: ugt_60_v2i64:
35472 ; BITALG_NOVLX:       # %bb.0:
35473 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35474 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
35475 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35476 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35477 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35478 ; BITALG_NOVLX-NEXT:    vzeroupper
35479 ; BITALG_NOVLX-NEXT:    retq
35481 ; BITALG-LABEL: ugt_60_v2i64:
35482 ; BITALG:       # %bb.0:
35483 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
35484 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35485 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35486 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [60,60]
35487 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
35488 ; BITALG-NEXT:    retq
35489   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
35490   %3 = icmp ugt <2 x i64> %2, <i64 60, i64 60>
35491   %4 = sext <2 x i1> %3 to <2 x i64>
35492   ret <2 x i64> %4
35495 define <2 x i64> @ult_61_v2i64(<2 x i64> %0) {
35496 ; SSE2-LABEL: ult_61_v2i64:
35497 ; SSE2:       # %bb.0:
35498 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35499 ; SSE2-NEXT:    psrlw $1, %xmm1
35500 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35501 ; SSE2-NEXT:    psubb %xmm1, %xmm0
35502 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35503 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
35504 ; SSE2-NEXT:    pand %xmm1, %xmm2
35505 ; SSE2-NEXT:    psrlw $2, %xmm0
35506 ; SSE2-NEXT:    pand %xmm1, %xmm0
35507 ; SSE2-NEXT:    paddb %xmm2, %xmm0
35508 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35509 ; SSE2-NEXT:    psrlw $4, %xmm1
35510 ; SSE2-NEXT:    paddb %xmm0, %xmm1
35511 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35512 ; SSE2-NEXT:    pxor %xmm0, %xmm0
35513 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
35514 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35515 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35516 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483709,2147483709,2147483709,2147483709]
35517 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
35518 ; SSE2-NEXT:    retq
35520 ; SSE3-LABEL: ult_61_v2i64:
35521 ; SSE3:       # %bb.0:
35522 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35523 ; SSE3-NEXT:    psrlw $1, %xmm1
35524 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35525 ; SSE3-NEXT:    psubb %xmm1, %xmm0
35526 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35527 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
35528 ; SSE3-NEXT:    pand %xmm1, %xmm2
35529 ; SSE3-NEXT:    psrlw $2, %xmm0
35530 ; SSE3-NEXT:    pand %xmm1, %xmm0
35531 ; SSE3-NEXT:    paddb %xmm2, %xmm0
35532 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35533 ; SSE3-NEXT:    psrlw $4, %xmm1
35534 ; SSE3-NEXT:    paddb %xmm0, %xmm1
35535 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35536 ; SSE3-NEXT:    pxor %xmm0, %xmm0
35537 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
35538 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35539 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35540 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483709,2147483709,2147483709,2147483709]
35541 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
35542 ; SSE3-NEXT:    retq
35544 ; SSSE3-LABEL: ult_61_v2i64:
35545 ; SSSE3:       # %bb.0:
35546 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35547 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
35548 ; SSSE3-NEXT:    pand %xmm1, %xmm2
35549 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35550 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
35551 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
35552 ; SSSE3-NEXT:    psrlw $4, %xmm0
35553 ; SSSE3-NEXT:    pand %xmm1, %xmm0
35554 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
35555 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
35556 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
35557 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
35558 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35559 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35560 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483709,2147483709,2147483709,2147483709]
35561 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
35562 ; SSSE3-NEXT:    retq
35564 ; SSE41-LABEL: ult_61_v2i64:
35565 ; SSE41:       # %bb.0:
35566 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35567 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
35568 ; SSE41-NEXT:    pand %xmm1, %xmm2
35569 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35570 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
35571 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
35572 ; SSE41-NEXT:    psrlw $4, %xmm0
35573 ; SSE41-NEXT:    pand %xmm1, %xmm0
35574 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
35575 ; SSE41-NEXT:    paddb %xmm4, %xmm3
35576 ; SSE41-NEXT:    pxor %xmm0, %xmm0
35577 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
35578 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35579 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35580 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483709,2147483709,2147483709,2147483709]
35581 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
35582 ; SSE41-NEXT:    retq
35584 ; AVX1-LABEL: ult_61_v2i64:
35585 ; AVX1:       # %bb.0:
35586 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35587 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
35588 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35589 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35590 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
35591 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
35592 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35593 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35594 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35595 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35596 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [61,61]
35597 ; AVX1-NEXT:    # xmm1 = mem[0,0]
35598 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35599 ; AVX1-NEXT:    retq
35601 ; AVX2-LABEL: ult_61_v2i64:
35602 ; AVX2:       # %bb.0:
35603 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35604 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
35605 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35606 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35607 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
35608 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
35609 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35610 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35611 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35612 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35613 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [61,61]
35614 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35615 ; AVX2-NEXT:    retq
35617 ; AVX512VPOPCNTDQ-LABEL: ult_61_v2i64:
35618 ; AVX512VPOPCNTDQ:       # %bb.0:
35619 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35620 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
35621 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [61,61]
35622 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35623 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
35624 ; AVX512VPOPCNTDQ-NEXT:    retq
35626 ; AVX512VPOPCNTDQVL-LABEL: ult_61_v2i64:
35627 ; AVX512VPOPCNTDQVL:       # %bb.0:
35628 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
35629 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [61,61]
35630 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35631 ; AVX512VPOPCNTDQVL-NEXT:    retq
35633 ; BITALG_NOVLX-LABEL: ult_61_v2i64:
35634 ; BITALG_NOVLX:       # %bb.0:
35635 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35636 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
35637 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35638 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35639 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [61,61]
35640 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35641 ; BITALG_NOVLX-NEXT:    vzeroupper
35642 ; BITALG_NOVLX-NEXT:    retq
35644 ; BITALG-LABEL: ult_61_v2i64:
35645 ; BITALG:       # %bb.0:
35646 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
35647 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35648 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35649 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [61,61]
35650 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35651 ; BITALG-NEXT:    retq
35652   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
35653   %3 = icmp ult <2 x i64> %2, <i64 61, i64 61>
35654   %4 = sext <2 x i1> %3 to <2 x i64>
35655   ret <2 x i64> %4
35658 define <2 x i64> @ugt_61_v2i64(<2 x i64> %0) {
35659 ; SSE2-LABEL: ugt_61_v2i64:
35660 ; SSE2:       # %bb.0:
35661 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35662 ; SSE2-NEXT:    psrlw $1, %xmm1
35663 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35664 ; SSE2-NEXT:    psubb %xmm1, %xmm0
35665 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35666 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
35667 ; SSE2-NEXT:    pand %xmm1, %xmm2
35668 ; SSE2-NEXT:    psrlw $2, %xmm0
35669 ; SSE2-NEXT:    pand %xmm1, %xmm0
35670 ; SSE2-NEXT:    paddb %xmm2, %xmm0
35671 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35672 ; SSE2-NEXT:    psrlw $4, %xmm1
35673 ; SSE2-NEXT:    paddb %xmm0, %xmm1
35674 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35675 ; SSE2-NEXT:    pxor %xmm0, %xmm0
35676 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
35677 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35678 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35679 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35680 ; SSE2-NEXT:    retq
35682 ; SSE3-LABEL: ugt_61_v2i64:
35683 ; SSE3:       # %bb.0:
35684 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35685 ; SSE3-NEXT:    psrlw $1, %xmm1
35686 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35687 ; SSE3-NEXT:    psubb %xmm1, %xmm0
35688 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35689 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
35690 ; SSE3-NEXT:    pand %xmm1, %xmm2
35691 ; SSE3-NEXT:    psrlw $2, %xmm0
35692 ; SSE3-NEXT:    pand %xmm1, %xmm0
35693 ; SSE3-NEXT:    paddb %xmm2, %xmm0
35694 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35695 ; SSE3-NEXT:    psrlw $4, %xmm1
35696 ; SSE3-NEXT:    paddb %xmm0, %xmm1
35697 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35698 ; SSE3-NEXT:    pxor %xmm0, %xmm0
35699 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
35700 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35701 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35702 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35703 ; SSE3-NEXT:    retq
35705 ; SSSE3-LABEL: ugt_61_v2i64:
35706 ; SSSE3:       # %bb.0:
35707 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35708 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
35709 ; SSSE3-NEXT:    pand %xmm1, %xmm2
35710 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35711 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
35712 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
35713 ; SSSE3-NEXT:    psrlw $4, %xmm0
35714 ; SSSE3-NEXT:    pand %xmm1, %xmm0
35715 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
35716 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
35717 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
35718 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
35719 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35720 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35721 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35722 ; SSSE3-NEXT:    retq
35724 ; SSE41-LABEL: ugt_61_v2i64:
35725 ; SSE41:       # %bb.0:
35726 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35727 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
35728 ; SSE41-NEXT:    pand %xmm1, %xmm2
35729 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35730 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
35731 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
35732 ; SSE41-NEXT:    psrlw $4, %xmm0
35733 ; SSE41-NEXT:    pand %xmm1, %xmm0
35734 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
35735 ; SSE41-NEXT:    paddb %xmm4, %xmm3
35736 ; SSE41-NEXT:    pxor %xmm0, %xmm0
35737 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
35738 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35739 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35740 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35741 ; SSE41-NEXT:    retq
35743 ; AVX1-LABEL: ugt_61_v2i64:
35744 ; AVX1:       # %bb.0:
35745 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35746 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
35747 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35748 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35749 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
35750 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
35751 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35752 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35753 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35754 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35755 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35756 ; AVX1-NEXT:    retq
35758 ; AVX2-LABEL: ugt_61_v2i64:
35759 ; AVX2:       # %bb.0:
35760 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35761 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
35762 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35763 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35764 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
35765 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
35766 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35767 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35768 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35769 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35770 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35771 ; AVX2-NEXT:    retq
35773 ; AVX512VPOPCNTDQ-LABEL: ugt_61_v2i64:
35774 ; AVX512VPOPCNTDQ:       # %bb.0:
35775 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35776 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
35777 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35778 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
35779 ; AVX512VPOPCNTDQ-NEXT:    retq
35781 ; AVX512VPOPCNTDQVL-LABEL: ugt_61_v2i64:
35782 ; AVX512VPOPCNTDQVL:       # %bb.0:
35783 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
35784 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [61,61]
35785 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
35786 ; AVX512VPOPCNTDQVL-NEXT:    retq
35788 ; BITALG_NOVLX-LABEL: ugt_61_v2i64:
35789 ; BITALG_NOVLX:       # %bb.0:
35790 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35791 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
35792 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35793 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35794 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
35795 ; BITALG_NOVLX-NEXT:    vzeroupper
35796 ; BITALG_NOVLX-NEXT:    retq
35798 ; BITALG-LABEL: ugt_61_v2i64:
35799 ; BITALG:       # %bb.0:
35800 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
35801 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35802 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35803 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [61,61]
35804 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
35805 ; BITALG-NEXT:    retq
35806   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
35807   %3 = icmp ugt <2 x i64> %2, <i64 61, i64 61>
35808   %4 = sext <2 x i1> %3 to <2 x i64>
35809   ret <2 x i64> %4
35812 define <2 x i64> @ult_62_v2i64(<2 x i64> %0) {
35813 ; SSE2-LABEL: ult_62_v2i64:
35814 ; SSE2:       # %bb.0:
35815 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35816 ; SSE2-NEXT:    psrlw $1, %xmm1
35817 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35818 ; SSE2-NEXT:    psubb %xmm1, %xmm0
35819 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35820 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
35821 ; SSE2-NEXT:    pand %xmm1, %xmm2
35822 ; SSE2-NEXT:    psrlw $2, %xmm0
35823 ; SSE2-NEXT:    pand %xmm1, %xmm0
35824 ; SSE2-NEXT:    paddb %xmm2, %xmm0
35825 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35826 ; SSE2-NEXT:    psrlw $4, %xmm1
35827 ; SSE2-NEXT:    paddb %xmm0, %xmm1
35828 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35829 ; SSE2-NEXT:    pxor %xmm0, %xmm0
35830 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
35831 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35832 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35833 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483710,2147483710,2147483710,2147483710]
35834 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
35835 ; SSE2-NEXT:    retq
35837 ; SSE3-LABEL: ult_62_v2i64:
35838 ; SSE3:       # %bb.0:
35839 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35840 ; SSE3-NEXT:    psrlw $1, %xmm1
35841 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35842 ; SSE3-NEXT:    psubb %xmm1, %xmm0
35843 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35844 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
35845 ; SSE3-NEXT:    pand %xmm1, %xmm2
35846 ; SSE3-NEXT:    psrlw $2, %xmm0
35847 ; SSE3-NEXT:    pand %xmm1, %xmm0
35848 ; SSE3-NEXT:    paddb %xmm2, %xmm0
35849 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
35850 ; SSE3-NEXT:    psrlw $4, %xmm1
35851 ; SSE3-NEXT:    paddb %xmm0, %xmm1
35852 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35853 ; SSE3-NEXT:    pxor %xmm0, %xmm0
35854 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
35855 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35856 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35857 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483710,2147483710,2147483710,2147483710]
35858 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
35859 ; SSE3-NEXT:    retq
35861 ; SSSE3-LABEL: ult_62_v2i64:
35862 ; SSSE3:       # %bb.0:
35863 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35864 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
35865 ; SSSE3-NEXT:    pand %xmm1, %xmm2
35866 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35867 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
35868 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
35869 ; SSSE3-NEXT:    psrlw $4, %xmm0
35870 ; SSSE3-NEXT:    pand %xmm1, %xmm0
35871 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
35872 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
35873 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
35874 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
35875 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35876 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35877 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483710,2147483710,2147483710,2147483710]
35878 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
35879 ; SSSE3-NEXT:    retq
35881 ; SSE41-LABEL: ult_62_v2i64:
35882 ; SSE41:       # %bb.0:
35883 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35884 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
35885 ; SSE41-NEXT:    pand %xmm1, %xmm2
35886 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35887 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
35888 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
35889 ; SSE41-NEXT:    psrlw $4, %xmm0
35890 ; SSE41-NEXT:    pand %xmm1, %xmm0
35891 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
35892 ; SSE41-NEXT:    paddb %xmm4, %xmm3
35893 ; SSE41-NEXT:    pxor %xmm0, %xmm0
35894 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
35895 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
35896 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35897 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483710,2147483710,2147483710,2147483710]
35898 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
35899 ; SSE41-NEXT:    retq
35901 ; AVX1-LABEL: ult_62_v2i64:
35902 ; AVX1:       # %bb.0:
35903 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35904 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
35905 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35906 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35907 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
35908 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
35909 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35910 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35911 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35912 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35913 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [62,62]
35914 ; AVX1-NEXT:    # xmm1 = mem[0,0]
35915 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35916 ; AVX1-NEXT:    retq
35918 ; AVX2-LABEL: ult_62_v2i64:
35919 ; AVX2:       # %bb.0:
35920 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
35921 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
35922 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
35923 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
35924 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
35925 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
35926 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
35927 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
35928 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35929 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35930 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [62,62]
35931 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35932 ; AVX2-NEXT:    retq
35934 ; AVX512VPOPCNTDQ-LABEL: ult_62_v2i64:
35935 ; AVX512VPOPCNTDQ:       # %bb.0:
35936 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35937 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
35938 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [62,62]
35939 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35940 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
35941 ; AVX512VPOPCNTDQ-NEXT:    retq
35943 ; AVX512VPOPCNTDQVL-LABEL: ult_62_v2i64:
35944 ; AVX512VPOPCNTDQVL:       # %bb.0:
35945 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
35946 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [62,62]
35947 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35948 ; AVX512VPOPCNTDQVL-NEXT:    retq
35950 ; BITALG_NOVLX-LABEL: ult_62_v2i64:
35951 ; BITALG_NOVLX:       # %bb.0:
35952 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
35953 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
35954 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35955 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35956 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [62,62]
35957 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35958 ; BITALG_NOVLX-NEXT:    vzeroupper
35959 ; BITALG_NOVLX-NEXT:    retq
35961 ; BITALG-LABEL: ult_62_v2i64:
35962 ; BITALG:       # %bb.0:
35963 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
35964 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
35965 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
35966 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [62,62]
35967 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
35968 ; BITALG-NEXT:    retq
35969   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
35970   %3 = icmp ult <2 x i64> %2, <i64 62, i64 62>
35971   %4 = sext <2 x i1> %3 to <2 x i64>
35972   ret <2 x i64> %4
35975 define <2 x i64> @ugt_62_v2i64(<2 x i64> %0) {
35976 ; SSE2-LABEL: ugt_62_v2i64:
35977 ; SSE2:       # %bb.0:
35978 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35979 ; SSE2-NEXT:    psrlw $1, %xmm1
35980 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35981 ; SSE2-NEXT:    psubb %xmm1, %xmm0
35982 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
35983 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
35984 ; SSE2-NEXT:    pand %xmm1, %xmm2
35985 ; SSE2-NEXT:    psrlw $2, %xmm0
35986 ; SSE2-NEXT:    pand %xmm1, %xmm0
35987 ; SSE2-NEXT:    paddb %xmm2, %xmm0
35988 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
35989 ; SSE2-NEXT:    psrlw $4, %xmm1
35990 ; SSE2-NEXT:    paddb %xmm0, %xmm1
35991 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
35992 ; SSE2-NEXT:    pxor %xmm0, %xmm0
35993 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
35994 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
35995 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35996 ; SSE2-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
35997 ; SSE2-NEXT:    retq
35999 ; SSE3-LABEL: ugt_62_v2i64:
36000 ; SSE3:       # %bb.0:
36001 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
36002 ; SSE3-NEXT:    psrlw $1, %xmm1
36003 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36004 ; SSE3-NEXT:    psubb %xmm1, %xmm0
36005 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
36006 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
36007 ; SSE3-NEXT:    pand %xmm1, %xmm2
36008 ; SSE3-NEXT:    psrlw $2, %xmm0
36009 ; SSE3-NEXT:    pand %xmm1, %xmm0
36010 ; SSE3-NEXT:    paddb %xmm2, %xmm0
36011 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
36012 ; SSE3-NEXT:    psrlw $4, %xmm1
36013 ; SSE3-NEXT:    paddb %xmm0, %xmm1
36014 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36015 ; SSE3-NEXT:    pxor %xmm0, %xmm0
36016 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
36017 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
36018 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
36019 ; SSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
36020 ; SSE3-NEXT:    retq
36022 ; SSSE3-LABEL: ugt_62_v2i64:
36023 ; SSSE3:       # %bb.0:
36024 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
36025 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
36026 ; SSSE3-NEXT:    pand %xmm1, %xmm2
36027 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
36028 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
36029 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
36030 ; SSSE3-NEXT:    psrlw $4, %xmm0
36031 ; SSSE3-NEXT:    pand %xmm1, %xmm0
36032 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
36033 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
36034 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
36035 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
36036 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
36037 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
36038 ; SSSE3-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
36039 ; SSSE3-NEXT:    retq
36041 ; SSE41-LABEL: ugt_62_v2i64:
36042 ; SSE41:       # %bb.0:
36043 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
36044 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
36045 ; SSE41-NEXT:    pand %xmm1, %xmm2
36046 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
36047 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
36048 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
36049 ; SSE41-NEXT:    psrlw $4, %xmm0
36050 ; SSE41-NEXT:    pand %xmm1, %xmm0
36051 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
36052 ; SSE41-NEXT:    paddb %xmm4, %xmm3
36053 ; SSE41-NEXT:    pxor %xmm0, %xmm0
36054 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
36055 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,0,2,2]
36056 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
36057 ; SSE41-NEXT:    pcmpgtd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
36058 ; SSE41-NEXT:    retq
36060 ; AVX1-LABEL: ugt_62_v2i64:
36061 ; AVX1:       # %bb.0:
36062 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
36063 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
36064 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
36065 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
36066 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
36067 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
36068 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
36069 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
36070 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36071 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
36072 ; AVX1-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
36073 ; AVX1-NEXT:    retq
36075 ; AVX2-LABEL: ugt_62_v2i64:
36076 ; AVX2:       # %bb.0:
36077 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
36078 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
36079 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
36080 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
36081 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
36082 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
36083 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
36084 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
36085 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36086 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
36087 ; AVX2-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
36088 ; AVX2-NEXT:    retq
36090 ; AVX512VPOPCNTDQ-LABEL: ugt_62_v2i64:
36091 ; AVX512VPOPCNTDQ:       # %bb.0:
36092 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
36093 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
36094 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
36095 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
36096 ; AVX512VPOPCNTDQ-NEXT:    retq
36098 ; AVX512VPOPCNTDQVL-LABEL: ugt_62_v2i64:
36099 ; AVX512VPOPCNTDQVL:       # %bb.0:
36100 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
36101 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [62,62]
36102 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
36103 ; AVX512VPOPCNTDQVL-NEXT:    retq
36105 ; BITALG_NOVLX-LABEL: ugt_62_v2i64:
36106 ; BITALG_NOVLX:       # %bb.0:
36107 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
36108 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
36109 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36110 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
36111 ; BITALG_NOVLX-NEXT:    vpcmpgtq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
36112 ; BITALG_NOVLX-NEXT:    vzeroupper
36113 ; BITALG_NOVLX-NEXT:    retq
36115 ; BITALG-LABEL: ugt_62_v2i64:
36116 ; BITALG:       # %bb.0:
36117 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
36118 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36119 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
36120 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [62,62]
36121 ; BITALG-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
36122 ; BITALG-NEXT:    retq
36123   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
36124   %3 = icmp ugt <2 x i64> %2, <i64 62, i64 62>
36125   %4 = sext <2 x i1> %3 to <2 x i64>
36126   ret <2 x i64> %4
36129 define <2 x i64> @ult_63_v2i64(<2 x i64> %0) {
36130 ; SSE2-LABEL: ult_63_v2i64:
36131 ; SSE2:       # %bb.0:
36132 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
36133 ; SSE2-NEXT:    psrlw $1, %xmm1
36134 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36135 ; SSE2-NEXT:    psubb %xmm1, %xmm0
36136 ; SSE2-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
36137 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
36138 ; SSE2-NEXT:    pand %xmm1, %xmm2
36139 ; SSE2-NEXT:    psrlw $2, %xmm0
36140 ; SSE2-NEXT:    pand %xmm1, %xmm0
36141 ; SSE2-NEXT:    paddb %xmm2, %xmm0
36142 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
36143 ; SSE2-NEXT:    psrlw $4, %xmm1
36144 ; SSE2-NEXT:    paddb %xmm0, %xmm1
36145 ; SSE2-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36146 ; SSE2-NEXT:    pxor %xmm0, %xmm0
36147 ; SSE2-NEXT:    psadbw %xmm1, %xmm0
36148 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
36149 ; SSE2-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36150 ; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483711,2147483711,2147483711,2147483711]
36151 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
36152 ; SSE2-NEXT:    retq
36154 ; SSE3-LABEL: ult_63_v2i64:
36155 ; SSE3:       # %bb.0:
36156 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
36157 ; SSE3-NEXT:    psrlw $1, %xmm1
36158 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36159 ; SSE3-NEXT:    psubb %xmm1, %xmm0
36160 ; SSE3-NEXT:    movdqa {{.*#+}} xmm1 = [51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51]
36161 ; SSE3-NEXT:    movdqa %xmm0, %xmm2
36162 ; SSE3-NEXT:    pand %xmm1, %xmm2
36163 ; SSE3-NEXT:    psrlw $2, %xmm0
36164 ; SSE3-NEXT:    pand %xmm1, %xmm0
36165 ; SSE3-NEXT:    paddb %xmm2, %xmm0
36166 ; SSE3-NEXT:    movdqa %xmm0, %xmm1
36167 ; SSE3-NEXT:    psrlw $4, %xmm1
36168 ; SSE3-NEXT:    paddb %xmm0, %xmm1
36169 ; SSE3-NEXT:    pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36170 ; SSE3-NEXT:    pxor %xmm0, %xmm0
36171 ; SSE3-NEXT:    psadbw %xmm1, %xmm0
36172 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
36173 ; SSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36174 ; SSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483711,2147483711,2147483711,2147483711]
36175 ; SSE3-NEXT:    pcmpgtd %xmm1, %xmm0
36176 ; SSE3-NEXT:    retq
36178 ; SSSE3-LABEL: ult_63_v2i64:
36179 ; SSSE3:       # %bb.0:
36180 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
36181 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
36182 ; SSSE3-NEXT:    pand %xmm1, %xmm2
36183 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
36184 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
36185 ; SSSE3-NEXT:    pshufb %xmm2, %xmm4
36186 ; SSSE3-NEXT:    psrlw $4, %xmm0
36187 ; SSSE3-NEXT:    pand %xmm1, %xmm0
36188 ; SSSE3-NEXT:    pshufb %xmm0, %xmm3
36189 ; SSSE3-NEXT:    paddb %xmm4, %xmm3
36190 ; SSSE3-NEXT:    pxor %xmm0, %xmm0
36191 ; SSSE3-NEXT:    psadbw %xmm3, %xmm0
36192 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
36193 ; SSSE3-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36194 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm0 = [2147483711,2147483711,2147483711,2147483711]
36195 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
36196 ; SSSE3-NEXT:    retq
36198 ; SSE41-LABEL: ult_63_v2i64:
36199 ; SSE41:       # %bb.0:
36200 ; SSE41-NEXT:    movdqa {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
36201 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
36202 ; SSE41-NEXT:    pand %xmm1, %xmm2
36203 ; SSE41-NEXT:    movdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
36204 ; SSE41-NEXT:    movdqa %xmm3, %xmm4
36205 ; SSE41-NEXT:    pshufb %xmm2, %xmm4
36206 ; SSE41-NEXT:    psrlw $4, %xmm0
36207 ; SSE41-NEXT:    pand %xmm1, %xmm0
36208 ; SSE41-NEXT:    pshufb %xmm0, %xmm3
36209 ; SSE41-NEXT:    paddb %xmm4, %xmm3
36210 ; SSE41-NEXT:    pxor %xmm0, %xmm0
36211 ; SSE41-NEXT:    psadbw %xmm3, %xmm0
36212 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[0,0,2,2]
36213 ; SSE41-NEXT:    por {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
36214 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483711,2147483711,2147483711,2147483711]
36215 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm0
36216 ; SSE41-NEXT:    retq
36218 ; AVX1-LABEL: ult_63_v2i64:
36219 ; AVX1:       # %bb.0:
36220 ; AVX1-NEXT:    vbroadcastss {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
36221 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm2
36222 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
36223 ; AVX1-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
36224 ; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
36225 ; AVX1-NEXT:    vpand %xmm1, %xmm0, %xmm0
36226 ; AVX1-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
36227 ; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
36228 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36229 ; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
36230 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm1 = [63,63]
36231 ; AVX1-NEXT:    # xmm1 = mem[0,0]
36232 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
36233 ; AVX1-NEXT:    retq
36235 ; AVX2-LABEL: ult_63_v2i64:
36236 ; AVX2:       # %bb.0:
36237 ; AVX2-NEXT:    vpbroadcastb {{.*#+}} xmm1 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
36238 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm2
36239 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
36240 ; AVX2-NEXT:    vpshufb %xmm2, %xmm3, %xmm2
36241 ; AVX2-NEXT:    vpsrlw $4, %xmm0, %xmm0
36242 ; AVX2-NEXT:    vpand %xmm1, %xmm0, %xmm0
36243 ; AVX2-NEXT:    vpshufb %xmm0, %xmm3, %xmm0
36244 ; AVX2-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
36245 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36246 ; AVX2-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
36247 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [63,63]
36248 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
36249 ; AVX2-NEXT:    retq
36251 ; AVX512VPOPCNTDQ-LABEL: ult_63_v2i64:
36252 ; AVX512VPOPCNTDQ:       # %bb.0:
36253 ; AVX512VPOPCNTDQ-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
36254 ; AVX512VPOPCNTDQ-NEXT:    vpopcntq %zmm0, %zmm0
36255 ; AVX512VPOPCNTDQ-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [63,63]
36256 ; AVX512VPOPCNTDQ-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
36257 ; AVX512VPOPCNTDQ-NEXT:    vzeroupper
36258 ; AVX512VPOPCNTDQ-NEXT:    retq
36260 ; AVX512VPOPCNTDQVL-LABEL: ult_63_v2i64:
36261 ; AVX512VPOPCNTDQVL:       # %bb.0:
36262 ; AVX512VPOPCNTDQVL-NEXT:    vpopcntq %xmm0, %xmm0
36263 ; AVX512VPOPCNTDQVL-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [63,63]
36264 ; AVX512VPOPCNTDQVL-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
36265 ; AVX512VPOPCNTDQVL-NEXT:    retq
36267 ; BITALG_NOVLX-LABEL: ult_63_v2i64:
36268 ; BITALG_NOVLX:       # %bb.0:
36269 ; BITALG_NOVLX-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
36270 ; BITALG_NOVLX-NEXT:    vpopcntb %zmm0, %zmm0
36271 ; BITALG_NOVLX-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36272 ; BITALG_NOVLX-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
36273 ; BITALG_NOVLX-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [63,63]
36274 ; BITALG_NOVLX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
36275 ; BITALG_NOVLX-NEXT:    vzeroupper
36276 ; BITALG_NOVLX-NEXT:    retq
36278 ; BITALG-LABEL: ult_63_v2i64:
36279 ; BITALG:       # %bb.0:
36280 ; BITALG-NEXT:    vpopcntb %xmm0, %xmm0
36281 ; BITALG-NEXT:    vpxor %xmm1, %xmm1, %xmm1
36282 ; BITALG-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
36283 ; BITALG-NEXT:    vpbroadcastq {{.*#+}} xmm1 = [63,63]
36284 ; BITALG-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
36285 ; BITALG-NEXT:    retq
36286   %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
36287   %3 = icmp ult <2 x i64> %2, <i64 63, i64 63>
36288   %4 = sext <2 x i1> %3 to <2 x i64>
36289   ret <2 x i64> %4
36292 declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)
36293 declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)
36294 declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)
36295 declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)