1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE42
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+xop | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+xop | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
16 define <2 x i64> @eq_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
17 ; SSE2-LABEL: eq_v2i64:
19 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
20 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
21 ; SSE2-NEXT: pand %xmm1, %xmm0
24 ; SSE41-LABEL: eq_v2i64:
26 ; SSE41-NEXT: pcmpeqq %xmm1, %xmm0
29 ; SSE42-LABEL: eq_v2i64:
31 ; SSE42-NEXT: pcmpeqq %xmm1, %xmm0
34 ; AVX-LABEL: eq_v2i64:
36 ; AVX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
39 ; XOP-LABEL: eq_v2i64:
41 ; XOP-NEXT: vpcomeqq %xmm1, %xmm0, %xmm0
43 %1 = icmp eq <2 x i64> %a, %b
44 %2 = sext <2 x i1> %1 to <2 x i64>
48 define <4 x i32> @eq_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
49 ; SSE-LABEL: eq_v4i32:
51 ; SSE-NEXT: pcmpeqd %xmm1, %xmm0
54 ; AVX-LABEL: eq_v4i32:
56 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
59 ; XOP-LABEL: eq_v4i32:
61 ; XOP-NEXT: vpcomeqd %xmm1, %xmm0, %xmm0
63 %1 = icmp eq <4 x i32> %a, %b
64 %2 = sext <4 x i1> %1 to <4 x i32>
68 define <8 x i16> @eq_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
69 ; SSE-LABEL: eq_v8i16:
71 ; SSE-NEXT: pcmpeqw %xmm1, %xmm0
74 ; AVX-LABEL: eq_v8i16:
76 ; AVX-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
79 ; XOP-LABEL: eq_v8i16:
81 ; XOP-NEXT: vpcomeqw %xmm1, %xmm0, %xmm0
83 %1 = icmp eq <8 x i16> %a, %b
84 %2 = sext <8 x i1> %1 to <8 x i16>
88 define <16 x i8> @eq_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
89 ; SSE-LABEL: eq_v16i8:
91 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
94 ; AVX-LABEL: eq_v16i8:
96 ; AVX-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
99 ; XOP-LABEL: eq_v16i8:
101 ; XOP-NEXT: vpcomeqb %xmm1, %xmm0, %xmm0
103 %1 = icmp eq <16 x i8> %a, %b
104 %2 = sext <16 x i1> %1 to <16 x i8>
112 define <2 x i64> @ne_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
113 ; SSE2-LABEL: ne_v2i64:
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
122 ; SSE41-LABEL: ne_v2i64:
124 ; SSE41-NEXT: pcmpeqq %xmm1, %xmm0
125 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
126 ; SSE41-NEXT: pxor %xmm1, %xmm0
129 ; SSE42-LABEL: ne_v2i64:
131 ; SSE42-NEXT: pcmpeqq %xmm1, %xmm0
132 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
133 ; SSE42-NEXT: pxor %xmm1, %xmm0
136 ; AVX1-LABEL: ne_v2i64:
138 ; AVX1-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
139 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
140 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
143 ; AVX2-LABEL: ne_v2i64:
145 ; AVX2-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
146 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
147 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
150 ; XOP-LABEL: ne_v2i64:
152 ; XOP-NEXT: vpcomneqq %xmm1, %xmm0, %xmm0
155 ; AVX512-LABEL: ne_v2i64:
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
162 %1 = icmp ne <2 x i64> %a, %b
163 %2 = sext <2 x i1> %1 to <2 x i64>
167 define <4 x i32> @ne_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
168 ; SSE-LABEL: ne_v4i32:
170 ; SSE-NEXT: pcmpeqd %xmm1, %xmm0
171 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
172 ; SSE-NEXT: pxor %xmm1, %xmm0
175 ; AVX1-LABEL: ne_v4i32:
177 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
178 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
179 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
182 ; AVX2-LABEL: ne_v4i32:
184 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
185 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
186 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
189 ; XOP-LABEL: ne_v4i32:
191 ; XOP-NEXT: vpcomneqd %xmm1, %xmm0, %xmm0
194 ; AVX512-LABEL: ne_v4i32:
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
201 %1 = icmp ne <4 x i32> %a, %b
202 %2 = sext <4 x i1> %1 to <4 x i32>
206 define <8 x i16> @ne_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
207 ; SSE-LABEL: ne_v8i16:
209 ; SSE-NEXT: pcmpeqw %xmm1, %xmm0
210 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
211 ; SSE-NEXT: pxor %xmm1, %xmm0
214 ; AVX1-LABEL: ne_v8i16:
216 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
217 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
218 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
221 ; AVX2-LABEL: ne_v8i16:
223 ; AVX2-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
224 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
225 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
228 ; XOP-LABEL: ne_v8i16:
230 ; XOP-NEXT: vpcomneqw %xmm1, %xmm0, %xmm0
233 ; AVX512-LABEL: ne_v8i16:
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
240 %1 = icmp ne <8 x i16> %a, %b
241 %2 = sext <8 x i1> %1 to <8 x i16>
245 define <16 x i8> @ne_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
246 ; SSE-LABEL: ne_v16i8:
248 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
249 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
250 ; SSE-NEXT: pxor %xmm1, %xmm0
253 ; AVX1-LABEL: ne_v16i8:
255 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
256 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
257 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
260 ; AVX2-LABEL: ne_v16i8:
262 ; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
263 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
264 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
267 ; XOP-LABEL: ne_v16i8:
269 ; XOP-NEXT: vpcomneqb %xmm1, %xmm0, %xmm0
272 ; AVX512-LABEL: ne_v16i8:
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
279 %1 = icmp ne <16 x i8> %a, %b
280 %2 = sext <16 x i1> %1 to <16 x i8>
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:
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
306 ; SSE41-LABEL: ge_v2i64:
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
323 ; SSE42-LABEL: ge_v2i64:
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
333 ; AVX1-LABEL: ge_v2i64:
335 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
336 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0
337 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
338 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0
339 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
340 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
343 ; AVX2-LABEL: ge_v2i64:
345 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
346 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
347 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm1
348 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0
349 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
350 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
353 ; XOP-LABEL: ge_v2i64:
355 ; XOP-NEXT: vpcomgeuq %xmm1, %xmm0, %xmm0
358 ; AVX512-LABEL: ge_v2i64:
360 ; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
361 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
362 ; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm1
363 ; AVX512-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
364 ; AVX512-NEXT: vzeroupper
366 %1 = icmp uge <2 x i64> %a, %b
367 %2 = sext <2 x i1> %1 to <2 x i64>
371 define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
372 ; SSE2-LABEL: ge_v4i32:
374 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
375 ; SSE2-NEXT: pxor %xmm2, %xmm0
376 ; SSE2-NEXT: pxor %xmm1, %xmm2
377 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
378 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
379 ; SSE2-NEXT: pxor %xmm2, %xmm0
382 ; SSE41-LABEL: ge_v4i32:
384 ; SSE41-NEXT: pmaxud %xmm0, %xmm1
385 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
388 ; SSE42-LABEL: ge_v4i32:
390 ; SSE42-NEXT: pmaxud %xmm0, %xmm1
391 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm0
394 ; AVX-LABEL: ge_v4i32:
396 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm1
397 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
400 ; XOP-LABEL: ge_v4i32:
402 ; XOP-NEXT: vpcomgeud %xmm1, %xmm0, %xmm0
404 %1 = icmp uge <4 x i32> %a, %b
405 %2 = sext <4 x i1> %1 to <4 x i32>
409 define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
410 ; SSE2-LABEL: ge_v8i16:
412 ; SSE2-NEXT: psubusw %xmm0, %xmm1
413 ; SSE2-NEXT: pxor %xmm0, %xmm0
414 ; SSE2-NEXT: pcmpeqw %xmm1, %xmm0
417 ; SSE41-LABEL: ge_v8i16:
419 ; SSE41-NEXT: pmaxuw %xmm0, %xmm1
420 ; SSE41-NEXT: pcmpeqw %xmm1, %xmm0
423 ; SSE42-LABEL: ge_v8i16:
425 ; SSE42-NEXT: pmaxuw %xmm0, %xmm1
426 ; SSE42-NEXT: pcmpeqw %xmm1, %xmm0
429 ; AVX-LABEL: ge_v8i16:
431 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm1
432 ; AVX-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
435 ; XOP-LABEL: ge_v8i16:
437 ; XOP-NEXT: vpcomgeuw %xmm1, %xmm0, %xmm0
439 %1 = icmp uge <8 x i16> %a, %b
440 %2 = sext <8 x i1> %1 to <8 x i16>
444 define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
445 ; SSE-LABEL: ge_v16i8:
447 ; SSE-NEXT: pmaxub %xmm0, %xmm1
448 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
451 ; AVX-LABEL: ge_v16i8:
453 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm1
454 ; AVX-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
457 ; XOP-LABEL: ge_v16i8:
459 ; XOP-NEXT: vpcomgeub %xmm1, %xmm0, %xmm0
461 %1 = icmp uge <16 x i8> %a, %b
462 %2 = sext <16 x i1> %1 to <16 x i8>
470 define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
471 ; SSE2-LABEL: gt_v2i64:
473 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
474 ; SSE2-NEXT: pxor %xmm2, %xmm1
475 ; SSE2-NEXT: pxor %xmm2, %xmm0
476 ; SSE2-NEXT: movdqa %xmm0, %xmm2
477 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
478 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
479 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
480 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
481 ; SSE2-NEXT: pand %xmm3, %xmm1
482 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
483 ; SSE2-NEXT: por %xmm1, %xmm0
486 ; SSE41-LABEL: gt_v2i64:
488 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
489 ; SSE41-NEXT: pxor %xmm2, %xmm1
490 ; SSE41-NEXT: pxor %xmm2, %xmm0
491 ; SSE41-NEXT: movdqa %xmm0, %xmm2
492 ; SSE41-NEXT: pcmpgtd %xmm1, %xmm2
493 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
494 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
495 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
496 ; SSE41-NEXT: pand %xmm3, %xmm1
497 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
498 ; SSE41-NEXT: por %xmm1, %xmm0
501 ; SSE42-LABEL: gt_v2i64:
503 ; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
504 ; SSE42-NEXT: pxor %xmm2, %xmm1
505 ; SSE42-NEXT: pxor %xmm2, %xmm0
506 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0
509 ; AVX1-LABEL: gt_v2i64:
511 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
512 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
513 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0
514 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
517 ; AVX2-LABEL: gt_v2i64:
519 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
520 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm1
521 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
522 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
525 ; XOP-LABEL: gt_v2i64:
527 ; XOP-NEXT: vpcomgtuq %xmm1, %xmm0, %xmm0
530 ; AVX512-LABEL: gt_v2i64:
532 ; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
533 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
534 ; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm1
535 ; AVX512-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
536 ; AVX512-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0
537 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
538 ; AVX512-NEXT: vzeroupper
540 %1 = icmp ugt <2 x i64> %a, %b
541 %2 = sext <2 x i1> %1 to <2 x i64>
545 define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
546 ; SSE2-LABEL: gt_v4i32:
548 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
549 ; SSE2-NEXT: pxor %xmm2, %xmm1
550 ; SSE2-NEXT: pxor %xmm2, %xmm0
551 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0
554 ; SSE41-LABEL: gt_v4i32:
556 ; SSE41-NEXT: pminud %xmm0, %xmm1
557 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
558 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
559 ; SSE41-NEXT: pxor %xmm1, %xmm0
562 ; SSE42-LABEL: gt_v4i32:
564 ; SSE42-NEXT: pminud %xmm0, %xmm1
565 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm0
566 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
567 ; SSE42-NEXT: pxor %xmm1, %xmm0
570 ; AVX1-LABEL: gt_v4i32:
572 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm1
573 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
574 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
575 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
578 ; AVX2-LABEL: gt_v4i32:
580 ; AVX2-NEXT: vpminud %xmm1, %xmm0, %xmm1
581 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
582 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
583 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
586 ; XOP-LABEL: gt_v4i32:
588 ; XOP-NEXT: vpcomgtud %xmm1, %xmm0, %xmm0
591 ; AVX512-LABEL: gt_v4i32:
593 ; AVX512-NEXT: vpminud %xmm1, %xmm0, %xmm1
594 ; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
595 ; AVX512-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0
596 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
597 ; AVX512-NEXT: vzeroupper
599 %1 = icmp ugt <4 x i32> %a, %b
600 %2 = sext <4 x i1> %1 to <4 x i32>
604 define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
605 ; SSE2-LABEL: gt_v8i16:
607 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
608 ; SSE2-NEXT: pxor %xmm2, %xmm1
609 ; SSE2-NEXT: pxor %xmm2, %xmm0
610 ; SSE2-NEXT: pcmpgtw %xmm1, %xmm0
613 ; SSE41-LABEL: gt_v8i16:
615 ; SSE41-NEXT: pminuw %xmm0, %xmm1
616 ; SSE41-NEXT: pcmpeqw %xmm1, %xmm0
617 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
618 ; SSE41-NEXT: pxor %xmm1, %xmm0
621 ; SSE42-LABEL: gt_v8i16:
623 ; SSE42-NEXT: pminuw %xmm0, %xmm1
624 ; SSE42-NEXT: pcmpeqw %xmm1, %xmm0
625 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
626 ; SSE42-NEXT: pxor %xmm1, %xmm0
629 ; AVX1-LABEL: gt_v8i16:
631 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm1
632 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
633 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
634 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
637 ; AVX2-LABEL: gt_v8i16:
639 ; AVX2-NEXT: vpminuw %xmm1, %xmm0, %xmm1
640 ; AVX2-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
641 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
642 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
645 ; XOP-LABEL: gt_v8i16:
647 ; XOP-NEXT: vpcomgtuw %xmm1, %xmm0, %xmm0
650 ; AVX512-LABEL: gt_v8i16:
652 ; AVX512-NEXT: vpminuw %xmm1, %xmm0, %xmm1
653 ; AVX512-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
654 ; AVX512-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0
655 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
656 ; AVX512-NEXT: vzeroupper
658 %1 = icmp ugt <8 x i16> %a, %b
659 %2 = sext <8 x i1> %1 to <8 x i16>
663 define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
664 ; SSE-LABEL: gt_v16i8:
666 ; SSE-NEXT: pminub %xmm0, %xmm1
667 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
668 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
669 ; SSE-NEXT: pxor %xmm1, %xmm0
672 ; AVX1-LABEL: gt_v16i8:
674 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm1
675 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
676 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
677 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
680 ; AVX2-LABEL: gt_v16i8:
682 ; AVX2-NEXT: vpminub %xmm1, %xmm0, %xmm1
683 ; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
684 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
685 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
688 ; XOP-LABEL: gt_v16i8:
690 ; XOP-NEXT: vpcomgtub %xmm1, %xmm0, %xmm0
693 ; AVX512-LABEL: gt_v16i8:
695 ; AVX512-NEXT: vpminub %xmm1, %xmm0, %xmm1
696 ; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
697 ; AVX512-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0
698 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
699 ; AVX512-NEXT: vzeroupper
701 %1 = icmp ugt <16 x i8> %a, %b
702 %2 = sext <16 x i1> %1 to <16 x i8>
710 define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
711 ; SSE2-LABEL: le_v2i64:
713 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
714 ; SSE2-NEXT: pxor %xmm2, %xmm1
715 ; SSE2-NEXT: pxor %xmm2, %xmm0
716 ; SSE2-NEXT: movdqa %xmm0, %xmm2
717 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
718 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
719 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
720 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
721 ; SSE2-NEXT: pand %xmm3, %xmm0
722 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
723 ; SSE2-NEXT: por %xmm0, %xmm1
724 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
725 ; SSE2-NEXT: pxor %xmm1, %xmm0
728 ; SSE41-LABEL: le_v2i64:
730 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
731 ; SSE41-NEXT: pxor %xmm2, %xmm1
732 ; SSE41-NEXT: pxor %xmm2, %xmm0
733 ; SSE41-NEXT: movdqa %xmm0, %xmm2
734 ; SSE41-NEXT: pcmpgtd %xmm1, %xmm2
735 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
736 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
737 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
738 ; SSE41-NEXT: pand %xmm3, %xmm0
739 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
740 ; SSE41-NEXT: por %xmm0, %xmm1
741 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
742 ; SSE41-NEXT: pxor %xmm1, %xmm0
745 ; SSE42-LABEL: le_v2i64:
747 ; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
748 ; SSE42-NEXT: pxor %xmm2, %xmm1
749 ; SSE42-NEXT: pxor %xmm2, %xmm0
750 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0
751 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
752 ; SSE42-NEXT: pxor %xmm1, %xmm0
755 ; AVX1-LABEL: le_v2i64:
757 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
758 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
759 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0
760 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
761 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
762 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
765 ; AVX2-LABEL: le_v2i64:
767 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
768 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm1
769 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
770 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
771 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
772 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
775 ; XOP-LABEL: le_v2i64:
777 ; XOP-NEXT: vpcomleuq %xmm1, %xmm0, %xmm0
780 ; AVX512-LABEL: le_v2i64:
782 ; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
783 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
784 ; AVX512-NEXT: vpminuq %zmm1, %zmm0, %zmm1
785 ; AVX512-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
786 ; AVX512-NEXT: vzeroupper
788 %1 = icmp ule <2 x i64> %a, %b
789 %2 = sext <2 x i1> %1 to <2 x i64>
793 define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
794 ; SSE2-LABEL: le_v4i32:
796 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
797 ; SSE2-NEXT: pxor %xmm2, %xmm1
798 ; SSE2-NEXT: pxor %xmm2, %xmm0
799 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0
800 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
801 ; SSE2-NEXT: pxor %xmm1, %xmm0
804 ; SSE41-LABEL: le_v4i32:
806 ; SSE41-NEXT: pminud %xmm0, %xmm1
807 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
810 ; SSE42-LABEL: le_v4i32:
812 ; SSE42-NEXT: pminud %xmm0, %xmm1
813 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm0
816 ; AVX-LABEL: le_v4i32:
818 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm1
819 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
822 ; XOP-LABEL: le_v4i32:
824 ; XOP-NEXT: vpcomleud %xmm1, %xmm0, %xmm0
826 %1 = icmp ule <4 x i32> %a, %b
827 %2 = sext <4 x i1> %1 to <4 x i32>
831 define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
832 ; SSE2-LABEL: le_v8i16:
834 ; SSE2-NEXT: psubusw %xmm1, %xmm0
835 ; SSE2-NEXT: pxor %xmm1, %xmm1
836 ; SSE2-NEXT: pcmpeqw %xmm1, %xmm0
839 ; SSE41-LABEL: le_v8i16:
841 ; SSE41-NEXT: pminuw %xmm0, %xmm1
842 ; SSE41-NEXT: pcmpeqw %xmm1, %xmm0
845 ; SSE42-LABEL: le_v8i16:
847 ; SSE42-NEXT: pminuw %xmm0, %xmm1
848 ; SSE42-NEXT: pcmpeqw %xmm1, %xmm0
851 ; AVX-LABEL: le_v8i16:
853 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm1
854 ; AVX-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
857 ; XOP-LABEL: le_v8i16:
859 ; XOP-NEXT: vpcomleuw %xmm1, %xmm0, %xmm0
861 %1 = icmp ule <8 x i16> %a, %b
862 %2 = sext <8 x i1> %1 to <8 x i16>
866 define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
867 ; SSE-LABEL: le_v16i8:
869 ; SSE-NEXT: pminub %xmm0, %xmm1
870 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
873 ; AVX-LABEL: le_v16i8:
875 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm1
876 ; AVX-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
879 ; XOP-LABEL: le_v16i8:
881 ; XOP-NEXT: vpcomleub %xmm1, %xmm0, %xmm0
883 %1 = icmp ule <16 x i8> %a, %b
884 %2 = sext <16 x i1> %1 to <16 x i8>
892 define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
893 ; SSE2-LABEL: lt_v2i64:
895 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
896 ; SSE2-NEXT: pxor %xmm2, %xmm0
897 ; SSE2-NEXT: pxor %xmm2, %xmm1
898 ; SSE2-NEXT: movdqa %xmm1, %xmm2
899 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
900 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
901 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
902 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
903 ; SSE2-NEXT: pand %xmm3, %xmm1
904 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
905 ; SSE2-NEXT: por %xmm1, %xmm0
908 ; SSE41-LABEL: lt_v2i64:
910 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
911 ; SSE41-NEXT: pxor %xmm2, %xmm0
912 ; SSE41-NEXT: pxor %xmm2, %xmm1
913 ; SSE41-NEXT: movdqa %xmm1, %xmm2
914 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
915 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
916 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
917 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
918 ; SSE41-NEXT: pand %xmm3, %xmm1
919 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
920 ; SSE41-NEXT: por %xmm1, %xmm0
923 ; SSE42-LABEL: lt_v2i64:
925 ; SSE42-NEXT: movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
926 ; SSE42-NEXT: pxor %xmm2, %xmm0
927 ; SSE42-NEXT: pxor %xmm1, %xmm2
928 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm2
929 ; SSE42-NEXT: movdqa %xmm2, %xmm0
932 ; AVX1-LABEL: lt_v2i64:
934 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
935 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm0
936 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm1
937 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0
940 ; AVX2-LABEL: lt_v2i64:
942 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
943 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm0
944 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm1
945 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0
948 ; XOP-LABEL: lt_v2i64:
950 ; XOP-NEXT: vpcomltuq %xmm1, %xmm0, %xmm0
953 ; AVX512-LABEL: lt_v2i64:
955 ; AVX512-NEXT: # kill: def $xmm1 killed $xmm1 def $zmm1
956 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 def $zmm0
957 ; AVX512-NEXT: vpmaxuq %zmm1, %zmm0, %zmm1
958 ; AVX512-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
959 ; AVX512-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0
960 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
961 ; AVX512-NEXT: vzeroupper
963 %1 = icmp ult <2 x i64> %a, %b
964 %2 = sext <2 x i1> %1 to <2 x i64>
968 define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
969 ; SSE2-LABEL: lt_v4i32:
971 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
972 ; SSE2-NEXT: pxor %xmm2, %xmm0
973 ; SSE2-NEXT: pxor %xmm1, %xmm2
974 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
975 ; SSE2-NEXT: movdqa %xmm2, %xmm0
978 ; SSE41-LABEL: lt_v4i32:
980 ; SSE41-NEXT: pmaxud %xmm0, %xmm1
981 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
982 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
983 ; SSE41-NEXT: pxor %xmm1, %xmm0
986 ; SSE42-LABEL: lt_v4i32:
988 ; SSE42-NEXT: pmaxud %xmm0, %xmm1
989 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm0
990 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
991 ; SSE42-NEXT: pxor %xmm1, %xmm0
994 ; AVX1-LABEL: lt_v4i32:
996 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm1
997 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
998 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
999 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
1002 ; AVX2-LABEL: lt_v4i32:
1004 ; AVX2-NEXT: vpmaxud %xmm1, %xmm0, %xmm1
1005 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
1006 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
1007 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
1010 ; XOP-LABEL: lt_v4i32:
1012 ; XOP-NEXT: vpcomltud %xmm1, %xmm0, %xmm0
1015 ; AVX512-LABEL: lt_v4i32:
1017 ; AVX512-NEXT: vpmaxud %xmm1, %xmm0, %xmm1
1018 ; AVX512-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
1019 ; AVX512-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0
1020 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
1021 ; AVX512-NEXT: vzeroupper
1023 %1 = icmp ult <4 x i32> %a, %b
1024 %2 = sext <4 x i1> %1 to <4 x i32>
1028 define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
1029 ; SSE2-LABEL: lt_v8i16:
1031 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1032 ; SSE2-NEXT: pxor %xmm2, %xmm0
1033 ; SSE2-NEXT: pxor %xmm1, %xmm2
1034 ; SSE2-NEXT: pcmpgtw %xmm0, %xmm2
1035 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1038 ; SSE41-LABEL: lt_v8i16:
1040 ; SSE41-NEXT: pmaxuw %xmm0, %xmm1
1041 ; SSE41-NEXT: pcmpeqw %xmm1, %xmm0
1042 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
1043 ; SSE41-NEXT: pxor %xmm1, %xmm0
1046 ; SSE42-LABEL: lt_v8i16:
1048 ; SSE42-NEXT: pmaxuw %xmm0, %xmm1
1049 ; SSE42-NEXT: pcmpeqw %xmm1, %xmm0
1050 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
1051 ; SSE42-NEXT: pxor %xmm1, %xmm0
1054 ; AVX1-LABEL: lt_v8i16:
1056 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm1
1057 ; AVX1-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
1058 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
1059 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
1062 ; AVX2-LABEL: lt_v8i16:
1064 ; AVX2-NEXT: vpmaxuw %xmm1, %xmm0, %xmm1
1065 ; AVX2-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
1066 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
1067 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
1070 ; XOP-LABEL: lt_v8i16:
1072 ; XOP-NEXT: vpcomltuw %xmm1, %xmm0, %xmm0
1075 ; AVX512-LABEL: lt_v8i16:
1077 ; AVX512-NEXT: vpmaxuw %xmm1, %xmm0, %xmm1
1078 ; AVX512-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
1079 ; AVX512-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0
1080 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
1081 ; AVX512-NEXT: vzeroupper
1083 %1 = icmp ult <8 x i16> %a, %b
1084 %2 = sext <8 x i1> %1 to <8 x i16>
1088 define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
1089 ; SSE-LABEL: lt_v16i8:
1091 ; SSE-NEXT: pmaxub %xmm0, %xmm1
1092 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
1093 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
1094 ; SSE-NEXT: pxor %xmm1, %xmm0
1097 ; AVX1-LABEL: lt_v16i8:
1099 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm1
1100 ; AVX1-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
1101 ; AVX1-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
1102 ; AVX1-NEXT: vpxor %xmm1, %xmm0, %xmm0
1105 ; AVX2-LABEL: lt_v16i8:
1107 ; AVX2-NEXT: vpmaxub %xmm1, %xmm0, %xmm1
1108 ; AVX2-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
1109 ; AVX2-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
1110 ; AVX2-NEXT: vpxor %xmm1, %xmm0, %xmm0
1113 ; XOP-LABEL: lt_v16i8:
1115 ; XOP-NEXT: vpcomltub %xmm1, %xmm0, %xmm0
1118 ; AVX512-LABEL: lt_v16i8:
1120 ; AVX512-NEXT: vpmaxub %xmm1, %xmm0, %xmm1
1121 ; AVX512-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
1122 ; AVX512-NEXT: vpternlogq $15, %zmm0, %zmm0, %zmm0
1123 ; AVX512-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
1124 ; AVX512-NEXT: vzeroupper
1126 %1 = icmp ult <16 x i8> %a, %b
1127 %2 = sext <16 x i1> %1 to <16 x i8>