Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / X86 / vec_cmp_uint-128.ll
blob9a0756edbce321b3feb75aff86c1f5e201a668c1
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE41
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE42
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+xop | FileCheck %s --check-prefix=XOP
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+xop | FileCheck %s --check-prefix=XOP
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX,AVX512
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefixes=AVX,AVX512
13 ; Equal
16 define <2 x i64> @eq_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
17 ; SSE2-LABEL: eq_v2i64:
18 ; SSE2:       # %bb.0:
19 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
20 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
21 ; SSE2-NEXT:    pand %xmm1, %xmm0
22 ; SSE2-NEXT:    retq
24 ; SSE41-LABEL: eq_v2i64:
25 ; SSE41:       # %bb.0:
26 ; SSE41-NEXT:    pcmpeqq %xmm1, %xmm0
27 ; SSE41-NEXT:    retq
29 ; SSE42-LABEL: eq_v2i64:
30 ; SSE42:       # %bb.0:
31 ; SSE42-NEXT:    pcmpeqq %xmm1, %xmm0
32 ; SSE42-NEXT:    retq
34 ; AVX-LABEL: eq_v2i64:
35 ; AVX:       # %bb.0:
36 ; AVX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
37 ; AVX-NEXT:    retq
39 ; XOP-LABEL: eq_v2i64:
40 ; XOP:       # %bb.0:
41 ; XOP-NEXT:    vpcomeqq %xmm1, %xmm0, %xmm0
42 ; XOP-NEXT:    retq
43   %1 = icmp eq <2 x i64> %a, %b
44   %2 = sext <2 x i1> %1 to <2 x i64>
45   ret <2 x i64> %2
48 define <4 x i32> @eq_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
49 ; SSE-LABEL: eq_v4i32:
50 ; SSE:       # %bb.0:
51 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm0
52 ; SSE-NEXT:    retq
54 ; AVX-LABEL: eq_v4i32:
55 ; AVX:       # %bb.0:
56 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
57 ; AVX-NEXT:    retq
59 ; XOP-LABEL: eq_v4i32:
60 ; XOP:       # %bb.0:
61 ; XOP-NEXT:    vpcomeqd %xmm1, %xmm0, %xmm0
62 ; XOP-NEXT:    retq
63   %1 = icmp eq <4 x i32> %a, %b
64   %2 = sext <4 x i1> %1 to <4 x i32>
65   ret <4 x i32> %2
68 define <8 x i16> @eq_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
69 ; SSE-LABEL: eq_v8i16:
70 ; SSE:       # %bb.0:
71 ; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
72 ; SSE-NEXT:    retq
74 ; AVX-LABEL: eq_v8i16:
75 ; AVX:       # %bb.0:
76 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
77 ; AVX-NEXT:    retq
79 ; XOP-LABEL: eq_v8i16:
80 ; XOP:       # %bb.0:
81 ; XOP-NEXT:    vpcomeqw %xmm1, %xmm0, %xmm0
82 ; XOP-NEXT:    retq
83   %1 = icmp eq <8 x i16> %a, %b
84   %2 = sext <8 x i1> %1 to <8 x i16>
85   ret <8 x i16> %2
88 define <16 x i8> @eq_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
89 ; SSE-LABEL: eq_v16i8:
90 ; SSE:       # %bb.0:
91 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
92 ; SSE-NEXT:    retq
94 ; AVX-LABEL: eq_v16i8:
95 ; AVX:       # %bb.0:
96 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
97 ; AVX-NEXT:    retq
99 ; XOP-LABEL: eq_v16i8:
100 ; XOP:       # %bb.0:
101 ; XOP-NEXT:    vpcomeqb %xmm1, %xmm0, %xmm0
102 ; XOP-NEXT:    retq
103   %1 = icmp eq <16 x i8> %a, %b
104   %2 = sext <16 x i1> %1 to <16 x i8>
105   ret <16 x i8> %2
109 ; Not Equal
112 define <2 x i64> @ne_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
113 ; SSE2-LABEL: ne_v2i64:
114 ; SSE2:       # %bb.0:
115 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
116 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
117 ; SSE2-NEXT:    pand %xmm1, %xmm0
118 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
119 ; SSE2-NEXT:    pxor %xmm1, %xmm0
120 ; SSE2-NEXT:    retq
122 ; SSE41-LABEL: ne_v2i64:
123 ; SSE41:       # %bb.0:
124 ; SSE41-NEXT:    pcmpeqq %xmm1, %xmm0
125 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
126 ; SSE41-NEXT:    pxor %xmm1, %xmm0
127 ; SSE41-NEXT:    retq
129 ; SSE42-LABEL: ne_v2i64:
130 ; SSE42:       # %bb.0:
131 ; SSE42-NEXT:    pcmpeqq %xmm1, %xmm0
132 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
133 ; SSE42-NEXT:    pxor %xmm1, %xmm0
134 ; SSE42-NEXT:    retq
136 ; AVX1-LABEL: ne_v2i64:
137 ; AVX1:       # %bb.0:
138 ; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
139 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
140 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
141 ; AVX1-NEXT:    retq
143 ; AVX2-LABEL: ne_v2i64:
144 ; AVX2:       # %bb.0:
145 ; AVX2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
146 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
147 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
148 ; AVX2-NEXT:    retq
150 ; XOP-LABEL: ne_v2i64:
151 ; XOP:       # %bb.0:
152 ; XOP-NEXT:    vpcomneqq %xmm1, %xmm0, %xmm0
153 ; XOP-NEXT:    retq
155 ; AVX512-LABEL: ne_v2i64:
156 ; AVX512:       # %bb.0:
157 ; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
158 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
159 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
160 ; AVX512-NEXT:    vzeroupper
161 ; AVX512-NEXT:    retq
162   %1 = icmp ne <2 x i64> %a, %b
163   %2 = sext <2 x i1> %1 to <2 x i64>
164   ret <2 x i64> %2
167 define <4 x i32> @ne_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
168 ; SSE-LABEL: ne_v4i32:
169 ; SSE:       # %bb.0:
170 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm0
171 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
172 ; SSE-NEXT:    pxor %xmm1, %xmm0
173 ; SSE-NEXT:    retq
175 ; AVX1-LABEL: ne_v4i32:
176 ; AVX1:       # %bb.0:
177 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
178 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
179 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
180 ; AVX1-NEXT:    retq
182 ; AVX2-LABEL: ne_v4i32:
183 ; AVX2:       # %bb.0:
184 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
185 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
186 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
187 ; AVX2-NEXT:    retq
189 ; XOP-LABEL: ne_v4i32:
190 ; XOP:       # %bb.0:
191 ; XOP-NEXT:    vpcomneqd %xmm1, %xmm0, %xmm0
192 ; XOP-NEXT:    retq
194 ; AVX512-LABEL: ne_v4i32:
195 ; AVX512:       # %bb.0:
196 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
197 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
198 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
199 ; AVX512-NEXT:    vzeroupper
200 ; AVX512-NEXT:    retq
201   %1 = icmp ne <4 x i32> %a, %b
202   %2 = sext <4 x i1> %1 to <4 x i32>
203   ret <4 x i32> %2
206 define <8 x i16> @ne_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
207 ; SSE-LABEL: ne_v8i16:
208 ; SSE:       # %bb.0:
209 ; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
210 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
211 ; SSE-NEXT:    pxor %xmm1, %xmm0
212 ; SSE-NEXT:    retq
214 ; AVX1-LABEL: ne_v8i16:
215 ; AVX1:       # %bb.0:
216 ; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
217 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
218 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
219 ; AVX1-NEXT:    retq
221 ; AVX2-LABEL: ne_v8i16:
222 ; AVX2:       # %bb.0:
223 ; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
224 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
225 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
226 ; AVX2-NEXT:    retq
228 ; XOP-LABEL: ne_v8i16:
229 ; XOP:       # %bb.0:
230 ; XOP-NEXT:    vpcomneqw %xmm1, %xmm0, %xmm0
231 ; XOP-NEXT:    retq
233 ; AVX512-LABEL: ne_v8i16:
234 ; AVX512:       # %bb.0:
235 ; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
236 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
237 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
238 ; AVX512-NEXT:    vzeroupper
239 ; AVX512-NEXT:    retq
240   %1 = icmp ne <8 x i16> %a, %b
241   %2 = sext <8 x i1> %1 to <8 x i16>
242   ret <8 x i16> %2
245 define <16 x i8> @ne_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
246 ; SSE-LABEL: ne_v16i8:
247 ; SSE:       # %bb.0:
248 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
249 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
250 ; SSE-NEXT:    pxor %xmm1, %xmm0
251 ; SSE-NEXT:    retq
253 ; AVX1-LABEL: ne_v16i8:
254 ; AVX1:       # %bb.0:
255 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
256 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
257 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
258 ; AVX1-NEXT:    retq
260 ; AVX2-LABEL: ne_v16i8:
261 ; AVX2:       # %bb.0:
262 ; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
263 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
264 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
265 ; AVX2-NEXT:    retq
267 ; XOP-LABEL: ne_v16i8:
268 ; XOP:       # %bb.0:
269 ; XOP-NEXT:    vpcomneqb %xmm1, %xmm0, %xmm0
270 ; XOP-NEXT:    retq
272 ; AVX512-LABEL: ne_v16i8:
273 ; AVX512:       # %bb.0:
274 ; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
275 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
276 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
277 ; AVX512-NEXT:    vzeroupper
278 ; AVX512-NEXT:    retq
279   %1 = icmp ne <16 x i8> %a, %b
280   %2 = sext <16 x i1> %1 to <16 x i8>
281   ret <16 x i8> %2
285 ; Greater Than Or Equal
288 define <2 x i64> @ge_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
289 ; SSE2-LABEL: ge_v2i64:
290 ; SSE2:       # %bb.0:
291 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
292 ; SSE2-NEXT:    pxor %xmm2, %xmm0
293 ; SSE2-NEXT:    pxor %xmm2, %xmm1
294 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
295 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
296 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
297 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
298 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
299 ; SSE2-NEXT:    pand %xmm3, %xmm0
300 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
301 ; SSE2-NEXT:    por %xmm0, %xmm1
302 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
303 ; SSE2-NEXT:    pxor %xmm1, %xmm0
304 ; SSE2-NEXT:    retq
306 ; SSE41-LABEL: ge_v2i64:
307 ; SSE41:       # %bb.0:
308 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
309 ; SSE41-NEXT:    pxor %xmm2, %xmm0
310 ; SSE41-NEXT:    pxor %xmm2, %xmm1
311 ; SSE41-NEXT:    movdqa %xmm1, %xmm2
312 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
313 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
314 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
315 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
316 ; SSE41-NEXT:    pand %xmm3, %xmm0
317 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
318 ; SSE41-NEXT:    por %xmm0, %xmm1
319 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
320 ; SSE41-NEXT:    pxor %xmm1, %xmm0
321 ; SSE41-NEXT:    retq
323 ; SSE42-LABEL: ge_v2i64:
324 ; SSE42:       # %bb.0:
325 ; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
326 ; SSE42-NEXT:    pxor %xmm2, %xmm0
327 ; SSE42-NEXT:    pxor %xmm1, %xmm2
328 ; SSE42-NEXT:    pcmpgtq %xmm0, %xmm2
329 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0
330 ; SSE42-NEXT:    pxor %xmm2, %xmm0
331 ; SSE42-NEXT:    retq
333 ; AVX1-LABEL: ge_v2i64:
334 ; AVX1:       # %bb.0:
335 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
336 ; AVX1-NEXT:    # xmm2 = mem[0,0]
337 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
338 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
339 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
340 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
341 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
342 ; AVX1-NEXT:    retq
344 ; AVX2-LABEL: ge_v2i64:
345 ; AVX2:       # %bb.0:
346 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
347 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0
348 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
349 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
350 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
351 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
352 ; AVX2-NEXT:    retq
354 ; XOP-LABEL: ge_v2i64:
355 ; XOP:       # %bb.0:
356 ; XOP-NEXT:    vpcomgeuq %xmm1, %xmm0, %xmm0
357 ; XOP-NEXT:    retq
359 ; AVX512-LABEL: ge_v2i64:
360 ; AVX512:       # %bb.0:
361 ; AVX512-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
362 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
363 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm1
364 ; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
365 ; AVX512-NEXT:    vzeroupper
366 ; AVX512-NEXT:    retq
367   %1 = icmp uge <2 x i64> %a, %b
368   %2 = sext <2 x i1> %1 to <2 x i64>
369   ret <2 x i64> %2
372 define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
373 ; SSE2-LABEL: ge_v4i32:
374 ; SSE2:       # %bb.0:
375 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
376 ; SSE2-NEXT:    pxor %xmm2, %xmm0
377 ; SSE2-NEXT:    pxor %xmm1, %xmm2
378 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
379 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
380 ; SSE2-NEXT:    pxor %xmm2, %xmm0
381 ; SSE2-NEXT:    retq
383 ; SSE41-LABEL: ge_v4i32:
384 ; SSE41:       # %bb.0:
385 ; SSE41-NEXT:    pmaxud %xmm0, %xmm1
386 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
387 ; SSE41-NEXT:    retq
389 ; SSE42-LABEL: ge_v4i32:
390 ; SSE42:       # %bb.0:
391 ; SSE42-NEXT:    pmaxud %xmm0, %xmm1
392 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0
393 ; SSE42-NEXT:    retq
395 ; AVX-LABEL: ge_v4i32:
396 ; AVX:       # %bb.0:
397 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1
398 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
399 ; AVX-NEXT:    retq
401 ; XOP-LABEL: ge_v4i32:
402 ; XOP:       # %bb.0:
403 ; XOP-NEXT:    vpcomgeud %xmm1, %xmm0, %xmm0
404 ; XOP-NEXT:    retq
405   %1 = icmp uge <4 x i32> %a, %b
406   %2 = sext <4 x i1> %1 to <4 x i32>
407   ret <4 x i32> %2
410 define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
411 ; SSE2-LABEL: ge_v8i16:
412 ; SSE2:       # %bb.0:
413 ; SSE2-NEXT:    psubusw %xmm0, %xmm1
414 ; SSE2-NEXT:    pxor %xmm0, %xmm0
415 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm0
416 ; SSE2-NEXT:    retq
418 ; SSE41-LABEL: ge_v8i16:
419 ; SSE41:       # %bb.0:
420 ; SSE41-NEXT:    pmaxuw %xmm0, %xmm1
421 ; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0
422 ; SSE41-NEXT:    retq
424 ; SSE42-LABEL: ge_v8i16:
425 ; SSE42:       # %bb.0:
426 ; SSE42-NEXT:    pmaxuw %xmm0, %xmm1
427 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0
428 ; SSE42-NEXT:    retq
430 ; AVX-LABEL: ge_v8i16:
431 ; AVX:       # %bb.0:
432 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm1
433 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
434 ; AVX-NEXT:    retq
436 ; XOP-LABEL: ge_v8i16:
437 ; XOP:       # %bb.0:
438 ; XOP-NEXT:    vpcomgeuw %xmm1, %xmm0, %xmm0
439 ; XOP-NEXT:    retq
440   %1 = icmp uge <8 x i16> %a, %b
441   %2 = sext <8 x i1> %1 to <8 x i16>
442   ret <8 x i16> %2
445 define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
446 ; SSE-LABEL: ge_v16i8:
447 ; SSE:       # %bb.0:
448 ; SSE-NEXT:    pmaxub %xmm0, %xmm1
449 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
450 ; SSE-NEXT:    retq
452 ; AVX-LABEL: ge_v16i8:
453 ; AVX:       # %bb.0:
454 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm1
455 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
456 ; AVX-NEXT:    retq
458 ; XOP-LABEL: ge_v16i8:
459 ; XOP:       # %bb.0:
460 ; XOP-NEXT:    vpcomgeub %xmm1, %xmm0, %xmm0
461 ; XOP-NEXT:    retq
462   %1 = icmp uge <16 x i8> %a, %b
463   %2 = sext <16 x i1> %1 to <16 x i8>
464   ret <16 x i8> %2
468 ; Greater Than
471 define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
472 ; SSE2-LABEL: gt_v2i64:
473 ; SSE2:       # %bb.0:
474 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
475 ; SSE2-NEXT:    pxor %xmm2, %xmm1
476 ; SSE2-NEXT:    pxor %xmm2, %xmm0
477 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
478 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
479 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
480 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
481 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
482 ; SSE2-NEXT:    pand %xmm3, %xmm1
483 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
484 ; SSE2-NEXT:    por %xmm1, %xmm0
485 ; SSE2-NEXT:    retq
487 ; SSE41-LABEL: gt_v2i64:
488 ; SSE41:       # %bb.0:
489 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
490 ; SSE41-NEXT:    pxor %xmm2, %xmm1
491 ; SSE41-NEXT:    pxor %xmm2, %xmm0
492 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
493 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2
494 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
495 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
496 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
497 ; SSE41-NEXT:    pand %xmm3, %xmm1
498 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
499 ; SSE41-NEXT:    por %xmm1, %xmm0
500 ; SSE41-NEXT:    retq
502 ; SSE42-LABEL: gt_v2i64:
503 ; SSE42:       # %bb.0:
504 ; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
505 ; SSE42-NEXT:    pxor %xmm2, %xmm1
506 ; SSE42-NEXT:    pxor %xmm2, %xmm0
507 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
508 ; SSE42-NEXT:    retq
510 ; AVX1-LABEL: gt_v2i64:
511 ; AVX1:       # %bb.0:
512 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
513 ; AVX1-NEXT:    # xmm2 = mem[0,0]
514 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
515 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
516 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
517 ; AVX1-NEXT:    retq
519 ; AVX2-LABEL: gt_v2i64:
520 ; AVX2:       # %bb.0:
521 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
522 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
523 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0
524 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
525 ; AVX2-NEXT:    retq
527 ; XOP-LABEL: gt_v2i64:
528 ; XOP:       # %bb.0:
529 ; XOP-NEXT:    vpcomgtuq %xmm1, %xmm0, %xmm0
530 ; XOP-NEXT:    retq
532 ; AVX512-LABEL: gt_v2i64:
533 ; AVX512:       # %bb.0:
534 ; AVX512-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
535 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
536 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm1
537 ; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
538 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
539 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
540 ; AVX512-NEXT:    vzeroupper
541 ; AVX512-NEXT:    retq
542   %1 = icmp ugt <2 x i64> %a, %b
543   %2 = sext <2 x i1> %1 to <2 x i64>
544   ret <2 x i64> %2
547 define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
548 ; SSE2-LABEL: gt_v4i32:
549 ; SSE2:       # %bb.0:
550 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
551 ; SSE2-NEXT:    pxor %xmm2, %xmm1
552 ; SSE2-NEXT:    pxor %xmm2, %xmm0
553 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
554 ; SSE2-NEXT:    retq
556 ; SSE41-LABEL: gt_v4i32:
557 ; SSE41:       # %bb.0:
558 ; SSE41-NEXT:    pminud %xmm0, %xmm1
559 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
560 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
561 ; SSE41-NEXT:    pxor %xmm1, %xmm0
562 ; SSE41-NEXT:    retq
564 ; SSE42-LABEL: gt_v4i32:
565 ; SSE42:       # %bb.0:
566 ; SSE42-NEXT:    pminud %xmm0, %xmm1
567 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0
568 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
569 ; SSE42-NEXT:    pxor %xmm1, %xmm0
570 ; SSE42-NEXT:    retq
572 ; AVX1-LABEL: gt_v4i32:
573 ; AVX1:       # %bb.0:
574 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm1
575 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
576 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
577 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
578 ; AVX1-NEXT:    retq
580 ; AVX2-LABEL: gt_v4i32:
581 ; AVX2:       # %bb.0:
582 ; AVX2-NEXT:    vpminud %xmm1, %xmm0, %xmm1
583 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
584 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
585 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
586 ; AVX2-NEXT:    retq
588 ; XOP-LABEL: gt_v4i32:
589 ; XOP:       # %bb.0:
590 ; XOP-NEXT:    vpcomgtud %xmm1, %xmm0, %xmm0
591 ; XOP-NEXT:    retq
593 ; AVX512-LABEL: gt_v4i32:
594 ; AVX512:       # %bb.0:
595 ; AVX512-NEXT:    vpminud %xmm1, %xmm0, %xmm1
596 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
597 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
598 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
599 ; AVX512-NEXT:    vzeroupper
600 ; AVX512-NEXT:    retq
601   %1 = icmp ugt <4 x i32> %a, %b
602   %2 = sext <4 x i1> %1 to <4 x i32>
603   ret <4 x i32> %2
606 define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
607 ; SSE2-LABEL: gt_v8i16:
608 ; SSE2:       # %bb.0:
609 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
610 ; SSE2-NEXT:    pxor %xmm2, %xmm1
611 ; SSE2-NEXT:    pxor %xmm2, %xmm0
612 ; SSE2-NEXT:    pcmpgtw %xmm1, %xmm0
613 ; SSE2-NEXT:    retq
615 ; SSE41-LABEL: gt_v8i16:
616 ; SSE41:       # %bb.0:
617 ; SSE41-NEXT:    pminuw %xmm0, %xmm1
618 ; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0
619 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
620 ; SSE41-NEXT:    pxor %xmm1, %xmm0
621 ; SSE41-NEXT:    retq
623 ; SSE42-LABEL: gt_v8i16:
624 ; SSE42:       # %bb.0:
625 ; SSE42-NEXT:    pminuw %xmm0, %xmm1
626 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0
627 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
628 ; SSE42-NEXT:    pxor %xmm1, %xmm0
629 ; SSE42-NEXT:    retq
631 ; AVX1-LABEL: gt_v8i16:
632 ; AVX1:       # %bb.0:
633 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm1
634 ; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
635 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
636 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
637 ; AVX1-NEXT:    retq
639 ; AVX2-LABEL: gt_v8i16:
640 ; AVX2:       # %bb.0:
641 ; AVX2-NEXT:    vpminuw %xmm1, %xmm0, %xmm1
642 ; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
643 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
644 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
645 ; AVX2-NEXT:    retq
647 ; XOP-LABEL: gt_v8i16:
648 ; XOP:       # %bb.0:
649 ; XOP-NEXT:    vpcomgtuw %xmm1, %xmm0, %xmm0
650 ; XOP-NEXT:    retq
652 ; AVX512-LABEL: gt_v8i16:
653 ; AVX512:       # %bb.0:
654 ; AVX512-NEXT:    vpminuw %xmm1, %xmm0, %xmm1
655 ; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
656 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
657 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
658 ; AVX512-NEXT:    vzeroupper
659 ; AVX512-NEXT:    retq
660   %1 = icmp ugt <8 x i16> %a, %b
661   %2 = sext <8 x i1> %1 to <8 x i16>
662   ret <8 x i16> %2
665 define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
666 ; SSE-LABEL: gt_v16i8:
667 ; SSE:       # %bb.0:
668 ; SSE-NEXT:    pminub %xmm0, %xmm1
669 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
670 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
671 ; SSE-NEXT:    pxor %xmm1, %xmm0
672 ; SSE-NEXT:    retq
674 ; AVX1-LABEL: gt_v16i8:
675 ; AVX1:       # %bb.0:
676 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm1
677 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
678 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
679 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
680 ; AVX1-NEXT:    retq
682 ; AVX2-LABEL: gt_v16i8:
683 ; AVX2:       # %bb.0:
684 ; AVX2-NEXT:    vpminub %xmm1, %xmm0, %xmm1
685 ; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
686 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
687 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
688 ; AVX2-NEXT:    retq
690 ; XOP-LABEL: gt_v16i8:
691 ; XOP:       # %bb.0:
692 ; XOP-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm0
693 ; XOP-NEXT:    retq
695 ; AVX512-LABEL: gt_v16i8:
696 ; AVX512:       # %bb.0:
697 ; AVX512-NEXT:    vpminub %xmm1, %xmm0, %xmm1
698 ; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
699 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
700 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
701 ; AVX512-NEXT:    vzeroupper
702 ; AVX512-NEXT:    retq
703   %1 = icmp ugt <16 x i8> %a, %b
704   %2 = sext <16 x i1> %1 to <16 x i8>
705   ret <16 x i8> %2
709 ; Less Than Or Equal
712 define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
713 ; SSE2-LABEL: le_v2i64:
714 ; SSE2:       # %bb.0:
715 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
716 ; SSE2-NEXT:    pxor %xmm2, %xmm1
717 ; SSE2-NEXT:    pxor %xmm2, %xmm0
718 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
719 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
720 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
721 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
722 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
723 ; SSE2-NEXT:    pand %xmm3, %xmm0
724 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
725 ; SSE2-NEXT:    por %xmm0, %xmm1
726 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
727 ; SSE2-NEXT:    pxor %xmm1, %xmm0
728 ; SSE2-NEXT:    retq
730 ; SSE41-LABEL: le_v2i64:
731 ; SSE41:       # %bb.0:
732 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
733 ; SSE41-NEXT:    pxor %xmm2, %xmm1
734 ; SSE41-NEXT:    pxor %xmm2, %xmm0
735 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
736 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2
737 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
738 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
739 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
740 ; SSE41-NEXT:    pand %xmm3, %xmm0
741 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
742 ; SSE41-NEXT:    por %xmm0, %xmm1
743 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
744 ; SSE41-NEXT:    pxor %xmm1, %xmm0
745 ; SSE41-NEXT:    retq
747 ; SSE42-LABEL: le_v2i64:
748 ; SSE42:       # %bb.0:
749 ; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
750 ; SSE42-NEXT:    pxor %xmm2, %xmm1
751 ; SSE42-NEXT:    pxor %xmm2, %xmm0
752 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
753 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
754 ; SSE42-NEXT:    pxor %xmm1, %xmm0
755 ; SSE42-NEXT:    retq
757 ; AVX1-LABEL: le_v2i64:
758 ; AVX1:       # %bb.0:
759 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
760 ; AVX1-NEXT:    # xmm2 = mem[0,0]
761 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
762 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
763 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
764 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
765 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
766 ; AVX1-NEXT:    retq
768 ; AVX2-LABEL: le_v2i64:
769 ; AVX2:       # %bb.0:
770 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
771 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
772 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0
773 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
774 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
775 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
776 ; AVX2-NEXT:    retq
778 ; XOP-LABEL: le_v2i64:
779 ; XOP:       # %bb.0:
780 ; XOP-NEXT:    vpcomleuq %xmm1, %xmm0, %xmm0
781 ; XOP-NEXT:    retq
783 ; AVX512-LABEL: le_v2i64:
784 ; AVX512:       # %bb.0:
785 ; AVX512-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
786 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
787 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm1
788 ; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
789 ; AVX512-NEXT:    vzeroupper
790 ; AVX512-NEXT:    retq
791   %1 = icmp ule <2 x i64> %a, %b
792   %2 = sext <2 x i1> %1 to <2 x i64>
793   ret <2 x i64> %2
796 define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
797 ; SSE2-LABEL: le_v4i32:
798 ; SSE2:       # %bb.0:
799 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
800 ; SSE2-NEXT:    pxor %xmm2, %xmm1
801 ; SSE2-NEXT:    pxor %xmm2, %xmm0
802 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
803 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
804 ; SSE2-NEXT:    pxor %xmm1, %xmm0
805 ; SSE2-NEXT:    retq
807 ; SSE41-LABEL: le_v4i32:
808 ; SSE41:       # %bb.0:
809 ; SSE41-NEXT:    pminud %xmm0, %xmm1
810 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
811 ; SSE41-NEXT:    retq
813 ; SSE42-LABEL: le_v4i32:
814 ; SSE42:       # %bb.0:
815 ; SSE42-NEXT:    pminud %xmm0, %xmm1
816 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0
817 ; SSE42-NEXT:    retq
819 ; AVX-LABEL: le_v4i32:
820 ; AVX:       # %bb.0:
821 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm1
822 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
823 ; AVX-NEXT:    retq
825 ; XOP-LABEL: le_v4i32:
826 ; XOP:       # %bb.0:
827 ; XOP-NEXT:    vpcomleud %xmm1, %xmm0, %xmm0
828 ; XOP-NEXT:    retq
829   %1 = icmp ule <4 x i32> %a, %b
830   %2 = sext <4 x i1> %1 to <4 x i32>
831   ret <4 x i32> %2
834 define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
835 ; SSE2-LABEL: le_v8i16:
836 ; SSE2:       # %bb.0:
837 ; SSE2-NEXT:    psubusw %xmm1, %xmm0
838 ; SSE2-NEXT:    pxor %xmm1, %xmm1
839 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm0
840 ; SSE2-NEXT:    retq
842 ; SSE41-LABEL: le_v8i16:
843 ; SSE41:       # %bb.0:
844 ; SSE41-NEXT:    pminuw %xmm0, %xmm1
845 ; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0
846 ; SSE41-NEXT:    retq
848 ; SSE42-LABEL: le_v8i16:
849 ; SSE42:       # %bb.0:
850 ; SSE42-NEXT:    pminuw %xmm0, %xmm1
851 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0
852 ; SSE42-NEXT:    retq
854 ; AVX-LABEL: le_v8i16:
855 ; AVX:       # %bb.0:
856 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm1
857 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
858 ; AVX-NEXT:    retq
860 ; XOP-LABEL: le_v8i16:
861 ; XOP:       # %bb.0:
862 ; XOP-NEXT:    vpcomleuw %xmm1, %xmm0, %xmm0
863 ; XOP-NEXT:    retq
864   %1 = icmp ule <8 x i16> %a, %b
865   %2 = sext <8 x i1> %1 to <8 x i16>
866   ret <8 x i16> %2
869 define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
870 ; SSE-LABEL: le_v16i8:
871 ; SSE:       # %bb.0:
872 ; SSE-NEXT:    pminub %xmm0, %xmm1
873 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
874 ; SSE-NEXT:    retq
876 ; AVX-LABEL: le_v16i8:
877 ; AVX:       # %bb.0:
878 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm1
879 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
880 ; AVX-NEXT:    retq
882 ; XOP-LABEL: le_v16i8:
883 ; XOP:       # %bb.0:
884 ; XOP-NEXT:    vpcomleub %xmm1, %xmm0, %xmm0
885 ; XOP-NEXT:    retq
886   %1 = icmp ule <16 x i8> %a, %b
887   %2 = sext <16 x i1> %1 to <16 x i8>
888   ret <16 x i8> %2
892 ; Less Than
895 define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
896 ; SSE2-LABEL: lt_v2i64:
897 ; SSE2:       # %bb.0:
898 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
899 ; SSE2-NEXT:    pxor %xmm2, %xmm0
900 ; SSE2-NEXT:    pxor %xmm2, %xmm1
901 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
902 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
903 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
904 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
905 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
906 ; SSE2-NEXT:    pand %xmm3, %xmm1
907 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
908 ; SSE2-NEXT:    por %xmm1, %xmm0
909 ; SSE2-NEXT:    retq
911 ; SSE41-LABEL: lt_v2i64:
912 ; SSE41:       # %bb.0:
913 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
914 ; SSE41-NEXT:    pxor %xmm2, %xmm0
915 ; SSE41-NEXT:    pxor %xmm2, %xmm1
916 ; SSE41-NEXT:    movdqa %xmm1, %xmm2
917 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
918 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
919 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
920 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
921 ; SSE41-NEXT:    pand %xmm3, %xmm1
922 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
923 ; SSE41-NEXT:    por %xmm1, %xmm0
924 ; SSE41-NEXT:    retq
926 ; SSE42-LABEL: lt_v2i64:
927 ; SSE42:       # %bb.0:
928 ; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
929 ; SSE42-NEXT:    pxor %xmm2, %xmm0
930 ; SSE42-NEXT:    pxor %xmm1, %xmm2
931 ; SSE42-NEXT:    pcmpgtq %xmm0, %xmm2
932 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
933 ; SSE42-NEXT:    retq
935 ; AVX1-LABEL: lt_v2i64:
936 ; AVX1:       # %bb.0:
937 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
938 ; AVX1-NEXT:    # xmm2 = mem[0,0]
939 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
940 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
941 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
942 ; AVX1-NEXT:    retq
944 ; AVX2-LABEL: lt_v2i64:
945 ; AVX2:       # %bb.0:
946 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
947 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0
948 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
949 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
950 ; AVX2-NEXT:    retq
952 ; XOP-LABEL: lt_v2i64:
953 ; XOP:       # %bb.0:
954 ; XOP-NEXT:    vpcomltuq %xmm1, %xmm0, %xmm0
955 ; XOP-NEXT:    retq
957 ; AVX512-LABEL: lt_v2i64:
958 ; AVX512:       # %bb.0:
959 ; AVX512-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
960 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
961 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm1
962 ; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
963 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
964 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
965 ; AVX512-NEXT:    vzeroupper
966 ; AVX512-NEXT:    retq
967   %1 = icmp ult <2 x i64> %a, %b
968   %2 = sext <2 x i1> %1 to <2 x i64>
969   ret <2 x i64> %2
972 define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
973 ; SSE2-LABEL: lt_v4i32:
974 ; SSE2:       # %bb.0:
975 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
976 ; SSE2-NEXT:    pxor %xmm2, %xmm0
977 ; SSE2-NEXT:    pxor %xmm1, %xmm2
978 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
979 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
980 ; SSE2-NEXT:    retq
982 ; SSE41-LABEL: lt_v4i32:
983 ; SSE41:       # %bb.0:
984 ; SSE41-NEXT:    pmaxud %xmm0, %xmm1
985 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
986 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
987 ; SSE41-NEXT:    pxor %xmm1, %xmm0
988 ; SSE41-NEXT:    retq
990 ; SSE42-LABEL: lt_v4i32:
991 ; SSE42:       # %bb.0:
992 ; SSE42-NEXT:    pmaxud %xmm0, %xmm1
993 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0
994 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
995 ; SSE42-NEXT:    pxor %xmm1, %xmm0
996 ; SSE42-NEXT:    retq
998 ; AVX1-LABEL: lt_v4i32:
999 ; AVX1:       # %bb.0:
1000 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1
1001 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
1002 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1003 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1004 ; AVX1-NEXT:    retq
1006 ; AVX2-LABEL: lt_v4i32:
1007 ; AVX2:       # %bb.0:
1008 ; AVX2-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1
1009 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
1010 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1011 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1012 ; AVX2-NEXT:    retq
1014 ; XOP-LABEL: lt_v4i32:
1015 ; XOP:       # %bb.0:
1016 ; XOP-NEXT:    vpcomltud %xmm1, %xmm0, %xmm0
1017 ; XOP-NEXT:    retq
1019 ; AVX512-LABEL: lt_v4i32:
1020 ; AVX512:       # %bb.0:
1021 ; AVX512-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1
1022 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
1023 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
1024 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1025 ; AVX512-NEXT:    vzeroupper
1026 ; AVX512-NEXT:    retq
1027   %1 = icmp ult <4 x i32> %a, %b
1028   %2 = sext <4 x i1> %1 to <4 x i32>
1029   ret <4 x i32> %2
1032 define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
1033 ; SSE2-LABEL: lt_v8i16:
1034 ; SSE2:       # %bb.0:
1035 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1036 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1037 ; SSE2-NEXT:    pxor %xmm1, %xmm2
1038 ; SSE2-NEXT:    pcmpgtw %xmm0, %xmm2
1039 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1040 ; SSE2-NEXT:    retq
1042 ; SSE41-LABEL: lt_v8i16:
1043 ; SSE41:       # %bb.0:
1044 ; SSE41-NEXT:    pmaxuw %xmm0, %xmm1
1045 ; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0
1046 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
1047 ; SSE41-NEXT:    pxor %xmm1, %xmm0
1048 ; SSE41-NEXT:    retq
1050 ; SSE42-LABEL: lt_v8i16:
1051 ; SSE42:       # %bb.0:
1052 ; SSE42-NEXT:    pmaxuw %xmm0, %xmm1
1053 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0
1054 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
1055 ; SSE42-NEXT:    pxor %xmm1, %xmm0
1056 ; SSE42-NEXT:    retq
1058 ; AVX1-LABEL: lt_v8i16:
1059 ; AVX1:       # %bb.0:
1060 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm1
1061 ; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
1062 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1063 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1064 ; AVX1-NEXT:    retq
1066 ; AVX2-LABEL: lt_v8i16:
1067 ; AVX2:       # %bb.0:
1068 ; AVX2-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm1
1069 ; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
1070 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1071 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1072 ; AVX2-NEXT:    retq
1074 ; XOP-LABEL: lt_v8i16:
1075 ; XOP:       # %bb.0:
1076 ; XOP-NEXT:    vpcomltuw %xmm1, %xmm0, %xmm0
1077 ; XOP-NEXT:    retq
1079 ; AVX512-LABEL: lt_v8i16:
1080 ; AVX512:       # %bb.0:
1081 ; AVX512-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm1
1082 ; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
1083 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
1084 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1085 ; AVX512-NEXT:    vzeroupper
1086 ; AVX512-NEXT:    retq
1087   %1 = icmp ult <8 x i16> %a, %b
1088   %2 = sext <8 x i1> %1 to <8 x i16>
1089   ret <8 x i16> %2
1092 define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
1093 ; SSE-LABEL: lt_v16i8:
1094 ; SSE:       # %bb.0:
1095 ; SSE-NEXT:    pmaxub %xmm0, %xmm1
1096 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
1097 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
1098 ; SSE-NEXT:    pxor %xmm1, %xmm0
1099 ; SSE-NEXT:    retq
1101 ; AVX1-LABEL: lt_v16i8:
1102 ; AVX1:       # %bb.0:
1103 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm1
1104 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
1105 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1106 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1107 ; AVX1-NEXT:    retq
1109 ; AVX2-LABEL: lt_v16i8:
1110 ; AVX2:       # %bb.0:
1111 ; AVX2-NEXT:    vpmaxub %xmm1, %xmm0, %xmm1
1112 ; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
1113 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
1114 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
1115 ; AVX2-NEXT:    retq
1117 ; XOP-LABEL: lt_v16i8:
1118 ; XOP:       # %bb.0:
1119 ; XOP-NEXT:    vpcomltub %xmm1, %xmm0, %xmm0
1120 ; XOP-NEXT:    retq
1122 ; AVX512-LABEL: lt_v16i8:
1123 ; AVX512:       # %bb.0:
1124 ; AVX512-NEXT:    vpmaxub %xmm1, %xmm0, %xmm1
1125 ; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
1126 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
1127 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
1128 ; AVX512-NEXT:    vzeroupper
1129 ; AVX512-NEXT:    retq
1130   %1 = icmp ult <16 x i8> %a, %b
1131   %2 = sext <16 x i1> %1 to <16 x i8>
1132   ret <16 x i8> %2