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 ; AVX-LABEL: ne_v2i64:
138 ; AVX-NEXT: vpcmpeqq %xmm1, %xmm0, %xmm0
139 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
140 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
143 ; XOP-LABEL: ne_v2i64:
145 ; XOP-NEXT: vpcomneqq %xmm1, %xmm0, %xmm0
147 %1 = icmp ne <2 x i64> %a, %b
148 %2 = sext <2 x i1> %1 to <2 x i64>
152 define <4 x i32> @ne_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
153 ; SSE-LABEL: ne_v4i32:
155 ; SSE-NEXT: pcmpeqd %xmm1, %xmm0
156 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
157 ; SSE-NEXT: pxor %xmm1, %xmm0
160 ; AVX-LABEL: ne_v4i32:
162 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm0, %xmm0
163 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
164 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
167 ; XOP-LABEL: ne_v4i32:
169 ; XOP-NEXT: vpcomneqd %xmm1, %xmm0, %xmm0
171 %1 = icmp ne <4 x i32> %a, %b
172 %2 = sext <4 x i1> %1 to <4 x i32>
176 define <8 x i16> @ne_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
177 ; SSE-LABEL: ne_v8i16:
179 ; SSE-NEXT: pcmpeqw %xmm1, %xmm0
180 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
181 ; SSE-NEXT: pxor %xmm1, %xmm0
184 ; AVX-LABEL: ne_v8i16:
186 ; AVX-NEXT: vpcmpeqw %xmm1, %xmm0, %xmm0
187 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
188 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
191 ; XOP-LABEL: ne_v8i16:
193 ; XOP-NEXT: vpcomneqw %xmm1, %xmm0, %xmm0
195 %1 = icmp ne <8 x i16> %a, %b
196 %2 = sext <8 x i1> %1 to <8 x i16>
200 define <16 x i8> @ne_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
201 ; SSE-LABEL: ne_v16i8:
203 ; SSE-NEXT: pcmpeqb %xmm1, %xmm0
204 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
205 ; SSE-NEXT: pxor %xmm1, %xmm0
208 ; AVX-LABEL: ne_v16i8:
210 ; AVX-NEXT: vpcmpeqb %xmm1, %xmm0, %xmm0
211 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
212 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
215 ; XOP-LABEL: ne_v16i8:
217 ; XOP-NEXT: vpcomneqb %xmm1, %xmm0, %xmm0
219 %1 = icmp ne <16 x i8> %a, %b
220 %2 = sext <16 x i1> %1 to <16 x i8>
225 ; Greater Than Or Equal
228 define <2 x i64> @ge_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
229 ; SSE2-LABEL: ge_v2i64:
231 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
232 ; SSE2-NEXT: pxor %xmm2, %xmm0
233 ; SSE2-NEXT: pxor %xmm2, %xmm1
234 ; SSE2-NEXT: movdqa %xmm1, %xmm2
235 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
236 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
237 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
238 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
239 ; SSE2-NEXT: pand %xmm3, %xmm0
240 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
241 ; SSE2-NEXT: por %xmm0, %xmm1
242 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
243 ; SSE2-NEXT: pxor %xmm1, %xmm0
246 ; SSE41-LABEL: ge_v2i64:
248 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
249 ; SSE41-NEXT: pxor %xmm2, %xmm0
250 ; SSE41-NEXT: pxor %xmm2, %xmm1
251 ; SSE41-NEXT: movdqa %xmm1, %xmm2
252 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
253 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
254 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
255 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
256 ; SSE41-NEXT: pand %xmm3, %xmm0
257 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
258 ; SSE41-NEXT: por %xmm0, %xmm1
259 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
260 ; SSE41-NEXT: pxor %xmm1, %xmm0
263 ; SSE42-LABEL: ge_v2i64:
265 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm1
266 ; SSE42-NEXT: pcmpeqd %xmm0, %xmm0
267 ; SSE42-NEXT: pxor %xmm1, %xmm0
270 ; AVX-LABEL: ge_v2i64:
272 ; AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0
273 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
274 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
277 ; XOP-LABEL: ge_v2i64:
279 ; XOP-NEXT: vpcomgeq %xmm1, %xmm0, %xmm0
281 %1 = icmp sge <2 x i64> %a, %b
282 %2 = sext <2 x i1> %1 to <2 x i64>
286 define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
287 ; SSE-LABEL: ge_v4i32:
289 ; SSE-NEXT: pcmpgtd %xmm0, %xmm1
290 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
291 ; SSE-NEXT: pxor %xmm1, %xmm0
294 ; AVX-LABEL: ge_v4i32:
296 ; AVX-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0
297 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
298 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
301 ; XOP-LABEL: ge_v4i32:
303 ; XOP-NEXT: vpcomged %xmm1, %xmm0, %xmm0
305 %1 = icmp sge <4 x i32> %a, %b
306 %2 = sext <4 x i1> %1 to <4 x i32>
310 define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
311 ; SSE-LABEL: ge_v8i16:
313 ; SSE-NEXT: pcmpgtw %xmm0, %xmm1
314 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
315 ; SSE-NEXT: pxor %xmm1, %xmm0
318 ; AVX-LABEL: ge_v8i16:
320 ; AVX-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0
321 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
322 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
325 ; XOP-LABEL: ge_v8i16:
327 ; XOP-NEXT: vpcomgew %xmm1, %xmm0, %xmm0
329 %1 = icmp sge <8 x i16> %a, %b
330 %2 = sext <8 x i1> %1 to <8 x i16>
334 define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
335 ; SSE-LABEL: ge_v16i8:
337 ; SSE-NEXT: pcmpgtb %xmm0, %xmm1
338 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
339 ; SSE-NEXT: pxor %xmm1, %xmm0
342 ; AVX-LABEL: ge_v16i8:
344 ; AVX-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0
345 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
346 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
349 ; XOP-LABEL: ge_v16i8:
351 ; XOP-NEXT: vpcomgeb %xmm1, %xmm0, %xmm0
353 %1 = icmp sge <16 x i8> %a, %b
354 %2 = sext <16 x i1> %1 to <16 x i8>
362 define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
363 ; SSE2-LABEL: gt_v2i64:
365 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
366 ; SSE2-NEXT: pxor %xmm2, %xmm1
367 ; SSE2-NEXT: pxor %xmm2, %xmm0
368 ; SSE2-NEXT: movdqa %xmm0, %xmm2
369 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
370 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
371 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
372 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
373 ; SSE2-NEXT: pand %xmm3, %xmm1
374 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
375 ; SSE2-NEXT: por %xmm1, %xmm0
378 ; SSE41-LABEL: gt_v2i64:
380 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
381 ; SSE41-NEXT: pxor %xmm2, %xmm1
382 ; SSE41-NEXT: pxor %xmm2, %xmm0
383 ; SSE41-NEXT: movdqa %xmm0, %xmm2
384 ; SSE41-NEXT: pcmpgtd %xmm1, %xmm2
385 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
386 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
387 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
388 ; SSE41-NEXT: pand %xmm3, %xmm1
389 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
390 ; SSE41-NEXT: por %xmm1, %xmm0
393 ; SSE42-LABEL: gt_v2i64:
395 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0
398 ; AVX-LABEL: gt_v2i64:
400 ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
403 ; XOP-LABEL: gt_v2i64:
405 ; XOP-NEXT: vpcomgtq %xmm1, %xmm0, %xmm0
407 %1 = icmp sgt <2 x i64> %a, %b
408 %2 = sext <2 x i1> %1 to <2 x i64>
412 define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
413 ; SSE-LABEL: gt_v4i32:
415 ; SSE-NEXT: pcmpgtd %xmm1, %xmm0
418 ; AVX-LABEL: gt_v4i32:
420 ; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
423 ; XOP-LABEL: gt_v4i32:
425 ; XOP-NEXT: vpcomgtd %xmm1, %xmm0, %xmm0
427 %1 = icmp sgt <4 x i32> %a, %b
428 %2 = sext <4 x i1> %1 to <4 x i32>
432 define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
433 ; SSE-LABEL: gt_v8i16:
435 ; SSE-NEXT: pcmpgtw %xmm1, %xmm0
438 ; AVX-LABEL: gt_v8i16:
440 ; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0
443 ; XOP-LABEL: gt_v8i16:
445 ; XOP-NEXT: vpcomgtw %xmm1, %xmm0, %xmm0
447 %1 = icmp sgt <8 x i16> %a, %b
448 %2 = sext <8 x i1> %1 to <8 x i16>
452 define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
453 ; SSE-LABEL: gt_v16i8:
455 ; SSE-NEXT: pcmpgtb %xmm1, %xmm0
458 ; AVX-LABEL: gt_v16i8:
460 ; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0
463 ; XOP-LABEL: gt_v16i8:
465 ; XOP-NEXT: vpcomgtb %xmm1, %xmm0, %xmm0
467 %1 = icmp sgt <16 x i8> %a, %b
468 %2 = sext <16 x i1> %1 to <16 x i8>
476 define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
477 ; SSE2-LABEL: le_v2i64:
479 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
480 ; SSE2-NEXT: pxor %xmm2, %xmm1
481 ; SSE2-NEXT: pxor %xmm2, %xmm0
482 ; SSE2-NEXT: movdqa %xmm0, %xmm2
483 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
484 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
485 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0
486 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
487 ; SSE2-NEXT: pand %xmm3, %xmm0
488 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
489 ; SSE2-NEXT: por %xmm0, %xmm1
490 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
491 ; SSE2-NEXT: pxor %xmm1, %xmm0
494 ; SSE41-LABEL: le_v2i64:
496 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
497 ; SSE41-NEXT: pxor %xmm2, %xmm1
498 ; SSE41-NEXT: pxor %xmm2, %xmm0
499 ; SSE41-NEXT: movdqa %xmm0, %xmm2
500 ; SSE41-NEXT: pcmpgtd %xmm1, %xmm2
501 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
502 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0
503 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
504 ; SSE41-NEXT: pand %xmm3, %xmm0
505 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
506 ; SSE41-NEXT: por %xmm0, %xmm1
507 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
508 ; SSE41-NEXT: pxor %xmm1, %xmm0
511 ; SSE42-LABEL: le_v2i64:
513 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0
514 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1
515 ; SSE42-NEXT: pxor %xmm1, %xmm0
518 ; AVX-LABEL: le_v2i64:
520 ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0
521 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
522 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
525 ; XOP-LABEL: le_v2i64:
527 ; XOP-NEXT: vpcomleq %xmm1, %xmm0, %xmm0
529 %1 = icmp sle <2 x i64> %a, %b
530 %2 = sext <2 x i1> %1 to <2 x i64>
534 define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
535 ; SSE-LABEL: le_v4i32:
537 ; SSE-NEXT: pcmpgtd %xmm1, %xmm0
538 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
539 ; SSE-NEXT: pxor %xmm1, %xmm0
542 ; AVX-LABEL: le_v4i32:
544 ; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
545 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
546 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
549 ; XOP-LABEL: le_v4i32:
551 ; XOP-NEXT: vpcomled %xmm1, %xmm0, %xmm0
553 %1 = icmp sle <4 x i32> %a, %b
554 %2 = sext <4 x i1> %1 to <4 x i32>
558 define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
559 ; SSE-LABEL: le_v8i16:
561 ; SSE-NEXT: pcmpgtw %xmm1, %xmm0
562 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
563 ; SSE-NEXT: pxor %xmm1, %xmm0
566 ; AVX-LABEL: le_v8i16:
568 ; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0
569 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
570 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
573 ; XOP-LABEL: le_v8i16:
575 ; XOP-NEXT: vpcomlew %xmm1, %xmm0, %xmm0
577 %1 = icmp sle <8 x i16> %a, %b
578 %2 = sext <8 x i1> %1 to <8 x i16>
582 define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
583 ; SSE-LABEL: le_v16i8:
585 ; SSE-NEXT: pcmpgtb %xmm1, %xmm0
586 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1
587 ; SSE-NEXT: pxor %xmm1, %xmm0
590 ; AVX-LABEL: le_v16i8:
592 ; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0
593 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1
594 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0
597 ; XOP-LABEL: le_v16i8:
599 ; XOP-NEXT: vpcomleb %xmm1, %xmm0, %xmm0
601 %1 = icmp sle <16 x i8> %a, %b
602 %2 = sext <16 x i1> %1 to <16 x i8>
610 define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
611 ; SSE2-LABEL: lt_v2i64:
613 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
614 ; SSE2-NEXT: pxor %xmm2, %xmm0
615 ; SSE2-NEXT: pxor %xmm2, %xmm1
616 ; SSE2-NEXT: movdqa %xmm1, %xmm2
617 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
618 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
619 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1
620 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
621 ; SSE2-NEXT: pand %xmm3, %xmm1
622 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
623 ; SSE2-NEXT: por %xmm1, %xmm0
626 ; SSE41-LABEL: lt_v2i64:
628 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
629 ; SSE41-NEXT: pxor %xmm2, %xmm0
630 ; SSE41-NEXT: pxor %xmm2, %xmm1
631 ; SSE41-NEXT: movdqa %xmm1, %xmm2
632 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2
633 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
634 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm1
635 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
636 ; SSE41-NEXT: pand %xmm3, %xmm1
637 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
638 ; SSE41-NEXT: por %xmm1, %xmm0
641 ; SSE42-LABEL: lt_v2i64:
643 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm1
644 ; SSE42-NEXT: movdqa %xmm1, %xmm0
647 ; AVX-LABEL: lt_v2i64:
649 ; AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0
652 ; XOP-LABEL: lt_v2i64:
654 ; XOP-NEXT: vpcomltq %xmm1, %xmm0, %xmm0
656 %1 = icmp slt <2 x i64> %a, %b
657 %2 = sext <2 x i1> %1 to <2 x i64>
661 define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
662 ; SSE-LABEL: lt_v4i32:
664 ; SSE-NEXT: pcmpgtd %xmm0, %xmm1
665 ; SSE-NEXT: movdqa %xmm1, %xmm0
668 ; AVX-LABEL: lt_v4i32:
670 ; AVX-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0
673 ; XOP-LABEL: lt_v4i32:
675 ; XOP-NEXT: vpcomltd %xmm1, %xmm0, %xmm0
677 %1 = icmp slt <4 x i32> %a, %b
678 %2 = sext <4 x i1> %1 to <4 x i32>
682 define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
683 ; SSE-LABEL: lt_v8i16:
685 ; SSE-NEXT: pcmpgtw %xmm0, %xmm1
686 ; SSE-NEXT: movdqa %xmm1, %xmm0
689 ; AVX-LABEL: lt_v8i16:
691 ; AVX-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0
694 ; XOP-LABEL: lt_v8i16:
696 ; XOP-NEXT: vpcomltw %xmm1, %xmm0, %xmm0
698 %1 = icmp slt <8 x i16> %a, %b
699 %2 = sext <8 x i1> %1 to <8 x i16>
703 define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
704 ; SSE-LABEL: lt_v16i8:
706 ; SSE-NEXT: pcmpgtb %xmm0, %xmm1
707 ; SSE-NEXT: movdqa %xmm1, %xmm0
710 ; AVX-LABEL: lt_v16i8:
712 ; AVX-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0
715 ; XOP-LABEL: lt_v16i8:
717 ; XOP-NEXT: vpcomltb %xmm1, %xmm0, %xmm0
719 %1 = icmp slt <16 x i8> %a, %b
720 %2 = sext <16 x i1> %1 to <16 x i8>