1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE42
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+xop | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+xop | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
15 define <2 x i64> @eq_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
16 ; SSE2-LABEL: eq_v2i64:
18 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
19 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
20 ; SSE2-NEXT: pand %xmm1, %xmm0
23 ; SSE41-LABEL: eq_v2i64:
25 ; SSE41-NEXT: pcmpeqq %xmm1, %xmm0
28 ; SSE42-LABEL: eq_v2i64:
30 ; SSE42-NEXT: pcmpeqq %xmm1, %xmm0
33 ; AVX-LABEL: eq_v2i64:
35 ; AVX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
38 ; XOP-LABEL: eq_v2i64:
40 ; XOP-NEXT: vpcomeqq %xmm1, %xmm0, %xmm0
42 %1 = icmp eq <2 x i64> %a, %b
43 %2 = sext <2 x i1> %1 to <2 x i64>
47 define <4 x i32> @eq_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
48 ; SSE-LABEL: eq_v4i32:
50 ; SSE-NEXT: pcmpeqd %xmm1, %xmm0
53 ; AVX-LABEL: eq_v4i32:
55 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
58 ; XOP-LABEL: eq_v4i32:
60 ; XOP-NEXT: vpcomeqd %xmm1, %xmm0, %xmm0
62 %1 = icmp eq <4 x i32> %a, %b
63 %2 = sext <4 x i1> %1 to <4 x i32>
67 define <8 x i16> @eq_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
68 ; SSE-LABEL: eq_v8i16:
70 ; SSE-NEXT: pcmpeqw %xmm1, %xmm0
73 ; AVX-LABEL: eq_v8i16:
75 ; AVX-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
78 ; XOP-LABEL: eq_v8i16:
80 ; XOP-NEXT: vpcomeqw %xmm1, %xmm0, %xmm0
82 %1 = icmp eq <8 x i16> %a, %b
83 %2 = sext <8 x i1> %1 to <8 x i16>
87 define <16 x i8> @eq_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
88 ; SSE-LABEL: eq_v16i8:
90 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
93 ; AVX-LABEL: eq_v16i8:
95 ; AVX-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
98 ; XOP-LABEL: eq_v16i8:
100 ; XOP-NEXT: vpcomeqb %xmm1, %xmm0, %xmm0
102 %1 = icmp eq <16 x i8> %a, %b
103 %2 = sext <16 x i1> %1 to <16 x i8>
111 define <2 x i64> @ne_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
112 ; SSE2-LABEL: ne_v2i64:
114 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
115 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
116 ; SSE2-NEXT: pand %xmm1, %xmm0
117 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
118 ; SSE2-NEXT: pxor %xmm1, %xmm0
121 ; SSE41-LABEL: ne_v2i64:
123 ; SSE41-NEXT: pcmpeqq %xmm1, %xmm0
124 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm1
125 ; SSE41-NEXT: pxor %xmm1, %xmm0
128 ; SSE42-LABEL: ne_v2i64:
130 ; SSE42-NEXT: pcmpeqq %xmm1, %xmm0
131 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
132 ; SSE42-NEXT: pxor %xmm1, %xmm0
135 ; AVX-LABEL: ne_v2i64:
137 ; AVX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
138 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
139 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
142 ; XOP-LABEL: ne_v2i64:
144 ; XOP-NEXT: vpcomneqq %xmm1, %xmm0, %xmm0
146 %1 = icmp ne <2 x i64> %a, %b
147 %2 = sext <2 x i1> %1 to <2 x i64>
151 define <4 x i32> @ne_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
152 ; SSE-LABEL: ne_v4i32:
154 ; SSE-NEXT: pcmpeqd %xmm1, %xmm0
155 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
156 ; SSE-NEXT: pxor %xmm1, %xmm0
159 ; AVX-LABEL: ne_v4i32:
161 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
162 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
163 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
166 ; XOP-LABEL: ne_v4i32:
168 ; XOP-NEXT: vpcomneqd %xmm1, %xmm0, %xmm0
170 %1 = icmp ne <4 x i32> %a, %b
171 %2 = sext <4 x i1> %1 to <4 x i32>
175 define <8 x i16> @ne_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
176 ; SSE-LABEL: ne_v8i16:
178 ; SSE-NEXT: pcmpeqw %xmm1, %xmm0
179 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
180 ; SSE-NEXT: pxor %xmm1, %xmm0
183 ; AVX-LABEL: ne_v8i16:
185 ; AVX-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
186 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
187 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
190 ; XOP-LABEL: ne_v8i16:
192 ; XOP-NEXT: vpcomneqw %xmm1, %xmm0, %xmm0
194 %1 = icmp ne <8 x i16> %a, %b
195 %2 = sext <8 x i1> %1 to <8 x i16>
199 define <16 x i8> @ne_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
200 ; SSE-LABEL: ne_v16i8:
202 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
203 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
204 ; SSE-NEXT: pxor %xmm1, %xmm0
207 ; AVX-LABEL: ne_v16i8:
209 ; AVX-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
210 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
211 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
214 ; XOP-LABEL: ne_v16i8:
216 ; XOP-NEXT: vpcomneqb %xmm1, %xmm0, %xmm0
218 %1 = icmp ne <16 x i8> %a, %b
219 %2 = sext <16 x i1> %1 to <16 x i8>
224 ; Greater Than Or Equal
227 define <2 x i64> @ge_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
228 ; SSE2-LABEL: ge_v2i64:
230 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
231 ; SSE2-NEXT: pxor %xmm2, %xmm0
232 ; SSE2-NEXT: pxor %xmm2, %xmm1
233 ; SSE2-NEXT: movdqa %xmm1, %xmm2
234 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
235 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
236 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
237 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
238 ; SSE2-NEXT: pand %xmm3, %xmm0
239 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
240 ; SSE2-NEXT: por %xmm0, %xmm1
241 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
242 ; SSE2-NEXT: pxor %xmm1, %xmm0
245 ; SSE41-LABEL: ge_v2i64:
247 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
248 ; SSE41-NEXT: pxor %xmm2, %xmm0
249 ; SSE41-NEXT: pxor %xmm2, %xmm1
250 ; SSE41-NEXT: movdqa %xmm1, %xmm2
251 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
252 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
253 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
254 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
255 ; SSE41-NEXT: pand %xmm3, %xmm0
256 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
257 ; SSE41-NEXT: por %xmm0, %xmm1
258 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
259 ; SSE41-NEXT: pxor %xmm1, %xmm0
262 ; SSE42-LABEL: ge_v2i64:
264 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm1
265 ; SSE42-NEXT: pcmpeqd %xmm0, %xmm0
266 ; SSE42-NEXT: pxor %xmm1, %xmm0
269 ; AVX-LABEL: ge_v2i64:
271 ; AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0
272 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
273 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
276 ; XOP-LABEL: ge_v2i64:
278 ; XOP-NEXT: vpcomgeq %xmm1, %xmm0, %xmm0
280 %1 = icmp sge <2 x i64> %a, %b
281 %2 = sext <2 x i1> %1 to <2 x i64>
285 define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
286 ; SSE-LABEL: ge_v4i32:
288 ; SSE-NEXT: pcmpgtd %xmm0, %xmm1
289 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
290 ; SSE-NEXT: pxor %xmm1, %xmm0
293 ; AVX-LABEL: ge_v4i32:
295 ; AVX-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0
296 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
297 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
300 ; XOP-LABEL: ge_v4i32:
302 ; XOP-NEXT: vpcomged %xmm1, %xmm0, %xmm0
304 %1 = icmp sge <4 x i32> %a, %b
305 %2 = sext <4 x i1> %1 to <4 x i32>
309 define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
310 ; SSE-LABEL: ge_v8i16:
312 ; SSE-NEXT: pcmpgtw %xmm0, %xmm1
313 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
314 ; SSE-NEXT: pxor %xmm1, %xmm0
317 ; AVX-LABEL: ge_v8i16:
319 ; AVX-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0
320 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
321 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
324 ; XOP-LABEL: ge_v8i16:
326 ; XOP-NEXT: vpcomgew %xmm1, %xmm0, %xmm0
328 %1 = icmp sge <8 x i16> %a, %b
329 %2 = sext <8 x i1> %1 to <8 x i16>
333 define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
334 ; SSE-LABEL: ge_v16i8:
336 ; SSE-NEXT: pcmpgtb %xmm0, %xmm1
337 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
338 ; SSE-NEXT: pxor %xmm1, %xmm0
341 ; AVX-LABEL: ge_v16i8:
343 ; AVX-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0
344 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
345 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
348 ; XOP-LABEL: ge_v16i8:
350 ; XOP-NEXT: vpcomgeb %xmm1, %xmm0, %xmm0
352 %1 = icmp sge <16 x i8> %a, %b
353 %2 = sext <16 x i1> %1 to <16 x i8>
361 define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
362 ; SSE2-LABEL: gt_v2i64:
364 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
365 ; SSE2-NEXT: pxor %xmm2, %xmm1
366 ; SSE2-NEXT: pxor %xmm2, %xmm0
367 ; SSE2-NEXT: movdqa %xmm0, %xmm2
368 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
369 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
370 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
371 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
372 ; SSE2-NEXT: pand %xmm3, %xmm1
373 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
374 ; SSE2-NEXT: por %xmm1, %xmm0
377 ; SSE41-LABEL: gt_v2i64:
379 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
380 ; SSE41-NEXT: pxor %xmm2, %xmm1
381 ; SSE41-NEXT: pxor %xmm2, %xmm0
382 ; SSE41-NEXT: movdqa %xmm0, %xmm2
383 ; SSE41-NEXT: pcmpgtd %xmm1, %xmm2
384 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
385 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
386 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
387 ; SSE41-NEXT: pand %xmm3, %xmm1
388 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
389 ; SSE41-NEXT: por %xmm1, %xmm0
392 ; SSE42-LABEL: gt_v2i64:
394 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0
397 ; AVX-LABEL: gt_v2i64:
399 ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
402 ; XOP-LABEL: gt_v2i64:
404 ; XOP-NEXT: vpcomgtq %xmm1, %xmm0, %xmm0
406 %1 = icmp sgt <2 x i64> %a, %b
407 %2 = sext <2 x i1> %1 to <2 x i64>
411 define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
412 ; SSE-LABEL: gt_v4i32:
414 ; SSE-NEXT: pcmpgtd %xmm1, %xmm0
417 ; AVX-LABEL: gt_v4i32:
419 ; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
422 ; XOP-LABEL: gt_v4i32:
424 ; XOP-NEXT: vpcomgtd %xmm1, %xmm0, %xmm0
426 %1 = icmp sgt <4 x i32> %a, %b
427 %2 = sext <4 x i1> %1 to <4 x i32>
431 define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
432 ; SSE-LABEL: gt_v8i16:
434 ; SSE-NEXT: pcmpgtw %xmm1, %xmm0
437 ; AVX-LABEL: gt_v8i16:
439 ; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0
442 ; XOP-LABEL: gt_v8i16:
444 ; XOP-NEXT: vpcomgtw %xmm1, %xmm0, %xmm0
446 %1 = icmp sgt <8 x i16> %a, %b
447 %2 = sext <8 x i1> %1 to <8 x i16>
451 define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
452 ; SSE-LABEL: gt_v16i8:
454 ; SSE-NEXT: pcmpgtb %xmm1, %xmm0
457 ; AVX-LABEL: gt_v16i8:
459 ; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0
462 ; XOP-LABEL: gt_v16i8:
464 ; XOP-NEXT: vpcomgtb %xmm1, %xmm0, %xmm0
466 %1 = icmp sgt <16 x i8> %a, %b
467 %2 = sext <16 x i1> %1 to <16 x i8>
475 define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
476 ; SSE2-LABEL: le_v2i64:
478 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
479 ; SSE2-NEXT: pxor %xmm2, %xmm1
480 ; SSE2-NEXT: pxor %xmm2, %xmm0
481 ; SSE2-NEXT: movdqa %xmm0, %xmm2
482 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
483 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
484 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
485 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
486 ; SSE2-NEXT: pand %xmm3, %xmm0
487 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
488 ; SSE2-NEXT: por %xmm0, %xmm1
489 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
490 ; SSE2-NEXT: pxor %xmm1, %xmm0
493 ; SSE41-LABEL: le_v2i64:
495 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
496 ; SSE41-NEXT: pxor %xmm2, %xmm1
497 ; SSE41-NEXT: pxor %xmm2, %xmm0
498 ; SSE41-NEXT: movdqa %xmm0, %xmm2
499 ; SSE41-NEXT: pcmpgtd %xmm1, %xmm2
500 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
501 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
502 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
503 ; SSE41-NEXT: pand %xmm3, %xmm0
504 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
505 ; SSE41-NEXT: por %xmm0, %xmm1
506 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
507 ; SSE41-NEXT: pxor %xmm1, %xmm0
510 ; SSE42-LABEL: le_v2i64:
512 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0
513 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
514 ; SSE42-NEXT: pxor %xmm1, %xmm0
517 ; AVX-LABEL: le_v2i64:
519 ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
520 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
521 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
524 ; XOP-LABEL: le_v2i64:
526 ; XOP-NEXT: vpcomleq %xmm1, %xmm0, %xmm0
528 %1 = icmp sle <2 x i64> %a, %b
529 %2 = sext <2 x i1> %1 to <2 x i64>
533 define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
534 ; SSE-LABEL: le_v4i32:
536 ; SSE-NEXT: pcmpgtd %xmm1, %xmm0
537 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
538 ; SSE-NEXT: pxor %xmm1, %xmm0
541 ; AVX-LABEL: le_v4i32:
543 ; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
544 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
545 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
548 ; XOP-LABEL: le_v4i32:
550 ; XOP-NEXT: vpcomled %xmm1, %xmm0, %xmm0
552 %1 = icmp sle <4 x i32> %a, %b
553 %2 = sext <4 x i1> %1 to <4 x i32>
557 define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
558 ; SSE-LABEL: le_v8i16:
560 ; SSE-NEXT: pcmpgtw %xmm1, %xmm0
561 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
562 ; SSE-NEXT: pxor %xmm1, %xmm0
565 ; AVX-LABEL: le_v8i16:
567 ; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0
568 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
569 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
572 ; XOP-LABEL: le_v8i16:
574 ; XOP-NEXT: vpcomlew %xmm1, %xmm0, %xmm0
576 %1 = icmp sle <8 x i16> %a, %b
577 %2 = sext <8 x i1> %1 to <8 x i16>
581 define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
582 ; SSE-LABEL: le_v16i8:
584 ; SSE-NEXT: pcmpgtb %xmm1, %xmm0
585 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
586 ; SSE-NEXT: pxor %xmm1, %xmm0
589 ; AVX-LABEL: le_v16i8:
591 ; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0
592 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
593 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
596 ; XOP-LABEL: le_v16i8:
598 ; XOP-NEXT: vpcomleb %xmm1, %xmm0, %xmm0
600 %1 = icmp sle <16 x i8> %a, %b
601 %2 = sext <16 x i1> %1 to <16 x i8>
609 define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
610 ; SSE2-LABEL: lt_v2i64:
612 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
613 ; SSE2-NEXT: pxor %xmm2, %xmm0
614 ; SSE2-NEXT: pxor %xmm2, %xmm1
615 ; SSE2-NEXT: movdqa %xmm1, %xmm2
616 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
617 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
618 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
619 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
620 ; SSE2-NEXT: pand %xmm3, %xmm1
621 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
622 ; SSE2-NEXT: por %xmm1, %xmm0
625 ; SSE41-LABEL: lt_v2i64:
627 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
628 ; SSE41-NEXT: pxor %xmm2, %xmm0
629 ; SSE41-NEXT: pxor %xmm2, %xmm1
630 ; SSE41-NEXT: movdqa %xmm1, %xmm2
631 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
632 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
633 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
634 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
635 ; SSE41-NEXT: pand %xmm3, %xmm1
636 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
637 ; SSE41-NEXT: por %xmm1, %xmm0
640 ; SSE42-LABEL: lt_v2i64:
642 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm1
643 ; SSE42-NEXT: movdqa %xmm1, %xmm0
646 ; AVX-LABEL: lt_v2i64:
648 ; AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0
651 ; XOP-LABEL: lt_v2i64:
653 ; XOP-NEXT: vpcomltq %xmm1, %xmm0, %xmm0
655 %1 = icmp slt <2 x i64> %a, %b
656 %2 = sext <2 x i1> %1 to <2 x i64>
660 define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
661 ; SSE-LABEL: lt_v4i32:
663 ; SSE-NEXT: pcmpgtd %xmm0, %xmm1
664 ; SSE-NEXT: movdqa %xmm1, %xmm0
667 ; AVX-LABEL: lt_v4i32:
669 ; AVX-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0
672 ; XOP-LABEL: lt_v4i32:
674 ; XOP-NEXT: vpcomltd %xmm1, %xmm0, %xmm0
676 %1 = icmp slt <4 x i32> %a, %b
677 %2 = sext <4 x i1> %1 to <4 x i32>
681 define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
682 ; SSE-LABEL: lt_v8i16:
684 ; SSE-NEXT: pcmpgtw %xmm0, %xmm1
685 ; SSE-NEXT: movdqa %xmm1, %xmm0
688 ; AVX-LABEL: lt_v8i16:
690 ; AVX-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0
693 ; XOP-LABEL: lt_v8i16:
695 ; XOP-NEXT: vpcomltw %xmm1, %xmm0, %xmm0
697 %1 = icmp slt <8 x i16> %a, %b
698 %2 = sext <8 x i1> %1 to <8 x i16>
702 define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
703 ; SSE-LABEL: lt_v16i8:
705 ; SSE-NEXT: pcmpgtb %xmm0, %xmm1
706 ; SSE-NEXT: movdqa %xmm1, %xmm0
709 ; AVX-LABEL: lt_v16i8:
711 ; AVX-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0
714 ; XOP-LABEL: lt_v16i8:
716 ; XOP-NEXT: vpcomltb %xmm1, %xmm0, %xmm0
718 %1 = icmp slt <16 x i8> %a, %b
719 %2 = sext <16 x i1> %1 to <16 x i8>