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=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE4
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F --check-prefix=AVX512BW --check-prefix=AVX512VL
9 define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) {
11 ; SSE2: # %bb.0: # %entry
12 ; SSE2-NEXT: movdqa %xmm1, %xmm2
13 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2
14 ; SSE2-NEXT: pand %xmm2, %xmm0
15 ; SSE2-NEXT: pandn %xmm1, %xmm2
16 ; SSE2-NEXT: por %xmm2, %xmm0
20 ; SSE4: # %bb.0: # %entry
21 ; SSE4-NEXT: pminsb %xmm1, %xmm0
25 ; AVX: # %bb.0: # %entry
26 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
29 %cmp = icmp slt <16 x i8> %a, %b
30 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
34 define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
36 ; SSE2: # %bb.0: # %entry
37 ; SSE2-NEXT: movdqa %xmm1, %xmm2
38 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2
39 ; SSE2-NEXT: pand %xmm2, %xmm0
40 ; SSE2-NEXT: pandn %xmm1, %xmm2
41 ; SSE2-NEXT: por %xmm2, %xmm0
45 ; SSE4: # %bb.0: # %entry
46 ; SSE4-NEXT: pminsb %xmm1, %xmm0
50 ; AVX: # %bb.0: # %entry
51 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
54 %cmp = icmp sle <16 x i8> %a, %b
55 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
59 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
61 ; SSE2: # %bb.0: # %entry
62 ; SSE2-NEXT: movdqa %xmm0, %xmm2
63 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
64 ; SSE2-NEXT: pand %xmm2, %xmm0
65 ; SSE2-NEXT: pandn %xmm1, %xmm2
66 ; SSE2-NEXT: por %xmm0, %xmm2
67 ; SSE2-NEXT: movdqa %xmm2, %xmm0
71 ; SSE4: # %bb.0: # %entry
72 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0
76 ; AVX: # %bb.0: # %entry
77 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
80 %cmp = icmp sgt <16 x i8> %a, %b
81 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
85 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
87 ; SSE2: # %bb.0: # %entry
88 ; SSE2-NEXT: movdqa %xmm0, %xmm2
89 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
90 ; SSE2-NEXT: pand %xmm2, %xmm0
91 ; SSE2-NEXT: pandn %xmm1, %xmm2
92 ; SSE2-NEXT: por %xmm0, %xmm2
93 ; SSE2-NEXT: movdqa %xmm2, %xmm0
97 ; SSE4: # %bb.0: # %entry
98 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0
102 ; AVX: # %bb.0: # %entry
103 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
106 %cmp = icmp sge <16 x i8> %a, %b
107 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
111 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
113 ; SSE: # %bb.0: # %entry
114 ; SSE-NEXT: pminub %xmm1, %xmm0
118 ; AVX: # %bb.0: # %entry
119 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
122 %cmp = icmp ult <16 x i8> %a, %b
123 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
127 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
129 ; SSE: # %bb.0: # %entry
130 ; SSE-NEXT: pminub %xmm1, %xmm0
134 ; AVX: # %bb.0: # %entry
135 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
138 %cmp = icmp ule <16 x i8> %a, %b
139 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
143 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
145 ; SSE: # %bb.0: # %entry
146 ; SSE-NEXT: pmaxub %xmm1, %xmm0
150 ; AVX: # %bb.0: # %entry
151 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
154 %cmp = icmp ugt <16 x i8> %a, %b
155 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
159 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
161 ; SSE: # %bb.0: # %entry
162 ; SSE-NEXT: pmaxub %xmm1, %xmm0
166 ; AVX: # %bb.0: # %entry
167 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
170 %cmp = icmp uge <16 x i8> %a, %b
171 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
175 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
177 ; SSE: # %bb.0: # %entry
178 ; SSE-NEXT: pminsw %xmm1, %xmm0
182 ; AVX: # %bb.0: # %entry
183 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
186 %cmp = icmp slt <8 x i16> %a, %b
187 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
191 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
193 ; SSE: # %bb.0: # %entry
194 ; SSE-NEXT: pminsw %xmm1, %xmm0
198 ; AVX: # %bb.0: # %entry
199 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
202 %cmp = icmp sle <8 x i16> %a, %b
203 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
207 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
209 ; SSE: # %bb.0: # %entry
210 ; SSE-NEXT: pmaxsw %xmm1, %xmm0
214 ; AVX: # %bb.0: # %entry
215 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
218 %cmp = icmp sgt <8 x i16> %a, %b
219 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
223 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
225 ; SSE: # %bb.0: # %entry
226 ; SSE-NEXT: pmaxsw %xmm1, %xmm0
230 ; AVX: # %bb.0: # %entry
231 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
234 %cmp = icmp sge <8 x i16> %a, %b
235 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
239 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
240 ; SSE2-LABEL: test13:
241 ; SSE2: # %bb.0: # %entry
242 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
243 ; SSE2-NEXT: pxor %xmm2, %xmm1
244 ; SSE2-NEXT: pxor %xmm2, %xmm0
245 ; SSE2-NEXT: pminsw %xmm1, %xmm0
246 ; SSE2-NEXT: pxor %xmm2, %xmm0
249 ; SSE4-LABEL: test13:
250 ; SSE4: # %bb.0: # %entry
251 ; SSE4-NEXT: pminuw %xmm1, %xmm0
255 ; AVX: # %bb.0: # %entry
256 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
259 %cmp = icmp ult <8 x i16> %a, %b
260 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
264 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
265 ; SSE2-LABEL: test14:
266 ; SSE2: # %bb.0: # %entry
267 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
268 ; SSE2-NEXT: pxor %xmm2, %xmm1
269 ; SSE2-NEXT: pxor %xmm2, %xmm0
270 ; SSE2-NEXT: pminsw %xmm1, %xmm0
271 ; SSE2-NEXT: pxor %xmm2, %xmm0
274 ; SSE4-LABEL: test14:
275 ; SSE4: # %bb.0: # %entry
276 ; SSE4-NEXT: pminuw %xmm1, %xmm0
280 ; AVX: # %bb.0: # %entry
281 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
284 %cmp = icmp ule <8 x i16> %a, %b
285 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
289 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
290 ; SSE2-LABEL: test15:
291 ; SSE2: # %bb.0: # %entry
292 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
293 ; SSE2-NEXT: pxor %xmm2, %xmm1
294 ; SSE2-NEXT: pxor %xmm2, %xmm0
295 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0
296 ; SSE2-NEXT: pxor %xmm2, %xmm0
299 ; SSE4-LABEL: test15:
300 ; SSE4: # %bb.0: # %entry
301 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0
305 ; AVX: # %bb.0: # %entry
306 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
309 %cmp = icmp ugt <8 x i16> %a, %b
310 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
314 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
315 ; SSE2-LABEL: test16:
316 ; SSE2: # %bb.0: # %entry
317 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
318 ; SSE2-NEXT: pxor %xmm2, %xmm1
319 ; SSE2-NEXT: pxor %xmm2, %xmm0
320 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0
321 ; SSE2-NEXT: pxor %xmm2, %xmm0
324 ; SSE4-LABEL: test16:
325 ; SSE4: # %bb.0: # %entry
326 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0
330 ; AVX: # %bb.0: # %entry
331 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
334 %cmp = icmp uge <8 x i16> %a, %b
335 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
339 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
340 ; SSE2-LABEL: test17:
341 ; SSE2: # %bb.0: # %entry
342 ; SSE2-NEXT: movdqa %xmm1, %xmm2
343 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
344 ; SSE2-NEXT: pand %xmm2, %xmm0
345 ; SSE2-NEXT: pandn %xmm1, %xmm2
346 ; SSE2-NEXT: por %xmm2, %xmm0
349 ; SSE4-LABEL: test17:
350 ; SSE4: # %bb.0: # %entry
351 ; SSE4-NEXT: pminsd %xmm1, %xmm0
355 ; AVX: # %bb.0: # %entry
356 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
359 %cmp = icmp slt <4 x i32> %a, %b
360 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
364 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
365 ; SSE2-LABEL: test18:
366 ; SSE2: # %bb.0: # %entry
367 ; SSE2-NEXT: movdqa %xmm1, %xmm2
368 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
369 ; SSE2-NEXT: pand %xmm2, %xmm0
370 ; SSE2-NEXT: pandn %xmm1, %xmm2
371 ; SSE2-NEXT: por %xmm2, %xmm0
374 ; SSE4-LABEL: test18:
375 ; SSE4: # %bb.0: # %entry
376 ; SSE4-NEXT: pminsd %xmm1, %xmm0
380 ; AVX: # %bb.0: # %entry
381 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
384 %cmp = icmp sle <4 x i32> %a, %b
385 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
389 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
390 ; SSE2-LABEL: test19:
391 ; SSE2: # %bb.0: # %entry
392 ; SSE2-NEXT: movdqa %xmm0, %xmm2
393 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
394 ; SSE2-NEXT: pand %xmm2, %xmm0
395 ; SSE2-NEXT: pandn %xmm1, %xmm2
396 ; SSE2-NEXT: por %xmm0, %xmm2
397 ; SSE2-NEXT: movdqa %xmm2, %xmm0
400 ; SSE4-LABEL: test19:
401 ; SSE4: # %bb.0: # %entry
402 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0
406 ; AVX: # %bb.0: # %entry
407 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
410 %cmp = icmp sgt <4 x i32> %a, %b
411 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
415 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
416 ; SSE2-LABEL: test20:
417 ; SSE2: # %bb.0: # %entry
418 ; SSE2-NEXT: movdqa %xmm0, %xmm2
419 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
420 ; SSE2-NEXT: pand %xmm2, %xmm0
421 ; SSE2-NEXT: pandn %xmm1, %xmm2
422 ; SSE2-NEXT: por %xmm0, %xmm2
423 ; SSE2-NEXT: movdqa %xmm2, %xmm0
426 ; SSE4-LABEL: test20:
427 ; SSE4: # %bb.0: # %entry
428 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0
432 ; AVX: # %bb.0: # %entry
433 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
436 %cmp = icmp sge <4 x i32> %a, %b
437 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
441 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
442 ; SSE2-LABEL: test21:
443 ; SSE2: # %bb.0: # %entry
444 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
445 ; SSE2-NEXT: movdqa %xmm0, %xmm3
446 ; SSE2-NEXT: pxor %xmm2, %xmm3
447 ; SSE2-NEXT: pxor %xmm1, %xmm2
448 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
449 ; SSE2-NEXT: pand %xmm2, %xmm0
450 ; SSE2-NEXT: pandn %xmm1, %xmm2
451 ; SSE2-NEXT: por %xmm2, %xmm0
454 ; SSE4-LABEL: test21:
455 ; SSE4: # %bb.0: # %entry
456 ; SSE4-NEXT: pminud %xmm1, %xmm0
460 ; AVX: # %bb.0: # %entry
461 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
464 %cmp = icmp ult <4 x i32> %a, %b
465 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
469 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
470 ; SSE2-LABEL: test22:
471 ; SSE2: # %bb.0: # %entry
472 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
473 ; SSE2-NEXT: movdqa %xmm0, %xmm3
474 ; SSE2-NEXT: pxor %xmm2, %xmm3
475 ; SSE2-NEXT: pxor %xmm1, %xmm2
476 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
477 ; SSE2-NEXT: pand %xmm2, %xmm0
478 ; SSE2-NEXT: pandn %xmm1, %xmm2
479 ; SSE2-NEXT: por %xmm2, %xmm0
482 ; SSE4-LABEL: test22:
483 ; SSE4: # %bb.0: # %entry
484 ; SSE4-NEXT: pminud %xmm1, %xmm0
488 ; AVX: # %bb.0: # %entry
489 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
492 %cmp = icmp ule <4 x i32> %a, %b
493 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
497 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
498 ; SSE2-LABEL: test23:
499 ; SSE2: # %bb.0: # %entry
500 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
501 ; SSE2-NEXT: movdqa %xmm1, %xmm3
502 ; SSE2-NEXT: pxor %xmm2, %xmm3
503 ; SSE2-NEXT: pxor %xmm0, %xmm2
504 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
505 ; SSE2-NEXT: pand %xmm2, %xmm0
506 ; SSE2-NEXT: pandn %xmm1, %xmm2
507 ; SSE2-NEXT: por %xmm2, %xmm0
510 ; SSE4-LABEL: test23:
511 ; SSE4: # %bb.0: # %entry
512 ; SSE4-NEXT: pmaxud %xmm1, %xmm0
516 ; AVX: # %bb.0: # %entry
517 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
520 %cmp = icmp ugt <4 x i32> %a, %b
521 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
525 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
526 ; SSE2-LABEL: test24:
527 ; SSE2: # %bb.0: # %entry
528 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
529 ; SSE2-NEXT: movdqa %xmm1, %xmm3
530 ; SSE2-NEXT: pxor %xmm2, %xmm3
531 ; SSE2-NEXT: pxor %xmm0, %xmm2
532 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
533 ; SSE2-NEXT: pand %xmm2, %xmm0
534 ; SSE2-NEXT: pandn %xmm1, %xmm2
535 ; SSE2-NEXT: por %xmm2, %xmm0
538 ; SSE4-LABEL: test24:
539 ; SSE4: # %bb.0: # %entry
540 ; SSE4-NEXT: pmaxud %xmm1, %xmm0
544 ; AVX: # %bb.0: # %entry
545 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
548 %cmp = icmp uge <4 x i32> %a, %b
549 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
553 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
554 ; SSE2-LABEL: test25:
555 ; SSE2: # %bb.0: # %entry
556 ; SSE2-NEXT: movdqa %xmm2, %xmm4
557 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm4
558 ; SSE2-NEXT: pand %xmm4, %xmm0
559 ; SSE2-NEXT: pandn %xmm2, %xmm4
560 ; SSE2-NEXT: por %xmm4, %xmm0
561 ; SSE2-NEXT: movdqa %xmm3, %xmm2
562 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
563 ; SSE2-NEXT: pand %xmm2, %xmm1
564 ; SSE2-NEXT: pandn %xmm3, %xmm2
565 ; SSE2-NEXT: por %xmm2, %xmm1
568 ; SSE4-LABEL: test25:
569 ; SSE4: # %bb.0: # %entry
570 ; SSE4-NEXT: pminsb %xmm2, %xmm0
571 ; SSE4-NEXT: pminsb %xmm3, %xmm1
574 ; AVX1-LABEL: test25:
575 ; AVX1: # %bb.0: # %entry
576 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
577 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
578 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
579 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
580 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
583 ; AVX2-LABEL: test25:
584 ; AVX2: # %bb.0: # %entry
585 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
588 ; AVX512F-LABEL: test25:
589 ; AVX512F: # %bb.0: # %entry
590 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0
593 %cmp = icmp slt <32 x i8> %a, %b
594 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
598 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
599 ; SSE2-LABEL: test26:
600 ; SSE2: # %bb.0: # %entry
601 ; SSE2-NEXT: movdqa %xmm2, %xmm4
602 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm4
603 ; SSE2-NEXT: pand %xmm4, %xmm0
604 ; SSE2-NEXT: pandn %xmm2, %xmm4
605 ; SSE2-NEXT: por %xmm4, %xmm0
606 ; SSE2-NEXT: movdqa %xmm3, %xmm2
607 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
608 ; SSE2-NEXT: pand %xmm2, %xmm1
609 ; SSE2-NEXT: pandn %xmm3, %xmm2
610 ; SSE2-NEXT: por %xmm2, %xmm1
613 ; SSE4-LABEL: test26:
614 ; SSE4: # %bb.0: # %entry
615 ; SSE4-NEXT: pminsb %xmm2, %xmm0
616 ; SSE4-NEXT: pminsb %xmm3, %xmm1
619 ; AVX1-LABEL: test26:
620 ; AVX1: # %bb.0: # %entry
621 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
622 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
623 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
624 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
625 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
628 ; AVX2-LABEL: test26:
629 ; AVX2: # %bb.0: # %entry
630 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
633 ; AVX512F-LABEL: test26:
634 ; AVX512F: # %bb.0: # %entry
635 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0
638 %cmp = icmp sle <32 x i8> %a, %b
639 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
643 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
644 ; SSE2-LABEL: test27:
645 ; SSE2: # %bb.0: # %entry
646 ; SSE2-NEXT: movdqa %xmm0, %xmm4
647 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
648 ; SSE2-NEXT: pand %xmm4, %xmm0
649 ; SSE2-NEXT: pandn %xmm2, %xmm4
650 ; SSE2-NEXT: por %xmm0, %xmm4
651 ; SSE2-NEXT: movdqa %xmm1, %xmm2
652 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm2
653 ; SSE2-NEXT: pand %xmm2, %xmm1
654 ; SSE2-NEXT: pandn %xmm3, %xmm2
655 ; SSE2-NEXT: por %xmm1, %xmm2
656 ; SSE2-NEXT: movdqa %xmm4, %xmm0
657 ; SSE2-NEXT: movdqa %xmm2, %xmm1
660 ; SSE4-LABEL: test27:
661 ; SSE4: # %bb.0: # %entry
662 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0
663 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1
666 ; AVX1-LABEL: test27:
667 ; AVX1: # %bb.0: # %entry
668 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
669 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
670 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
671 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
672 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
675 ; AVX2-LABEL: test27:
676 ; AVX2: # %bb.0: # %entry
677 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
680 ; AVX512F-LABEL: test27:
681 ; AVX512F: # %bb.0: # %entry
682 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
685 %cmp = icmp sgt <32 x i8> %a, %b
686 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
690 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
691 ; SSE2-LABEL: test28:
692 ; SSE2: # %bb.0: # %entry
693 ; SSE2-NEXT: movdqa %xmm0, %xmm4
694 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
695 ; SSE2-NEXT: pand %xmm4, %xmm0
696 ; SSE2-NEXT: pandn %xmm2, %xmm4
697 ; SSE2-NEXT: por %xmm0, %xmm4
698 ; SSE2-NEXT: movdqa %xmm1, %xmm2
699 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm2
700 ; SSE2-NEXT: pand %xmm2, %xmm1
701 ; SSE2-NEXT: pandn %xmm3, %xmm2
702 ; SSE2-NEXT: por %xmm1, %xmm2
703 ; SSE2-NEXT: movdqa %xmm4, %xmm0
704 ; SSE2-NEXT: movdqa %xmm2, %xmm1
707 ; SSE4-LABEL: test28:
708 ; SSE4: # %bb.0: # %entry
709 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0
710 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1
713 ; AVX1-LABEL: test28:
714 ; AVX1: # %bb.0: # %entry
715 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
716 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
717 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
718 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
719 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
722 ; AVX2-LABEL: test28:
723 ; AVX2: # %bb.0: # %entry
724 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
727 ; AVX512F-LABEL: test28:
728 ; AVX512F: # %bb.0: # %entry
729 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
732 %cmp = icmp sge <32 x i8> %a, %b
733 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
737 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
739 ; SSE: # %bb.0: # %entry
740 ; SSE-NEXT: pminub %xmm2, %xmm0
741 ; SSE-NEXT: pminub %xmm3, %xmm1
744 ; AVX1-LABEL: test29:
745 ; AVX1: # %bb.0: # %entry
746 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
747 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
748 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
749 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
750 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
753 ; AVX2-LABEL: test29:
754 ; AVX2: # %bb.0: # %entry
755 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
758 ; AVX512F-LABEL: test29:
759 ; AVX512F: # %bb.0: # %entry
760 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0
763 %cmp = icmp ult <32 x i8> %a, %b
764 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
768 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
770 ; SSE: # %bb.0: # %entry
771 ; SSE-NEXT: pminub %xmm2, %xmm0
772 ; SSE-NEXT: pminub %xmm3, %xmm1
775 ; AVX1-LABEL: test30:
776 ; AVX1: # %bb.0: # %entry
777 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
778 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
779 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
780 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
781 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
784 ; AVX2-LABEL: test30:
785 ; AVX2: # %bb.0: # %entry
786 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
789 ; AVX512F-LABEL: test30:
790 ; AVX512F: # %bb.0: # %entry
791 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0
794 %cmp = icmp ule <32 x i8> %a, %b
795 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
799 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
801 ; SSE: # %bb.0: # %entry
802 ; SSE-NEXT: pmaxub %xmm2, %xmm0
803 ; SSE-NEXT: pmaxub %xmm3, %xmm1
806 ; AVX1-LABEL: test31:
807 ; AVX1: # %bb.0: # %entry
808 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
809 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
810 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
811 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
812 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
815 ; AVX2-LABEL: test31:
816 ; AVX2: # %bb.0: # %entry
817 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
820 ; AVX512F-LABEL: test31:
821 ; AVX512F: # %bb.0: # %entry
822 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
825 %cmp = icmp ugt <32 x i8> %a, %b
826 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
830 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
832 ; SSE: # %bb.0: # %entry
833 ; SSE-NEXT: pmaxub %xmm2, %xmm0
834 ; SSE-NEXT: pmaxub %xmm3, %xmm1
837 ; AVX1-LABEL: test32:
838 ; AVX1: # %bb.0: # %entry
839 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
840 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
841 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
842 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
843 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
846 ; AVX2-LABEL: test32:
847 ; AVX2: # %bb.0: # %entry
848 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
851 ; AVX512F-LABEL: test32:
852 ; AVX512F: # %bb.0: # %entry
853 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
856 %cmp = icmp uge <32 x i8> %a, %b
857 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
861 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
863 ; SSE: # %bb.0: # %entry
864 ; SSE-NEXT: pminsw %xmm2, %xmm0
865 ; SSE-NEXT: pminsw %xmm3, %xmm1
868 ; AVX1-LABEL: test33:
869 ; AVX1: # %bb.0: # %entry
870 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
871 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
872 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
873 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
874 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
877 ; AVX2-LABEL: test33:
878 ; AVX2: # %bb.0: # %entry
879 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
882 ; AVX512F-LABEL: test33:
883 ; AVX512F: # %bb.0: # %entry
884 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0
887 %cmp = icmp slt <16 x i16> %a, %b
888 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
892 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
894 ; SSE: # %bb.0: # %entry
895 ; SSE-NEXT: pminsw %xmm2, %xmm0
896 ; SSE-NEXT: pminsw %xmm3, %xmm1
899 ; AVX1-LABEL: test34:
900 ; AVX1: # %bb.0: # %entry
901 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
902 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
903 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
904 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
905 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
908 ; AVX2-LABEL: test34:
909 ; AVX2: # %bb.0: # %entry
910 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
913 ; AVX512F-LABEL: test34:
914 ; AVX512F: # %bb.0: # %entry
915 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0
918 %cmp = icmp sle <16 x i16> %a, %b
919 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
923 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
925 ; SSE: # %bb.0: # %entry
926 ; SSE-NEXT: pmaxsw %xmm2, %xmm0
927 ; SSE-NEXT: pmaxsw %xmm3, %xmm1
930 ; AVX1-LABEL: test35:
931 ; AVX1: # %bb.0: # %entry
932 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
933 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
934 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
935 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
936 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
939 ; AVX2-LABEL: test35:
940 ; AVX2: # %bb.0: # %entry
941 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
944 ; AVX512F-LABEL: test35:
945 ; AVX512F: # %bb.0: # %entry
946 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
949 %cmp = icmp sgt <16 x i16> %a, %b
950 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
954 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
956 ; SSE: # %bb.0: # %entry
957 ; SSE-NEXT: pmaxsw %xmm2, %xmm0
958 ; SSE-NEXT: pmaxsw %xmm3, %xmm1
961 ; AVX1-LABEL: test36:
962 ; AVX1: # %bb.0: # %entry
963 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
964 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
965 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
966 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
967 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
970 ; AVX2-LABEL: test36:
971 ; AVX2: # %bb.0: # %entry
972 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
975 ; AVX512F-LABEL: test36:
976 ; AVX512F: # %bb.0: # %entry
977 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
980 %cmp = icmp sge <16 x i16> %a, %b
981 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
985 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
986 ; SSE2-LABEL: test37:
987 ; SSE2: # %bb.0: # %entry
988 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
989 ; SSE2-NEXT: pxor %xmm4, %xmm2
990 ; SSE2-NEXT: pxor %xmm4, %xmm0
991 ; SSE2-NEXT: pminsw %xmm2, %xmm0
992 ; SSE2-NEXT: pxor %xmm4, %xmm0
993 ; SSE2-NEXT: pxor %xmm4, %xmm3
994 ; SSE2-NEXT: pxor %xmm4, %xmm1
995 ; SSE2-NEXT: pminsw %xmm3, %xmm1
996 ; SSE2-NEXT: pxor %xmm4, %xmm1
999 ; SSE4-LABEL: test37:
1000 ; SSE4: # %bb.0: # %entry
1001 ; SSE4-NEXT: pminuw %xmm2, %xmm0
1002 ; SSE4-NEXT: pminuw %xmm3, %xmm1
1005 ; AVX1-LABEL: test37:
1006 ; AVX1: # %bb.0: # %entry
1007 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1008 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1009 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
1010 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1011 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1014 ; AVX2-LABEL: test37:
1015 ; AVX2: # %bb.0: # %entry
1016 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1019 ; AVX512F-LABEL: test37:
1020 ; AVX512F: # %bb.0: # %entry
1021 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1022 ; AVX512F-NEXT: retq
1024 %cmp = icmp ult <16 x i16> %a, %b
1025 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1029 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1030 ; SSE2-LABEL: test38:
1031 ; SSE2: # %bb.0: # %entry
1032 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1033 ; SSE2-NEXT: pxor %xmm4, %xmm2
1034 ; SSE2-NEXT: pxor %xmm4, %xmm0
1035 ; SSE2-NEXT: pminsw %xmm2, %xmm0
1036 ; SSE2-NEXT: pxor %xmm4, %xmm0
1037 ; SSE2-NEXT: pxor %xmm4, %xmm3
1038 ; SSE2-NEXT: pxor %xmm4, %xmm1
1039 ; SSE2-NEXT: pminsw %xmm3, %xmm1
1040 ; SSE2-NEXT: pxor %xmm4, %xmm1
1043 ; SSE4-LABEL: test38:
1044 ; SSE4: # %bb.0: # %entry
1045 ; SSE4-NEXT: pminuw %xmm2, %xmm0
1046 ; SSE4-NEXT: pminuw %xmm3, %xmm1
1049 ; AVX1-LABEL: test38:
1050 ; AVX1: # %bb.0: # %entry
1051 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1052 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1053 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
1054 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1055 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1058 ; AVX2-LABEL: test38:
1059 ; AVX2: # %bb.0: # %entry
1060 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1063 ; AVX512F-LABEL: test38:
1064 ; AVX512F: # %bb.0: # %entry
1065 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1066 ; AVX512F-NEXT: retq
1068 %cmp = icmp ule <16 x i16> %a, %b
1069 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1073 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1074 ; SSE2-LABEL: test39:
1075 ; SSE2: # %bb.0: # %entry
1076 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1077 ; SSE2-NEXT: pxor %xmm4, %xmm2
1078 ; SSE2-NEXT: pxor %xmm4, %xmm0
1079 ; SSE2-NEXT: pmaxsw %xmm2, %xmm0
1080 ; SSE2-NEXT: pxor %xmm4, %xmm0
1081 ; SSE2-NEXT: pxor %xmm4, %xmm3
1082 ; SSE2-NEXT: pxor %xmm4, %xmm1
1083 ; SSE2-NEXT: pmaxsw %xmm3, %xmm1
1084 ; SSE2-NEXT: pxor %xmm4, %xmm1
1087 ; SSE4-LABEL: test39:
1088 ; SSE4: # %bb.0: # %entry
1089 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0
1090 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1
1093 ; AVX1-LABEL: test39:
1094 ; AVX1: # %bb.0: # %entry
1095 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1096 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1097 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
1098 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
1099 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1102 ; AVX2-LABEL: test39:
1103 ; AVX2: # %bb.0: # %entry
1104 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
1107 ; AVX512F-LABEL: test39:
1108 ; AVX512F: # %bb.0: # %entry
1109 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
1110 ; AVX512F-NEXT: retq
1112 %cmp = icmp ugt <16 x i16> %a, %b
1113 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1117 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1118 ; SSE2-LABEL: test40:
1119 ; SSE2: # %bb.0: # %entry
1120 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1121 ; SSE2-NEXT: pxor %xmm4, %xmm2
1122 ; SSE2-NEXT: pxor %xmm4, %xmm0
1123 ; SSE2-NEXT: pmaxsw %xmm2, %xmm0
1124 ; SSE2-NEXT: pxor %xmm4, %xmm0
1125 ; SSE2-NEXT: pxor %xmm4, %xmm3
1126 ; SSE2-NEXT: pxor %xmm4, %xmm1
1127 ; SSE2-NEXT: pmaxsw %xmm3, %xmm1
1128 ; SSE2-NEXT: pxor %xmm4, %xmm1
1131 ; SSE4-LABEL: test40:
1132 ; SSE4: # %bb.0: # %entry
1133 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0
1134 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1
1137 ; AVX1-LABEL: test40:
1138 ; AVX1: # %bb.0: # %entry
1139 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1140 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1141 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
1142 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
1143 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1146 ; AVX2-LABEL: test40:
1147 ; AVX2: # %bb.0: # %entry
1148 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
1151 ; AVX512F-LABEL: test40:
1152 ; AVX512F: # %bb.0: # %entry
1153 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
1154 ; AVX512F-NEXT: retq
1156 %cmp = icmp uge <16 x i16> %a, %b
1157 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1161 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1162 ; SSE2-LABEL: test41:
1163 ; SSE2: # %bb.0: # %entry
1164 ; SSE2-NEXT: movdqa %xmm2, %xmm4
1165 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
1166 ; SSE2-NEXT: pand %xmm4, %xmm0
1167 ; SSE2-NEXT: pandn %xmm2, %xmm4
1168 ; SSE2-NEXT: por %xmm4, %xmm0
1169 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1170 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
1171 ; SSE2-NEXT: pand %xmm2, %xmm1
1172 ; SSE2-NEXT: pandn %xmm3, %xmm2
1173 ; SSE2-NEXT: por %xmm2, %xmm1
1176 ; SSE4-LABEL: test41:
1177 ; SSE4: # %bb.0: # %entry
1178 ; SSE4-NEXT: pminsd %xmm2, %xmm0
1179 ; SSE4-NEXT: pminsd %xmm3, %xmm1
1182 ; AVX1-LABEL: test41:
1183 ; AVX1: # %bb.0: # %entry
1184 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1185 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1186 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
1187 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
1188 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1191 ; AVX2-LABEL: test41:
1192 ; AVX2: # %bb.0: # %entry
1193 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1196 ; AVX512F-LABEL: test41:
1197 ; AVX512F: # %bb.0: # %entry
1198 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1199 ; AVX512F-NEXT: retq
1201 %cmp = icmp slt <8 x i32> %a, %b
1202 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1206 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1207 ; SSE2-LABEL: test42:
1208 ; SSE2: # %bb.0: # %entry
1209 ; SSE2-NEXT: movdqa %xmm2, %xmm4
1210 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
1211 ; SSE2-NEXT: pand %xmm4, %xmm0
1212 ; SSE2-NEXT: pandn %xmm2, %xmm4
1213 ; SSE2-NEXT: por %xmm4, %xmm0
1214 ; SSE2-NEXT: movdqa %xmm3, %xmm2
1215 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
1216 ; SSE2-NEXT: pand %xmm2, %xmm1
1217 ; SSE2-NEXT: pandn %xmm3, %xmm2
1218 ; SSE2-NEXT: por %xmm2, %xmm1
1221 ; SSE4-LABEL: test42:
1222 ; SSE4: # %bb.0: # %entry
1223 ; SSE4-NEXT: pminsd %xmm2, %xmm0
1224 ; SSE4-NEXT: pminsd %xmm3, %xmm1
1227 ; AVX1-LABEL: test42:
1228 ; AVX1: # %bb.0: # %entry
1229 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1230 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1231 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
1232 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
1233 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1236 ; AVX2-LABEL: test42:
1237 ; AVX2: # %bb.0: # %entry
1238 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1241 ; AVX512F-LABEL: test42:
1242 ; AVX512F: # %bb.0: # %entry
1243 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1244 ; AVX512F-NEXT: retq
1246 %cmp = icmp sle <8 x i32> %a, %b
1247 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1251 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1252 ; SSE2-LABEL: test43:
1253 ; SSE2: # %bb.0: # %entry
1254 ; SSE2-NEXT: movdqa %xmm0, %xmm4
1255 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
1256 ; SSE2-NEXT: pand %xmm4, %xmm0
1257 ; SSE2-NEXT: pandn %xmm2, %xmm4
1258 ; SSE2-NEXT: por %xmm0, %xmm4
1259 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1260 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
1261 ; SSE2-NEXT: pand %xmm2, %xmm1
1262 ; SSE2-NEXT: pandn %xmm3, %xmm2
1263 ; SSE2-NEXT: por %xmm1, %xmm2
1264 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1265 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1268 ; SSE4-LABEL: test43:
1269 ; SSE4: # %bb.0: # %entry
1270 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0
1271 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1
1274 ; AVX1-LABEL: test43:
1275 ; AVX1: # %bb.0: # %entry
1276 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1277 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1278 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
1279 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
1280 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1283 ; AVX2-LABEL: test43:
1284 ; AVX2: # %bb.0: # %entry
1285 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1288 ; AVX512F-LABEL: test43:
1289 ; AVX512F: # %bb.0: # %entry
1290 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1291 ; AVX512F-NEXT: retq
1293 %cmp = icmp sgt <8 x i32> %a, %b
1294 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1298 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1299 ; SSE2-LABEL: test44:
1300 ; SSE2: # %bb.0: # %entry
1301 ; SSE2-NEXT: movdqa %xmm0, %xmm4
1302 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
1303 ; SSE2-NEXT: pand %xmm4, %xmm0
1304 ; SSE2-NEXT: pandn %xmm2, %xmm4
1305 ; SSE2-NEXT: por %xmm0, %xmm4
1306 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1307 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
1308 ; SSE2-NEXT: pand %xmm2, %xmm1
1309 ; SSE2-NEXT: pandn %xmm3, %xmm2
1310 ; SSE2-NEXT: por %xmm1, %xmm2
1311 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1312 ; SSE2-NEXT: movdqa %xmm2, %xmm1
1315 ; SSE4-LABEL: test44:
1316 ; SSE4: # %bb.0: # %entry
1317 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0
1318 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1
1321 ; AVX1-LABEL: test44:
1322 ; AVX1: # %bb.0: # %entry
1323 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1324 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1325 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
1326 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
1327 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1330 ; AVX2-LABEL: test44:
1331 ; AVX2: # %bb.0: # %entry
1332 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1335 ; AVX512F-LABEL: test44:
1336 ; AVX512F: # %bb.0: # %entry
1337 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1338 ; AVX512F-NEXT: retq
1340 %cmp = icmp sge <8 x i32> %a, %b
1341 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1345 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1346 ; SSE2-LABEL: test45:
1347 ; SSE2: # %bb.0: # %entry
1348 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1349 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1350 ; SSE2-NEXT: pxor %xmm4, %xmm5
1351 ; SSE2-NEXT: movdqa %xmm2, %xmm6
1352 ; SSE2-NEXT: pxor %xmm4, %xmm6
1353 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
1354 ; SSE2-NEXT: pand %xmm6, %xmm0
1355 ; SSE2-NEXT: pandn %xmm2, %xmm6
1356 ; SSE2-NEXT: por %xmm6, %xmm0
1357 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1358 ; SSE2-NEXT: pxor %xmm4, %xmm2
1359 ; SSE2-NEXT: pxor %xmm3, %xmm4
1360 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
1361 ; SSE2-NEXT: pand %xmm4, %xmm1
1362 ; SSE2-NEXT: pandn %xmm3, %xmm4
1363 ; SSE2-NEXT: por %xmm4, %xmm1
1366 ; SSE4-LABEL: test45:
1367 ; SSE4: # %bb.0: # %entry
1368 ; SSE4-NEXT: pminud %xmm2, %xmm0
1369 ; SSE4-NEXT: pminud %xmm3, %xmm1
1372 ; AVX1-LABEL: test45:
1373 ; AVX1: # %bb.0: # %entry
1374 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1375 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1376 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
1377 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
1378 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1381 ; AVX2-LABEL: test45:
1382 ; AVX2: # %bb.0: # %entry
1383 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
1386 ; AVX512F-LABEL: test45:
1387 ; AVX512F: # %bb.0: # %entry
1388 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0
1389 ; AVX512F-NEXT: retq
1391 %cmp = icmp ult <8 x i32> %a, %b
1392 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1396 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1397 ; SSE2-LABEL: test46:
1398 ; SSE2: # %bb.0: # %entry
1399 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1400 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1401 ; SSE2-NEXT: pxor %xmm4, %xmm5
1402 ; SSE2-NEXT: movdqa %xmm2, %xmm6
1403 ; SSE2-NEXT: pxor %xmm4, %xmm6
1404 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
1405 ; SSE2-NEXT: pand %xmm6, %xmm0
1406 ; SSE2-NEXT: pandn %xmm2, %xmm6
1407 ; SSE2-NEXT: por %xmm6, %xmm0
1408 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1409 ; SSE2-NEXT: pxor %xmm4, %xmm2
1410 ; SSE2-NEXT: pxor %xmm3, %xmm4
1411 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
1412 ; SSE2-NEXT: pand %xmm4, %xmm1
1413 ; SSE2-NEXT: pandn %xmm3, %xmm4
1414 ; SSE2-NEXT: por %xmm4, %xmm1
1417 ; SSE4-LABEL: test46:
1418 ; SSE4: # %bb.0: # %entry
1419 ; SSE4-NEXT: pminud %xmm2, %xmm0
1420 ; SSE4-NEXT: pminud %xmm3, %xmm1
1423 ; AVX1-LABEL: test46:
1424 ; AVX1: # %bb.0: # %entry
1425 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1426 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1427 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
1428 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
1429 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1432 ; AVX2-LABEL: test46:
1433 ; AVX2: # %bb.0: # %entry
1434 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
1437 ; AVX512F-LABEL: test46:
1438 ; AVX512F: # %bb.0: # %entry
1439 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0
1440 ; AVX512F-NEXT: retq
1442 %cmp = icmp ule <8 x i32> %a, %b
1443 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1447 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1448 ; SSE2-LABEL: test47:
1449 ; SSE2: # %bb.0: # %entry
1450 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1451 ; SSE2-NEXT: movdqa %xmm2, %xmm6
1452 ; SSE2-NEXT: pxor %xmm5, %xmm6
1453 ; SSE2-NEXT: movdqa %xmm0, %xmm4
1454 ; SSE2-NEXT: pxor %xmm5, %xmm4
1455 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
1456 ; SSE2-NEXT: pand %xmm4, %xmm0
1457 ; SSE2-NEXT: pandn %xmm2, %xmm4
1458 ; SSE2-NEXT: por %xmm0, %xmm4
1459 ; SSE2-NEXT: movdqa %xmm3, %xmm0
1460 ; SSE2-NEXT: pxor %xmm5, %xmm0
1461 ; SSE2-NEXT: pxor %xmm1, %xmm5
1462 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5
1463 ; SSE2-NEXT: pand %xmm5, %xmm1
1464 ; SSE2-NEXT: pandn %xmm3, %xmm5
1465 ; SSE2-NEXT: por %xmm5, %xmm1
1466 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1469 ; SSE4-LABEL: test47:
1470 ; SSE4: # %bb.0: # %entry
1471 ; SSE4-NEXT: pmaxud %xmm2, %xmm0
1472 ; SSE4-NEXT: pmaxud %xmm3, %xmm1
1475 ; AVX1-LABEL: test47:
1476 ; AVX1: # %bb.0: # %entry
1477 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1478 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1479 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
1480 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
1481 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1484 ; AVX2-LABEL: test47:
1485 ; AVX2: # %bb.0: # %entry
1486 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
1489 ; AVX512F-LABEL: test47:
1490 ; AVX512F: # %bb.0: # %entry
1491 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
1492 ; AVX512F-NEXT: retq
1494 %cmp = icmp ugt <8 x i32> %a, %b
1495 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1499 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1500 ; SSE2-LABEL: test48:
1501 ; SSE2: # %bb.0: # %entry
1502 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1503 ; SSE2-NEXT: movdqa %xmm2, %xmm6
1504 ; SSE2-NEXT: pxor %xmm5, %xmm6
1505 ; SSE2-NEXT: movdqa %xmm0, %xmm4
1506 ; SSE2-NEXT: pxor %xmm5, %xmm4
1507 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
1508 ; SSE2-NEXT: pand %xmm4, %xmm0
1509 ; SSE2-NEXT: pandn %xmm2, %xmm4
1510 ; SSE2-NEXT: por %xmm0, %xmm4
1511 ; SSE2-NEXT: movdqa %xmm3, %xmm0
1512 ; SSE2-NEXT: pxor %xmm5, %xmm0
1513 ; SSE2-NEXT: pxor %xmm1, %xmm5
1514 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5
1515 ; SSE2-NEXT: pand %xmm5, %xmm1
1516 ; SSE2-NEXT: pandn %xmm3, %xmm5
1517 ; SSE2-NEXT: por %xmm5, %xmm1
1518 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1521 ; SSE4-LABEL: test48:
1522 ; SSE4: # %bb.0: # %entry
1523 ; SSE4-NEXT: pmaxud %xmm2, %xmm0
1524 ; SSE4-NEXT: pmaxud %xmm3, %xmm1
1527 ; AVX1-LABEL: test48:
1528 ; AVX1: # %bb.0: # %entry
1529 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1530 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1531 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
1532 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
1533 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1536 ; AVX2-LABEL: test48:
1537 ; AVX2: # %bb.0: # %entry
1538 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
1541 ; AVX512F-LABEL: test48:
1542 ; AVX512F: # %bb.0: # %entry
1543 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
1544 ; AVX512F-NEXT: retq
1546 %cmp = icmp uge <8 x i32> %a, %b
1547 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1551 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1552 ; SSE2-LABEL: test49:
1553 ; SSE2: # %bb.0: # %entry
1554 ; SSE2-NEXT: movdqa %xmm0, %xmm2
1555 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
1556 ; SSE2-NEXT: pand %xmm2, %xmm0
1557 ; SSE2-NEXT: pandn %xmm1, %xmm2
1558 ; SSE2-NEXT: por %xmm0, %xmm2
1559 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1562 ; SSE4-LABEL: test49:
1563 ; SSE4: # %bb.0: # %entry
1564 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0
1567 ; AVX-LABEL: test49:
1568 ; AVX: # %bb.0: # %entry
1569 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
1572 %cmp = icmp slt <16 x i8> %a, %b
1573 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1577 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1578 ; SSE2-LABEL: test50:
1579 ; SSE2: # %bb.0: # %entry
1580 ; SSE2-NEXT: movdqa %xmm0, %xmm2
1581 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
1582 ; SSE2-NEXT: pand %xmm2, %xmm0
1583 ; SSE2-NEXT: pandn %xmm1, %xmm2
1584 ; SSE2-NEXT: por %xmm0, %xmm2
1585 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1588 ; SSE4-LABEL: test50:
1589 ; SSE4: # %bb.0: # %entry
1590 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0
1593 ; AVX-LABEL: test50:
1594 ; AVX: # %bb.0: # %entry
1595 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
1598 %cmp = icmp sle <16 x i8> %a, %b
1599 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1603 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1604 ; SSE2-LABEL: test51:
1605 ; SSE2: # %bb.0: # %entry
1606 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1607 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2
1608 ; SSE2-NEXT: pand %xmm2, %xmm0
1609 ; SSE2-NEXT: pandn %xmm1, %xmm2
1610 ; SSE2-NEXT: por %xmm2, %xmm0
1613 ; SSE4-LABEL: test51:
1614 ; SSE4: # %bb.0: # %entry
1615 ; SSE4-NEXT: pminsb %xmm1, %xmm0
1618 ; AVX-LABEL: test51:
1619 ; AVX: # %bb.0: # %entry
1620 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
1623 %cmp = icmp sgt <16 x i8> %a, %b
1624 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1628 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1629 ; SSE2-LABEL: test52:
1630 ; SSE2: # %bb.0: # %entry
1631 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1632 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2
1633 ; SSE2-NEXT: pand %xmm2, %xmm0
1634 ; SSE2-NEXT: pandn %xmm1, %xmm2
1635 ; SSE2-NEXT: por %xmm2, %xmm0
1638 ; SSE4-LABEL: test52:
1639 ; SSE4: # %bb.0: # %entry
1640 ; SSE4-NEXT: pminsb %xmm1, %xmm0
1643 ; AVX-LABEL: test52:
1644 ; AVX: # %bb.0: # %entry
1645 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
1648 %cmp = icmp sge <16 x i8> %a, %b
1649 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1653 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
1654 ; SSE-LABEL: test53:
1655 ; SSE: # %bb.0: # %entry
1656 ; SSE-NEXT: pmaxub %xmm1, %xmm0
1659 ; AVX-LABEL: test53:
1660 ; AVX: # %bb.0: # %entry
1661 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
1664 %cmp = icmp ult <16 x i8> %a, %b
1665 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1669 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
1670 ; SSE-LABEL: test54:
1671 ; SSE: # %bb.0: # %entry
1672 ; SSE-NEXT: pmaxub %xmm1, %xmm0
1675 ; AVX-LABEL: test54:
1676 ; AVX: # %bb.0: # %entry
1677 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
1680 %cmp = icmp ule <16 x i8> %a, %b
1681 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1685 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
1686 ; SSE-LABEL: test55:
1687 ; SSE: # %bb.0: # %entry
1688 ; SSE-NEXT: pminub %xmm1, %xmm0
1691 ; AVX-LABEL: test55:
1692 ; AVX: # %bb.0: # %entry
1693 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
1696 %cmp = icmp ugt <16 x i8> %a, %b
1697 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1701 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1702 ; SSE-LABEL: test56:
1703 ; SSE: # %bb.0: # %entry
1704 ; SSE-NEXT: pminub %xmm1, %xmm0
1707 ; AVX-LABEL: test56:
1708 ; AVX: # %bb.0: # %entry
1709 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
1712 %cmp = icmp uge <16 x i8> %a, %b
1713 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1717 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1718 ; SSE-LABEL: test57:
1719 ; SSE: # %bb.0: # %entry
1720 ; SSE-NEXT: pmaxsw %xmm1, %xmm0
1723 ; AVX-LABEL: test57:
1724 ; AVX: # %bb.0: # %entry
1725 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
1728 %cmp = icmp slt <8 x i16> %a, %b
1729 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1733 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
1734 ; SSE-LABEL: test58:
1735 ; SSE: # %bb.0: # %entry
1736 ; SSE-NEXT: pmaxsw %xmm1, %xmm0
1739 ; AVX-LABEL: test58:
1740 ; AVX: # %bb.0: # %entry
1741 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
1744 %cmp = icmp sle <8 x i16> %a, %b
1745 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1749 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
1750 ; SSE-LABEL: test59:
1751 ; SSE: # %bb.0: # %entry
1752 ; SSE-NEXT: pminsw %xmm1, %xmm0
1755 ; AVX-LABEL: test59:
1756 ; AVX: # %bb.0: # %entry
1757 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
1760 %cmp = icmp sgt <8 x i16> %a, %b
1761 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1765 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
1766 ; SSE-LABEL: test60:
1767 ; SSE: # %bb.0: # %entry
1768 ; SSE-NEXT: pminsw %xmm1, %xmm0
1771 ; AVX-LABEL: test60:
1772 ; AVX: # %bb.0: # %entry
1773 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
1776 %cmp = icmp sge <8 x i16> %a, %b
1777 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1781 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1782 ; SSE2-LABEL: test61:
1783 ; SSE2: # %bb.0: # %entry
1784 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1785 ; SSE2-NEXT: pxor %xmm2, %xmm1
1786 ; SSE2-NEXT: pxor %xmm2, %xmm0
1787 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0
1788 ; SSE2-NEXT: pxor %xmm2, %xmm0
1791 ; SSE4-LABEL: test61:
1792 ; SSE4: # %bb.0: # %entry
1793 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0
1796 ; AVX-LABEL: test61:
1797 ; AVX: # %bb.0: # %entry
1798 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
1801 %cmp = icmp ult <8 x i16> %a, %b
1802 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1806 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1807 ; SSE2-LABEL: test62:
1808 ; SSE2: # %bb.0: # %entry
1809 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1810 ; SSE2-NEXT: pxor %xmm2, %xmm1
1811 ; SSE2-NEXT: pxor %xmm2, %xmm0
1812 ; SSE2-NEXT: pmaxsw %xmm1, %xmm0
1813 ; SSE2-NEXT: pxor %xmm2, %xmm0
1816 ; SSE4-LABEL: test62:
1817 ; SSE4: # %bb.0: # %entry
1818 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0
1821 ; AVX-LABEL: test62:
1822 ; AVX: # %bb.0: # %entry
1823 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
1826 %cmp = icmp ule <8 x i16> %a, %b
1827 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1831 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1832 ; SSE2-LABEL: test63:
1833 ; SSE2: # %bb.0: # %entry
1834 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1835 ; SSE2-NEXT: pxor %xmm2, %xmm1
1836 ; SSE2-NEXT: pxor %xmm2, %xmm0
1837 ; SSE2-NEXT: pminsw %xmm1, %xmm0
1838 ; SSE2-NEXT: pxor %xmm2, %xmm0
1841 ; SSE4-LABEL: test63:
1842 ; SSE4: # %bb.0: # %entry
1843 ; SSE4-NEXT: pminuw %xmm1, %xmm0
1846 ; AVX-LABEL: test63:
1847 ; AVX: # %bb.0: # %entry
1848 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1851 %cmp = icmp ugt <8 x i16> %a, %b
1852 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1856 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1857 ; SSE2-LABEL: test64:
1858 ; SSE2: # %bb.0: # %entry
1859 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1860 ; SSE2-NEXT: pxor %xmm2, %xmm1
1861 ; SSE2-NEXT: pxor %xmm2, %xmm0
1862 ; SSE2-NEXT: pminsw %xmm1, %xmm0
1863 ; SSE2-NEXT: pxor %xmm2, %xmm0
1866 ; SSE4-LABEL: test64:
1867 ; SSE4: # %bb.0: # %entry
1868 ; SSE4-NEXT: pminuw %xmm1, %xmm0
1871 ; AVX-LABEL: test64:
1872 ; AVX: # %bb.0: # %entry
1873 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1876 %cmp = icmp uge <8 x i16> %a, %b
1877 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1881 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1882 ; SSE2-LABEL: test65:
1883 ; SSE2: # %bb.0: # %entry
1884 ; SSE2-NEXT: movdqa %xmm0, %xmm2
1885 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
1886 ; SSE2-NEXT: pand %xmm2, %xmm0
1887 ; SSE2-NEXT: pandn %xmm1, %xmm2
1888 ; SSE2-NEXT: por %xmm0, %xmm2
1889 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1892 ; SSE4-LABEL: test65:
1893 ; SSE4: # %bb.0: # %entry
1894 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0
1897 ; AVX-LABEL: test65:
1898 ; AVX: # %bb.0: # %entry
1899 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
1902 %cmp = icmp slt <4 x i32> %a, %b
1903 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1907 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
1908 ; SSE2-LABEL: test66:
1909 ; SSE2: # %bb.0: # %entry
1910 ; SSE2-NEXT: movdqa %xmm0, %xmm2
1911 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
1912 ; SSE2-NEXT: pand %xmm2, %xmm0
1913 ; SSE2-NEXT: pandn %xmm1, %xmm2
1914 ; SSE2-NEXT: por %xmm0, %xmm2
1915 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1918 ; SSE4-LABEL: test66:
1919 ; SSE4: # %bb.0: # %entry
1920 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0
1923 ; AVX-LABEL: test66:
1924 ; AVX: # %bb.0: # %entry
1925 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
1928 %cmp = icmp sle <4 x i32> %a, %b
1929 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1933 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
1934 ; SSE2-LABEL: test67:
1935 ; SSE2: # %bb.0: # %entry
1936 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1937 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
1938 ; SSE2-NEXT: pand %xmm2, %xmm0
1939 ; SSE2-NEXT: pandn %xmm1, %xmm2
1940 ; SSE2-NEXT: por %xmm2, %xmm0
1943 ; SSE4-LABEL: test67:
1944 ; SSE4: # %bb.0: # %entry
1945 ; SSE4-NEXT: pminsd %xmm1, %xmm0
1948 ; AVX-LABEL: test67:
1949 ; AVX: # %bb.0: # %entry
1950 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
1953 %cmp = icmp sgt <4 x i32> %a, %b
1954 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1958 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
1959 ; SSE2-LABEL: test68:
1960 ; SSE2: # %bb.0: # %entry
1961 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1962 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
1963 ; SSE2-NEXT: pand %xmm2, %xmm0
1964 ; SSE2-NEXT: pandn %xmm1, %xmm2
1965 ; SSE2-NEXT: por %xmm2, %xmm0
1968 ; SSE4-LABEL: test68:
1969 ; SSE4: # %bb.0: # %entry
1970 ; SSE4-NEXT: pminsd %xmm1, %xmm0
1973 ; AVX-LABEL: test68:
1974 ; AVX: # %bb.0: # %entry
1975 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
1978 %cmp = icmp sge <4 x i32> %a, %b
1979 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1983 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
1984 ; SSE2-LABEL: test69:
1985 ; SSE2: # %bb.0: # %entry
1986 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1987 ; SSE2-NEXT: movdqa %xmm1, %xmm3
1988 ; SSE2-NEXT: pxor %xmm2, %xmm3
1989 ; SSE2-NEXT: pxor %xmm0, %xmm2
1990 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
1991 ; SSE2-NEXT: pand %xmm2, %xmm0
1992 ; SSE2-NEXT: pandn %xmm1, %xmm2
1993 ; SSE2-NEXT: por %xmm2, %xmm0
1996 ; SSE4-LABEL: test69:
1997 ; SSE4: # %bb.0: # %entry
1998 ; SSE4-NEXT: pmaxud %xmm1, %xmm0
2001 ; AVX-LABEL: test69:
2002 ; AVX: # %bb.0: # %entry
2003 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
2006 %cmp = icmp ult <4 x i32> %a, %b
2007 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2011 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
2012 ; SSE2-LABEL: test70:
2013 ; SSE2: # %bb.0: # %entry
2014 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2015 ; SSE2-NEXT: movdqa %xmm1, %xmm3
2016 ; SSE2-NEXT: pxor %xmm2, %xmm3
2017 ; SSE2-NEXT: pxor %xmm0, %xmm2
2018 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
2019 ; SSE2-NEXT: pand %xmm2, %xmm0
2020 ; SSE2-NEXT: pandn %xmm1, %xmm2
2021 ; SSE2-NEXT: por %xmm2, %xmm0
2024 ; SSE4-LABEL: test70:
2025 ; SSE4: # %bb.0: # %entry
2026 ; SSE4-NEXT: pmaxud %xmm1, %xmm0
2029 ; AVX-LABEL: test70:
2030 ; AVX: # %bb.0: # %entry
2031 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
2034 %cmp = icmp ule <4 x i32> %a, %b
2035 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2039 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
2040 ; SSE2-LABEL: test71:
2041 ; SSE2: # %bb.0: # %entry
2042 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2043 ; SSE2-NEXT: movdqa %xmm0, %xmm3
2044 ; SSE2-NEXT: pxor %xmm2, %xmm3
2045 ; SSE2-NEXT: pxor %xmm1, %xmm2
2046 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
2047 ; SSE2-NEXT: pand %xmm2, %xmm0
2048 ; SSE2-NEXT: pandn %xmm1, %xmm2
2049 ; SSE2-NEXT: por %xmm2, %xmm0
2052 ; SSE4-LABEL: test71:
2053 ; SSE4: # %bb.0: # %entry
2054 ; SSE4-NEXT: pminud %xmm1, %xmm0
2057 ; AVX-LABEL: test71:
2058 ; AVX: # %bb.0: # %entry
2059 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
2062 %cmp = icmp ugt <4 x i32> %a, %b
2063 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2067 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2068 ; SSE2-LABEL: test72:
2069 ; SSE2: # %bb.0: # %entry
2070 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2071 ; SSE2-NEXT: movdqa %xmm0, %xmm3
2072 ; SSE2-NEXT: pxor %xmm2, %xmm3
2073 ; SSE2-NEXT: pxor %xmm1, %xmm2
2074 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
2075 ; SSE2-NEXT: pand %xmm2, %xmm0
2076 ; SSE2-NEXT: pandn %xmm1, %xmm2
2077 ; SSE2-NEXT: por %xmm2, %xmm0
2080 ; SSE4-LABEL: test72:
2081 ; SSE4: # %bb.0: # %entry
2082 ; SSE4-NEXT: pminud %xmm1, %xmm0
2085 ; AVX-LABEL: test72:
2086 ; AVX: # %bb.0: # %entry
2087 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
2090 %cmp = icmp uge <4 x i32> %a, %b
2091 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2095 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2096 ; SSE2-LABEL: test73:
2097 ; SSE2: # %bb.0: # %entry
2098 ; SSE2-NEXT: movdqa %xmm0, %xmm4
2099 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
2100 ; SSE2-NEXT: pand %xmm4, %xmm0
2101 ; SSE2-NEXT: pandn %xmm2, %xmm4
2102 ; SSE2-NEXT: por %xmm0, %xmm4
2103 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2104 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm2
2105 ; SSE2-NEXT: pand %xmm2, %xmm1
2106 ; SSE2-NEXT: pandn %xmm3, %xmm2
2107 ; SSE2-NEXT: por %xmm1, %xmm2
2108 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2109 ; SSE2-NEXT: movdqa %xmm2, %xmm1
2112 ; SSE4-LABEL: test73:
2113 ; SSE4: # %bb.0: # %entry
2114 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0
2115 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1
2118 ; AVX1-LABEL: test73:
2119 ; AVX1: # %bb.0: # %entry
2120 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2121 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2122 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
2123 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
2124 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2127 ; AVX2-LABEL: test73:
2128 ; AVX2: # %bb.0: # %entry
2129 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
2132 ; AVX512F-LABEL: test73:
2133 ; AVX512F: # %bb.0: # %entry
2134 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
2135 ; AVX512F-NEXT: retq
2137 %cmp = icmp slt <32 x i8> %a, %b
2138 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2142 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2143 ; SSE2-LABEL: test74:
2144 ; SSE2: # %bb.0: # %entry
2145 ; SSE2-NEXT: movdqa %xmm0, %xmm4
2146 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
2147 ; SSE2-NEXT: pand %xmm4, %xmm0
2148 ; SSE2-NEXT: pandn %xmm2, %xmm4
2149 ; SSE2-NEXT: por %xmm0, %xmm4
2150 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2151 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm2
2152 ; SSE2-NEXT: pand %xmm2, %xmm1
2153 ; SSE2-NEXT: pandn %xmm3, %xmm2
2154 ; SSE2-NEXT: por %xmm1, %xmm2
2155 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2156 ; SSE2-NEXT: movdqa %xmm2, %xmm1
2159 ; SSE4-LABEL: test74:
2160 ; SSE4: # %bb.0: # %entry
2161 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0
2162 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1
2165 ; AVX1-LABEL: test74:
2166 ; AVX1: # %bb.0: # %entry
2167 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2168 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2169 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
2170 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
2171 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2174 ; AVX2-LABEL: test74:
2175 ; AVX2: # %bb.0: # %entry
2176 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
2179 ; AVX512F-LABEL: test74:
2180 ; AVX512F: # %bb.0: # %entry
2181 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
2182 ; AVX512F-NEXT: retq
2184 %cmp = icmp sle <32 x i8> %a, %b
2185 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2189 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2190 ; SSE2-LABEL: test75:
2191 ; SSE2: # %bb.0: # %entry
2192 ; SSE2-NEXT: movdqa %xmm2, %xmm4
2193 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm4
2194 ; SSE2-NEXT: pand %xmm4, %xmm0
2195 ; SSE2-NEXT: pandn %xmm2, %xmm4
2196 ; SSE2-NEXT: por %xmm4, %xmm0
2197 ; SSE2-NEXT: movdqa %xmm3, %xmm2
2198 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
2199 ; SSE2-NEXT: pand %xmm2, %xmm1
2200 ; SSE2-NEXT: pandn %xmm3, %xmm2
2201 ; SSE2-NEXT: por %xmm2, %xmm1
2204 ; SSE4-LABEL: test75:
2205 ; SSE4: # %bb.0: # %entry
2206 ; SSE4-NEXT: pminsb %xmm2, %xmm0
2207 ; SSE4-NEXT: pminsb %xmm3, %xmm1
2210 ; AVX1-LABEL: test75:
2211 ; AVX1: # %bb.0: # %entry
2212 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2213 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2214 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
2215 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
2216 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2219 ; AVX2-LABEL: test75:
2220 ; AVX2: # %bb.0: # %entry
2221 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
2224 ; AVX512F-LABEL: test75:
2225 ; AVX512F: # %bb.0: # %entry
2226 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0
2227 ; AVX512F-NEXT: retq
2229 %cmp = icmp sgt <32 x i8> %a, %b
2230 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2234 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2235 ; SSE2-LABEL: test76:
2236 ; SSE2: # %bb.0: # %entry
2237 ; SSE2-NEXT: movdqa %xmm2, %xmm4
2238 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm4
2239 ; SSE2-NEXT: pand %xmm4, %xmm0
2240 ; SSE2-NEXT: pandn %xmm2, %xmm4
2241 ; SSE2-NEXT: por %xmm4, %xmm0
2242 ; SSE2-NEXT: movdqa %xmm3, %xmm2
2243 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
2244 ; SSE2-NEXT: pand %xmm2, %xmm1
2245 ; SSE2-NEXT: pandn %xmm3, %xmm2
2246 ; SSE2-NEXT: por %xmm2, %xmm1
2249 ; SSE4-LABEL: test76:
2250 ; SSE4: # %bb.0: # %entry
2251 ; SSE4-NEXT: pminsb %xmm2, %xmm0
2252 ; SSE4-NEXT: pminsb %xmm3, %xmm1
2255 ; AVX1-LABEL: test76:
2256 ; AVX1: # %bb.0: # %entry
2257 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2258 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2259 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
2260 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
2261 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2264 ; AVX2-LABEL: test76:
2265 ; AVX2: # %bb.0: # %entry
2266 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
2269 ; AVX512F-LABEL: test76:
2270 ; AVX512F: # %bb.0: # %entry
2271 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0
2272 ; AVX512F-NEXT: retq
2274 %cmp = icmp sge <32 x i8> %a, %b
2275 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2279 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2280 ; SSE-LABEL: test77:
2281 ; SSE: # %bb.0: # %entry
2282 ; SSE-NEXT: pmaxub %xmm2, %xmm0
2283 ; SSE-NEXT: pmaxub %xmm3, %xmm1
2286 ; AVX1-LABEL: test77:
2287 ; AVX1: # %bb.0: # %entry
2288 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2289 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2290 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
2291 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
2292 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2295 ; AVX2-LABEL: test77:
2296 ; AVX2: # %bb.0: # %entry
2297 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
2300 ; AVX512F-LABEL: test77:
2301 ; AVX512F: # %bb.0: # %entry
2302 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
2303 ; AVX512F-NEXT: retq
2305 %cmp = icmp ult <32 x i8> %a, %b
2306 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2310 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2311 ; SSE-LABEL: test78:
2312 ; SSE: # %bb.0: # %entry
2313 ; SSE-NEXT: pmaxub %xmm2, %xmm0
2314 ; SSE-NEXT: pmaxub %xmm3, %xmm1
2317 ; AVX1-LABEL: test78:
2318 ; AVX1: # %bb.0: # %entry
2319 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2320 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2321 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
2322 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
2323 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2326 ; AVX2-LABEL: test78:
2327 ; AVX2: # %bb.0: # %entry
2328 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
2331 ; AVX512F-LABEL: test78:
2332 ; AVX512F: # %bb.0: # %entry
2333 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
2334 ; AVX512F-NEXT: retq
2336 %cmp = icmp ule <32 x i8> %a, %b
2337 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2341 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2342 ; SSE-LABEL: test79:
2343 ; SSE: # %bb.0: # %entry
2344 ; SSE-NEXT: pminub %xmm2, %xmm0
2345 ; SSE-NEXT: pminub %xmm3, %xmm1
2348 ; AVX1-LABEL: test79:
2349 ; AVX1: # %bb.0: # %entry
2350 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2351 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2352 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
2353 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
2354 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2357 ; AVX2-LABEL: test79:
2358 ; AVX2: # %bb.0: # %entry
2359 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
2362 ; AVX512F-LABEL: test79:
2363 ; AVX512F: # %bb.0: # %entry
2364 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0
2365 ; AVX512F-NEXT: retq
2367 %cmp = icmp ugt <32 x i8> %a, %b
2368 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2372 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2373 ; SSE-LABEL: test80:
2374 ; SSE: # %bb.0: # %entry
2375 ; SSE-NEXT: pminub %xmm2, %xmm0
2376 ; SSE-NEXT: pminub %xmm3, %xmm1
2379 ; AVX1-LABEL: test80:
2380 ; AVX1: # %bb.0: # %entry
2381 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2382 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2383 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
2384 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
2385 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2388 ; AVX2-LABEL: test80:
2389 ; AVX2: # %bb.0: # %entry
2390 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
2393 ; AVX512F-LABEL: test80:
2394 ; AVX512F: # %bb.0: # %entry
2395 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0
2396 ; AVX512F-NEXT: retq
2398 %cmp = icmp uge <32 x i8> %a, %b
2399 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2403 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2404 ; SSE-LABEL: test81:
2405 ; SSE: # %bb.0: # %entry
2406 ; SSE-NEXT: pmaxsw %xmm2, %xmm0
2407 ; SSE-NEXT: pmaxsw %xmm3, %xmm1
2410 ; AVX1-LABEL: test81:
2411 ; AVX1: # %bb.0: # %entry
2412 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2413 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2414 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
2415 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
2416 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2419 ; AVX2-LABEL: test81:
2420 ; AVX2: # %bb.0: # %entry
2421 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2424 ; AVX512F-LABEL: test81:
2425 ; AVX512F: # %bb.0: # %entry
2426 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2427 ; AVX512F-NEXT: retq
2429 %cmp = icmp slt <16 x i16> %a, %b
2430 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2434 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2435 ; SSE-LABEL: test82:
2436 ; SSE: # %bb.0: # %entry
2437 ; SSE-NEXT: pmaxsw %xmm2, %xmm0
2438 ; SSE-NEXT: pmaxsw %xmm3, %xmm1
2441 ; AVX1-LABEL: test82:
2442 ; AVX1: # %bb.0: # %entry
2443 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2444 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2445 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
2446 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
2447 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2450 ; AVX2-LABEL: test82:
2451 ; AVX2: # %bb.0: # %entry
2452 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2455 ; AVX512F-LABEL: test82:
2456 ; AVX512F: # %bb.0: # %entry
2457 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2458 ; AVX512F-NEXT: retq
2460 %cmp = icmp sle <16 x i16> %a, %b
2461 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2465 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2466 ; SSE-LABEL: test83:
2467 ; SSE: # %bb.0: # %entry
2468 ; SSE-NEXT: pminsw %xmm2, %xmm0
2469 ; SSE-NEXT: pminsw %xmm3, %xmm1
2472 ; AVX1-LABEL: test83:
2473 ; AVX1: # %bb.0: # %entry
2474 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2475 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2476 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
2477 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
2478 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2481 ; AVX2-LABEL: test83:
2482 ; AVX2: # %bb.0: # %entry
2483 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
2486 ; AVX512F-LABEL: test83:
2487 ; AVX512F: # %bb.0: # %entry
2488 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0
2489 ; AVX512F-NEXT: retq
2491 %cmp = icmp sgt <16 x i16> %a, %b
2492 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2496 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2497 ; SSE-LABEL: test84:
2498 ; SSE: # %bb.0: # %entry
2499 ; SSE-NEXT: pminsw %xmm2, %xmm0
2500 ; SSE-NEXT: pminsw %xmm3, %xmm1
2503 ; AVX1-LABEL: test84:
2504 ; AVX1: # %bb.0: # %entry
2505 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2506 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2507 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
2508 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
2509 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2512 ; AVX2-LABEL: test84:
2513 ; AVX2: # %bb.0: # %entry
2514 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
2517 ; AVX512F-LABEL: test84:
2518 ; AVX512F: # %bb.0: # %entry
2519 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0
2520 ; AVX512F-NEXT: retq
2522 %cmp = icmp sge <16 x i16> %a, %b
2523 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2527 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2528 ; SSE2-LABEL: test85:
2529 ; SSE2: # %bb.0: # %entry
2530 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2531 ; SSE2-NEXT: pxor %xmm4, %xmm2
2532 ; SSE2-NEXT: pxor %xmm4, %xmm0
2533 ; SSE2-NEXT: pmaxsw %xmm2, %xmm0
2534 ; SSE2-NEXT: pxor %xmm4, %xmm0
2535 ; SSE2-NEXT: pxor %xmm4, %xmm3
2536 ; SSE2-NEXT: pxor %xmm4, %xmm1
2537 ; SSE2-NEXT: pmaxsw %xmm3, %xmm1
2538 ; SSE2-NEXT: pxor %xmm4, %xmm1
2541 ; SSE4-LABEL: test85:
2542 ; SSE4: # %bb.0: # %entry
2543 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0
2544 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1
2547 ; AVX1-LABEL: test85:
2548 ; AVX1: # %bb.0: # %entry
2549 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2550 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2551 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
2552 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
2553 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2556 ; AVX2-LABEL: test85:
2557 ; AVX2: # %bb.0: # %entry
2558 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
2561 ; AVX512F-LABEL: test85:
2562 ; AVX512F: # %bb.0: # %entry
2563 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
2564 ; AVX512F-NEXT: retq
2566 %cmp = icmp ult <16 x i16> %a, %b
2567 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2571 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2572 ; SSE2-LABEL: test86:
2573 ; SSE2: # %bb.0: # %entry
2574 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2575 ; SSE2-NEXT: pxor %xmm4, %xmm2
2576 ; SSE2-NEXT: pxor %xmm4, %xmm0
2577 ; SSE2-NEXT: pmaxsw %xmm2, %xmm0
2578 ; SSE2-NEXT: pxor %xmm4, %xmm0
2579 ; SSE2-NEXT: pxor %xmm4, %xmm3
2580 ; SSE2-NEXT: pxor %xmm4, %xmm1
2581 ; SSE2-NEXT: pmaxsw %xmm3, %xmm1
2582 ; SSE2-NEXT: pxor %xmm4, %xmm1
2585 ; SSE4-LABEL: test86:
2586 ; SSE4: # %bb.0: # %entry
2587 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0
2588 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1
2591 ; AVX1-LABEL: test86:
2592 ; AVX1: # %bb.0: # %entry
2593 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2594 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2595 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
2596 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
2597 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2600 ; AVX2-LABEL: test86:
2601 ; AVX2: # %bb.0: # %entry
2602 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
2605 ; AVX512F-LABEL: test86:
2606 ; AVX512F: # %bb.0: # %entry
2607 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
2608 ; AVX512F-NEXT: retq
2610 %cmp = icmp ule <16 x i16> %a, %b
2611 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2615 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2616 ; SSE2-LABEL: test87:
2617 ; SSE2: # %bb.0: # %entry
2618 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2619 ; SSE2-NEXT: pxor %xmm4, %xmm2
2620 ; SSE2-NEXT: pxor %xmm4, %xmm0
2621 ; SSE2-NEXT: pminsw %xmm2, %xmm0
2622 ; SSE2-NEXT: pxor %xmm4, %xmm0
2623 ; SSE2-NEXT: pxor %xmm4, %xmm3
2624 ; SSE2-NEXT: pxor %xmm4, %xmm1
2625 ; SSE2-NEXT: pminsw %xmm3, %xmm1
2626 ; SSE2-NEXT: pxor %xmm4, %xmm1
2629 ; SSE4-LABEL: test87:
2630 ; SSE4: # %bb.0: # %entry
2631 ; SSE4-NEXT: pminuw %xmm2, %xmm0
2632 ; SSE4-NEXT: pminuw %xmm3, %xmm1
2635 ; AVX1-LABEL: test87:
2636 ; AVX1: # %bb.0: # %entry
2637 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2638 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2639 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
2640 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
2641 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2644 ; AVX2-LABEL: test87:
2645 ; AVX2: # %bb.0: # %entry
2646 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
2649 ; AVX512F-LABEL: test87:
2650 ; AVX512F: # %bb.0: # %entry
2651 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0
2652 ; AVX512F-NEXT: retq
2654 %cmp = icmp ugt <16 x i16> %a, %b
2655 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2659 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2660 ; SSE2-LABEL: test88:
2661 ; SSE2: # %bb.0: # %entry
2662 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2663 ; SSE2-NEXT: pxor %xmm4, %xmm2
2664 ; SSE2-NEXT: pxor %xmm4, %xmm0
2665 ; SSE2-NEXT: pminsw %xmm2, %xmm0
2666 ; SSE2-NEXT: pxor %xmm4, %xmm0
2667 ; SSE2-NEXT: pxor %xmm4, %xmm3
2668 ; SSE2-NEXT: pxor %xmm4, %xmm1
2669 ; SSE2-NEXT: pminsw %xmm3, %xmm1
2670 ; SSE2-NEXT: pxor %xmm4, %xmm1
2673 ; SSE4-LABEL: test88:
2674 ; SSE4: # %bb.0: # %entry
2675 ; SSE4-NEXT: pminuw %xmm2, %xmm0
2676 ; SSE4-NEXT: pminuw %xmm3, %xmm1
2679 ; AVX1-LABEL: test88:
2680 ; AVX1: # %bb.0: # %entry
2681 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2682 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2683 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
2684 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
2685 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2688 ; AVX2-LABEL: test88:
2689 ; AVX2: # %bb.0: # %entry
2690 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
2693 ; AVX512F-LABEL: test88:
2694 ; AVX512F: # %bb.0: # %entry
2695 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0
2696 ; AVX512F-NEXT: retq
2698 %cmp = icmp uge <16 x i16> %a, %b
2699 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2703 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2704 ; SSE2-LABEL: test89:
2705 ; SSE2: # %bb.0: # %entry
2706 ; SSE2-NEXT: movdqa %xmm0, %xmm4
2707 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
2708 ; SSE2-NEXT: pand %xmm4, %xmm0
2709 ; SSE2-NEXT: pandn %xmm2, %xmm4
2710 ; SSE2-NEXT: por %xmm0, %xmm4
2711 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2712 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
2713 ; SSE2-NEXT: pand %xmm2, %xmm1
2714 ; SSE2-NEXT: pandn %xmm3, %xmm2
2715 ; SSE2-NEXT: por %xmm1, %xmm2
2716 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2717 ; SSE2-NEXT: movdqa %xmm2, %xmm1
2720 ; SSE4-LABEL: test89:
2721 ; SSE4: # %bb.0: # %entry
2722 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0
2723 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1
2726 ; AVX1-LABEL: test89:
2727 ; AVX1: # %bb.0: # %entry
2728 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2729 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2730 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
2731 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
2732 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2735 ; AVX2-LABEL: test89:
2736 ; AVX2: # %bb.0: # %entry
2737 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2740 ; AVX512F-LABEL: test89:
2741 ; AVX512F: # %bb.0: # %entry
2742 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2743 ; AVX512F-NEXT: retq
2745 %cmp = icmp slt <8 x i32> %a, %b
2746 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2750 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2751 ; SSE2-LABEL: test90:
2752 ; SSE2: # %bb.0: # %entry
2753 ; SSE2-NEXT: movdqa %xmm0, %xmm4
2754 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
2755 ; SSE2-NEXT: pand %xmm4, %xmm0
2756 ; SSE2-NEXT: pandn %xmm2, %xmm4
2757 ; SSE2-NEXT: por %xmm0, %xmm4
2758 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2759 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
2760 ; SSE2-NEXT: pand %xmm2, %xmm1
2761 ; SSE2-NEXT: pandn %xmm3, %xmm2
2762 ; SSE2-NEXT: por %xmm1, %xmm2
2763 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2764 ; SSE2-NEXT: movdqa %xmm2, %xmm1
2767 ; SSE4-LABEL: test90:
2768 ; SSE4: # %bb.0: # %entry
2769 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0
2770 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1
2773 ; AVX1-LABEL: test90:
2774 ; AVX1: # %bb.0: # %entry
2775 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2776 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2777 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
2778 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
2779 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2782 ; AVX2-LABEL: test90:
2783 ; AVX2: # %bb.0: # %entry
2784 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2787 ; AVX512F-LABEL: test90:
2788 ; AVX512F: # %bb.0: # %entry
2789 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2790 ; AVX512F-NEXT: retq
2792 %cmp = icmp sle <8 x i32> %a, %b
2793 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2797 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2798 ; SSE2-LABEL: test91:
2799 ; SSE2: # %bb.0: # %entry
2800 ; SSE2-NEXT: movdqa %xmm2, %xmm4
2801 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
2802 ; SSE2-NEXT: pand %xmm4, %xmm0
2803 ; SSE2-NEXT: pandn %xmm2, %xmm4
2804 ; SSE2-NEXT: por %xmm4, %xmm0
2805 ; SSE2-NEXT: movdqa %xmm3, %xmm2
2806 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
2807 ; SSE2-NEXT: pand %xmm2, %xmm1
2808 ; SSE2-NEXT: pandn %xmm3, %xmm2
2809 ; SSE2-NEXT: por %xmm2, %xmm1
2812 ; SSE4-LABEL: test91:
2813 ; SSE4: # %bb.0: # %entry
2814 ; SSE4-NEXT: pminsd %xmm2, %xmm0
2815 ; SSE4-NEXT: pminsd %xmm3, %xmm1
2818 ; AVX1-LABEL: test91:
2819 ; AVX1: # %bb.0: # %entry
2820 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2821 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2822 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
2823 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
2824 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2827 ; AVX2-LABEL: test91:
2828 ; AVX2: # %bb.0: # %entry
2829 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2832 ; AVX512F-LABEL: test91:
2833 ; AVX512F: # %bb.0: # %entry
2834 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2835 ; AVX512F-NEXT: retq
2837 %cmp = icmp sgt <8 x i32> %a, %b
2838 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2842 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
2843 ; SSE2-LABEL: test92:
2844 ; SSE2: # %bb.0: # %entry
2845 ; SSE2-NEXT: movdqa %xmm2, %xmm4
2846 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm4
2847 ; SSE2-NEXT: pand %xmm4, %xmm0
2848 ; SSE2-NEXT: pandn %xmm2, %xmm4
2849 ; SSE2-NEXT: por %xmm4, %xmm0
2850 ; SSE2-NEXT: movdqa %xmm3, %xmm2
2851 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
2852 ; SSE2-NEXT: pand %xmm2, %xmm1
2853 ; SSE2-NEXT: pandn %xmm3, %xmm2
2854 ; SSE2-NEXT: por %xmm2, %xmm1
2857 ; SSE4-LABEL: test92:
2858 ; SSE4: # %bb.0: # %entry
2859 ; SSE4-NEXT: pminsd %xmm2, %xmm0
2860 ; SSE4-NEXT: pminsd %xmm3, %xmm1
2863 ; AVX1-LABEL: test92:
2864 ; AVX1: # %bb.0: # %entry
2865 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2866 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2867 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
2868 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
2869 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2872 ; AVX2-LABEL: test92:
2873 ; AVX2: # %bb.0: # %entry
2874 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2877 ; AVX512F-LABEL: test92:
2878 ; AVX512F: # %bb.0: # %entry
2879 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2880 ; AVX512F-NEXT: retq
2882 %cmp = icmp sge <8 x i32> %a, %b
2883 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2887 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
2888 ; SSE2-LABEL: test93:
2889 ; SSE2: # %bb.0: # %entry
2890 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
2891 ; SSE2-NEXT: movdqa %xmm2, %xmm6
2892 ; SSE2-NEXT: pxor %xmm5, %xmm6
2893 ; SSE2-NEXT: movdqa %xmm0, %xmm4
2894 ; SSE2-NEXT: pxor %xmm5, %xmm4
2895 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
2896 ; SSE2-NEXT: pand %xmm4, %xmm0
2897 ; SSE2-NEXT: pandn %xmm2, %xmm4
2898 ; SSE2-NEXT: por %xmm0, %xmm4
2899 ; SSE2-NEXT: movdqa %xmm3, %xmm0
2900 ; SSE2-NEXT: pxor %xmm5, %xmm0
2901 ; SSE2-NEXT: pxor %xmm1, %xmm5
2902 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5
2903 ; SSE2-NEXT: pand %xmm5, %xmm1
2904 ; SSE2-NEXT: pandn %xmm3, %xmm5
2905 ; SSE2-NEXT: por %xmm5, %xmm1
2906 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2909 ; SSE4-LABEL: test93:
2910 ; SSE4: # %bb.0: # %entry
2911 ; SSE4-NEXT: pmaxud %xmm2, %xmm0
2912 ; SSE4-NEXT: pmaxud %xmm3, %xmm1
2915 ; AVX1-LABEL: test93:
2916 ; AVX1: # %bb.0: # %entry
2917 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2918 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2919 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
2920 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
2921 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2924 ; AVX2-LABEL: test93:
2925 ; AVX2: # %bb.0: # %entry
2926 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
2929 ; AVX512F-LABEL: test93:
2930 ; AVX512F: # %bb.0: # %entry
2931 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
2932 ; AVX512F-NEXT: retq
2934 %cmp = icmp ult <8 x i32> %a, %b
2935 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2939 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
2940 ; SSE2-LABEL: test94:
2941 ; SSE2: # %bb.0: # %entry
2942 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
2943 ; SSE2-NEXT: movdqa %xmm2, %xmm6
2944 ; SSE2-NEXT: pxor %xmm5, %xmm6
2945 ; SSE2-NEXT: movdqa %xmm0, %xmm4
2946 ; SSE2-NEXT: pxor %xmm5, %xmm4
2947 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
2948 ; SSE2-NEXT: pand %xmm4, %xmm0
2949 ; SSE2-NEXT: pandn %xmm2, %xmm4
2950 ; SSE2-NEXT: por %xmm0, %xmm4
2951 ; SSE2-NEXT: movdqa %xmm3, %xmm0
2952 ; SSE2-NEXT: pxor %xmm5, %xmm0
2953 ; SSE2-NEXT: pxor %xmm1, %xmm5
2954 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5
2955 ; SSE2-NEXT: pand %xmm5, %xmm1
2956 ; SSE2-NEXT: pandn %xmm3, %xmm5
2957 ; SSE2-NEXT: por %xmm5, %xmm1
2958 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2961 ; SSE4-LABEL: test94:
2962 ; SSE4: # %bb.0: # %entry
2963 ; SSE4-NEXT: pmaxud %xmm2, %xmm0
2964 ; SSE4-NEXT: pmaxud %xmm3, %xmm1
2967 ; AVX1-LABEL: test94:
2968 ; AVX1: # %bb.0: # %entry
2969 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2970 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2971 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
2972 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
2973 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2976 ; AVX2-LABEL: test94:
2977 ; AVX2: # %bb.0: # %entry
2978 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
2981 ; AVX512F-LABEL: test94:
2982 ; AVX512F: # %bb.0: # %entry
2983 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
2984 ; AVX512F-NEXT: retq
2986 %cmp = icmp ule <8 x i32> %a, %b
2987 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2991 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
2992 ; SSE2-LABEL: test95:
2993 ; SSE2: # %bb.0: # %entry
2994 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2995 ; SSE2-NEXT: movdqa %xmm0, %xmm5
2996 ; SSE2-NEXT: pxor %xmm4, %xmm5
2997 ; SSE2-NEXT: movdqa %xmm2, %xmm6
2998 ; SSE2-NEXT: pxor %xmm4, %xmm6
2999 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
3000 ; SSE2-NEXT: pand %xmm6, %xmm0
3001 ; SSE2-NEXT: pandn %xmm2, %xmm6
3002 ; SSE2-NEXT: por %xmm6, %xmm0
3003 ; SSE2-NEXT: movdqa %xmm1, %xmm2
3004 ; SSE2-NEXT: pxor %xmm4, %xmm2
3005 ; SSE2-NEXT: pxor %xmm3, %xmm4
3006 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
3007 ; SSE2-NEXT: pand %xmm4, %xmm1
3008 ; SSE2-NEXT: pandn %xmm3, %xmm4
3009 ; SSE2-NEXT: por %xmm4, %xmm1
3012 ; SSE4-LABEL: test95:
3013 ; SSE4: # %bb.0: # %entry
3014 ; SSE4-NEXT: pminud %xmm2, %xmm0
3015 ; SSE4-NEXT: pminud %xmm3, %xmm1
3018 ; AVX1-LABEL: test95:
3019 ; AVX1: # %bb.0: # %entry
3020 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3021 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3022 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
3023 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
3024 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
3027 ; AVX2-LABEL: test95:
3028 ; AVX2: # %bb.0: # %entry
3029 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
3032 ; AVX512F-LABEL: test95:
3033 ; AVX512F: # %bb.0: # %entry
3034 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0
3035 ; AVX512F-NEXT: retq
3037 %cmp = icmp ugt <8 x i32> %a, %b
3038 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3042 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
3043 ; SSE2-LABEL: test96:
3044 ; SSE2: # %bb.0: # %entry
3045 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
3046 ; SSE2-NEXT: movdqa %xmm0, %xmm5
3047 ; SSE2-NEXT: pxor %xmm4, %xmm5
3048 ; SSE2-NEXT: movdqa %xmm2, %xmm6
3049 ; SSE2-NEXT: pxor %xmm4, %xmm6
3050 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
3051 ; SSE2-NEXT: pand %xmm6, %xmm0
3052 ; SSE2-NEXT: pandn %xmm2, %xmm6
3053 ; SSE2-NEXT: por %xmm6, %xmm0
3054 ; SSE2-NEXT: movdqa %xmm1, %xmm2
3055 ; SSE2-NEXT: pxor %xmm4, %xmm2
3056 ; SSE2-NEXT: pxor %xmm3, %xmm4
3057 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
3058 ; SSE2-NEXT: pand %xmm4, %xmm1
3059 ; SSE2-NEXT: pandn %xmm3, %xmm4
3060 ; SSE2-NEXT: por %xmm4, %xmm1
3063 ; SSE4-LABEL: test96:
3064 ; SSE4: # %bb.0: # %entry
3065 ; SSE4-NEXT: pminud %xmm2, %xmm0
3066 ; SSE4-NEXT: pminud %xmm3, %xmm1
3069 ; AVX1-LABEL: test96:
3070 ; AVX1: # %bb.0: # %entry
3071 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3072 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3073 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
3074 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
3075 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
3078 ; AVX2-LABEL: test96:
3079 ; AVX2: # %bb.0: # %entry
3080 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
3083 ; AVX512F-LABEL: test96:
3084 ; AVX512F: # %bb.0: # %entry
3085 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0
3086 ; AVX512F-NEXT: retq
3088 %cmp = icmp uge <8 x i32> %a, %b
3089 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3093 ; ----------------------------
3095 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3096 ; SSE2-LABEL: test97:
3097 ; SSE2: # %bb.0: # %entry
3098 ; SSE2-NEXT: movdqa %xmm4, %xmm8
3099 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm8
3100 ; SSE2-NEXT: pand %xmm8, %xmm0
3101 ; SSE2-NEXT: pandn %xmm4, %xmm8
3102 ; SSE2-NEXT: por %xmm8, %xmm0
3103 ; SSE2-NEXT: movdqa %xmm5, %xmm4
3104 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4
3105 ; SSE2-NEXT: pand %xmm4, %xmm1
3106 ; SSE2-NEXT: pandn %xmm5, %xmm4
3107 ; SSE2-NEXT: por %xmm4, %xmm1
3108 ; SSE2-NEXT: movdqa %xmm6, %xmm4
3109 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
3110 ; SSE2-NEXT: pand %xmm4, %xmm2
3111 ; SSE2-NEXT: pandn %xmm6, %xmm4
3112 ; SSE2-NEXT: por %xmm4, %xmm2
3113 ; SSE2-NEXT: movdqa %xmm7, %xmm4
3114 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4
3115 ; SSE2-NEXT: pand %xmm4, %xmm3
3116 ; SSE2-NEXT: pandn %xmm7, %xmm4
3117 ; SSE2-NEXT: por %xmm4, %xmm3
3120 ; SSE4-LABEL: test97:
3121 ; SSE4: # %bb.0: # %entry
3122 ; SSE4-NEXT: pminsb %xmm4, %xmm0
3123 ; SSE4-NEXT: pminsb %xmm5, %xmm1
3124 ; SSE4-NEXT: pminsb %xmm6, %xmm2
3125 ; SSE4-NEXT: pminsb %xmm7, %xmm3
3128 ; AVX1-LABEL: test97:
3129 ; AVX1: # %bb.0: # %entry
3130 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3131 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3132 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
3133 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
3134 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3135 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3136 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3137 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2
3138 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
3139 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3142 ; AVX2-LABEL: test97:
3143 ; AVX2: # %bb.0: # %entry
3144 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
3145 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
3148 ; AVX512BW-LABEL: test97:
3149 ; AVX512BW: # %bb.0: # %entry
3150 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0
3151 ; AVX512BW-NEXT: retq
3153 %cmp = icmp slt <64 x i8> %a, %b
3154 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3158 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3159 ; SSE2-LABEL: test98:
3160 ; SSE2: # %bb.0: # %entry
3161 ; SSE2-NEXT: movdqa %xmm4, %xmm8
3162 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm8
3163 ; SSE2-NEXT: pand %xmm8, %xmm0
3164 ; SSE2-NEXT: pandn %xmm4, %xmm8
3165 ; SSE2-NEXT: por %xmm8, %xmm0
3166 ; SSE2-NEXT: movdqa %xmm5, %xmm4
3167 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4
3168 ; SSE2-NEXT: pand %xmm4, %xmm1
3169 ; SSE2-NEXT: pandn %xmm5, %xmm4
3170 ; SSE2-NEXT: por %xmm4, %xmm1
3171 ; SSE2-NEXT: movdqa %xmm6, %xmm4
3172 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
3173 ; SSE2-NEXT: pand %xmm4, %xmm2
3174 ; SSE2-NEXT: pandn %xmm6, %xmm4
3175 ; SSE2-NEXT: por %xmm4, %xmm2
3176 ; SSE2-NEXT: movdqa %xmm7, %xmm4
3177 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4
3178 ; SSE2-NEXT: pand %xmm4, %xmm3
3179 ; SSE2-NEXT: pandn %xmm7, %xmm4
3180 ; SSE2-NEXT: por %xmm4, %xmm3
3183 ; SSE4-LABEL: test98:
3184 ; SSE4: # %bb.0: # %entry
3185 ; SSE4-NEXT: pminsb %xmm4, %xmm0
3186 ; SSE4-NEXT: pminsb %xmm5, %xmm1
3187 ; SSE4-NEXT: pminsb %xmm6, %xmm2
3188 ; SSE4-NEXT: pminsb %xmm7, %xmm3
3191 ; AVX1-LABEL: test98:
3192 ; AVX1: # %bb.0: # %entry
3193 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3194 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3195 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
3196 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
3197 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3198 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3199 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3200 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2
3201 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
3202 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3205 ; AVX2-LABEL: test98:
3206 ; AVX2: # %bb.0: # %entry
3207 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
3208 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
3211 ; AVX512BW-LABEL: test98:
3212 ; AVX512BW: # %bb.0: # %entry
3213 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0
3214 ; AVX512BW-NEXT: retq
3216 %cmp = icmp sle <64 x i8> %a, %b
3217 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3221 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3222 ; SSE2-LABEL: test99:
3223 ; SSE2: # %bb.0: # %entry
3224 ; SSE2-NEXT: movdqa %xmm0, %xmm8
3225 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm8
3226 ; SSE2-NEXT: pand %xmm8, %xmm0
3227 ; SSE2-NEXT: pandn %xmm4, %xmm8
3228 ; SSE2-NEXT: por %xmm0, %xmm8
3229 ; SSE2-NEXT: movdqa %xmm1, %xmm4
3230 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm4
3231 ; SSE2-NEXT: pand %xmm4, %xmm1
3232 ; SSE2-NEXT: pandn %xmm5, %xmm4
3233 ; SSE2-NEXT: por %xmm1, %xmm4
3234 ; SSE2-NEXT: movdqa %xmm2, %xmm5
3235 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm5
3236 ; SSE2-NEXT: pand %xmm5, %xmm2
3237 ; SSE2-NEXT: pandn %xmm6, %xmm5
3238 ; SSE2-NEXT: por %xmm2, %xmm5
3239 ; SSE2-NEXT: movdqa %xmm3, %xmm6
3240 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm6
3241 ; SSE2-NEXT: pand %xmm6, %xmm3
3242 ; SSE2-NEXT: pandn %xmm7, %xmm6
3243 ; SSE2-NEXT: por %xmm3, %xmm6
3244 ; SSE2-NEXT: movdqa %xmm8, %xmm0
3245 ; SSE2-NEXT: movdqa %xmm4, %xmm1
3246 ; SSE2-NEXT: movdqa %xmm5, %xmm2
3247 ; SSE2-NEXT: movdqa %xmm6, %xmm3
3250 ; SSE4-LABEL: test99:
3251 ; SSE4: # %bb.0: # %entry
3252 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0
3253 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1
3254 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2
3255 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3
3258 ; AVX1-LABEL: test99:
3259 ; AVX1: # %bb.0: # %entry
3260 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3261 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3262 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
3263 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
3264 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3265 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3266 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3267 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2
3268 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
3269 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3272 ; AVX2-LABEL: test99:
3273 ; AVX2: # %bb.0: # %entry
3274 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
3275 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
3278 ; AVX512BW-LABEL: test99:
3279 ; AVX512BW: # %bb.0: # %entry
3280 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
3281 ; AVX512BW-NEXT: retq
3283 %cmp = icmp sgt <64 x i8> %a, %b
3284 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3288 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3289 ; SSE2-LABEL: test100:
3290 ; SSE2: # %bb.0: # %entry
3291 ; SSE2-NEXT: movdqa %xmm0, %xmm8
3292 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm8
3293 ; SSE2-NEXT: pand %xmm8, %xmm0
3294 ; SSE2-NEXT: pandn %xmm4, %xmm8
3295 ; SSE2-NEXT: por %xmm0, %xmm8
3296 ; SSE2-NEXT: movdqa %xmm1, %xmm4
3297 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm4
3298 ; SSE2-NEXT: pand %xmm4, %xmm1
3299 ; SSE2-NEXT: pandn %xmm5, %xmm4
3300 ; SSE2-NEXT: por %xmm1, %xmm4
3301 ; SSE2-NEXT: movdqa %xmm2, %xmm5
3302 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm5
3303 ; SSE2-NEXT: pand %xmm5, %xmm2
3304 ; SSE2-NEXT: pandn %xmm6, %xmm5
3305 ; SSE2-NEXT: por %xmm2, %xmm5
3306 ; SSE2-NEXT: movdqa %xmm3, %xmm6
3307 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm6
3308 ; SSE2-NEXT: pand %xmm6, %xmm3
3309 ; SSE2-NEXT: pandn %xmm7, %xmm6
3310 ; SSE2-NEXT: por %xmm3, %xmm6
3311 ; SSE2-NEXT: movdqa %xmm8, %xmm0
3312 ; SSE2-NEXT: movdqa %xmm4, %xmm1
3313 ; SSE2-NEXT: movdqa %xmm5, %xmm2
3314 ; SSE2-NEXT: movdqa %xmm6, %xmm3
3317 ; SSE4-LABEL: test100:
3318 ; SSE4: # %bb.0: # %entry
3319 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0
3320 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1
3321 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2
3322 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3
3325 ; AVX1-LABEL: test100:
3326 ; AVX1: # %bb.0: # %entry
3327 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3328 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3329 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
3330 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
3331 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3332 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3333 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3334 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2
3335 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
3336 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3339 ; AVX2-LABEL: test100:
3340 ; AVX2: # %bb.0: # %entry
3341 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
3342 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
3345 ; AVX512BW-LABEL: test100:
3346 ; AVX512BW: # %bb.0: # %entry
3347 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
3348 ; AVX512BW-NEXT: retq
3350 %cmp = icmp sge <64 x i8> %a, %b
3351 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3355 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3356 ; SSE-LABEL: test101:
3357 ; SSE: # %bb.0: # %entry
3358 ; SSE-NEXT: pminub %xmm4, %xmm0
3359 ; SSE-NEXT: pminub %xmm5, %xmm1
3360 ; SSE-NEXT: pminub %xmm6, %xmm2
3361 ; SSE-NEXT: pminub %xmm7, %xmm3
3364 ; AVX1-LABEL: test101:
3365 ; AVX1: # %bb.0: # %entry
3366 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3367 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3368 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
3369 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
3370 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3371 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3372 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3373 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2
3374 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
3375 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3378 ; AVX2-LABEL: test101:
3379 ; AVX2: # %bb.0: # %entry
3380 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
3381 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
3384 ; AVX512BW-LABEL: test101:
3385 ; AVX512BW: # %bb.0: # %entry
3386 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0
3387 ; AVX512BW-NEXT: retq
3389 %cmp = icmp ult <64 x i8> %a, %b
3390 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3394 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3395 ; SSE-LABEL: test102:
3396 ; SSE: # %bb.0: # %entry
3397 ; SSE-NEXT: pminub %xmm4, %xmm0
3398 ; SSE-NEXT: pminub %xmm5, %xmm1
3399 ; SSE-NEXT: pminub %xmm6, %xmm2
3400 ; SSE-NEXT: pminub %xmm7, %xmm3
3403 ; AVX1-LABEL: test102:
3404 ; AVX1: # %bb.0: # %entry
3405 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3406 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3407 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
3408 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
3409 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3410 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3411 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3412 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2
3413 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
3414 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3417 ; AVX2-LABEL: test102:
3418 ; AVX2: # %bb.0: # %entry
3419 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
3420 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
3423 ; AVX512BW-LABEL: test102:
3424 ; AVX512BW: # %bb.0: # %entry
3425 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0
3426 ; AVX512BW-NEXT: retq
3428 %cmp = icmp ule <64 x i8> %a, %b
3429 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3433 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3434 ; SSE-LABEL: test103:
3435 ; SSE: # %bb.0: # %entry
3436 ; SSE-NEXT: pmaxub %xmm4, %xmm0
3437 ; SSE-NEXT: pmaxub %xmm5, %xmm1
3438 ; SSE-NEXT: pmaxub %xmm6, %xmm2
3439 ; SSE-NEXT: pmaxub %xmm7, %xmm3
3442 ; AVX1-LABEL: test103:
3443 ; AVX1: # %bb.0: # %entry
3444 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3445 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3446 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
3447 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
3448 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3449 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3450 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3451 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2
3452 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
3453 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3456 ; AVX2-LABEL: test103:
3457 ; AVX2: # %bb.0: # %entry
3458 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
3459 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
3462 ; AVX512BW-LABEL: test103:
3463 ; AVX512BW: # %bb.0: # %entry
3464 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
3465 ; AVX512BW-NEXT: retq
3467 %cmp = icmp ugt <64 x i8> %a, %b
3468 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3472 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3473 ; SSE-LABEL: test104:
3474 ; SSE: # %bb.0: # %entry
3475 ; SSE-NEXT: pmaxub %xmm4, %xmm0
3476 ; SSE-NEXT: pmaxub %xmm5, %xmm1
3477 ; SSE-NEXT: pmaxub %xmm6, %xmm2
3478 ; SSE-NEXT: pmaxub %xmm7, %xmm3
3481 ; AVX1-LABEL: test104:
3482 ; AVX1: # %bb.0: # %entry
3483 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3484 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3485 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
3486 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
3487 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3488 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3489 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3490 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2
3491 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
3492 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3495 ; AVX2-LABEL: test104:
3496 ; AVX2: # %bb.0: # %entry
3497 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
3498 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
3501 ; AVX512BW-LABEL: test104:
3502 ; AVX512BW: # %bb.0: # %entry
3503 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
3504 ; AVX512BW-NEXT: retq
3506 %cmp = icmp uge <64 x i8> %a, %b
3507 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3511 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3512 ; SSE-LABEL: test105:
3513 ; SSE: # %bb.0: # %entry
3514 ; SSE-NEXT: pminsw %xmm4, %xmm0
3515 ; SSE-NEXT: pminsw %xmm5, %xmm1
3516 ; SSE-NEXT: pminsw %xmm6, %xmm2
3517 ; SSE-NEXT: pminsw %xmm7, %xmm3
3520 ; AVX1-LABEL: test105:
3521 ; AVX1: # %bb.0: # %entry
3522 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3523 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3524 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
3525 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
3526 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3527 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3528 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3529 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2
3530 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
3531 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3534 ; AVX2-LABEL: test105:
3535 ; AVX2: # %bb.0: # %entry
3536 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
3537 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
3540 ; AVX512BW-LABEL: test105:
3541 ; AVX512BW: # %bb.0: # %entry
3542 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0
3543 ; AVX512BW-NEXT: retq
3545 %cmp = icmp slt <32 x i16> %a, %b
3546 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3550 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3551 ; SSE-LABEL: test106:
3552 ; SSE: # %bb.0: # %entry
3553 ; SSE-NEXT: pminsw %xmm4, %xmm0
3554 ; SSE-NEXT: pminsw %xmm5, %xmm1
3555 ; SSE-NEXT: pminsw %xmm6, %xmm2
3556 ; SSE-NEXT: pminsw %xmm7, %xmm3
3559 ; AVX1-LABEL: test106:
3560 ; AVX1: # %bb.0: # %entry
3561 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3562 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3563 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
3564 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
3565 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3566 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3567 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3568 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2
3569 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
3570 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3573 ; AVX2-LABEL: test106:
3574 ; AVX2: # %bb.0: # %entry
3575 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
3576 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
3579 ; AVX512BW-LABEL: test106:
3580 ; AVX512BW: # %bb.0: # %entry
3581 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0
3582 ; AVX512BW-NEXT: retq
3584 %cmp = icmp sle <32 x i16> %a, %b
3585 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3589 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3590 ; SSE-LABEL: test107:
3591 ; SSE: # %bb.0: # %entry
3592 ; SSE-NEXT: pmaxsw %xmm4, %xmm0
3593 ; SSE-NEXT: pmaxsw %xmm5, %xmm1
3594 ; SSE-NEXT: pmaxsw %xmm6, %xmm2
3595 ; SSE-NEXT: pmaxsw %xmm7, %xmm3
3598 ; AVX1-LABEL: test107:
3599 ; AVX1: # %bb.0: # %entry
3600 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3601 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3602 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
3603 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
3604 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3605 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3606 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3607 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2
3608 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
3609 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3612 ; AVX2-LABEL: test107:
3613 ; AVX2: # %bb.0: # %entry
3614 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
3615 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
3618 ; AVX512BW-LABEL: test107:
3619 ; AVX512BW: # %bb.0: # %entry
3620 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
3621 ; AVX512BW-NEXT: retq
3623 %cmp = icmp sgt <32 x i16> %a, %b
3624 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3628 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3629 ; SSE-LABEL: test108:
3630 ; SSE: # %bb.0: # %entry
3631 ; SSE-NEXT: pmaxsw %xmm4, %xmm0
3632 ; SSE-NEXT: pmaxsw %xmm5, %xmm1
3633 ; SSE-NEXT: pmaxsw %xmm6, %xmm2
3634 ; SSE-NEXT: pmaxsw %xmm7, %xmm3
3637 ; AVX1-LABEL: test108:
3638 ; AVX1: # %bb.0: # %entry
3639 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3640 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3641 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
3642 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
3643 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3644 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3645 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3646 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2
3647 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
3648 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3651 ; AVX2-LABEL: test108:
3652 ; AVX2: # %bb.0: # %entry
3653 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
3654 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
3657 ; AVX512BW-LABEL: test108:
3658 ; AVX512BW: # %bb.0: # %entry
3659 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
3660 ; AVX512BW-NEXT: retq
3662 %cmp = icmp sge <32 x i16> %a, %b
3663 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3667 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3668 ; SSE2-LABEL: test109:
3669 ; SSE2: # %bb.0: # %entry
3670 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3671 ; SSE2-NEXT: pxor %xmm8, %xmm4
3672 ; SSE2-NEXT: pxor %xmm8, %xmm0
3673 ; SSE2-NEXT: pminsw %xmm4, %xmm0
3674 ; SSE2-NEXT: pxor %xmm8, %xmm0
3675 ; SSE2-NEXT: pxor %xmm8, %xmm5
3676 ; SSE2-NEXT: pxor %xmm8, %xmm1
3677 ; SSE2-NEXT: pminsw %xmm5, %xmm1
3678 ; SSE2-NEXT: pxor %xmm8, %xmm1
3679 ; SSE2-NEXT: pxor %xmm8, %xmm6
3680 ; SSE2-NEXT: pxor %xmm8, %xmm2
3681 ; SSE2-NEXT: pminsw %xmm6, %xmm2
3682 ; SSE2-NEXT: pxor %xmm8, %xmm2
3683 ; SSE2-NEXT: pxor %xmm8, %xmm7
3684 ; SSE2-NEXT: pxor %xmm8, %xmm3
3685 ; SSE2-NEXT: pminsw %xmm7, %xmm3
3686 ; SSE2-NEXT: pxor %xmm8, %xmm3
3689 ; SSE4-LABEL: test109:
3690 ; SSE4: # %bb.0: # %entry
3691 ; SSE4-NEXT: pminuw %xmm4, %xmm0
3692 ; SSE4-NEXT: pminuw %xmm5, %xmm1
3693 ; SSE4-NEXT: pminuw %xmm6, %xmm2
3694 ; SSE4-NEXT: pminuw %xmm7, %xmm3
3697 ; AVX1-LABEL: test109:
3698 ; AVX1: # %bb.0: # %entry
3699 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3700 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3701 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
3702 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
3703 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3704 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3705 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3706 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2
3707 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
3708 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3711 ; AVX2-LABEL: test109:
3712 ; AVX2: # %bb.0: # %entry
3713 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
3714 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
3717 ; AVX512BW-LABEL: test109:
3718 ; AVX512BW: # %bb.0: # %entry
3719 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0
3720 ; AVX512BW-NEXT: retq
3722 %cmp = icmp ult <32 x i16> %a, %b
3723 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3727 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3728 ; SSE2-LABEL: test110:
3729 ; SSE2: # %bb.0: # %entry
3730 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3731 ; SSE2-NEXT: pxor %xmm8, %xmm4
3732 ; SSE2-NEXT: pxor %xmm8, %xmm0
3733 ; SSE2-NEXT: pminsw %xmm4, %xmm0
3734 ; SSE2-NEXT: pxor %xmm8, %xmm0
3735 ; SSE2-NEXT: pxor %xmm8, %xmm5
3736 ; SSE2-NEXT: pxor %xmm8, %xmm1
3737 ; SSE2-NEXT: pminsw %xmm5, %xmm1
3738 ; SSE2-NEXT: pxor %xmm8, %xmm1
3739 ; SSE2-NEXT: pxor %xmm8, %xmm6
3740 ; SSE2-NEXT: pxor %xmm8, %xmm2
3741 ; SSE2-NEXT: pminsw %xmm6, %xmm2
3742 ; SSE2-NEXT: pxor %xmm8, %xmm2
3743 ; SSE2-NEXT: pxor %xmm8, %xmm7
3744 ; SSE2-NEXT: pxor %xmm8, %xmm3
3745 ; SSE2-NEXT: pminsw %xmm7, %xmm3
3746 ; SSE2-NEXT: pxor %xmm8, %xmm3
3749 ; SSE4-LABEL: test110:
3750 ; SSE4: # %bb.0: # %entry
3751 ; SSE4-NEXT: pminuw %xmm4, %xmm0
3752 ; SSE4-NEXT: pminuw %xmm5, %xmm1
3753 ; SSE4-NEXT: pminuw %xmm6, %xmm2
3754 ; SSE4-NEXT: pminuw %xmm7, %xmm3
3757 ; AVX1-LABEL: test110:
3758 ; AVX1: # %bb.0: # %entry
3759 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3760 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3761 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
3762 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
3763 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3764 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3765 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3766 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2
3767 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
3768 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3771 ; AVX2-LABEL: test110:
3772 ; AVX2: # %bb.0: # %entry
3773 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
3774 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
3777 ; AVX512BW-LABEL: test110:
3778 ; AVX512BW: # %bb.0: # %entry
3779 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0
3780 ; AVX512BW-NEXT: retq
3782 %cmp = icmp ule <32 x i16> %a, %b
3783 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3787 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
3788 ; SSE2-LABEL: test111:
3789 ; SSE2: # %bb.0: # %entry
3790 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3791 ; SSE2-NEXT: pxor %xmm8, %xmm4
3792 ; SSE2-NEXT: pxor %xmm8, %xmm0
3793 ; SSE2-NEXT: pmaxsw %xmm4, %xmm0
3794 ; SSE2-NEXT: pxor %xmm8, %xmm0
3795 ; SSE2-NEXT: pxor %xmm8, %xmm5
3796 ; SSE2-NEXT: pxor %xmm8, %xmm1
3797 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1
3798 ; SSE2-NEXT: pxor %xmm8, %xmm1
3799 ; SSE2-NEXT: pxor %xmm8, %xmm6
3800 ; SSE2-NEXT: pxor %xmm8, %xmm2
3801 ; SSE2-NEXT: pmaxsw %xmm6, %xmm2
3802 ; SSE2-NEXT: pxor %xmm8, %xmm2
3803 ; SSE2-NEXT: pxor %xmm8, %xmm7
3804 ; SSE2-NEXT: pxor %xmm8, %xmm3
3805 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3
3806 ; SSE2-NEXT: pxor %xmm8, %xmm3
3809 ; SSE4-LABEL: test111:
3810 ; SSE4: # %bb.0: # %entry
3811 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0
3812 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1
3813 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2
3814 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3
3817 ; AVX1-LABEL: test111:
3818 ; AVX1: # %bb.0: # %entry
3819 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3820 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3821 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
3822 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
3823 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3824 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3825 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3826 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2
3827 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
3828 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3831 ; AVX2-LABEL: test111:
3832 ; AVX2: # %bb.0: # %entry
3833 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
3834 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
3837 ; AVX512BW-LABEL: test111:
3838 ; AVX512BW: # %bb.0: # %entry
3839 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
3840 ; AVX512BW-NEXT: retq
3842 %cmp = icmp ugt <32 x i16> %a, %b
3843 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3847 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
3848 ; SSE2-LABEL: test112:
3849 ; SSE2: # %bb.0: # %entry
3850 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3851 ; SSE2-NEXT: pxor %xmm8, %xmm4
3852 ; SSE2-NEXT: pxor %xmm8, %xmm0
3853 ; SSE2-NEXT: pmaxsw %xmm4, %xmm0
3854 ; SSE2-NEXT: pxor %xmm8, %xmm0
3855 ; SSE2-NEXT: pxor %xmm8, %xmm5
3856 ; SSE2-NEXT: pxor %xmm8, %xmm1
3857 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1
3858 ; SSE2-NEXT: pxor %xmm8, %xmm1
3859 ; SSE2-NEXT: pxor %xmm8, %xmm6
3860 ; SSE2-NEXT: pxor %xmm8, %xmm2
3861 ; SSE2-NEXT: pmaxsw %xmm6, %xmm2
3862 ; SSE2-NEXT: pxor %xmm8, %xmm2
3863 ; SSE2-NEXT: pxor %xmm8, %xmm7
3864 ; SSE2-NEXT: pxor %xmm8, %xmm3
3865 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3
3866 ; SSE2-NEXT: pxor %xmm8, %xmm3
3869 ; SSE4-LABEL: test112:
3870 ; SSE4: # %bb.0: # %entry
3871 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0
3872 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1
3873 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2
3874 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3
3877 ; AVX1-LABEL: test112:
3878 ; AVX1: # %bb.0: # %entry
3879 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3880 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3881 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
3882 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
3883 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3884 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3885 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3886 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2
3887 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
3888 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3891 ; AVX2-LABEL: test112:
3892 ; AVX2: # %bb.0: # %entry
3893 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
3894 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
3897 ; AVX512BW-LABEL: test112:
3898 ; AVX512BW: # %bb.0: # %entry
3899 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
3900 ; AVX512BW-NEXT: retq
3902 %cmp = icmp uge <32 x i16> %a, %b
3903 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3907 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
3908 ; SSE2-LABEL: test113:
3909 ; SSE2: # %bb.0: # %entry
3910 ; SSE2-NEXT: movdqa %xmm4, %xmm8
3911 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm8
3912 ; SSE2-NEXT: pand %xmm8, %xmm0
3913 ; SSE2-NEXT: pandn %xmm4, %xmm8
3914 ; SSE2-NEXT: por %xmm8, %xmm0
3915 ; SSE2-NEXT: movdqa %xmm5, %xmm4
3916 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
3917 ; SSE2-NEXT: pand %xmm4, %xmm1
3918 ; SSE2-NEXT: pandn %xmm5, %xmm4
3919 ; SSE2-NEXT: por %xmm4, %xmm1
3920 ; SSE2-NEXT: movdqa %xmm6, %xmm4
3921 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
3922 ; SSE2-NEXT: pand %xmm4, %xmm2
3923 ; SSE2-NEXT: pandn %xmm6, %xmm4
3924 ; SSE2-NEXT: por %xmm4, %xmm2
3925 ; SSE2-NEXT: movdqa %xmm7, %xmm4
3926 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
3927 ; SSE2-NEXT: pand %xmm4, %xmm3
3928 ; SSE2-NEXT: pandn %xmm7, %xmm4
3929 ; SSE2-NEXT: por %xmm4, %xmm3
3932 ; SSE4-LABEL: test113:
3933 ; SSE4: # %bb.0: # %entry
3934 ; SSE4-NEXT: pminsd %xmm4, %xmm0
3935 ; SSE4-NEXT: pminsd %xmm5, %xmm1
3936 ; SSE4-NEXT: pminsd %xmm6, %xmm2
3937 ; SSE4-NEXT: pminsd %xmm7, %xmm3
3940 ; AVX1-LABEL: test113:
3941 ; AVX1: # %bb.0: # %entry
3942 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3943 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3944 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
3945 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
3946 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3947 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3948 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3949 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2
3950 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
3951 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3954 ; AVX2-LABEL: test113:
3955 ; AVX2: # %bb.0: # %entry
3956 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
3957 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
3960 ; AVX512F-LABEL: test113:
3961 ; AVX512F: # %bb.0: # %entry
3962 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0
3963 ; AVX512F-NEXT: retq
3965 %cmp = icmp slt <16 x i32> %a, %b
3966 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
3970 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
3971 ; SSE2-LABEL: test114:
3972 ; SSE2: # %bb.0: # %entry
3973 ; SSE2-NEXT: movdqa %xmm4, %xmm8
3974 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm8
3975 ; SSE2-NEXT: pand %xmm8, %xmm0
3976 ; SSE2-NEXT: pandn %xmm4, %xmm8
3977 ; SSE2-NEXT: por %xmm8, %xmm0
3978 ; SSE2-NEXT: movdqa %xmm5, %xmm4
3979 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
3980 ; SSE2-NEXT: pand %xmm4, %xmm1
3981 ; SSE2-NEXT: pandn %xmm5, %xmm4
3982 ; SSE2-NEXT: por %xmm4, %xmm1
3983 ; SSE2-NEXT: movdqa %xmm6, %xmm4
3984 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
3985 ; SSE2-NEXT: pand %xmm4, %xmm2
3986 ; SSE2-NEXT: pandn %xmm6, %xmm4
3987 ; SSE2-NEXT: por %xmm4, %xmm2
3988 ; SSE2-NEXT: movdqa %xmm7, %xmm4
3989 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
3990 ; SSE2-NEXT: pand %xmm4, %xmm3
3991 ; SSE2-NEXT: pandn %xmm7, %xmm4
3992 ; SSE2-NEXT: por %xmm4, %xmm3
3995 ; SSE4-LABEL: test114:
3996 ; SSE4: # %bb.0: # %entry
3997 ; SSE4-NEXT: pminsd %xmm4, %xmm0
3998 ; SSE4-NEXT: pminsd %xmm5, %xmm1
3999 ; SSE4-NEXT: pminsd %xmm6, %xmm2
4000 ; SSE4-NEXT: pminsd %xmm7, %xmm3
4003 ; AVX1-LABEL: test114:
4004 ; AVX1: # %bb.0: # %entry
4005 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4006 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4007 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
4008 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
4009 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4010 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4011 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4012 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2
4013 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
4014 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4017 ; AVX2-LABEL: test114:
4018 ; AVX2: # %bb.0: # %entry
4019 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
4020 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
4023 ; AVX512F-LABEL: test114:
4024 ; AVX512F: # %bb.0: # %entry
4025 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0
4026 ; AVX512F-NEXT: retq
4028 %cmp = icmp sle <16 x i32> %a, %b
4029 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4033 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4034 ; SSE2-LABEL: test115:
4035 ; SSE2: # %bb.0: # %entry
4036 ; SSE2-NEXT: movdqa %xmm0, %xmm8
4037 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
4038 ; SSE2-NEXT: pand %xmm8, %xmm0
4039 ; SSE2-NEXT: pandn %xmm4, %xmm8
4040 ; SSE2-NEXT: por %xmm0, %xmm8
4041 ; SSE2-NEXT: movdqa %xmm1, %xmm4
4042 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
4043 ; SSE2-NEXT: pand %xmm4, %xmm1
4044 ; SSE2-NEXT: pandn %xmm5, %xmm4
4045 ; SSE2-NEXT: por %xmm1, %xmm4
4046 ; SSE2-NEXT: movdqa %xmm2, %xmm5
4047 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
4048 ; SSE2-NEXT: pand %xmm5, %xmm2
4049 ; SSE2-NEXT: pandn %xmm6, %xmm5
4050 ; SSE2-NEXT: por %xmm2, %xmm5
4051 ; SSE2-NEXT: movdqa %xmm3, %xmm6
4052 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6
4053 ; SSE2-NEXT: pand %xmm6, %xmm3
4054 ; SSE2-NEXT: pandn %xmm7, %xmm6
4055 ; SSE2-NEXT: por %xmm3, %xmm6
4056 ; SSE2-NEXT: movdqa %xmm8, %xmm0
4057 ; SSE2-NEXT: movdqa %xmm4, %xmm1
4058 ; SSE2-NEXT: movdqa %xmm5, %xmm2
4059 ; SSE2-NEXT: movdqa %xmm6, %xmm3
4062 ; SSE4-LABEL: test115:
4063 ; SSE4: # %bb.0: # %entry
4064 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0
4065 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1
4066 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2
4067 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3
4070 ; AVX1-LABEL: test115:
4071 ; AVX1: # %bb.0: # %entry
4072 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4073 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4074 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4
4075 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
4076 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4077 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4078 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4079 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2
4080 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
4081 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4084 ; AVX2-LABEL: test115:
4085 ; AVX2: # %bb.0: # %entry
4086 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
4087 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
4090 ; AVX512F-LABEL: test115:
4091 ; AVX512F: # %bb.0: # %entry
4092 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
4093 ; AVX512F-NEXT: retq
4095 %cmp = icmp sgt <16 x i32> %a, %b
4096 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4100 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4101 ; SSE2-LABEL: test116:
4102 ; SSE2: # %bb.0: # %entry
4103 ; SSE2-NEXT: movdqa %xmm0, %xmm8
4104 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
4105 ; SSE2-NEXT: pand %xmm8, %xmm0
4106 ; SSE2-NEXT: pandn %xmm4, %xmm8
4107 ; SSE2-NEXT: por %xmm0, %xmm8
4108 ; SSE2-NEXT: movdqa %xmm1, %xmm4
4109 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
4110 ; SSE2-NEXT: pand %xmm4, %xmm1
4111 ; SSE2-NEXT: pandn %xmm5, %xmm4
4112 ; SSE2-NEXT: por %xmm1, %xmm4
4113 ; SSE2-NEXT: movdqa %xmm2, %xmm5
4114 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
4115 ; SSE2-NEXT: pand %xmm5, %xmm2
4116 ; SSE2-NEXT: pandn %xmm6, %xmm5
4117 ; SSE2-NEXT: por %xmm2, %xmm5
4118 ; SSE2-NEXT: movdqa %xmm3, %xmm6
4119 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6
4120 ; SSE2-NEXT: pand %xmm6, %xmm3
4121 ; SSE2-NEXT: pandn %xmm7, %xmm6
4122 ; SSE2-NEXT: por %xmm3, %xmm6
4123 ; SSE2-NEXT: movdqa %xmm8, %xmm0
4124 ; SSE2-NEXT: movdqa %xmm4, %xmm1
4125 ; SSE2-NEXT: movdqa %xmm5, %xmm2
4126 ; SSE2-NEXT: movdqa %xmm6, %xmm3
4129 ; SSE4-LABEL: test116:
4130 ; SSE4: # %bb.0: # %entry
4131 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0
4132 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1
4133 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2
4134 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3
4137 ; AVX1-LABEL: test116:
4138 ; AVX1: # %bb.0: # %entry
4139 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4140 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4141 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4
4142 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
4143 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4144 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4145 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4146 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2
4147 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
4148 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4151 ; AVX2-LABEL: test116:
4152 ; AVX2: # %bb.0: # %entry
4153 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
4154 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
4157 ; AVX512F-LABEL: test116:
4158 ; AVX512F: # %bb.0: # %entry
4159 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
4160 ; AVX512F-NEXT: retq
4162 %cmp = icmp sge <16 x i32> %a, %b
4163 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4167 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4168 ; SSE2-LABEL: test117:
4169 ; SSE2: # %bb.0: # %entry
4170 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4171 ; SSE2-NEXT: movdqa %xmm0, %xmm9
4172 ; SSE2-NEXT: pxor %xmm8, %xmm9
4173 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4174 ; SSE2-NEXT: pxor %xmm8, %xmm10
4175 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
4176 ; SSE2-NEXT: pand %xmm10, %xmm0
4177 ; SSE2-NEXT: pandn %xmm4, %xmm10
4178 ; SSE2-NEXT: por %xmm10, %xmm0
4179 ; SSE2-NEXT: movdqa %xmm1, %xmm9
4180 ; SSE2-NEXT: pxor %xmm8, %xmm9
4181 ; SSE2-NEXT: movdqa %xmm5, %xmm4
4182 ; SSE2-NEXT: pxor %xmm8, %xmm4
4183 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm4
4184 ; SSE2-NEXT: pand %xmm4, %xmm1
4185 ; SSE2-NEXT: pandn %xmm5, %xmm4
4186 ; SSE2-NEXT: por %xmm4, %xmm1
4187 ; SSE2-NEXT: movdqa %xmm2, %xmm4
4188 ; SSE2-NEXT: pxor %xmm8, %xmm4
4189 ; SSE2-NEXT: movdqa %xmm6, %xmm5
4190 ; SSE2-NEXT: pxor %xmm8, %xmm5
4191 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
4192 ; SSE2-NEXT: pand %xmm5, %xmm2
4193 ; SSE2-NEXT: pandn %xmm6, %xmm5
4194 ; SSE2-NEXT: por %xmm5, %xmm2
4195 ; SSE2-NEXT: movdqa %xmm3, %xmm4
4196 ; SSE2-NEXT: pxor %xmm8, %xmm4
4197 ; SSE2-NEXT: pxor %xmm7, %xmm8
4198 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
4199 ; SSE2-NEXT: pand %xmm8, %xmm3
4200 ; SSE2-NEXT: pandn %xmm7, %xmm8
4201 ; SSE2-NEXT: por %xmm8, %xmm3
4204 ; SSE4-LABEL: test117:
4205 ; SSE4: # %bb.0: # %entry
4206 ; SSE4-NEXT: pminud %xmm4, %xmm0
4207 ; SSE4-NEXT: pminud %xmm5, %xmm1
4208 ; SSE4-NEXT: pminud %xmm6, %xmm2
4209 ; SSE4-NEXT: pminud %xmm7, %xmm3
4212 ; AVX1-LABEL: test117:
4213 ; AVX1: # %bb.0: # %entry
4214 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4215 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4216 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
4217 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
4218 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4219 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4220 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4221 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2
4222 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
4223 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4226 ; AVX2-LABEL: test117:
4227 ; AVX2: # %bb.0: # %entry
4228 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
4229 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
4232 ; AVX512F-LABEL: test117:
4233 ; AVX512F: # %bb.0: # %entry
4234 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0
4235 ; AVX512F-NEXT: retq
4237 %cmp = icmp ult <16 x i32> %a, %b
4238 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4242 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4243 ; SSE2-LABEL: test118:
4244 ; SSE2: # %bb.0: # %entry
4245 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4246 ; SSE2-NEXT: movdqa %xmm0, %xmm9
4247 ; SSE2-NEXT: pxor %xmm8, %xmm9
4248 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4249 ; SSE2-NEXT: pxor %xmm8, %xmm10
4250 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
4251 ; SSE2-NEXT: pand %xmm10, %xmm0
4252 ; SSE2-NEXT: pandn %xmm4, %xmm10
4253 ; SSE2-NEXT: por %xmm10, %xmm0
4254 ; SSE2-NEXT: movdqa %xmm1, %xmm9
4255 ; SSE2-NEXT: pxor %xmm8, %xmm9
4256 ; SSE2-NEXT: movdqa %xmm5, %xmm4
4257 ; SSE2-NEXT: pxor %xmm8, %xmm4
4258 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm4
4259 ; SSE2-NEXT: pand %xmm4, %xmm1
4260 ; SSE2-NEXT: pandn %xmm5, %xmm4
4261 ; SSE2-NEXT: por %xmm4, %xmm1
4262 ; SSE2-NEXT: movdqa %xmm2, %xmm4
4263 ; SSE2-NEXT: pxor %xmm8, %xmm4
4264 ; SSE2-NEXT: movdqa %xmm6, %xmm5
4265 ; SSE2-NEXT: pxor %xmm8, %xmm5
4266 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
4267 ; SSE2-NEXT: pand %xmm5, %xmm2
4268 ; SSE2-NEXT: pandn %xmm6, %xmm5
4269 ; SSE2-NEXT: por %xmm5, %xmm2
4270 ; SSE2-NEXT: movdqa %xmm3, %xmm4
4271 ; SSE2-NEXT: pxor %xmm8, %xmm4
4272 ; SSE2-NEXT: pxor %xmm7, %xmm8
4273 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
4274 ; SSE2-NEXT: pand %xmm8, %xmm3
4275 ; SSE2-NEXT: pandn %xmm7, %xmm8
4276 ; SSE2-NEXT: por %xmm8, %xmm3
4279 ; SSE4-LABEL: test118:
4280 ; SSE4: # %bb.0: # %entry
4281 ; SSE4-NEXT: pminud %xmm4, %xmm0
4282 ; SSE4-NEXT: pminud %xmm5, %xmm1
4283 ; SSE4-NEXT: pminud %xmm6, %xmm2
4284 ; SSE4-NEXT: pminud %xmm7, %xmm3
4287 ; AVX1-LABEL: test118:
4288 ; AVX1: # %bb.0: # %entry
4289 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4290 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4291 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
4292 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
4293 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4294 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4295 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4296 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2
4297 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
4298 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4301 ; AVX2-LABEL: test118:
4302 ; AVX2: # %bb.0: # %entry
4303 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
4304 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
4307 ; AVX512F-LABEL: test118:
4308 ; AVX512F: # %bb.0: # %entry
4309 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0
4310 ; AVX512F-NEXT: retq
4312 %cmp = icmp ule <16 x i32> %a, %b
4313 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4317 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4318 ; SSE2-LABEL: test119:
4319 ; SSE2: # %bb.0: # %entry
4320 ; SSE2-NEXT: movdqa %xmm1, %xmm8
4321 ; SSE2-NEXT: movdqa %xmm0, %xmm10
4322 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
4323 ; SSE2-NEXT: movdqa %xmm4, %xmm1
4324 ; SSE2-NEXT: pxor %xmm9, %xmm1
4325 ; SSE2-NEXT: pxor %xmm9, %xmm0
4326 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0
4327 ; SSE2-NEXT: pand %xmm0, %xmm10
4328 ; SSE2-NEXT: pandn %xmm4, %xmm0
4329 ; SSE2-NEXT: por %xmm10, %xmm0
4330 ; SSE2-NEXT: movdqa %xmm5, %xmm4
4331 ; SSE2-NEXT: pxor %xmm9, %xmm4
4332 ; SSE2-NEXT: movdqa %xmm8, %xmm1
4333 ; SSE2-NEXT: pxor %xmm9, %xmm1
4334 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1
4335 ; SSE2-NEXT: pand %xmm1, %xmm8
4336 ; SSE2-NEXT: pandn %xmm5, %xmm1
4337 ; SSE2-NEXT: por %xmm8, %xmm1
4338 ; SSE2-NEXT: movdqa %xmm6, %xmm5
4339 ; SSE2-NEXT: pxor %xmm9, %xmm5
4340 ; SSE2-NEXT: movdqa %xmm2, %xmm4
4341 ; SSE2-NEXT: pxor %xmm9, %xmm4
4342 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
4343 ; SSE2-NEXT: pand %xmm4, %xmm2
4344 ; SSE2-NEXT: pandn %xmm6, %xmm4
4345 ; SSE2-NEXT: por %xmm2, %xmm4
4346 ; SSE2-NEXT: movdqa %xmm7, %xmm2
4347 ; SSE2-NEXT: pxor %xmm9, %xmm2
4348 ; SSE2-NEXT: pxor %xmm3, %xmm9
4349 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9
4350 ; SSE2-NEXT: pand %xmm9, %xmm3
4351 ; SSE2-NEXT: pandn %xmm7, %xmm9
4352 ; SSE2-NEXT: por %xmm9, %xmm3
4353 ; SSE2-NEXT: movdqa %xmm4, %xmm2
4356 ; SSE4-LABEL: test119:
4357 ; SSE4: # %bb.0: # %entry
4358 ; SSE4-NEXT: pmaxud %xmm4, %xmm0
4359 ; SSE4-NEXT: pmaxud %xmm5, %xmm1
4360 ; SSE4-NEXT: pmaxud %xmm6, %xmm2
4361 ; SSE4-NEXT: pmaxud %xmm7, %xmm3
4364 ; AVX1-LABEL: test119:
4365 ; AVX1: # %bb.0: # %entry
4366 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4367 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4368 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
4369 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
4370 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4371 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4372 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4373 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2
4374 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
4375 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4378 ; AVX2-LABEL: test119:
4379 ; AVX2: # %bb.0: # %entry
4380 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
4381 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
4384 ; AVX512F-LABEL: test119:
4385 ; AVX512F: # %bb.0: # %entry
4386 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
4387 ; AVX512F-NEXT: retq
4389 %cmp = icmp ugt <16 x i32> %a, %b
4390 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4394 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4395 ; SSE2-LABEL: test120:
4396 ; SSE2: # %bb.0: # %entry
4397 ; SSE2-NEXT: movdqa %xmm1, %xmm8
4398 ; SSE2-NEXT: movdqa %xmm0, %xmm10
4399 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
4400 ; SSE2-NEXT: movdqa %xmm4, %xmm1
4401 ; SSE2-NEXT: pxor %xmm9, %xmm1
4402 ; SSE2-NEXT: pxor %xmm9, %xmm0
4403 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0
4404 ; SSE2-NEXT: pand %xmm0, %xmm10
4405 ; SSE2-NEXT: pandn %xmm4, %xmm0
4406 ; SSE2-NEXT: por %xmm10, %xmm0
4407 ; SSE2-NEXT: movdqa %xmm5, %xmm4
4408 ; SSE2-NEXT: pxor %xmm9, %xmm4
4409 ; SSE2-NEXT: movdqa %xmm8, %xmm1
4410 ; SSE2-NEXT: pxor %xmm9, %xmm1
4411 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1
4412 ; SSE2-NEXT: pand %xmm1, %xmm8
4413 ; SSE2-NEXT: pandn %xmm5, %xmm1
4414 ; SSE2-NEXT: por %xmm8, %xmm1
4415 ; SSE2-NEXT: movdqa %xmm6, %xmm5
4416 ; SSE2-NEXT: pxor %xmm9, %xmm5
4417 ; SSE2-NEXT: movdqa %xmm2, %xmm4
4418 ; SSE2-NEXT: pxor %xmm9, %xmm4
4419 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
4420 ; SSE2-NEXT: pand %xmm4, %xmm2
4421 ; SSE2-NEXT: pandn %xmm6, %xmm4
4422 ; SSE2-NEXT: por %xmm2, %xmm4
4423 ; SSE2-NEXT: movdqa %xmm7, %xmm2
4424 ; SSE2-NEXT: pxor %xmm9, %xmm2
4425 ; SSE2-NEXT: pxor %xmm3, %xmm9
4426 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9
4427 ; SSE2-NEXT: pand %xmm9, %xmm3
4428 ; SSE2-NEXT: pandn %xmm7, %xmm9
4429 ; SSE2-NEXT: por %xmm9, %xmm3
4430 ; SSE2-NEXT: movdqa %xmm4, %xmm2
4433 ; SSE4-LABEL: test120:
4434 ; SSE4: # %bb.0: # %entry
4435 ; SSE4-NEXT: pmaxud %xmm4, %xmm0
4436 ; SSE4-NEXT: pmaxud %xmm5, %xmm1
4437 ; SSE4-NEXT: pmaxud %xmm6, %xmm2
4438 ; SSE4-NEXT: pmaxud %xmm7, %xmm3
4441 ; AVX1-LABEL: test120:
4442 ; AVX1: # %bb.0: # %entry
4443 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4444 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4445 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
4446 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
4447 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4448 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4449 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4450 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2
4451 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
4452 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4455 ; AVX2-LABEL: test120:
4456 ; AVX2: # %bb.0: # %entry
4457 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
4458 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
4461 ; AVX512F-LABEL: test120:
4462 ; AVX512F: # %bb.0: # %entry
4463 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
4464 ; AVX512F-NEXT: retq
4466 %cmp = icmp uge <16 x i32> %a, %b
4467 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4471 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4472 ; SSE2-LABEL: test121:
4473 ; SSE2: # %bb.0: # %entry
4474 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
4475 ; SSE2-NEXT: movdqa %xmm0, %xmm9
4476 ; SSE2-NEXT: pxor %xmm8, %xmm9
4477 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4478 ; SSE2-NEXT: pxor %xmm8, %xmm10
4479 ; SSE2-NEXT: movdqa %xmm10, %xmm11
4480 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
4481 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4482 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
4483 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4484 ; SSE2-NEXT: pand %xmm12, %xmm9
4485 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4486 ; SSE2-NEXT: por %xmm9, %xmm10
4487 ; SSE2-NEXT: pand %xmm10, %xmm0
4488 ; SSE2-NEXT: pandn %xmm4, %xmm10
4489 ; SSE2-NEXT: por %xmm10, %xmm0
4490 ; SSE2-NEXT: movdqa %xmm1, %xmm9
4491 ; SSE2-NEXT: pxor %xmm8, %xmm9
4492 ; SSE2-NEXT: movdqa %xmm5, %xmm4
4493 ; SSE2-NEXT: pxor %xmm8, %xmm4
4494 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4495 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
4496 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4497 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
4498 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4499 ; SSE2-NEXT: pand %xmm11, %xmm9
4500 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4501 ; SSE2-NEXT: por %xmm9, %xmm4
4502 ; SSE2-NEXT: pand %xmm4, %xmm1
4503 ; SSE2-NEXT: pandn %xmm5, %xmm4
4504 ; SSE2-NEXT: por %xmm4, %xmm1
4505 ; SSE2-NEXT: movdqa %xmm2, %xmm4
4506 ; SSE2-NEXT: pxor %xmm8, %xmm4
4507 ; SSE2-NEXT: movdqa %xmm6, %xmm5
4508 ; SSE2-NEXT: pxor %xmm8, %xmm5
4509 ; SSE2-NEXT: movdqa %xmm5, %xmm9
4510 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
4511 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4512 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
4513 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4514 ; SSE2-NEXT: pand %xmm10, %xmm4
4515 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4516 ; SSE2-NEXT: por %xmm4, %xmm5
4517 ; SSE2-NEXT: pand %xmm5, %xmm2
4518 ; SSE2-NEXT: pandn %xmm6, %xmm5
4519 ; SSE2-NEXT: por %xmm5, %xmm2
4520 ; SSE2-NEXT: movdqa %xmm3, %xmm4
4521 ; SSE2-NEXT: pxor %xmm8, %xmm4
4522 ; SSE2-NEXT: pxor %xmm7, %xmm8
4523 ; SSE2-NEXT: movdqa %xmm8, %xmm5
4524 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
4525 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4526 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
4527 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4528 ; SSE2-NEXT: pand %xmm6, %xmm4
4529 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4530 ; SSE2-NEXT: por %xmm4, %xmm5
4531 ; SSE2-NEXT: pand %xmm5, %xmm3
4532 ; SSE2-NEXT: pandn %xmm7, %xmm5
4533 ; SSE2-NEXT: por %xmm5, %xmm3
4536 ; SSE4-LABEL: test121:
4537 ; SSE4: # %bb.0: # %entry
4538 ; SSE4-NEXT: movdqa %xmm0, %xmm8
4539 ; SSE4-NEXT: movdqa %xmm4, %xmm0
4540 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0
4541 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
4542 ; SSE4-NEXT: movdqa %xmm5, %xmm0
4543 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
4544 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
4545 ; SSE4-NEXT: movdqa %xmm6, %xmm0
4546 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
4547 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
4548 ; SSE4-NEXT: movdqa %xmm7, %xmm0
4549 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
4550 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
4551 ; SSE4-NEXT: movapd %xmm4, %xmm0
4552 ; SSE4-NEXT: movapd %xmm5, %xmm1
4553 ; SSE4-NEXT: movapd %xmm6, %xmm2
4554 ; SSE4-NEXT: movapd %xmm7, %xmm3
4557 ; AVX1-LABEL: test121:
4558 ; AVX1: # %bb.0: # %entry
4559 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
4560 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
4561 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
4562 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5
4563 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
4564 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4565 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4566 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
4567 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
4568 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4
4569 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
4570 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4573 ; AVX2-LABEL: test121:
4574 ; AVX2: # %bb.0: # %entry
4575 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4
4576 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4577 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2
4578 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4581 ; AVX512F-LABEL: test121:
4582 ; AVX512F: # %bb.0: # %entry
4583 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0
4584 ; AVX512F-NEXT: retq
4586 %cmp = icmp slt <8 x i64> %a, %b
4587 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4591 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4592 ; SSE2-LABEL: test122:
4593 ; SSE2: # %bb.0: # %entry
4594 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
4595 ; SSE2-NEXT: movdqa %xmm0, %xmm9
4596 ; SSE2-NEXT: pxor %xmm8, %xmm9
4597 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4598 ; SSE2-NEXT: pxor %xmm8, %xmm10
4599 ; SSE2-NEXT: movdqa %xmm10, %xmm11
4600 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
4601 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4602 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
4603 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4604 ; SSE2-NEXT: pand %xmm12, %xmm9
4605 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4606 ; SSE2-NEXT: por %xmm9, %xmm10
4607 ; SSE2-NEXT: pand %xmm10, %xmm0
4608 ; SSE2-NEXT: pandn %xmm4, %xmm10
4609 ; SSE2-NEXT: por %xmm10, %xmm0
4610 ; SSE2-NEXT: movdqa %xmm1, %xmm9
4611 ; SSE2-NEXT: pxor %xmm8, %xmm9
4612 ; SSE2-NEXT: movdqa %xmm5, %xmm4
4613 ; SSE2-NEXT: pxor %xmm8, %xmm4
4614 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4615 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
4616 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4617 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
4618 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4619 ; SSE2-NEXT: pand %xmm11, %xmm9
4620 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4621 ; SSE2-NEXT: por %xmm9, %xmm4
4622 ; SSE2-NEXT: pand %xmm4, %xmm1
4623 ; SSE2-NEXT: pandn %xmm5, %xmm4
4624 ; SSE2-NEXT: por %xmm4, %xmm1
4625 ; SSE2-NEXT: movdqa %xmm2, %xmm4
4626 ; SSE2-NEXT: pxor %xmm8, %xmm4
4627 ; SSE2-NEXT: movdqa %xmm6, %xmm5
4628 ; SSE2-NEXT: pxor %xmm8, %xmm5
4629 ; SSE2-NEXT: movdqa %xmm5, %xmm9
4630 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
4631 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4632 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
4633 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4634 ; SSE2-NEXT: pand %xmm10, %xmm4
4635 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4636 ; SSE2-NEXT: por %xmm4, %xmm5
4637 ; SSE2-NEXT: pand %xmm5, %xmm2
4638 ; SSE2-NEXT: pandn %xmm6, %xmm5
4639 ; SSE2-NEXT: por %xmm5, %xmm2
4640 ; SSE2-NEXT: movdqa %xmm3, %xmm4
4641 ; SSE2-NEXT: pxor %xmm8, %xmm4
4642 ; SSE2-NEXT: pxor %xmm7, %xmm8
4643 ; SSE2-NEXT: movdqa %xmm8, %xmm5
4644 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
4645 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4646 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
4647 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4648 ; SSE2-NEXT: pand %xmm6, %xmm4
4649 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4650 ; SSE2-NEXT: por %xmm4, %xmm5
4651 ; SSE2-NEXT: pand %xmm5, %xmm3
4652 ; SSE2-NEXT: pandn %xmm7, %xmm5
4653 ; SSE2-NEXT: por %xmm5, %xmm3
4656 ; SSE4-LABEL: test122:
4657 ; SSE4: # %bb.0: # %entry
4658 ; SSE4-NEXT: movdqa %xmm0, %xmm8
4659 ; SSE4-NEXT: movdqa %xmm4, %xmm0
4660 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0
4661 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
4662 ; SSE4-NEXT: movdqa %xmm5, %xmm0
4663 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
4664 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
4665 ; SSE4-NEXT: movdqa %xmm6, %xmm0
4666 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
4667 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
4668 ; SSE4-NEXT: movdqa %xmm7, %xmm0
4669 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
4670 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
4671 ; SSE4-NEXT: movapd %xmm4, %xmm0
4672 ; SSE4-NEXT: movapd %xmm5, %xmm1
4673 ; SSE4-NEXT: movapd %xmm6, %xmm2
4674 ; SSE4-NEXT: movapd %xmm7, %xmm3
4677 ; AVX1-LABEL: test122:
4678 ; AVX1: # %bb.0: # %entry
4679 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
4680 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
4681 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
4682 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5
4683 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
4684 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4685 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
4686 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
4687 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
4688 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4
4689 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
4690 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4693 ; AVX2-LABEL: test122:
4694 ; AVX2: # %bb.0: # %entry
4695 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4
4696 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4697 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2
4698 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4701 ; AVX512F-LABEL: test122:
4702 ; AVX512F: # %bb.0: # %entry
4703 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0
4704 ; AVX512F-NEXT: retq
4706 %cmp = icmp sle <8 x i64> %a, %b
4707 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4711 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
4712 ; SSE2-LABEL: test123:
4713 ; SSE2: # %bb.0: # %entry
4714 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
4715 ; SSE2-NEXT: movdqa %xmm4, %xmm9
4716 ; SSE2-NEXT: pxor %xmm8, %xmm9
4717 ; SSE2-NEXT: movdqa %xmm0, %xmm10
4718 ; SSE2-NEXT: pxor %xmm8, %xmm10
4719 ; SSE2-NEXT: movdqa %xmm10, %xmm11
4720 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
4721 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4722 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
4723 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4724 ; SSE2-NEXT: pand %xmm12, %xmm9
4725 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4726 ; SSE2-NEXT: por %xmm9, %xmm10
4727 ; SSE2-NEXT: pand %xmm10, %xmm0
4728 ; SSE2-NEXT: pandn %xmm4, %xmm10
4729 ; SSE2-NEXT: por %xmm10, %xmm0
4730 ; SSE2-NEXT: movdqa %xmm5, %xmm9
4731 ; SSE2-NEXT: pxor %xmm8, %xmm9
4732 ; SSE2-NEXT: movdqa %xmm1, %xmm4
4733 ; SSE2-NEXT: pxor %xmm8, %xmm4
4734 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4735 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
4736 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4737 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
4738 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4739 ; SSE2-NEXT: pand %xmm11, %xmm9
4740 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4741 ; SSE2-NEXT: por %xmm9, %xmm4
4742 ; SSE2-NEXT: pand %xmm4, %xmm1
4743 ; SSE2-NEXT: pandn %xmm5, %xmm4
4744 ; SSE2-NEXT: por %xmm4, %xmm1
4745 ; SSE2-NEXT: movdqa %xmm6, %xmm4
4746 ; SSE2-NEXT: pxor %xmm8, %xmm4
4747 ; SSE2-NEXT: movdqa %xmm2, %xmm5
4748 ; SSE2-NEXT: pxor %xmm8, %xmm5
4749 ; SSE2-NEXT: movdqa %xmm5, %xmm9
4750 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
4751 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4752 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
4753 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4754 ; SSE2-NEXT: pand %xmm10, %xmm4
4755 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4756 ; SSE2-NEXT: por %xmm4, %xmm5
4757 ; SSE2-NEXT: pand %xmm5, %xmm2
4758 ; SSE2-NEXT: pandn %xmm6, %xmm5
4759 ; SSE2-NEXT: por %xmm5, %xmm2
4760 ; SSE2-NEXT: movdqa %xmm7, %xmm4
4761 ; SSE2-NEXT: pxor %xmm8, %xmm4
4762 ; SSE2-NEXT: pxor %xmm3, %xmm8
4763 ; SSE2-NEXT: movdqa %xmm8, %xmm5
4764 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
4765 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4766 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
4767 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4768 ; SSE2-NEXT: pand %xmm6, %xmm4
4769 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4770 ; SSE2-NEXT: por %xmm4, %xmm5
4771 ; SSE2-NEXT: pand %xmm5, %xmm3
4772 ; SSE2-NEXT: pandn %xmm7, %xmm5
4773 ; SSE2-NEXT: por %xmm5, %xmm3
4776 ; SSE4-LABEL: test123:
4777 ; SSE4: # %bb.0: # %entry
4778 ; SSE4-NEXT: movdqa %xmm0, %xmm8
4779 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
4780 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
4781 ; SSE4-NEXT: movdqa %xmm1, %xmm0
4782 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm0
4783 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
4784 ; SSE4-NEXT: movdqa %xmm2, %xmm0
4785 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
4786 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
4787 ; SSE4-NEXT: movdqa %xmm3, %xmm0
4788 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0
4789 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
4790 ; SSE4-NEXT: movapd %xmm4, %xmm0
4791 ; SSE4-NEXT: movapd %xmm5, %xmm1
4792 ; SSE4-NEXT: movapd %xmm6, %xmm2
4793 ; SSE4-NEXT: movapd %xmm7, %xmm3
4796 ; AVX1-LABEL: test123:
4797 ; AVX1: # %bb.0: # %entry
4798 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4799 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4800 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
4801 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5
4802 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
4803 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4804 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4805 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4806 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
4807 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4
4808 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
4809 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4812 ; AVX2-LABEL: test123:
4813 ; AVX2: # %bb.0: # %entry
4814 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4
4815 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4816 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2
4817 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4820 ; AVX512F-LABEL: test123:
4821 ; AVX512F: # %bb.0: # %entry
4822 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
4823 ; AVX512F-NEXT: retq
4825 %cmp = icmp sgt <8 x i64> %a, %b
4826 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4830 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
4831 ; SSE2-LABEL: test124:
4832 ; SSE2: # %bb.0: # %entry
4833 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
4834 ; SSE2-NEXT: movdqa %xmm4, %xmm9
4835 ; SSE2-NEXT: pxor %xmm8, %xmm9
4836 ; SSE2-NEXT: movdqa %xmm0, %xmm10
4837 ; SSE2-NEXT: pxor %xmm8, %xmm10
4838 ; SSE2-NEXT: movdqa %xmm10, %xmm11
4839 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
4840 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4841 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
4842 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4843 ; SSE2-NEXT: pand %xmm12, %xmm9
4844 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4845 ; SSE2-NEXT: por %xmm9, %xmm10
4846 ; SSE2-NEXT: pand %xmm10, %xmm0
4847 ; SSE2-NEXT: pandn %xmm4, %xmm10
4848 ; SSE2-NEXT: por %xmm10, %xmm0
4849 ; SSE2-NEXT: movdqa %xmm5, %xmm9
4850 ; SSE2-NEXT: pxor %xmm8, %xmm9
4851 ; SSE2-NEXT: movdqa %xmm1, %xmm4
4852 ; SSE2-NEXT: pxor %xmm8, %xmm4
4853 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4854 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
4855 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4856 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
4857 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4858 ; SSE2-NEXT: pand %xmm11, %xmm9
4859 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4860 ; SSE2-NEXT: por %xmm9, %xmm4
4861 ; SSE2-NEXT: pand %xmm4, %xmm1
4862 ; SSE2-NEXT: pandn %xmm5, %xmm4
4863 ; SSE2-NEXT: por %xmm4, %xmm1
4864 ; SSE2-NEXT: movdqa %xmm6, %xmm4
4865 ; SSE2-NEXT: pxor %xmm8, %xmm4
4866 ; SSE2-NEXT: movdqa %xmm2, %xmm5
4867 ; SSE2-NEXT: pxor %xmm8, %xmm5
4868 ; SSE2-NEXT: movdqa %xmm5, %xmm9
4869 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
4870 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4871 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
4872 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4873 ; SSE2-NEXT: pand %xmm10, %xmm4
4874 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4875 ; SSE2-NEXT: por %xmm4, %xmm5
4876 ; SSE2-NEXT: pand %xmm5, %xmm2
4877 ; SSE2-NEXT: pandn %xmm6, %xmm5
4878 ; SSE2-NEXT: por %xmm5, %xmm2
4879 ; SSE2-NEXT: movdqa %xmm7, %xmm4
4880 ; SSE2-NEXT: pxor %xmm8, %xmm4
4881 ; SSE2-NEXT: pxor %xmm3, %xmm8
4882 ; SSE2-NEXT: movdqa %xmm8, %xmm5
4883 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
4884 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4885 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
4886 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4887 ; SSE2-NEXT: pand %xmm6, %xmm4
4888 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4889 ; SSE2-NEXT: por %xmm4, %xmm5
4890 ; SSE2-NEXT: pand %xmm5, %xmm3
4891 ; SSE2-NEXT: pandn %xmm7, %xmm5
4892 ; SSE2-NEXT: por %xmm5, %xmm3
4895 ; SSE4-LABEL: test124:
4896 ; SSE4: # %bb.0: # %entry
4897 ; SSE4-NEXT: movdqa %xmm0, %xmm8
4898 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
4899 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
4900 ; SSE4-NEXT: movdqa %xmm1, %xmm0
4901 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm0
4902 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
4903 ; SSE4-NEXT: movdqa %xmm2, %xmm0
4904 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
4905 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
4906 ; SSE4-NEXT: movdqa %xmm3, %xmm0
4907 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0
4908 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
4909 ; SSE4-NEXT: movapd %xmm4, %xmm0
4910 ; SSE4-NEXT: movapd %xmm5, %xmm1
4911 ; SSE4-NEXT: movapd %xmm6, %xmm2
4912 ; SSE4-NEXT: movapd %xmm7, %xmm3
4915 ; AVX1-LABEL: test124:
4916 ; AVX1: # %bb.0: # %entry
4917 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4918 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4919 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
4920 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5
4921 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
4922 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4923 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4924 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4925 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
4926 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4
4927 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
4928 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4931 ; AVX2-LABEL: test124:
4932 ; AVX2: # %bb.0: # %entry
4933 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4
4934 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4935 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2
4936 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4939 ; AVX512F-LABEL: test124:
4940 ; AVX512F: # %bb.0: # %entry
4941 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
4942 ; AVX512F-NEXT: retq
4944 %cmp = icmp sge <8 x i64> %a, %b
4945 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4949 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
4950 ; SSE2-LABEL: test125:
4951 ; SSE2: # %bb.0: # %entry
4952 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4953 ; SSE2-NEXT: movdqa %xmm0, %xmm9
4954 ; SSE2-NEXT: pxor %xmm8, %xmm9
4955 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4956 ; SSE2-NEXT: pxor %xmm8, %xmm10
4957 ; SSE2-NEXT: movdqa %xmm10, %xmm11
4958 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
4959 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4960 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
4961 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4962 ; SSE2-NEXT: pand %xmm12, %xmm9
4963 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4964 ; SSE2-NEXT: por %xmm9, %xmm10
4965 ; SSE2-NEXT: pand %xmm10, %xmm0
4966 ; SSE2-NEXT: pandn %xmm4, %xmm10
4967 ; SSE2-NEXT: por %xmm10, %xmm0
4968 ; SSE2-NEXT: movdqa %xmm1, %xmm9
4969 ; SSE2-NEXT: pxor %xmm8, %xmm9
4970 ; SSE2-NEXT: movdqa %xmm5, %xmm4
4971 ; SSE2-NEXT: pxor %xmm8, %xmm4
4972 ; SSE2-NEXT: movdqa %xmm4, %xmm10
4973 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
4974 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4975 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
4976 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4977 ; SSE2-NEXT: pand %xmm11, %xmm9
4978 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4979 ; SSE2-NEXT: por %xmm9, %xmm4
4980 ; SSE2-NEXT: pand %xmm4, %xmm1
4981 ; SSE2-NEXT: pandn %xmm5, %xmm4
4982 ; SSE2-NEXT: por %xmm4, %xmm1
4983 ; SSE2-NEXT: movdqa %xmm2, %xmm4
4984 ; SSE2-NEXT: pxor %xmm8, %xmm4
4985 ; SSE2-NEXT: movdqa %xmm6, %xmm5
4986 ; SSE2-NEXT: pxor %xmm8, %xmm5
4987 ; SSE2-NEXT: movdqa %xmm5, %xmm9
4988 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
4989 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4990 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
4991 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4992 ; SSE2-NEXT: pand %xmm10, %xmm4
4993 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4994 ; SSE2-NEXT: por %xmm4, %xmm5
4995 ; SSE2-NEXT: pand %xmm5, %xmm2
4996 ; SSE2-NEXT: pandn %xmm6, %xmm5
4997 ; SSE2-NEXT: por %xmm5, %xmm2
4998 ; SSE2-NEXT: movdqa %xmm3, %xmm4
4999 ; SSE2-NEXT: pxor %xmm8, %xmm4
5000 ; SSE2-NEXT: pxor %xmm7, %xmm8
5001 ; SSE2-NEXT: movdqa %xmm8, %xmm5
5002 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
5003 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5004 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
5005 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5006 ; SSE2-NEXT: pand %xmm6, %xmm4
5007 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5008 ; SSE2-NEXT: por %xmm4, %xmm5
5009 ; SSE2-NEXT: pand %xmm5, %xmm3
5010 ; SSE2-NEXT: pandn %xmm7, %xmm5
5011 ; SSE2-NEXT: por %xmm5, %xmm3
5014 ; SSE4-LABEL: test125:
5015 ; SSE4: # %bb.0: # %entry
5016 ; SSE4-NEXT: movdqa %xmm0, %xmm9
5017 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5018 ; SSE4-NEXT: movdqa %xmm0, %xmm10
5019 ; SSE4-NEXT: pxor %xmm8, %xmm10
5020 ; SSE4-NEXT: movdqa %xmm4, %xmm0
5021 ; SSE4-NEXT: pxor %xmm8, %xmm0
5022 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0
5023 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
5024 ; SSE4-NEXT: movdqa %xmm1, %xmm9
5025 ; SSE4-NEXT: pxor %xmm8, %xmm9
5026 ; SSE4-NEXT: movdqa %xmm5, %xmm0
5027 ; SSE4-NEXT: pxor %xmm8, %xmm0
5028 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0
5029 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5030 ; SSE4-NEXT: movdqa %xmm2, %xmm1
5031 ; SSE4-NEXT: pxor %xmm8, %xmm1
5032 ; SSE4-NEXT: movdqa %xmm6, %xmm0
5033 ; SSE4-NEXT: pxor %xmm8, %xmm0
5034 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
5035 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5036 ; SSE4-NEXT: movdqa %xmm3, %xmm0
5037 ; SSE4-NEXT: pxor %xmm8, %xmm0
5038 ; SSE4-NEXT: pxor %xmm7, %xmm8
5039 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8
5040 ; SSE4-NEXT: movdqa %xmm8, %xmm0
5041 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5042 ; SSE4-NEXT: movapd %xmm4, %xmm0
5043 ; SSE4-NEXT: movapd %xmm5, %xmm1
5044 ; SSE4-NEXT: movapd %xmm6, %xmm2
5045 ; SSE4-NEXT: movapd %xmm7, %xmm3
5048 ; AVX1-LABEL: test125:
5049 ; AVX1: # %bb.0: # %entry
5050 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
5051 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5052 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5053 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
5054 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5055 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5056 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6
5057 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
5058 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5059 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5060 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5061 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
5062 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
5063 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
5064 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5065 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
5066 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4
5067 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5
5068 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
5069 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
5070 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5073 ; AVX2-LABEL: test125:
5074 ; AVX2: # %bb.0: # %entry
5075 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5076 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5
5077 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6
5078 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
5079 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5080 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2
5081 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4
5082 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2
5083 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5086 ; AVX512F-LABEL: test125:
5087 ; AVX512F: # %bb.0: # %entry
5088 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0
5089 ; AVX512F-NEXT: retq
5091 %cmp = icmp ult <8 x i64> %a, %b
5092 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5096 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5097 ; SSE2-LABEL: test126:
5098 ; SSE2: # %bb.0: # %entry
5099 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
5100 ; SSE2-NEXT: movdqa %xmm0, %xmm9
5101 ; SSE2-NEXT: pxor %xmm8, %xmm9
5102 ; SSE2-NEXT: movdqa %xmm4, %xmm10
5103 ; SSE2-NEXT: pxor %xmm8, %xmm10
5104 ; SSE2-NEXT: movdqa %xmm10, %xmm11
5105 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
5106 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5107 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
5108 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5109 ; SSE2-NEXT: pand %xmm12, %xmm9
5110 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5111 ; SSE2-NEXT: por %xmm9, %xmm10
5112 ; SSE2-NEXT: pand %xmm10, %xmm0
5113 ; SSE2-NEXT: pandn %xmm4, %xmm10
5114 ; SSE2-NEXT: por %xmm10, %xmm0
5115 ; SSE2-NEXT: movdqa %xmm1, %xmm9
5116 ; SSE2-NEXT: pxor %xmm8, %xmm9
5117 ; SSE2-NEXT: movdqa %xmm5, %xmm4
5118 ; SSE2-NEXT: pxor %xmm8, %xmm4
5119 ; SSE2-NEXT: movdqa %xmm4, %xmm10
5120 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
5121 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5122 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
5123 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5124 ; SSE2-NEXT: pand %xmm11, %xmm9
5125 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5126 ; SSE2-NEXT: por %xmm9, %xmm4
5127 ; SSE2-NEXT: pand %xmm4, %xmm1
5128 ; SSE2-NEXT: pandn %xmm5, %xmm4
5129 ; SSE2-NEXT: por %xmm4, %xmm1
5130 ; SSE2-NEXT: movdqa %xmm2, %xmm4
5131 ; SSE2-NEXT: pxor %xmm8, %xmm4
5132 ; SSE2-NEXT: movdqa %xmm6, %xmm5
5133 ; SSE2-NEXT: pxor %xmm8, %xmm5
5134 ; SSE2-NEXT: movdqa %xmm5, %xmm9
5135 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
5136 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5137 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
5138 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5139 ; SSE2-NEXT: pand %xmm10, %xmm4
5140 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5141 ; SSE2-NEXT: por %xmm4, %xmm5
5142 ; SSE2-NEXT: pand %xmm5, %xmm2
5143 ; SSE2-NEXT: pandn %xmm6, %xmm5
5144 ; SSE2-NEXT: por %xmm5, %xmm2
5145 ; SSE2-NEXT: movdqa %xmm3, %xmm4
5146 ; SSE2-NEXT: pxor %xmm8, %xmm4
5147 ; SSE2-NEXT: pxor %xmm7, %xmm8
5148 ; SSE2-NEXT: movdqa %xmm8, %xmm5
5149 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
5150 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5151 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
5152 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5153 ; SSE2-NEXT: pand %xmm6, %xmm4
5154 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5155 ; SSE2-NEXT: por %xmm4, %xmm5
5156 ; SSE2-NEXT: pand %xmm5, %xmm3
5157 ; SSE2-NEXT: pandn %xmm7, %xmm5
5158 ; SSE2-NEXT: por %xmm5, %xmm3
5161 ; SSE4-LABEL: test126:
5162 ; SSE4: # %bb.0: # %entry
5163 ; SSE4-NEXT: movdqa %xmm0, %xmm9
5164 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5165 ; SSE4-NEXT: movdqa %xmm0, %xmm10
5166 ; SSE4-NEXT: pxor %xmm8, %xmm10
5167 ; SSE4-NEXT: movdqa %xmm4, %xmm0
5168 ; SSE4-NEXT: pxor %xmm8, %xmm0
5169 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0
5170 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
5171 ; SSE4-NEXT: movdqa %xmm1, %xmm9
5172 ; SSE4-NEXT: pxor %xmm8, %xmm9
5173 ; SSE4-NEXT: movdqa %xmm5, %xmm0
5174 ; SSE4-NEXT: pxor %xmm8, %xmm0
5175 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0
5176 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5177 ; SSE4-NEXT: movdqa %xmm2, %xmm1
5178 ; SSE4-NEXT: pxor %xmm8, %xmm1
5179 ; SSE4-NEXT: movdqa %xmm6, %xmm0
5180 ; SSE4-NEXT: pxor %xmm8, %xmm0
5181 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
5182 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5183 ; SSE4-NEXT: movdqa %xmm3, %xmm0
5184 ; SSE4-NEXT: pxor %xmm8, %xmm0
5185 ; SSE4-NEXT: pxor %xmm7, %xmm8
5186 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8
5187 ; SSE4-NEXT: movdqa %xmm8, %xmm0
5188 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5189 ; SSE4-NEXT: movapd %xmm4, %xmm0
5190 ; SSE4-NEXT: movapd %xmm5, %xmm1
5191 ; SSE4-NEXT: movapd %xmm6, %xmm2
5192 ; SSE4-NEXT: movapd %xmm7, %xmm3
5195 ; AVX1-LABEL: test126:
5196 ; AVX1: # %bb.0: # %entry
5197 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
5198 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5199 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5200 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
5201 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5202 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5203 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6
5204 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
5205 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5206 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5207 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5208 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
5209 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
5210 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
5211 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5212 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
5213 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4
5214 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5
5215 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
5216 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
5217 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5220 ; AVX2-LABEL: test126:
5221 ; AVX2: # %bb.0: # %entry
5222 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5223 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5
5224 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6
5225 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
5226 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5227 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2
5228 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4
5229 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2
5230 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5233 ; AVX512F-LABEL: test126:
5234 ; AVX512F: # %bb.0: # %entry
5235 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0
5236 ; AVX512F-NEXT: retq
5238 %cmp = icmp ule <8 x i64> %a, %b
5239 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5243 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5244 ; SSE2-LABEL: test127:
5245 ; SSE2: # %bb.0: # %entry
5246 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
5247 ; SSE2-NEXT: movdqa %xmm4, %xmm9
5248 ; SSE2-NEXT: pxor %xmm8, %xmm9
5249 ; SSE2-NEXT: movdqa %xmm0, %xmm10
5250 ; SSE2-NEXT: pxor %xmm8, %xmm10
5251 ; SSE2-NEXT: movdqa %xmm10, %xmm11
5252 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
5253 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5254 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
5255 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5256 ; SSE2-NEXT: pand %xmm12, %xmm9
5257 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5258 ; SSE2-NEXT: por %xmm9, %xmm10
5259 ; SSE2-NEXT: pand %xmm10, %xmm0
5260 ; SSE2-NEXT: pandn %xmm4, %xmm10
5261 ; SSE2-NEXT: por %xmm10, %xmm0
5262 ; SSE2-NEXT: movdqa %xmm5, %xmm9
5263 ; SSE2-NEXT: pxor %xmm8, %xmm9
5264 ; SSE2-NEXT: movdqa %xmm1, %xmm4
5265 ; SSE2-NEXT: pxor %xmm8, %xmm4
5266 ; SSE2-NEXT: movdqa %xmm4, %xmm10
5267 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
5268 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5269 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
5270 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5271 ; SSE2-NEXT: pand %xmm11, %xmm9
5272 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5273 ; SSE2-NEXT: por %xmm9, %xmm4
5274 ; SSE2-NEXT: pand %xmm4, %xmm1
5275 ; SSE2-NEXT: pandn %xmm5, %xmm4
5276 ; SSE2-NEXT: por %xmm4, %xmm1
5277 ; SSE2-NEXT: movdqa %xmm6, %xmm4
5278 ; SSE2-NEXT: pxor %xmm8, %xmm4
5279 ; SSE2-NEXT: movdqa %xmm2, %xmm5
5280 ; SSE2-NEXT: pxor %xmm8, %xmm5
5281 ; SSE2-NEXT: movdqa %xmm5, %xmm9
5282 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
5283 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5284 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
5285 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5286 ; SSE2-NEXT: pand %xmm10, %xmm4
5287 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5288 ; SSE2-NEXT: por %xmm4, %xmm5
5289 ; SSE2-NEXT: pand %xmm5, %xmm2
5290 ; SSE2-NEXT: pandn %xmm6, %xmm5
5291 ; SSE2-NEXT: por %xmm5, %xmm2
5292 ; SSE2-NEXT: movdqa %xmm7, %xmm4
5293 ; SSE2-NEXT: pxor %xmm8, %xmm4
5294 ; SSE2-NEXT: pxor %xmm3, %xmm8
5295 ; SSE2-NEXT: movdqa %xmm8, %xmm5
5296 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
5297 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5298 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
5299 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5300 ; SSE2-NEXT: pand %xmm6, %xmm4
5301 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5302 ; SSE2-NEXT: por %xmm4, %xmm5
5303 ; SSE2-NEXT: pand %xmm5, %xmm3
5304 ; SSE2-NEXT: pandn %xmm7, %xmm5
5305 ; SSE2-NEXT: por %xmm5, %xmm3
5308 ; SSE4-LABEL: test127:
5309 ; SSE4: # %bb.0: # %entry
5310 ; SSE4-NEXT: movdqa %xmm0, %xmm9
5311 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5312 ; SSE4-NEXT: movdqa %xmm4, %xmm10
5313 ; SSE4-NEXT: pxor %xmm8, %xmm10
5314 ; SSE4-NEXT: pxor %xmm8, %xmm0
5315 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0
5316 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
5317 ; SSE4-NEXT: movdqa %xmm5, %xmm9
5318 ; SSE4-NEXT: pxor %xmm8, %xmm9
5319 ; SSE4-NEXT: movdqa %xmm1, %xmm0
5320 ; SSE4-NEXT: pxor %xmm8, %xmm0
5321 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0
5322 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5323 ; SSE4-NEXT: movdqa %xmm6, %xmm1
5324 ; SSE4-NEXT: pxor %xmm8, %xmm1
5325 ; SSE4-NEXT: movdqa %xmm2, %xmm0
5326 ; SSE4-NEXT: pxor %xmm8, %xmm0
5327 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
5328 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5329 ; SSE4-NEXT: movdqa %xmm7, %xmm0
5330 ; SSE4-NEXT: pxor %xmm8, %xmm0
5331 ; SSE4-NEXT: pxor %xmm3, %xmm8
5332 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8
5333 ; SSE4-NEXT: movdqa %xmm8, %xmm0
5334 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5335 ; SSE4-NEXT: movapd %xmm4, %xmm0
5336 ; SSE4-NEXT: movapd %xmm5, %xmm1
5337 ; SSE4-NEXT: movapd %xmm6, %xmm2
5338 ; SSE4-NEXT: movapd %xmm7, %xmm3
5341 ; AVX1-LABEL: test127:
5342 ; AVX1: # %bb.0: # %entry
5343 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5344 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5345 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5346 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
5347 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5348 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5349 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6
5350 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
5351 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5352 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5353 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5354 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5355 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
5356 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5357 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5358 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
5359 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4
5360 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5
5361 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
5362 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
5363 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5366 ; AVX2-LABEL: test127:
5367 ; AVX2: # %bb.0: # %entry
5368 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5369 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5
5370 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6
5371 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
5372 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5373 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2
5374 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4
5375 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2
5376 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5379 ; AVX512F-LABEL: test127:
5380 ; AVX512F: # %bb.0: # %entry
5381 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
5382 ; AVX512F-NEXT: retq
5384 %cmp = icmp ugt <8 x i64> %a, %b
5385 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5389 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5390 ; SSE2-LABEL: test128:
5391 ; SSE2: # %bb.0: # %entry
5392 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
5393 ; SSE2-NEXT: movdqa %xmm4, %xmm9
5394 ; SSE2-NEXT: pxor %xmm8, %xmm9
5395 ; SSE2-NEXT: movdqa %xmm0, %xmm10
5396 ; SSE2-NEXT: pxor %xmm8, %xmm10
5397 ; SSE2-NEXT: movdqa %xmm10, %xmm11
5398 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
5399 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5400 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
5401 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5402 ; SSE2-NEXT: pand %xmm12, %xmm9
5403 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5404 ; SSE2-NEXT: por %xmm9, %xmm10
5405 ; SSE2-NEXT: pand %xmm10, %xmm0
5406 ; SSE2-NEXT: pandn %xmm4, %xmm10
5407 ; SSE2-NEXT: por %xmm10, %xmm0
5408 ; SSE2-NEXT: movdqa %xmm5, %xmm9
5409 ; SSE2-NEXT: pxor %xmm8, %xmm9
5410 ; SSE2-NEXT: movdqa %xmm1, %xmm4
5411 ; SSE2-NEXT: pxor %xmm8, %xmm4
5412 ; SSE2-NEXT: movdqa %xmm4, %xmm10
5413 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
5414 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5415 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
5416 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5417 ; SSE2-NEXT: pand %xmm11, %xmm9
5418 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5419 ; SSE2-NEXT: por %xmm9, %xmm4
5420 ; SSE2-NEXT: pand %xmm4, %xmm1
5421 ; SSE2-NEXT: pandn %xmm5, %xmm4
5422 ; SSE2-NEXT: por %xmm4, %xmm1
5423 ; SSE2-NEXT: movdqa %xmm6, %xmm4
5424 ; SSE2-NEXT: pxor %xmm8, %xmm4
5425 ; SSE2-NEXT: movdqa %xmm2, %xmm5
5426 ; SSE2-NEXT: pxor %xmm8, %xmm5
5427 ; SSE2-NEXT: movdqa %xmm5, %xmm9
5428 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
5429 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5430 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
5431 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5432 ; SSE2-NEXT: pand %xmm10, %xmm4
5433 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5434 ; SSE2-NEXT: por %xmm4, %xmm5
5435 ; SSE2-NEXT: pand %xmm5, %xmm2
5436 ; SSE2-NEXT: pandn %xmm6, %xmm5
5437 ; SSE2-NEXT: por %xmm5, %xmm2
5438 ; SSE2-NEXT: movdqa %xmm7, %xmm4
5439 ; SSE2-NEXT: pxor %xmm8, %xmm4
5440 ; SSE2-NEXT: pxor %xmm3, %xmm8
5441 ; SSE2-NEXT: movdqa %xmm8, %xmm5
5442 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
5443 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5444 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
5445 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5446 ; SSE2-NEXT: pand %xmm6, %xmm4
5447 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5448 ; SSE2-NEXT: por %xmm4, %xmm5
5449 ; SSE2-NEXT: pand %xmm5, %xmm3
5450 ; SSE2-NEXT: pandn %xmm7, %xmm5
5451 ; SSE2-NEXT: por %xmm5, %xmm3
5454 ; SSE4-LABEL: test128:
5455 ; SSE4: # %bb.0: # %entry
5456 ; SSE4-NEXT: movdqa %xmm0, %xmm9
5457 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5458 ; SSE4-NEXT: movdqa %xmm4, %xmm10
5459 ; SSE4-NEXT: pxor %xmm8, %xmm10
5460 ; SSE4-NEXT: pxor %xmm8, %xmm0
5461 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0
5462 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
5463 ; SSE4-NEXT: movdqa %xmm5, %xmm9
5464 ; SSE4-NEXT: pxor %xmm8, %xmm9
5465 ; SSE4-NEXT: movdqa %xmm1, %xmm0
5466 ; SSE4-NEXT: pxor %xmm8, %xmm0
5467 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0
5468 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5469 ; SSE4-NEXT: movdqa %xmm6, %xmm1
5470 ; SSE4-NEXT: pxor %xmm8, %xmm1
5471 ; SSE4-NEXT: movdqa %xmm2, %xmm0
5472 ; SSE4-NEXT: pxor %xmm8, %xmm0
5473 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
5474 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5475 ; SSE4-NEXT: movdqa %xmm7, %xmm0
5476 ; SSE4-NEXT: pxor %xmm8, %xmm0
5477 ; SSE4-NEXT: pxor %xmm3, %xmm8
5478 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8
5479 ; SSE4-NEXT: movdqa %xmm8, %xmm0
5480 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5481 ; SSE4-NEXT: movapd %xmm4, %xmm0
5482 ; SSE4-NEXT: movapd %xmm5, %xmm1
5483 ; SSE4-NEXT: movapd %xmm6, %xmm2
5484 ; SSE4-NEXT: movapd %xmm7, %xmm3
5487 ; AVX1-LABEL: test128:
5488 ; AVX1: # %bb.0: # %entry
5489 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5490 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5491 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5492 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
5493 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5494 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5495 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6
5496 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
5497 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5498 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5499 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5500 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5501 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
5502 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5503 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5504 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
5505 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4
5506 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5
5507 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
5508 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
5509 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5512 ; AVX2-LABEL: test128:
5513 ; AVX2: # %bb.0: # %entry
5514 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5515 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5
5516 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6
5517 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
5518 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5519 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2
5520 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4
5521 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2
5522 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5525 ; AVX512F-LABEL: test128:
5526 ; AVX512F: # %bb.0: # %entry
5527 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
5528 ; AVX512F-NEXT: retq
5530 %cmp = icmp uge <8 x i64> %a, %b
5531 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5535 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5536 ; SSE2-LABEL: test129:
5537 ; SSE2: # %bb.0: # %entry
5538 ; SSE2-NEXT: movdqa %xmm0, %xmm8
5539 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm8
5540 ; SSE2-NEXT: pand %xmm8, %xmm0
5541 ; SSE2-NEXT: pandn %xmm4, %xmm8
5542 ; SSE2-NEXT: por %xmm0, %xmm8
5543 ; SSE2-NEXT: movdqa %xmm1, %xmm4
5544 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm4
5545 ; SSE2-NEXT: pand %xmm4, %xmm1
5546 ; SSE2-NEXT: pandn %xmm5, %xmm4
5547 ; SSE2-NEXT: por %xmm1, %xmm4
5548 ; SSE2-NEXT: movdqa %xmm2, %xmm5
5549 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm5
5550 ; SSE2-NEXT: pand %xmm5, %xmm2
5551 ; SSE2-NEXT: pandn %xmm6, %xmm5
5552 ; SSE2-NEXT: por %xmm2, %xmm5
5553 ; SSE2-NEXT: movdqa %xmm3, %xmm6
5554 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm6
5555 ; SSE2-NEXT: pand %xmm6, %xmm3
5556 ; SSE2-NEXT: pandn %xmm7, %xmm6
5557 ; SSE2-NEXT: por %xmm3, %xmm6
5558 ; SSE2-NEXT: movdqa %xmm8, %xmm0
5559 ; SSE2-NEXT: movdqa %xmm4, %xmm1
5560 ; SSE2-NEXT: movdqa %xmm5, %xmm2
5561 ; SSE2-NEXT: movdqa %xmm6, %xmm3
5564 ; SSE4-LABEL: test129:
5565 ; SSE4: # %bb.0: # %entry
5566 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0
5567 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1
5568 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2
5569 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3
5572 ; AVX1-LABEL: test129:
5573 ; AVX1: # %bb.0: # %entry
5574 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5575 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5576 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
5577 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
5578 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5579 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5580 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5581 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2
5582 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
5583 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5586 ; AVX2-LABEL: test129:
5587 ; AVX2: # %bb.0: # %entry
5588 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
5589 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
5592 ; AVX512BW-LABEL: test129:
5593 ; AVX512BW: # %bb.0: # %entry
5594 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
5595 ; AVX512BW-NEXT: retq
5597 %cmp = icmp slt <64 x i8> %a, %b
5598 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5602 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
5603 ; SSE2-LABEL: test130:
5604 ; SSE2: # %bb.0: # %entry
5605 ; SSE2-NEXT: movdqa %xmm0, %xmm8
5606 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm8
5607 ; SSE2-NEXT: pand %xmm8, %xmm0
5608 ; SSE2-NEXT: pandn %xmm4, %xmm8
5609 ; SSE2-NEXT: por %xmm0, %xmm8
5610 ; SSE2-NEXT: movdqa %xmm1, %xmm4
5611 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm4
5612 ; SSE2-NEXT: pand %xmm4, %xmm1
5613 ; SSE2-NEXT: pandn %xmm5, %xmm4
5614 ; SSE2-NEXT: por %xmm1, %xmm4
5615 ; SSE2-NEXT: movdqa %xmm2, %xmm5
5616 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm5
5617 ; SSE2-NEXT: pand %xmm5, %xmm2
5618 ; SSE2-NEXT: pandn %xmm6, %xmm5
5619 ; SSE2-NEXT: por %xmm2, %xmm5
5620 ; SSE2-NEXT: movdqa %xmm3, %xmm6
5621 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm6
5622 ; SSE2-NEXT: pand %xmm6, %xmm3
5623 ; SSE2-NEXT: pandn %xmm7, %xmm6
5624 ; SSE2-NEXT: por %xmm3, %xmm6
5625 ; SSE2-NEXT: movdqa %xmm8, %xmm0
5626 ; SSE2-NEXT: movdqa %xmm4, %xmm1
5627 ; SSE2-NEXT: movdqa %xmm5, %xmm2
5628 ; SSE2-NEXT: movdqa %xmm6, %xmm3
5631 ; SSE4-LABEL: test130:
5632 ; SSE4: # %bb.0: # %entry
5633 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0
5634 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1
5635 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2
5636 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3
5639 ; AVX1-LABEL: test130:
5640 ; AVX1: # %bb.0: # %entry
5641 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5642 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5643 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
5644 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
5645 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5646 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5647 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5648 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2
5649 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
5650 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5653 ; AVX2-LABEL: test130:
5654 ; AVX2: # %bb.0: # %entry
5655 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
5656 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
5659 ; AVX512BW-LABEL: test130:
5660 ; AVX512BW: # %bb.0: # %entry
5661 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
5662 ; AVX512BW-NEXT: retq
5664 %cmp = icmp sle <64 x i8> %a, %b
5665 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5669 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
5670 ; SSE2-LABEL: test131:
5671 ; SSE2: # %bb.0: # %entry
5672 ; SSE2-NEXT: movdqa %xmm4, %xmm8
5673 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm8
5674 ; SSE2-NEXT: pand %xmm8, %xmm0
5675 ; SSE2-NEXT: pandn %xmm4, %xmm8
5676 ; SSE2-NEXT: por %xmm8, %xmm0
5677 ; SSE2-NEXT: movdqa %xmm5, %xmm4
5678 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4
5679 ; SSE2-NEXT: pand %xmm4, %xmm1
5680 ; SSE2-NEXT: pandn %xmm5, %xmm4
5681 ; SSE2-NEXT: por %xmm4, %xmm1
5682 ; SSE2-NEXT: movdqa %xmm6, %xmm4
5683 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
5684 ; SSE2-NEXT: pand %xmm4, %xmm2
5685 ; SSE2-NEXT: pandn %xmm6, %xmm4
5686 ; SSE2-NEXT: por %xmm4, %xmm2
5687 ; SSE2-NEXT: movdqa %xmm7, %xmm4
5688 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4
5689 ; SSE2-NEXT: pand %xmm4, %xmm3
5690 ; SSE2-NEXT: pandn %xmm7, %xmm4
5691 ; SSE2-NEXT: por %xmm4, %xmm3
5694 ; SSE4-LABEL: test131:
5695 ; SSE4: # %bb.0: # %entry
5696 ; SSE4-NEXT: pminsb %xmm4, %xmm0
5697 ; SSE4-NEXT: pminsb %xmm5, %xmm1
5698 ; SSE4-NEXT: pminsb %xmm6, %xmm2
5699 ; SSE4-NEXT: pminsb %xmm7, %xmm3
5702 ; AVX1-LABEL: test131:
5703 ; AVX1: # %bb.0: # %entry
5704 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5705 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5706 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
5707 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
5708 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5709 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5710 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5711 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2
5712 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
5713 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5716 ; AVX2-LABEL: test131:
5717 ; AVX2: # %bb.0: # %entry
5718 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
5719 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
5722 ; AVX512BW-LABEL: test131:
5723 ; AVX512BW: # %bb.0: # %entry
5724 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0
5725 ; AVX512BW-NEXT: retq
5727 %cmp = icmp sgt <64 x i8> %a, %b
5728 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5732 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
5733 ; SSE2-LABEL: test132:
5734 ; SSE2: # %bb.0: # %entry
5735 ; SSE2-NEXT: movdqa %xmm4, %xmm8
5736 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm8
5737 ; SSE2-NEXT: pand %xmm8, %xmm0
5738 ; SSE2-NEXT: pandn %xmm4, %xmm8
5739 ; SSE2-NEXT: por %xmm8, %xmm0
5740 ; SSE2-NEXT: movdqa %xmm5, %xmm4
5741 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4
5742 ; SSE2-NEXT: pand %xmm4, %xmm1
5743 ; SSE2-NEXT: pandn %xmm5, %xmm4
5744 ; SSE2-NEXT: por %xmm4, %xmm1
5745 ; SSE2-NEXT: movdqa %xmm6, %xmm4
5746 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm4
5747 ; SSE2-NEXT: pand %xmm4, %xmm2
5748 ; SSE2-NEXT: pandn %xmm6, %xmm4
5749 ; SSE2-NEXT: por %xmm4, %xmm2
5750 ; SSE2-NEXT: movdqa %xmm7, %xmm4
5751 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4
5752 ; SSE2-NEXT: pand %xmm4, %xmm3
5753 ; SSE2-NEXT: pandn %xmm7, %xmm4
5754 ; SSE2-NEXT: por %xmm4, %xmm3
5757 ; SSE4-LABEL: test132:
5758 ; SSE4: # %bb.0: # %entry
5759 ; SSE4-NEXT: pminsb %xmm4, %xmm0
5760 ; SSE4-NEXT: pminsb %xmm5, %xmm1
5761 ; SSE4-NEXT: pminsb %xmm6, %xmm2
5762 ; SSE4-NEXT: pminsb %xmm7, %xmm3
5765 ; AVX1-LABEL: test132:
5766 ; AVX1: # %bb.0: # %entry
5767 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5768 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5769 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
5770 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
5771 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5772 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5773 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5774 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2
5775 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
5776 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5779 ; AVX2-LABEL: test132:
5780 ; AVX2: # %bb.0: # %entry
5781 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
5782 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
5785 ; AVX512BW-LABEL: test132:
5786 ; AVX512BW: # %bb.0: # %entry
5787 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0
5788 ; AVX512BW-NEXT: retq
5790 %cmp = icmp sge <64 x i8> %a, %b
5791 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5795 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
5796 ; SSE-LABEL: test133:
5797 ; SSE: # %bb.0: # %entry
5798 ; SSE-NEXT: pmaxub %xmm4, %xmm0
5799 ; SSE-NEXT: pmaxub %xmm5, %xmm1
5800 ; SSE-NEXT: pmaxub %xmm6, %xmm2
5801 ; SSE-NEXT: pmaxub %xmm7, %xmm3
5804 ; AVX1-LABEL: test133:
5805 ; AVX1: # %bb.0: # %entry
5806 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5807 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5808 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
5809 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
5810 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5811 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5812 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5813 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2
5814 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
5815 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5818 ; AVX2-LABEL: test133:
5819 ; AVX2: # %bb.0: # %entry
5820 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
5821 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
5824 ; AVX512BW-LABEL: test133:
5825 ; AVX512BW: # %bb.0: # %entry
5826 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
5827 ; AVX512BW-NEXT: retq
5829 %cmp = icmp ult <64 x i8> %a, %b
5830 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5834 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
5835 ; SSE-LABEL: test134:
5836 ; SSE: # %bb.0: # %entry
5837 ; SSE-NEXT: pmaxub %xmm4, %xmm0
5838 ; SSE-NEXT: pmaxub %xmm5, %xmm1
5839 ; SSE-NEXT: pmaxub %xmm6, %xmm2
5840 ; SSE-NEXT: pmaxub %xmm7, %xmm3
5843 ; AVX1-LABEL: test134:
5844 ; AVX1: # %bb.0: # %entry
5845 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5846 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5847 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
5848 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
5849 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5850 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5851 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5852 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2
5853 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
5854 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5857 ; AVX2-LABEL: test134:
5858 ; AVX2: # %bb.0: # %entry
5859 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
5860 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
5863 ; AVX512BW-LABEL: test134:
5864 ; AVX512BW: # %bb.0: # %entry
5865 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
5866 ; AVX512BW-NEXT: retq
5868 %cmp = icmp ule <64 x i8> %a, %b
5869 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5873 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
5874 ; SSE-LABEL: test135:
5875 ; SSE: # %bb.0: # %entry
5876 ; SSE-NEXT: pminub %xmm4, %xmm0
5877 ; SSE-NEXT: pminub %xmm5, %xmm1
5878 ; SSE-NEXT: pminub %xmm6, %xmm2
5879 ; SSE-NEXT: pminub %xmm7, %xmm3
5882 ; AVX1-LABEL: test135:
5883 ; AVX1: # %bb.0: # %entry
5884 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5885 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5886 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
5887 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
5888 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5889 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5890 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5891 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2
5892 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
5893 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5896 ; AVX2-LABEL: test135:
5897 ; AVX2: # %bb.0: # %entry
5898 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
5899 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
5902 ; AVX512BW-LABEL: test135:
5903 ; AVX512BW: # %bb.0: # %entry
5904 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0
5905 ; AVX512BW-NEXT: retq
5907 %cmp = icmp ugt <64 x i8> %a, %b
5908 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5912 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
5913 ; SSE-LABEL: test136:
5914 ; SSE: # %bb.0: # %entry
5915 ; SSE-NEXT: pminub %xmm4, %xmm0
5916 ; SSE-NEXT: pminub %xmm5, %xmm1
5917 ; SSE-NEXT: pminub %xmm6, %xmm2
5918 ; SSE-NEXT: pminub %xmm7, %xmm3
5921 ; AVX1-LABEL: test136:
5922 ; AVX1: # %bb.0: # %entry
5923 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5924 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5925 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
5926 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
5927 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5928 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5929 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5930 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2
5931 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
5932 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5935 ; AVX2-LABEL: test136:
5936 ; AVX2: # %bb.0: # %entry
5937 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
5938 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
5941 ; AVX512BW-LABEL: test136:
5942 ; AVX512BW: # %bb.0: # %entry
5943 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0
5944 ; AVX512BW-NEXT: retq
5946 %cmp = icmp uge <64 x i8> %a, %b
5947 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5951 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
5952 ; SSE-LABEL: test137:
5953 ; SSE: # %bb.0: # %entry
5954 ; SSE-NEXT: pmaxsw %xmm4, %xmm0
5955 ; SSE-NEXT: pmaxsw %xmm5, %xmm1
5956 ; SSE-NEXT: pmaxsw %xmm6, %xmm2
5957 ; SSE-NEXT: pmaxsw %xmm7, %xmm3
5960 ; AVX1-LABEL: test137:
5961 ; AVX1: # %bb.0: # %entry
5962 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
5963 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
5964 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
5965 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
5966 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
5967 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
5968 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5969 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2
5970 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
5971 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
5974 ; AVX2-LABEL: test137:
5975 ; AVX2: # %bb.0: # %entry
5976 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
5977 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
5980 ; AVX512BW-LABEL: test137:
5981 ; AVX512BW: # %bb.0: # %entry
5982 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
5983 ; AVX512BW-NEXT: retq
5985 %cmp = icmp slt <32 x i16> %a, %b
5986 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
5990 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
5991 ; SSE-LABEL: test138:
5992 ; SSE: # %bb.0: # %entry
5993 ; SSE-NEXT: pmaxsw %xmm4, %xmm0
5994 ; SSE-NEXT: pmaxsw %xmm5, %xmm1
5995 ; SSE-NEXT: pmaxsw %xmm6, %xmm2
5996 ; SSE-NEXT: pmaxsw %xmm7, %xmm3
5999 ; AVX1-LABEL: test138:
6000 ; AVX1: # %bb.0: # %entry
6001 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6002 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6003 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
6004 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
6005 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6006 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6007 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6008 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2
6009 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
6010 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6013 ; AVX2-LABEL: test138:
6014 ; AVX2: # %bb.0: # %entry
6015 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
6016 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
6019 ; AVX512BW-LABEL: test138:
6020 ; AVX512BW: # %bb.0: # %entry
6021 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
6022 ; AVX512BW-NEXT: retq
6024 %cmp = icmp sle <32 x i16> %a, %b
6025 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6029 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6030 ; SSE-LABEL: test139:
6031 ; SSE: # %bb.0: # %entry
6032 ; SSE-NEXT: pminsw %xmm4, %xmm0
6033 ; SSE-NEXT: pminsw %xmm5, %xmm1
6034 ; SSE-NEXT: pminsw %xmm6, %xmm2
6035 ; SSE-NEXT: pminsw %xmm7, %xmm3
6038 ; AVX1-LABEL: test139:
6039 ; AVX1: # %bb.0: # %entry
6040 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6041 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6042 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
6043 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
6044 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6045 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6046 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6047 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2
6048 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
6049 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6052 ; AVX2-LABEL: test139:
6053 ; AVX2: # %bb.0: # %entry
6054 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
6055 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
6058 ; AVX512BW-LABEL: test139:
6059 ; AVX512BW: # %bb.0: # %entry
6060 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0
6061 ; AVX512BW-NEXT: retq
6063 %cmp = icmp sgt <32 x i16> %a, %b
6064 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6068 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6069 ; SSE-LABEL: test140:
6070 ; SSE: # %bb.0: # %entry
6071 ; SSE-NEXT: pminsw %xmm4, %xmm0
6072 ; SSE-NEXT: pminsw %xmm5, %xmm1
6073 ; SSE-NEXT: pminsw %xmm6, %xmm2
6074 ; SSE-NEXT: pminsw %xmm7, %xmm3
6077 ; AVX1-LABEL: test140:
6078 ; AVX1: # %bb.0: # %entry
6079 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6080 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6081 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
6082 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
6083 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6084 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6085 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6086 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2
6087 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
6088 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6091 ; AVX2-LABEL: test140:
6092 ; AVX2: # %bb.0: # %entry
6093 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
6094 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
6097 ; AVX512BW-LABEL: test140:
6098 ; AVX512BW: # %bb.0: # %entry
6099 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0
6100 ; AVX512BW-NEXT: retq
6102 %cmp = icmp sge <32 x i16> %a, %b
6103 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6107 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6108 ; SSE2-LABEL: test141:
6109 ; SSE2: # %bb.0: # %entry
6110 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6111 ; SSE2-NEXT: pxor %xmm8, %xmm4
6112 ; SSE2-NEXT: pxor %xmm8, %xmm0
6113 ; SSE2-NEXT: pmaxsw %xmm4, %xmm0
6114 ; SSE2-NEXT: pxor %xmm8, %xmm0
6115 ; SSE2-NEXT: pxor %xmm8, %xmm5
6116 ; SSE2-NEXT: pxor %xmm8, %xmm1
6117 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1
6118 ; SSE2-NEXT: pxor %xmm8, %xmm1
6119 ; SSE2-NEXT: pxor %xmm8, %xmm6
6120 ; SSE2-NEXT: pxor %xmm8, %xmm2
6121 ; SSE2-NEXT: pmaxsw %xmm6, %xmm2
6122 ; SSE2-NEXT: pxor %xmm8, %xmm2
6123 ; SSE2-NEXT: pxor %xmm8, %xmm7
6124 ; SSE2-NEXT: pxor %xmm8, %xmm3
6125 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3
6126 ; SSE2-NEXT: pxor %xmm8, %xmm3
6129 ; SSE4-LABEL: test141:
6130 ; SSE4: # %bb.0: # %entry
6131 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0
6132 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1
6133 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2
6134 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3
6137 ; AVX1-LABEL: test141:
6138 ; AVX1: # %bb.0: # %entry
6139 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6140 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6141 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
6142 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
6143 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6144 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6145 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6146 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2
6147 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
6148 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6151 ; AVX2-LABEL: test141:
6152 ; AVX2: # %bb.0: # %entry
6153 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
6154 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
6157 ; AVX512BW-LABEL: test141:
6158 ; AVX512BW: # %bb.0: # %entry
6159 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
6160 ; AVX512BW-NEXT: retq
6162 %cmp = icmp ult <32 x i16> %a, %b
6163 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6167 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6168 ; SSE2-LABEL: test142:
6169 ; SSE2: # %bb.0: # %entry
6170 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6171 ; SSE2-NEXT: pxor %xmm8, %xmm4
6172 ; SSE2-NEXT: pxor %xmm8, %xmm0
6173 ; SSE2-NEXT: pmaxsw %xmm4, %xmm0
6174 ; SSE2-NEXT: pxor %xmm8, %xmm0
6175 ; SSE2-NEXT: pxor %xmm8, %xmm5
6176 ; SSE2-NEXT: pxor %xmm8, %xmm1
6177 ; SSE2-NEXT: pmaxsw %xmm5, %xmm1
6178 ; SSE2-NEXT: pxor %xmm8, %xmm1
6179 ; SSE2-NEXT: pxor %xmm8, %xmm6
6180 ; SSE2-NEXT: pxor %xmm8, %xmm2
6181 ; SSE2-NEXT: pmaxsw %xmm6, %xmm2
6182 ; SSE2-NEXT: pxor %xmm8, %xmm2
6183 ; SSE2-NEXT: pxor %xmm8, %xmm7
6184 ; SSE2-NEXT: pxor %xmm8, %xmm3
6185 ; SSE2-NEXT: pmaxsw %xmm7, %xmm3
6186 ; SSE2-NEXT: pxor %xmm8, %xmm3
6189 ; SSE4-LABEL: test142:
6190 ; SSE4: # %bb.0: # %entry
6191 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0
6192 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1
6193 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2
6194 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3
6197 ; AVX1-LABEL: test142:
6198 ; AVX1: # %bb.0: # %entry
6199 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6200 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6201 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
6202 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
6203 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6204 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6205 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6206 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2
6207 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
6208 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6211 ; AVX2-LABEL: test142:
6212 ; AVX2: # %bb.0: # %entry
6213 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
6214 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
6217 ; AVX512BW-LABEL: test142:
6218 ; AVX512BW: # %bb.0: # %entry
6219 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
6220 ; AVX512BW-NEXT: retq
6222 %cmp = icmp ule <32 x i16> %a, %b
6223 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6227 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6228 ; SSE2-LABEL: test143:
6229 ; SSE2: # %bb.0: # %entry
6230 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6231 ; SSE2-NEXT: pxor %xmm8, %xmm4
6232 ; SSE2-NEXT: pxor %xmm8, %xmm0
6233 ; SSE2-NEXT: pminsw %xmm4, %xmm0
6234 ; SSE2-NEXT: pxor %xmm8, %xmm0
6235 ; SSE2-NEXT: pxor %xmm8, %xmm5
6236 ; SSE2-NEXT: pxor %xmm8, %xmm1
6237 ; SSE2-NEXT: pminsw %xmm5, %xmm1
6238 ; SSE2-NEXT: pxor %xmm8, %xmm1
6239 ; SSE2-NEXT: pxor %xmm8, %xmm6
6240 ; SSE2-NEXT: pxor %xmm8, %xmm2
6241 ; SSE2-NEXT: pminsw %xmm6, %xmm2
6242 ; SSE2-NEXT: pxor %xmm8, %xmm2
6243 ; SSE2-NEXT: pxor %xmm8, %xmm7
6244 ; SSE2-NEXT: pxor %xmm8, %xmm3
6245 ; SSE2-NEXT: pminsw %xmm7, %xmm3
6246 ; SSE2-NEXT: pxor %xmm8, %xmm3
6249 ; SSE4-LABEL: test143:
6250 ; SSE4: # %bb.0: # %entry
6251 ; SSE4-NEXT: pminuw %xmm4, %xmm0
6252 ; SSE4-NEXT: pminuw %xmm5, %xmm1
6253 ; SSE4-NEXT: pminuw %xmm6, %xmm2
6254 ; SSE4-NEXT: pminuw %xmm7, %xmm3
6257 ; AVX1-LABEL: test143:
6258 ; AVX1: # %bb.0: # %entry
6259 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6260 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6261 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
6262 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
6263 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6264 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6265 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6266 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2
6267 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
6268 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6271 ; AVX2-LABEL: test143:
6272 ; AVX2: # %bb.0: # %entry
6273 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
6274 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
6277 ; AVX512BW-LABEL: test143:
6278 ; AVX512BW: # %bb.0: # %entry
6279 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0
6280 ; AVX512BW-NEXT: retq
6282 %cmp = icmp ugt <32 x i16> %a, %b
6283 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6287 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6288 ; SSE2-LABEL: test144:
6289 ; SSE2: # %bb.0: # %entry
6290 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6291 ; SSE2-NEXT: pxor %xmm8, %xmm4
6292 ; SSE2-NEXT: pxor %xmm8, %xmm0
6293 ; SSE2-NEXT: pminsw %xmm4, %xmm0
6294 ; SSE2-NEXT: pxor %xmm8, %xmm0
6295 ; SSE2-NEXT: pxor %xmm8, %xmm5
6296 ; SSE2-NEXT: pxor %xmm8, %xmm1
6297 ; SSE2-NEXT: pminsw %xmm5, %xmm1
6298 ; SSE2-NEXT: pxor %xmm8, %xmm1
6299 ; SSE2-NEXT: pxor %xmm8, %xmm6
6300 ; SSE2-NEXT: pxor %xmm8, %xmm2
6301 ; SSE2-NEXT: pminsw %xmm6, %xmm2
6302 ; SSE2-NEXT: pxor %xmm8, %xmm2
6303 ; SSE2-NEXT: pxor %xmm8, %xmm7
6304 ; SSE2-NEXT: pxor %xmm8, %xmm3
6305 ; SSE2-NEXT: pminsw %xmm7, %xmm3
6306 ; SSE2-NEXT: pxor %xmm8, %xmm3
6309 ; SSE4-LABEL: test144:
6310 ; SSE4: # %bb.0: # %entry
6311 ; SSE4-NEXT: pminuw %xmm4, %xmm0
6312 ; SSE4-NEXT: pminuw %xmm5, %xmm1
6313 ; SSE4-NEXT: pminuw %xmm6, %xmm2
6314 ; SSE4-NEXT: pminuw %xmm7, %xmm3
6317 ; AVX1-LABEL: test144:
6318 ; AVX1: # %bb.0: # %entry
6319 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6320 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6321 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
6322 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
6323 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6324 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6325 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6326 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2
6327 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
6328 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6331 ; AVX2-LABEL: test144:
6332 ; AVX2: # %bb.0: # %entry
6333 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
6334 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
6337 ; AVX512BW-LABEL: test144:
6338 ; AVX512BW: # %bb.0: # %entry
6339 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0
6340 ; AVX512BW-NEXT: retq
6342 %cmp = icmp uge <32 x i16> %a, %b
6343 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6347 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6348 ; SSE2-LABEL: test145:
6349 ; SSE2: # %bb.0: # %entry
6350 ; SSE2-NEXT: movdqa %xmm0, %xmm8
6351 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
6352 ; SSE2-NEXT: pand %xmm8, %xmm0
6353 ; SSE2-NEXT: pandn %xmm4, %xmm8
6354 ; SSE2-NEXT: por %xmm0, %xmm8
6355 ; SSE2-NEXT: movdqa %xmm1, %xmm4
6356 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
6357 ; SSE2-NEXT: pand %xmm4, %xmm1
6358 ; SSE2-NEXT: pandn %xmm5, %xmm4
6359 ; SSE2-NEXT: por %xmm1, %xmm4
6360 ; SSE2-NEXT: movdqa %xmm2, %xmm5
6361 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
6362 ; SSE2-NEXT: pand %xmm5, %xmm2
6363 ; SSE2-NEXT: pandn %xmm6, %xmm5
6364 ; SSE2-NEXT: por %xmm2, %xmm5
6365 ; SSE2-NEXT: movdqa %xmm3, %xmm6
6366 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6
6367 ; SSE2-NEXT: pand %xmm6, %xmm3
6368 ; SSE2-NEXT: pandn %xmm7, %xmm6
6369 ; SSE2-NEXT: por %xmm3, %xmm6
6370 ; SSE2-NEXT: movdqa %xmm8, %xmm0
6371 ; SSE2-NEXT: movdqa %xmm4, %xmm1
6372 ; SSE2-NEXT: movdqa %xmm5, %xmm2
6373 ; SSE2-NEXT: movdqa %xmm6, %xmm3
6376 ; SSE4-LABEL: test145:
6377 ; SSE4: # %bb.0: # %entry
6378 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0
6379 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1
6380 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2
6381 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3
6384 ; AVX1-LABEL: test145:
6385 ; AVX1: # %bb.0: # %entry
6386 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6387 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6388 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4
6389 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
6390 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6391 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6392 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6393 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2
6394 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
6395 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6398 ; AVX2-LABEL: test145:
6399 ; AVX2: # %bb.0: # %entry
6400 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
6401 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
6404 ; AVX512F-LABEL: test145:
6405 ; AVX512F: # %bb.0: # %entry
6406 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
6407 ; AVX512F-NEXT: retq
6409 %cmp = icmp slt <16 x i32> %a, %b
6410 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6414 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6415 ; SSE2-LABEL: test146:
6416 ; SSE2: # %bb.0: # %entry
6417 ; SSE2-NEXT: movdqa %xmm0, %xmm8
6418 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
6419 ; SSE2-NEXT: pand %xmm8, %xmm0
6420 ; SSE2-NEXT: pandn %xmm4, %xmm8
6421 ; SSE2-NEXT: por %xmm0, %xmm8
6422 ; SSE2-NEXT: movdqa %xmm1, %xmm4
6423 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
6424 ; SSE2-NEXT: pand %xmm4, %xmm1
6425 ; SSE2-NEXT: pandn %xmm5, %xmm4
6426 ; SSE2-NEXT: por %xmm1, %xmm4
6427 ; SSE2-NEXT: movdqa %xmm2, %xmm5
6428 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
6429 ; SSE2-NEXT: pand %xmm5, %xmm2
6430 ; SSE2-NEXT: pandn %xmm6, %xmm5
6431 ; SSE2-NEXT: por %xmm2, %xmm5
6432 ; SSE2-NEXT: movdqa %xmm3, %xmm6
6433 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm6
6434 ; SSE2-NEXT: pand %xmm6, %xmm3
6435 ; SSE2-NEXT: pandn %xmm7, %xmm6
6436 ; SSE2-NEXT: por %xmm3, %xmm6
6437 ; SSE2-NEXT: movdqa %xmm8, %xmm0
6438 ; SSE2-NEXT: movdqa %xmm4, %xmm1
6439 ; SSE2-NEXT: movdqa %xmm5, %xmm2
6440 ; SSE2-NEXT: movdqa %xmm6, %xmm3
6443 ; SSE4-LABEL: test146:
6444 ; SSE4: # %bb.0: # %entry
6445 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0
6446 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1
6447 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2
6448 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3
6451 ; AVX1-LABEL: test146:
6452 ; AVX1: # %bb.0: # %entry
6453 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6454 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6455 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4
6456 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
6457 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6458 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6459 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6460 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2
6461 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
6462 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6465 ; AVX2-LABEL: test146:
6466 ; AVX2: # %bb.0: # %entry
6467 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
6468 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
6471 ; AVX512F-LABEL: test146:
6472 ; AVX512F: # %bb.0: # %entry
6473 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
6474 ; AVX512F-NEXT: retq
6476 %cmp = icmp sle <16 x i32> %a, %b
6477 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6481 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
6482 ; SSE2-LABEL: test147:
6483 ; SSE2: # %bb.0: # %entry
6484 ; SSE2-NEXT: movdqa %xmm4, %xmm8
6485 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm8
6486 ; SSE2-NEXT: pand %xmm8, %xmm0
6487 ; SSE2-NEXT: pandn %xmm4, %xmm8
6488 ; SSE2-NEXT: por %xmm8, %xmm0
6489 ; SSE2-NEXT: movdqa %xmm5, %xmm4
6490 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
6491 ; SSE2-NEXT: pand %xmm4, %xmm1
6492 ; SSE2-NEXT: pandn %xmm5, %xmm4
6493 ; SSE2-NEXT: por %xmm4, %xmm1
6494 ; SSE2-NEXT: movdqa %xmm6, %xmm4
6495 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
6496 ; SSE2-NEXT: pand %xmm4, %xmm2
6497 ; SSE2-NEXT: pandn %xmm6, %xmm4
6498 ; SSE2-NEXT: por %xmm4, %xmm2
6499 ; SSE2-NEXT: movdqa %xmm7, %xmm4
6500 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
6501 ; SSE2-NEXT: pand %xmm4, %xmm3
6502 ; SSE2-NEXT: pandn %xmm7, %xmm4
6503 ; SSE2-NEXT: por %xmm4, %xmm3
6506 ; SSE4-LABEL: test147:
6507 ; SSE4: # %bb.0: # %entry
6508 ; SSE4-NEXT: pminsd %xmm4, %xmm0
6509 ; SSE4-NEXT: pminsd %xmm5, %xmm1
6510 ; SSE4-NEXT: pminsd %xmm6, %xmm2
6511 ; SSE4-NEXT: pminsd %xmm7, %xmm3
6514 ; AVX1-LABEL: test147:
6515 ; AVX1: # %bb.0: # %entry
6516 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6517 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6518 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
6519 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
6520 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6521 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6522 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6523 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2
6524 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
6525 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6528 ; AVX2-LABEL: test147:
6529 ; AVX2: # %bb.0: # %entry
6530 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
6531 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
6534 ; AVX512F-LABEL: test147:
6535 ; AVX512F: # %bb.0: # %entry
6536 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0
6537 ; AVX512F-NEXT: retq
6539 %cmp = icmp sgt <16 x i32> %a, %b
6540 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6544 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
6545 ; SSE2-LABEL: test148:
6546 ; SSE2: # %bb.0: # %entry
6547 ; SSE2-NEXT: movdqa %xmm4, %xmm8
6548 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm8
6549 ; SSE2-NEXT: pand %xmm8, %xmm0
6550 ; SSE2-NEXT: pandn %xmm4, %xmm8
6551 ; SSE2-NEXT: por %xmm8, %xmm0
6552 ; SSE2-NEXT: movdqa %xmm5, %xmm4
6553 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
6554 ; SSE2-NEXT: pand %xmm4, %xmm1
6555 ; SSE2-NEXT: pandn %xmm5, %xmm4
6556 ; SSE2-NEXT: por %xmm4, %xmm1
6557 ; SSE2-NEXT: movdqa %xmm6, %xmm4
6558 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm4
6559 ; SSE2-NEXT: pand %xmm4, %xmm2
6560 ; SSE2-NEXT: pandn %xmm6, %xmm4
6561 ; SSE2-NEXT: por %xmm4, %xmm2
6562 ; SSE2-NEXT: movdqa %xmm7, %xmm4
6563 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
6564 ; SSE2-NEXT: pand %xmm4, %xmm3
6565 ; SSE2-NEXT: pandn %xmm7, %xmm4
6566 ; SSE2-NEXT: por %xmm4, %xmm3
6569 ; SSE4-LABEL: test148:
6570 ; SSE4: # %bb.0: # %entry
6571 ; SSE4-NEXT: pminsd %xmm4, %xmm0
6572 ; SSE4-NEXT: pminsd %xmm5, %xmm1
6573 ; SSE4-NEXT: pminsd %xmm6, %xmm2
6574 ; SSE4-NEXT: pminsd %xmm7, %xmm3
6577 ; AVX1-LABEL: test148:
6578 ; AVX1: # %bb.0: # %entry
6579 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6580 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6581 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
6582 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
6583 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6584 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6585 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6586 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2
6587 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
6588 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6591 ; AVX2-LABEL: test148:
6592 ; AVX2: # %bb.0: # %entry
6593 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
6594 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
6597 ; AVX512F-LABEL: test148:
6598 ; AVX512F: # %bb.0: # %entry
6599 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0
6600 ; AVX512F-NEXT: retq
6602 %cmp = icmp sge <16 x i32> %a, %b
6603 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6607 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
6608 ; SSE2-LABEL: test149:
6609 ; SSE2: # %bb.0: # %entry
6610 ; SSE2-NEXT: movdqa %xmm1, %xmm8
6611 ; SSE2-NEXT: movdqa %xmm0, %xmm10
6612 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
6613 ; SSE2-NEXT: movdqa %xmm4, %xmm1
6614 ; SSE2-NEXT: pxor %xmm9, %xmm1
6615 ; SSE2-NEXT: pxor %xmm9, %xmm0
6616 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0
6617 ; SSE2-NEXT: pand %xmm0, %xmm10
6618 ; SSE2-NEXT: pandn %xmm4, %xmm0
6619 ; SSE2-NEXT: por %xmm10, %xmm0
6620 ; SSE2-NEXT: movdqa %xmm5, %xmm4
6621 ; SSE2-NEXT: pxor %xmm9, %xmm4
6622 ; SSE2-NEXT: movdqa %xmm8, %xmm1
6623 ; SSE2-NEXT: pxor %xmm9, %xmm1
6624 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1
6625 ; SSE2-NEXT: pand %xmm1, %xmm8
6626 ; SSE2-NEXT: pandn %xmm5, %xmm1
6627 ; SSE2-NEXT: por %xmm8, %xmm1
6628 ; SSE2-NEXT: movdqa %xmm6, %xmm5
6629 ; SSE2-NEXT: pxor %xmm9, %xmm5
6630 ; SSE2-NEXT: movdqa %xmm2, %xmm4
6631 ; SSE2-NEXT: pxor %xmm9, %xmm4
6632 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
6633 ; SSE2-NEXT: pand %xmm4, %xmm2
6634 ; SSE2-NEXT: pandn %xmm6, %xmm4
6635 ; SSE2-NEXT: por %xmm2, %xmm4
6636 ; SSE2-NEXT: movdqa %xmm7, %xmm2
6637 ; SSE2-NEXT: pxor %xmm9, %xmm2
6638 ; SSE2-NEXT: pxor %xmm3, %xmm9
6639 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9
6640 ; SSE2-NEXT: pand %xmm9, %xmm3
6641 ; SSE2-NEXT: pandn %xmm7, %xmm9
6642 ; SSE2-NEXT: por %xmm9, %xmm3
6643 ; SSE2-NEXT: movdqa %xmm4, %xmm2
6646 ; SSE4-LABEL: test149:
6647 ; SSE4: # %bb.0: # %entry
6648 ; SSE4-NEXT: pmaxud %xmm4, %xmm0
6649 ; SSE4-NEXT: pmaxud %xmm5, %xmm1
6650 ; SSE4-NEXT: pmaxud %xmm6, %xmm2
6651 ; SSE4-NEXT: pmaxud %xmm7, %xmm3
6654 ; AVX1-LABEL: test149:
6655 ; AVX1: # %bb.0: # %entry
6656 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6657 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6658 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
6659 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
6660 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6661 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6662 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6663 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2
6664 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
6665 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6668 ; AVX2-LABEL: test149:
6669 ; AVX2: # %bb.0: # %entry
6670 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
6671 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
6674 ; AVX512F-LABEL: test149:
6675 ; AVX512F: # %bb.0: # %entry
6676 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
6677 ; AVX512F-NEXT: retq
6679 %cmp = icmp ult <16 x i32> %a, %b
6680 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6684 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
6685 ; SSE2-LABEL: test150:
6686 ; SSE2: # %bb.0: # %entry
6687 ; SSE2-NEXT: movdqa %xmm1, %xmm8
6688 ; SSE2-NEXT: movdqa %xmm0, %xmm10
6689 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
6690 ; SSE2-NEXT: movdqa %xmm4, %xmm1
6691 ; SSE2-NEXT: pxor %xmm9, %xmm1
6692 ; SSE2-NEXT: pxor %xmm9, %xmm0
6693 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm0
6694 ; SSE2-NEXT: pand %xmm0, %xmm10
6695 ; SSE2-NEXT: pandn %xmm4, %xmm0
6696 ; SSE2-NEXT: por %xmm10, %xmm0
6697 ; SSE2-NEXT: movdqa %xmm5, %xmm4
6698 ; SSE2-NEXT: pxor %xmm9, %xmm4
6699 ; SSE2-NEXT: movdqa %xmm8, %xmm1
6700 ; SSE2-NEXT: pxor %xmm9, %xmm1
6701 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm1
6702 ; SSE2-NEXT: pand %xmm1, %xmm8
6703 ; SSE2-NEXT: pandn %xmm5, %xmm1
6704 ; SSE2-NEXT: por %xmm8, %xmm1
6705 ; SSE2-NEXT: movdqa %xmm6, %xmm5
6706 ; SSE2-NEXT: pxor %xmm9, %xmm5
6707 ; SSE2-NEXT: movdqa %xmm2, %xmm4
6708 ; SSE2-NEXT: pxor %xmm9, %xmm4
6709 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
6710 ; SSE2-NEXT: pand %xmm4, %xmm2
6711 ; SSE2-NEXT: pandn %xmm6, %xmm4
6712 ; SSE2-NEXT: por %xmm2, %xmm4
6713 ; SSE2-NEXT: movdqa %xmm7, %xmm2
6714 ; SSE2-NEXT: pxor %xmm9, %xmm2
6715 ; SSE2-NEXT: pxor %xmm3, %xmm9
6716 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9
6717 ; SSE2-NEXT: pand %xmm9, %xmm3
6718 ; SSE2-NEXT: pandn %xmm7, %xmm9
6719 ; SSE2-NEXT: por %xmm9, %xmm3
6720 ; SSE2-NEXT: movdqa %xmm4, %xmm2
6723 ; SSE4-LABEL: test150:
6724 ; SSE4: # %bb.0: # %entry
6725 ; SSE4-NEXT: pmaxud %xmm4, %xmm0
6726 ; SSE4-NEXT: pmaxud %xmm5, %xmm1
6727 ; SSE4-NEXT: pmaxud %xmm6, %xmm2
6728 ; SSE4-NEXT: pmaxud %xmm7, %xmm3
6731 ; AVX1-LABEL: test150:
6732 ; AVX1: # %bb.0: # %entry
6733 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6734 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6735 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
6736 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
6737 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6738 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6739 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6740 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2
6741 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
6742 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6745 ; AVX2-LABEL: test150:
6746 ; AVX2: # %bb.0: # %entry
6747 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
6748 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
6751 ; AVX512F-LABEL: test150:
6752 ; AVX512F: # %bb.0: # %entry
6753 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
6754 ; AVX512F-NEXT: retq
6756 %cmp = icmp ule <16 x i32> %a, %b
6757 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6761 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
6762 ; SSE2-LABEL: test151:
6763 ; SSE2: # %bb.0: # %entry
6764 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6765 ; SSE2-NEXT: movdqa %xmm0, %xmm9
6766 ; SSE2-NEXT: pxor %xmm8, %xmm9
6767 ; SSE2-NEXT: movdqa %xmm4, %xmm10
6768 ; SSE2-NEXT: pxor %xmm8, %xmm10
6769 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
6770 ; SSE2-NEXT: pand %xmm10, %xmm0
6771 ; SSE2-NEXT: pandn %xmm4, %xmm10
6772 ; SSE2-NEXT: por %xmm10, %xmm0
6773 ; SSE2-NEXT: movdqa %xmm1, %xmm9
6774 ; SSE2-NEXT: pxor %xmm8, %xmm9
6775 ; SSE2-NEXT: movdqa %xmm5, %xmm4
6776 ; SSE2-NEXT: pxor %xmm8, %xmm4
6777 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm4
6778 ; SSE2-NEXT: pand %xmm4, %xmm1
6779 ; SSE2-NEXT: pandn %xmm5, %xmm4
6780 ; SSE2-NEXT: por %xmm4, %xmm1
6781 ; SSE2-NEXT: movdqa %xmm2, %xmm4
6782 ; SSE2-NEXT: pxor %xmm8, %xmm4
6783 ; SSE2-NEXT: movdqa %xmm6, %xmm5
6784 ; SSE2-NEXT: pxor %xmm8, %xmm5
6785 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
6786 ; SSE2-NEXT: pand %xmm5, %xmm2
6787 ; SSE2-NEXT: pandn %xmm6, %xmm5
6788 ; SSE2-NEXT: por %xmm5, %xmm2
6789 ; SSE2-NEXT: movdqa %xmm3, %xmm4
6790 ; SSE2-NEXT: pxor %xmm8, %xmm4
6791 ; SSE2-NEXT: pxor %xmm7, %xmm8
6792 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
6793 ; SSE2-NEXT: pand %xmm8, %xmm3
6794 ; SSE2-NEXT: pandn %xmm7, %xmm8
6795 ; SSE2-NEXT: por %xmm8, %xmm3
6798 ; SSE4-LABEL: test151:
6799 ; SSE4: # %bb.0: # %entry
6800 ; SSE4-NEXT: pminud %xmm4, %xmm0
6801 ; SSE4-NEXT: pminud %xmm5, %xmm1
6802 ; SSE4-NEXT: pminud %xmm6, %xmm2
6803 ; SSE4-NEXT: pminud %xmm7, %xmm3
6806 ; AVX1-LABEL: test151:
6807 ; AVX1: # %bb.0: # %entry
6808 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6809 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6810 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
6811 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
6812 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6813 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6814 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6815 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2
6816 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
6817 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6820 ; AVX2-LABEL: test151:
6821 ; AVX2: # %bb.0: # %entry
6822 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
6823 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
6826 ; AVX512F-LABEL: test151:
6827 ; AVX512F: # %bb.0: # %entry
6828 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0
6829 ; AVX512F-NEXT: retq
6831 %cmp = icmp ugt <16 x i32> %a, %b
6832 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6836 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
6837 ; SSE2-LABEL: test152:
6838 ; SSE2: # %bb.0: # %entry
6839 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6840 ; SSE2-NEXT: movdqa %xmm0, %xmm9
6841 ; SSE2-NEXT: pxor %xmm8, %xmm9
6842 ; SSE2-NEXT: movdqa %xmm4, %xmm10
6843 ; SSE2-NEXT: pxor %xmm8, %xmm10
6844 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
6845 ; SSE2-NEXT: pand %xmm10, %xmm0
6846 ; SSE2-NEXT: pandn %xmm4, %xmm10
6847 ; SSE2-NEXT: por %xmm10, %xmm0
6848 ; SSE2-NEXT: movdqa %xmm1, %xmm9
6849 ; SSE2-NEXT: pxor %xmm8, %xmm9
6850 ; SSE2-NEXT: movdqa %xmm5, %xmm4
6851 ; SSE2-NEXT: pxor %xmm8, %xmm4
6852 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm4
6853 ; SSE2-NEXT: pand %xmm4, %xmm1
6854 ; SSE2-NEXT: pandn %xmm5, %xmm4
6855 ; SSE2-NEXT: por %xmm4, %xmm1
6856 ; SSE2-NEXT: movdqa %xmm2, %xmm4
6857 ; SSE2-NEXT: pxor %xmm8, %xmm4
6858 ; SSE2-NEXT: movdqa %xmm6, %xmm5
6859 ; SSE2-NEXT: pxor %xmm8, %xmm5
6860 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
6861 ; SSE2-NEXT: pand %xmm5, %xmm2
6862 ; SSE2-NEXT: pandn %xmm6, %xmm5
6863 ; SSE2-NEXT: por %xmm5, %xmm2
6864 ; SSE2-NEXT: movdqa %xmm3, %xmm4
6865 ; SSE2-NEXT: pxor %xmm8, %xmm4
6866 ; SSE2-NEXT: pxor %xmm7, %xmm8
6867 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm8
6868 ; SSE2-NEXT: pand %xmm8, %xmm3
6869 ; SSE2-NEXT: pandn %xmm7, %xmm8
6870 ; SSE2-NEXT: por %xmm8, %xmm3
6873 ; SSE4-LABEL: test152:
6874 ; SSE4: # %bb.0: # %entry
6875 ; SSE4-NEXT: pminud %xmm4, %xmm0
6876 ; SSE4-NEXT: pminud %xmm5, %xmm1
6877 ; SSE4-NEXT: pminud %xmm6, %xmm2
6878 ; SSE4-NEXT: pminud %xmm7, %xmm3
6881 ; AVX1-LABEL: test152:
6882 ; AVX1: # %bb.0: # %entry
6883 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6884 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6885 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
6886 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
6887 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6888 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6889 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6890 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2
6891 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
6892 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6895 ; AVX2-LABEL: test152:
6896 ; AVX2: # %bb.0: # %entry
6897 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
6898 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
6901 ; AVX512F-LABEL: test152:
6902 ; AVX512F: # %bb.0: # %entry
6903 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0
6904 ; AVX512F-NEXT: retq
6906 %cmp = icmp uge <16 x i32> %a, %b
6907 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6911 ; -----------------------
6913 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
6914 ; SSE2-LABEL: test153:
6915 ; SSE2: # %bb.0: # %entry
6916 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
6917 ; SSE2-NEXT: movdqa %xmm4, %xmm9
6918 ; SSE2-NEXT: pxor %xmm8, %xmm9
6919 ; SSE2-NEXT: movdqa %xmm0, %xmm10
6920 ; SSE2-NEXT: pxor %xmm8, %xmm10
6921 ; SSE2-NEXT: movdqa %xmm10, %xmm11
6922 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
6923 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
6924 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
6925 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
6926 ; SSE2-NEXT: pand %xmm12, %xmm9
6927 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
6928 ; SSE2-NEXT: por %xmm9, %xmm10
6929 ; SSE2-NEXT: pand %xmm10, %xmm0
6930 ; SSE2-NEXT: pandn %xmm4, %xmm10
6931 ; SSE2-NEXT: por %xmm10, %xmm0
6932 ; SSE2-NEXT: movdqa %xmm5, %xmm9
6933 ; SSE2-NEXT: pxor %xmm8, %xmm9
6934 ; SSE2-NEXT: movdqa %xmm1, %xmm4
6935 ; SSE2-NEXT: pxor %xmm8, %xmm4
6936 ; SSE2-NEXT: movdqa %xmm4, %xmm10
6937 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
6938 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
6939 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
6940 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
6941 ; SSE2-NEXT: pand %xmm11, %xmm9
6942 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
6943 ; SSE2-NEXT: por %xmm9, %xmm4
6944 ; SSE2-NEXT: pand %xmm4, %xmm1
6945 ; SSE2-NEXT: pandn %xmm5, %xmm4
6946 ; SSE2-NEXT: por %xmm4, %xmm1
6947 ; SSE2-NEXT: movdqa %xmm6, %xmm4
6948 ; SSE2-NEXT: pxor %xmm8, %xmm4
6949 ; SSE2-NEXT: movdqa %xmm2, %xmm5
6950 ; SSE2-NEXT: pxor %xmm8, %xmm5
6951 ; SSE2-NEXT: movdqa %xmm5, %xmm9
6952 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
6953 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
6954 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
6955 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
6956 ; SSE2-NEXT: pand %xmm10, %xmm4
6957 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
6958 ; SSE2-NEXT: por %xmm4, %xmm5
6959 ; SSE2-NEXT: pand %xmm5, %xmm2
6960 ; SSE2-NEXT: pandn %xmm6, %xmm5
6961 ; SSE2-NEXT: por %xmm5, %xmm2
6962 ; SSE2-NEXT: movdqa %xmm7, %xmm4
6963 ; SSE2-NEXT: pxor %xmm8, %xmm4
6964 ; SSE2-NEXT: pxor %xmm3, %xmm8
6965 ; SSE2-NEXT: movdqa %xmm8, %xmm5
6966 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
6967 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
6968 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
6969 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
6970 ; SSE2-NEXT: pand %xmm6, %xmm4
6971 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
6972 ; SSE2-NEXT: por %xmm4, %xmm5
6973 ; SSE2-NEXT: pand %xmm5, %xmm3
6974 ; SSE2-NEXT: pandn %xmm7, %xmm5
6975 ; SSE2-NEXT: por %xmm5, %xmm3
6978 ; SSE4-LABEL: test153:
6979 ; SSE4: # %bb.0: # %entry
6980 ; SSE4-NEXT: movdqa %xmm0, %xmm8
6981 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
6982 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
6983 ; SSE4-NEXT: movdqa %xmm1, %xmm0
6984 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm0
6985 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
6986 ; SSE4-NEXT: movdqa %xmm2, %xmm0
6987 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
6988 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
6989 ; SSE4-NEXT: movdqa %xmm3, %xmm0
6990 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0
6991 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
6992 ; SSE4-NEXT: movapd %xmm4, %xmm0
6993 ; SSE4-NEXT: movapd %xmm5, %xmm1
6994 ; SSE4-NEXT: movapd %xmm6, %xmm2
6995 ; SSE4-NEXT: movapd %xmm7, %xmm3
6998 ; AVX1-LABEL: test153:
6999 ; AVX1: # %bb.0: # %entry
7000 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7001 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7002 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7003 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5
7004 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
7005 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7006 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7007 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7008 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
7009 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4
7010 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
7011 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7014 ; AVX2-LABEL: test153:
7015 ; AVX2: # %bb.0: # %entry
7016 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4
7017 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7018 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2
7019 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7022 ; AVX512F-LABEL: test153:
7023 ; AVX512F: # %bb.0: # %entry
7024 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
7025 ; AVX512F-NEXT: retq
7027 %cmp = icmp slt <8 x i64> %a, %b
7028 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7032 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7033 ; SSE2-LABEL: test154:
7034 ; SSE2: # %bb.0: # %entry
7035 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
7036 ; SSE2-NEXT: movdqa %xmm4, %xmm9
7037 ; SSE2-NEXT: pxor %xmm8, %xmm9
7038 ; SSE2-NEXT: movdqa %xmm0, %xmm10
7039 ; SSE2-NEXT: pxor %xmm8, %xmm10
7040 ; SSE2-NEXT: movdqa %xmm10, %xmm11
7041 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
7042 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7043 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
7044 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7045 ; SSE2-NEXT: pand %xmm12, %xmm9
7046 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7047 ; SSE2-NEXT: por %xmm9, %xmm10
7048 ; SSE2-NEXT: pand %xmm10, %xmm0
7049 ; SSE2-NEXT: pandn %xmm4, %xmm10
7050 ; SSE2-NEXT: por %xmm10, %xmm0
7051 ; SSE2-NEXT: movdqa %xmm5, %xmm9
7052 ; SSE2-NEXT: pxor %xmm8, %xmm9
7053 ; SSE2-NEXT: movdqa %xmm1, %xmm4
7054 ; SSE2-NEXT: pxor %xmm8, %xmm4
7055 ; SSE2-NEXT: movdqa %xmm4, %xmm10
7056 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
7057 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7058 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
7059 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7060 ; SSE2-NEXT: pand %xmm11, %xmm9
7061 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7062 ; SSE2-NEXT: por %xmm9, %xmm4
7063 ; SSE2-NEXT: pand %xmm4, %xmm1
7064 ; SSE2-NEXT: pandn %xmm5, %xmm4
7065 ; SSE2-NEXT: por %xmm4, %xmm1
7066 ; SSE2-NEXT: movdqa %xmm6, %xmm4
7067 ; SSE2-NEXT: pxor %xmm8, %xmm4
7068 ; SSE2-NEXT: movdqa %xmm2, %xmm5
7069 ; SSE2-NEXT: pxor %xmm8, %xmm5
7070 ; SSE2-NEXT: movdqa %xmm5, %xmm9
7071 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
7072 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7073 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
7074 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7075 ; SSE2-NEXT: pand %xmm10, %xmm4
7076 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7077 ; SSE2-NEXT: por %xmm4, %xmm5
7078 ; SSE2-NEXT: pand %xmm5, %xmm2
7079 ; SSE2-NEXT: pandn %xmm6, %xmm5
7080 ; SSE2-NEXT: por %xmm5, %xmm2
7081 ; SSE2-NEXT: movdqa %xmm7, %xmm4
7082 ; SSE2-NEXT: pxor %xmm8, %xmm4
7083 ; SSE2-NEXT: pxor %xmm3, %xmm8
7084 ; SSE2-NEXT: movdqa %xmm8, %xmm5
7085 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
7086 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7087 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
7088 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7089 ; SSE2-NEXT: pand %xmm6, %xmm4
7090 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7091 ; SSE2-NEXT: por %xmm4, %xmm5
7092 ; SSE2-NEXT: pand %xmm5, %xmm3
7093 ; SSE2-NEXT: pandn %xmm7, %xmm5
7094 ; SSE2-NEXT: por %xmm5, %xmm3
7097 ; SSE4-LABEL: test154:
7098 ; SSE4: # %bb.0: # %entry
7099 ; SSE4-NEXT: movdqa %xmm0, %xmm8
7100 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
7101 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
7102 ; SSE4-NEXT: movdqa %xmm1, %xmm0
7103 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm0
7104 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
7105 ; SSE4-NEXT: movdqa %xmm2, %xmm0
7106 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
7107 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
7108 ; SSE4-NEXT: movdqa %xmm3, %xmm0
7109 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0
7110 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
7111 ; SSE4-NEXT: movapd %xmm4, %xmm0
7112 ; SSE4-NEXT: movapd %xmm5, %xmm1
7113 ; SSE4-NEXT: movapd %xmm6, %xmm2
7114 ; SSE4-NEXT: movapd %xmm7, %xmm3
7117 ; AVX1-LABEL: test154:
7118 ; AVX1: # %bb.0: # %entry
7119 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7120 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7121 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7122 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm5
7123 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
7124 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7125 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7126 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7127 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
7128 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm4
7129 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
7130 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7133 ; AVX2-LABEL: test154:
7134 ; AVX2: # %bb.0: # %entry
7135 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm4
7136 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7137 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm2
7138 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7141 ; AVX512F-LABEL: test154:
7142 ; AVX512F: # %bb.0: # %entry
7143 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
7144 ; AVX512F-NEXT: retq
7146 %cmp = icmp sle <8 x i64> %a, %b
7147 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7151 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7152 ; SSE2-LABEL: test155:
7153 ; SSE2: # %bb.0: # %entry
7154 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
7155 ; SSE2-NEXT: movdqa %xmm0, %xmm9
7156 ; SSE2-NEXT: pxor %xmm8, %xmm9
7157 ; SSE2-NEXT: movdqa %xmm4, %xmm10
7158 ; SSE2-NEXT: pxor %xmm8, %xmm10
7159 ; SSE2-NEXT: movdqa %xmm10, %xmm11
7160 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
7161 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7162 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
7163 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7164 ; SSE2-NEXT: pand %xmm12, %xmm9
7165 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7166 ; SSE2-NEXT: por %xmm9, %xmm10
7167 ; SSE2-NEXT: pand %xmm10, %xmm0
7168 ; SSE2-NEXT: pandn %xmm4, %xmm10
7169 ; SSE2-NEXT: por %xmm10, %xmm0
7170 ; SSE2-NEXT: movdqa %xmm1, %xmm9
7171 ; SSE2-NEXT: pxor %xmm8, %xmm9
7172 ; SSE2-NEXT: movdqa %xmm5, %xmm4
7173 ; SSE2-NEXT: pxor %xmm8, %xmm4
7174 ; SSE2-NEXT: movdqa %xmm4, %xmm10
7175 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
7176 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7177 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
7178 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7179 ; SSE2-NEXT: pand %xmm11, %xmm9
7180 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7181 ; SSE2-NEXT: por %xmm9, %xmm4
7182 ; SSE2-NEXT: pand %xmm4, %xmm1
7183 ; SSE2-NEXT: pandn %xmm5, %xmm4
7184 ; SSE2-NEXT: por %xmm4, %xmm1
7185 ; SSE2-NEXT: movdqa %xmm2, %xmm4
7186 ; SSE2-NEXT: pxor %xmm8, %xmm4
7187 ; SSE2-NEXT: movdqa %xmm6, %xmm5
7188 ; SSE2-NEXT: pxor %xmm8, %xmm5
7189 ; SSE2-NEXT: movdqa %xmm5, %xmm9
7190 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
7191 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7192 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
7193 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7194 ; SSE2-NEXT: pand %xmm10, %xmm4
7195 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7196 ; SSE2-NEXT: por %xmm4, %xmm5
7197 ; SSE2-NEXT: pand %xmm5, %xmm2
7198 ; SSE2-NEXT: pandn %xmm6, %xmm5
7199 ; SSE2-NEXT: por %xmm5, %xmm2
7200 ; SSE2-NEXT: movdqa %xmm3, %xmm4
7201 ; SSE2-NEXT: pxor %xmm8, %xmm4
7202 ; SSE2-NEXT: pxor %xmm7, %xmm8
7203 ; SSE2-NEXT: movdqa %xmm8, %xmm5
7204 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
7205 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7206 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
7207 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7208 ; SSE2-NEXT: pand %xmm6, %xmm4
7209 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7210 ; SSE2-NEXT: por %xmm4, %xmm5
7211 ; SSE2-NEXT: pand %xmm5, %xmm3
7212 ; SSE2-NEXT: pandn %xmm7, %xmm5
7213 ; SSE2-NEXT: por %xmm5, %xmm3
7216 ; SSE4-LABEL: test155:
7217 ; SSE4: # %bb.0: # %entry
7218 ; SSE4-NEXT: movdqa %xmm0, %xmm8
7219 ; SSE4-NEXT: movdqa %xmm4, %xmm0
7220 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0
7221 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
7222 ; SSE4-NEXT: movdqa %xmm5, %xmm0
7223 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
7224 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
7225 ; SSE4-NEXT: movdqa %xmm6, %xmm0
7226 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
7227 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
7228 ; SSE4-NEXT: movdqa %xmm7, %xmm0
7229 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
7230 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
7231 ; SSE4-NEXT: movapd %xmm4, %xmm0
7232 ; SSE4-NEXT: movapd %xmm5, %xmm1
7233 ; SSE4-NEXT: movapd %xmm6, %xmm2
7234 ; SSE4-NEXT: movapd %xmm7, %xmm3
7237 ; AVX1-LABEL: test155:
7238 ; AVX1: # %bb.0: # %entry
7239 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
7240 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
7241 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7242 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm5
7243 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
7244 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7245 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
7246 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
7247 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
7248 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm4
7249 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
7250 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7253 ; AVX2-LABEL: test155:
7254 ; AVX2: # %bb.0: # %entry
7255 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm4
7256 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7257 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm2
7258 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7261 ; AVX512F-LABEL: test155:
7262 ; AVX512F: # %bb.0: # %entry
7263 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0
7264 ; AVX512F-NEXT: retq
7266 %cmp = icmp sgt <8 x i64> %a, %b
7267 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7271 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7272 ; SSE2-LABEL: test156:
7273 ; SSE2: # %bb.0: # %entry
7274 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
7275 ; SSE2-NEXT: movdqa %xmm4, %xmm9
7276 ; SSE2-NEXT: pxor %xmm8, %xmm9
7277 ; SSE2-NEXT: movdqa %xmm0, %xmm10
7278 ; SSE2-NEXT: pxor %xmm8, %xmm10
7279 ; SSE2-NEXT: movdqa %xmm10, %xmm11
7280 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
7281 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7282 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
7283 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7284 ; SSE2-NEXT: pand %xmm12, %xmm9
7285 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7286 ; SSE2-NEXT: por %xmm9, %xmm10
7287 ; SSE2-NEXT: pand %xmm10, %xmm0
7288 ; SSE2-NEXT: pandn %xmm4, %xmm10
7289 ; SSE2-NEXT: por %xmm10, %xmm0
7290 ; SSE2-NEXT: movdqa %xmm5, %xmm9
7291 ; SSE2-NEXT: pxor %xmm8, %xmm9
7292 ; SSE2-NEXT: movdqa %xmm1, %xmm4
7293 ; SSE2-NEXT: pxor %xmm8, %xmm4
7294 ; SSE2-NEXT: movdqa %xmm4, %xmm10
7295 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
7296 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7297 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
7298 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7299 ; SSE2-NEXT: pand %xmm11, %xmm9
7300 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7301 ; SSE2-NEXT: por %xmm9, %xmm4
7302 ; SSE2-NEXT: pand %xmm4, %xmm1
7303 ; SSE2-NEXT: pandn %xmm5, %xmm4
7304 ; SSE2-NEXT: por %xmm4, %xmm1
7305 ; SSE2-NEXT: movdqa %xmm6, %xmm4
7306 ; SSE2-NEXT: pxor %xmm8, %xmm4
7307 ; SSE2-NEXT: movdqa %xmm2, %xmm5
7308 ; SSE2-NEXT: pxor %xmm8, %xmm5
7309 ; SSE2-NEXT: movdqa %xmm5, %xmm9
7310 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
7311 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7312 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
7313 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7314 ; SSE2-NEXT: pand %xmm10, %xmm4
7315 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7316 ; SSE2-NEXT: por %xmm4, %xmm5
7317 ; SSE2-NEXT: pand %xmm5, %xmm2
7318 ; SSE2-NEXT: pandn %xmm6, %xmm5
7319 ; SSE2-NEXT: por %xmm5, %xmm2
7320 ; SSE2-NEXT: movdqa %xmm7, %xmm4
7321 ; SSE2-NEXT: pxor %xmm8, %xmm4
7322 ; SSE2-NEXT: pxor %xmm3, %xmm8
7323 ; SSE2-NEXT: movdqa %xmm8, %xmm5
7324 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
7325 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7326 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
7327 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7328 ; SSE2-NEXT: pand %xmm6, %xmm4
7329 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7330 ; SSE2-NEXT: por %xmm4, %xmm5
7331 ; SSE2-NEXT: pand %xmm5, %xmm3
7332 ; SSE2-NEXT: pandn %xmm7, %xmm5
7333 ; SSE2-NEXT: por %xmm5, %xmm3
7336 ; SSE4-LABEL: test156:
7337 ; SSE4: # %bb.0: # %entry
7338 ; SSE4-NEXT: movdqa %xmm0, %xmm9
7339 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7340 ; SSE4-NEXT: movdqa %xmm4, %xmm10
7341 ; SSE4-NEXT: pxor %xmm8, %xmm10
7342 ; SSE4-NEXT: pxor %xmm8, %xmm0
7343 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0
7344 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
7345 ; SSE4-NEXT: movdqa %xmm5, %xmm9
7346 ; SSE4-NEXT: pxor %xmm8, %xmm9
7347 ; SSE4-NEXT: movdqa %xmm1, %xmm0
7348 ; SSE4-NEXT: pxor %xmm8, %xmm0
7349 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0
7350 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
7351 ; SSE4-NEXT: movdqa %xmm6, %xmm1
7352 ; SSE4-NEXT: pxor %xmm8, %xmm1
7353 ; SSE4-NEXT: movdqa %xmm2, %xmm0
7354 ; SSE4-NEXT: pxor %xmm8, %xmm0
7355 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
7356 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
7357 ; SSE4-NEXT: movdqa %xmm7, %xmm0
7358 ; SSE4-NEXT: pxor %xmm8, %xmm0
7359 ; SSE4-NEXT: pxor %xmm3, %xmm8
7360 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8
7361 ; SSE4-NEXT: movdqa %xmm8, %xmm0
7362 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
7363 ; SSE4-NEXT: movapd %xmm4, %xmm0
7364 ; SSE4-NEXT: movapd %xmm5, %xmm1
7365 ; SSE4-NEXT: movapd %xmm6, %xmm2
7366 ; SSE4-NEXT: movapd %xmm7, %xmm3
7369 ; AVX1-LABEL: test156:
7370 ; AVX1: # %bb.0: # %entry
7371 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7372 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7373 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
7374 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
7375 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
7376 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
7377 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm6
7378 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
7379 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
7380 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
7381 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7382 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7383 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
7384 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7385 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
7386 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
7387 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm4
7388 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm5
7389 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7390 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
7391 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7394 ; AVX2-LABEL: test156:
7395 ; AVX2: # %bb.0: # %entry
7396 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7397 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm5
7398 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6
7399 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
7400 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7401 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm2
7402 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm4
7403 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2
7404 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7407 ; AVX512F-LABEL: test156:
7408 ; AVX512F: # %bb.0: # %entry
7409 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
7410 ; AVX512F-NEXT: retq
7412 %cmp = icmp ule <8 x i64> %a, %b
7413 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7417 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
7418 ; SSE2-LABEL: test159:
7419 ; SSE2: # %bb.0: # %entry
7420 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
7421 ; SSE2-NEXT: movdqa %xmm0, %xmm9
7422 ; SSE2-NEXT: pxor %xmm8, %xmm9
7423 ; SSE2-NEXT: movdqa %xmm4, %xmm10
7424 ; SSE2-NEXT: pxor %xmm8, %xmm10
7425 ; SSE2-NEXT: movdqa %xmm10, %xmm11
7426 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
7427 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7428 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
7429 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7430 ; SSE2-NEXT: pand %xmm12, %xmm9
7431 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7432 ; SSE2-NEXT: por %xmm9, %xmm10
7433 ; SSE2-NEXT: pand %xmm10, %xmm0
7434 ; SSE2-NEXT: pandn %xmm4, %xmm10
7435 ; SSE2-NEXT: por %xmm10, %xmm0
7436 ; SSE2-NEXT: movdqa %xmm1, %xmm9
7437 ; SSE2-NEXT: pxor %xmm8, %xmm9
7438 ; SSE2-NEXT: movdqa %xmm5, %xmm4
7439 ; SSE2-NEXT: pxor %xmm8, %xmm4
7440 ; SSE2-NEXT: movdqa %xmm4, %xmm10
7441 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
7442 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7443 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
7444 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7445 ; SSE2-NEXT: pand %xmm11, %xmm9
7446 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7447 ; SSE2-NEXT: por %xmm9, %xmm4
7448 ; SSE2-NEXT: pand %xmm4, %xmm1
7449 ; SSE2-NEXT: pandn %xmm5, %xmm4
7450 ; SSE2-NEXT: por %xmm4, %xmm1
7451 ; SSE2-NEXT: movdqa %xmm2, %xmm4
7452 ; SSE2-NEXT: pxor %xmm8, %xmm4
7453 ; SSE2-NEXT: movdqa %xmm6, %xmm5
7454 ; SSE2-NEXT: pxor %xmm8, %xmm5
7455 ; SSE2-NEXT: movdqa %xmm5, %xmm9
7456 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
7457 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7458 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
7459 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7460 ; SSE2-NEXT: pand %xmm10, %xmm4
7461 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7462 ; SSE2-NEXT: por %xmm4, %xmm5
7463 ; SSE2-NEXT: pand %xmm5, %xmm2
7464 ; SSE2-NEXT: pandn %xmm6, %xmm5
7465 ; SSE2-NEXT: por %xmm5, %xmm2
7466 ; SSE2-NEXT: movdqa %xmm3, %xmm4
7467 ; SSE2-NEXT: pxor %xmm8, %xmm4
7468 ; SSE2-NEXT: pxor %xmm7, %xmm8
7469 ; SSE2-NEXT: movdqa %xmm8, %xmm5
7470 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
7471 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7472 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
7473 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7474 ; SSE2-NEXT: pand %xmm6, %xmm4
7475 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7476 ; SSE2-NEXT: por %xmm4, %xmm5
7477 ; SSE2-NEXT: pand %xmm5, %xmm3
7478 ; SSE2-NEXT: pandn %xmm7, %xmm5
7479 ; SSE2-NEXT: por %xmm5, %xmm3
7482 ; SSE4-LABEL: test159:
7483 ; SSE4: # %bb.0: # %entry
7484 ; SSE4-NEXT: movdqa %xmm0, %xmm9
7485 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7486 ; SSE4-NEXT: movdqa %xmm0, %xmm10
7487 ; SSE4-NEXT: pxor %xmm8, %xmm10
7488 ; SSE4-NEXT: movdqa %xmm4, %xmm0
7489 ; SSE4-NEXT: pxor %xmm8, %xmm0
7490 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0
7491 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
7492 ; SSE4-NEXT: movdqa %xmm1, %xmm9
7493 ; SSE4-NEXT: pxor %xmm8, %xmm9
7494 ; SSE4-NEXT: movdqa %xmm5, %xmm0
7495 ; SSE4-NEXT: pxor %xmm8, %xmm0
7496 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0
7497 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
7498 ; SSE4-NEXT: movdqa %xmm2, %xmm1
7499 ; SSE4-NEXT: pxor %xmm8, %xmm1
7500 ; SSE4-NEXT: movdqa %xmm6, %xmm0
7501 ; SSE4-NEXT: pxor %xmm8, %xmm0
7502 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
7503 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
7504 ; SSE4-NEXT: movdqa %xmm3, %xmm0
7505 ; SSE4-NEXT: pxor %xmm8, %xmm0
7506 ; SSE4-NEXT: pxor %xmm7, %xmm8
7507 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8
7508 ; SSE4-NEXT: movdqa %xmm8, %xmm0
7509 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
7510 ; SSE4-NEXT: movapd %xmm4, %xmm0
7511 ; SSE4-NEXT: movapd %xmm5, %xmm1
7512 ; SSE4-NEXT: movapd %xmm6, %xmm2
7513 ; SSE4-NEXT: movapd %xmm7, %xmm3
7516 ; AVX1-LABEL: test159:
7517 ; AVX1: # %bb.0: # %entry
7518 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
7519 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7520 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
7521 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
7522 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
7523 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
7524 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6
7525 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
7526 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
7527 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
7528 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7529 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
7530 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
7531 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
7532 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
7533 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
7534 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4
7535 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5
7536 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7537 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
7538 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7541 ; AVX2-LABEL: test159:
7542 ; AVX2: # %bb.0: # %entry
7543 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7544 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5
7545 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6
7546 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
7547 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7548 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2
7549 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4
7550 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2
7551 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7554 ; AVX512F-LABEL: test159:
7555 ; AVX512F: # %bb.0: # %entry
7556 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0
7557 ; AVX512F-NEXT: retq
7559 %cmp = icmp ugt <8 x i64> %a, %b
7560 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7564 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
7565 ; SSE2-LABEL: test160:
7566 ; SSE2: # %bb.0: # %entry
7567 ; SSE2-NEXT: movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
7568 ; SSE2-NEXT: movdqa %xmm0, %xmm9
7569 ; SSE2-NEXT: pxor %xmm8, %xmm9
7570 ; SSE2-NEXT: movdqa %xmm4, %xmm10
7571 ; SSE2-NEXT: pxor %xmm8, %xmm10
7572 ; SSE2-NEXT: movdqa %xmm10, %xmm11
7573 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm11
7574 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7575 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
7576 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7577 ; SSE2-NEXT: pand %xmm12, %xmm9
7578 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7579 ; SSE2-NEXT: por %xmm9, %xmm10
7580 ; SSE2-NEXT: pand %xmm10, %xmm0
7581 ; SSE2-NEXT: pandn %xmm4, %xmm10
7582 ; SSE2-NEXT: por %xmm10, %xmm0
7583 ; SSE2-NEXT: movdqa %xmm1, %xmm9
7584 ; SSE2-NEXT: pxor %xmm8, %xmm9
7585 ; SSE2-NEXT: movdqa %xmm5, %xmm4
7586 ; SSE2-NEXT: pxor %xmm8, %xmm4
7587 ; SSE2-NEXT: movdqa %xmm4, %xmm10
7588 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm10
7589 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7590 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm4
7591 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7592 ; SSE2-NEXT: pand %xmm11, %xmm9
7593 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7594 ; SSE2-NEXT: por %xmm9, %xmm4
7595 ; SSE2-NEXT: pand %xmm4, %xmm1
7596 ; SSE2-NEXT: pandn %xmm5, %xmm4
7597 ; SSE2-NEXT: por %xmm4, %xmm1
7598 ; SSE2-NEXT: movdqa %xmm2, %xmm4
7599 ; SSE2-NEXT: pxor %xmm8, %xmm4
7600 ; SSE2-NEXT: movdqa %xmm6, %xmm5
7601 ; SSE2-NEXT: pxor %xmm8, %xmm5
7602 ; SSE2-NEXT: movdqa %xmm5, %xmm9
7603 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm9
7604 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7605 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
7606 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7607 ; SSE2-NEXT: pand %xmm10, %xmm4
7608 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7609 ; SSE2-NEXT: por %xmm4, %xmm5
7610 ; SSE2-NEXT: pand %xmm5, %xmm2
7611 ; SSE2-NEXT: pandn %xmm6, %xmm5
7612 ; SSE2-NEXT: por %xmm5, %xmm2
7613 ; SSE2-NEXT: movdqa %xmm3, %xmm4
7614 ; SSE2-NEXT: pxor %xmm8, %xmm4
7615 ; SSE2-NEXT: pxor %xmm7, %xmm8
7616 ; SSE2-NEXT: movdqa %xmm8, %xmm5
7617 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm5
7618 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7619 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm8
7620 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7621 ; SSE2-NEXT: pand %xmm6, %xmm4
7622 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7623 ; SSE2-NEXT: por %xmm4, %xmm5
7624 ; SSE2-NEXT: pand %xmm5, %xmm3
7625 ; SSE2-NEXT: pandn %xmm7, %xmm5
7626 ; SSE2-NEXT: por %xmm5, %xmm3
7629 ; SSE4-LABEL: test160:
7630 ; SSE4: # %bb.0: # %entry
7631 ; SSE4-NEXT: movdqa %xmm0, %xmm9
7632 ; SSE4-NEXT: movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7633 ; SSE4-NEXT: movdqa %xmm0, %xmm10
7634 ; SSE4-NEXT: pxor %xmm8, %xmm10
7635 ; SSE4-NEXT: movdqa %xmm4, %xmm0
7636 ; SSE4-NEXT: pxor %xmm8, %xmm0
7637 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm0
7638 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
7639 ; SSE4-NEXT: movdqa %xmm1, %xmm9
7640 ; SSE4-NEXT: pxor %xmm8, %xmm9
7641 ; SSE4-NEXT: movdqa %xmm5, %xmm0
7642 ; SSE4-NEXT: pxor %xmm8, %xmm0
7643 ; SSE4-NEXT: pcmpgtq %xmm9, %xmm0
7644 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
7645 ; SSE4-NEXT: movdqa %xmm2, %xmm1
7646 ; SSE4-NEXT: pxor %xmm8, %xmm1
7647 ; SSE4-NEXT: movdqa %xmm6, %xmm0
7648 ; SSE4-NEXT: pxor %xmm8, %xmm0
7649 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
7650 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
7651 ; SSE4-NEXT: movdqa %xmm3, %xmm0
7652 ; SSE4-NEXT: pxor %xmm8, %xmm0
7653 ; SSE4-NEXT: pxor %xmm7, %xmm8
7654 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm8
7655 ; SSE4-NEXT: movdqa %xmm8, %xmm0
7656 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
7657 ; SSE4-NEXT: movapd %xmm4, %xmm0
7658 ; SSE4-NEXT: movapd %xmm5, %xmm1
7659 ; SSE4-NEXT: movapd %xmm6, %xmm2
7660 ; SSE4-NEXT: movapd %xmm7, %xmm3
7663 ; AVX1-LABEL: test160:
7664 ; AVX1: # %bb.0: # %entry
7665 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
7666 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7667 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
7668 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
7669 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
7670 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
7671 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm6
7672 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
7673 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
7674 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
7675 ; AVX1-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7676 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
7677 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm2
7678 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
7679 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
7680 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
7681 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm4
7682 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm5
7683 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7684 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm4, %ymm2
7685 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7688 ; AVX2-LABEL: test160:
7689 ; AVX2: # %bb.0: # %entry
7690 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7691 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm5
7692 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6
7693 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
7694 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7695 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm2
7696 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm4
7697 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm4, %ymm2
7698 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7701 ; AVX512F-LABEL: test160:
7702 ; AVX512F: # %bb.0: # %entry
7703 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0
7704 ; AVX512F-NEXT: retq
7706 %cmp = icmp uge <8 x i64> %a, %b
7707 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7711 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
7712 ; SSE2-LABEL: test161:
7713 ; SSE2: # %bb.0: # %entry
7714 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
7715 ; SSE2-NEXT: movdqa %xmm0, %xmm5
7716 ; SSE2-NEXT: pxor %xmm4, %xmm5
7717 ; SSE2-NEXT: movdqa %xmm2, %xmm6
7718 ; SSE2-NEXT: pxor %xmm4, %xmm6
7719 ; SSE2-NEXT: movdqa %xmm6, %xmm7
7720 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
7721 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7722 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
7723 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7724 ; SSE2-NEXT: pand %xmm8, %xmm5
7725 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7726 ; SSE2-NEXT: por %xmm5, %xmm6
7727 ; SSE2-NEXT: pand %xmm6, %xmm0
7728 ; SSE2-NEXT: pandn %xmm2, %xmm6
7729 ; SSE2-NEXT: por %xmm6, %xmm0
7730 ; SSE2-NEXT: movdqa %xmm1, %xmm2
7731 ; SSE2-NEXT: pxor %xmm4, %xmm2
7732 ; SSE2-NEXT: pxor %xmm3, %xmm4
7733 ; SSE2-NEXT: movdqa %xmm4, %xmm5
7734 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
7735 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7736 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
7737 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7738 ; SSE2-NEXT: pand %xmm6, %xmm2
7739 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7740 ; SSE2-NEXT: por %xmm2, %xmm4
7741 ; SSE2-NEXT: pand %xmm4, %xmm1
7742 ; SSE2-NEXT: pandn %xmm3, %xmm4
7743 ; SSE2-NEXT: por %xmm4, %xmm1
7746 ; SSE4-LABEL: test161:
7747 ; SSE4: # %bb.0: # %entry
7748 ; SSE4-NEXT: movdqa %xmm0, %xmm4
7749 ; SSE4-NEXT: movdqa %xmm2, %xmm0
7750 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
7751 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
7752 ; SSE4-NEXT: movdqa %xmm3, %xmm0
7753 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
7754 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
7755 ; SSE4-NEXT: movapd %xmm2, %xmm0
7756 ; SSE4-NEXT: movapd %xmm3, %xmm1
7759 ; AVX1-LABEL: test161:
7760 ; AVX1: # %bb.0: # %entry
7761 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
7762 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
7763 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
7764 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
7765 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
7766 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7769 ; AVX2-LABEL: test161:
7770 ; AVX2: # %bb.0: # %entry
7771 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
7772 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7775 ; AVX512BW-LABEL: test161:
7776 ; AVX512BW: # %bb.0: # %entry
7777 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0
7778 ; AVX512BW-NEXT: retq
7780 %cmp = icmp slt <4 x i64> %a, %b
7781 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7785 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
7786 ; SSE2-LABEL: test162:
7787 ; SSE2: # %bb.0: # %entry
7788 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
7789 ; SSE2-NEXT: movdqa %xmm0, %xmm5
7790 ; SSE2-NEXT: pxor %xmm4, %xmm5
7791 ; SSE2-NEXT: movdqa %xmm2, %xmm6
7792 ; SSE2-NEXT: pxor %xmm4, %xmm6
7793 ; SSE2-NEXT: movdqa %xmm6, %xmm7
7794 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
7795 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7796 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
7797 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7798 ; SSE2-NEXT: pand %xmm8, %xmm5
7799 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7800 ; SSE2-NEXT: por %xmm5, %xmm6
7801 ; SSE2-NEXT: pand %xmm6, %xmm0
7802 ; SSE2-NEXT: pandn %xmm2, %xmm6
7803 ; SSE2-NEXT: por %xmm6, %xmm0
7804 ; SSE2-NEXT: movdqa %xmm1, %xmm2
7805 ; SSE2-NEXT: pxor %xmm4, %xmm2
7806 ; SSE2-NEXT: pxor %xmm3, %xmm4
7807 ; SSE2-NEXT: movdqa %xmm4, %xmm5
7808 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
7809 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7810 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
7811 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7812 ; SSE2-NEXT: pand %xmm6, %xmm2
7813 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7814 ; SSE2-NEXT: por %xmm2, %xmm4
7815 ; SSE2-NEXT: pand %xmm4, %xmm1
7816 ; SSE2-NEXT: pandn %xmm3, %xmm4
7817 ; SSE2-NEXT: por %xmm4, %xmm1
7820 ; SSE4-LABEL: test162:
7821 ; SSE4: # %bb.0: # %entry
7822 ; SSE4-NEXT: movdqa %xmm0, %xmm4
7823 ; SSE4-NEXT: movdqa %xmm2, %xmm0
7824 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
7825 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
7826 ; SSE4-NEXT: movdqa %xmm3, %xmm0
7827 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
7828 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
7829 ; SSE4-NEXT: movapd %xmm2, %xmm0
7830 ; SSE4-NEXT: movapd %xmm3, %xmm1
7833 ; AVX1-LABEL: test162:
7834 ; AVX1: # %bb.0: # %entry
7835 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
7836 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
7837 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
7838 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
7839 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
7840 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7843 ; AVX2-LABEL: test162:
7844 ; AVX2: # %bb.0: # %entry
7845 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
7846 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7849 ; AVX512BW-LABEL: test162:
7850 ; AVX512BW: # %bb.0: # %entry
7851 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0
7852 ; AVX512BW-NEXT: retq
7854 %cmp = icmp sle <4 x i64> %a, %b
7855 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7859 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
7860 ; SSE2-LABEL: test163:
7861 ; SSE2: # %bb.0: # %entry
7862 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
7863 ; SSE2-NEXT: movdqa %xmm2, %xmm5
7864 ; SSE2-NEXT: pxor %xmm4, %xmm5
7865 ; SSE2-NEXT: movdqa %xmm0, %xmm6
7866 ; SSE2-NEXT: pxor %xmm4, %xmm6
7867 ; SSE2-NEXT: movdqa %xmm6, %xmm7
7868 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
7869 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7870 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
7871 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7872 ; SSE2-NEXT: pand %xmm8, %xmm5
7873 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7874 ; SSE2-NEXT: por %xmm5, %xmm6
7875 ; SSE2-NEXT: pand %xmm6, %xmm0
7876 ; SSE2-NEXT: pandn %xmm2, %xmm6
7877 ; SSE2-NEXT: por %xmm6, %xmm0
7878 ; SSE2-NEXT: movdqa %xmm3, %xmm2
7879 ; SSE2-NEXT: pxor %xmm4, %xmm2
7880 ; SSE2-NEXT: pxor %xmm1, %xmm4
7881 ; SSE2-NEXT: movdqa %xmm4, %xmm5
7882 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
7883 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7884 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
7885 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7886 ; SSE2-NEXT: pand %xmm6, %xmm2
7887 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7888 ; SSE2-NEXT: por %xmm2, %xmm4
7889 ; SSE2-NEXT: pand %xmm4, %xmm1
7890 ; SSE2-NEXT: pandn %xmm3, %xmm4
7891 ; SSE2-NEXT: por %xmm4, %xmm1
7894 ; SSE4-LABEL: test163:
7895 ; SSE4: # %bb.0: # %entry
7896 ; SSE4-NEXT: movdqa %xmm0, %xmm4
7897 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
7898 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
7899 ; SSE4-NEXT: movdqa %xmm1, %xmm0
7900 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
7901 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
7902 ; SSE4-NEXT: movapd %xmm2, %xmm0
7903 ; SSE4-NEXT: movapd %xmm3, %xmm1
7906 ; AVX1-LABEL: test163:
7907 ; AVX1: # %bb.0: # %entry
7908 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
7909 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
7910 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
7911 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
7912 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
7913 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7916 ; AVX2-LABEL: test163:
7917 ; AVX2: # %bb.0: # %entry
7918 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2
7919 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7922 ; AVX512BW-LABEL: test163:
7923 ; AVX512BW: # %bb.0: # %entry
7924 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
7925 ; AVX512BW-NEXT: retq
7927 %cmp = icmp sgt <4 x i64> %a, %b
7928 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7932 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
7933 ; SSE2-LABEL: test164:
7934 ; SSE2: # %bb.0: # %entry
7935 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
7936 ; SSE2-NEXT: movdqa %xmm2, %xmm5
7937 ; SSE2-NEXT: pxor %xmm4, %xmm5
7938 ; SSE2-NEXT: movdqa %xmm0, %xmm6
7939 ; SSE2-NEXT: pxor %xmm4, %xmm6
7940 ; SSE2-NEXT: movdqa %xmm6, %xmm7
7941 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
7942 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7943 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
7944 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7945 ; SSE2-NEXT: pand %xmm8, %xmm5
7946 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7947 ; SSE2-NEXT: por %xmm5, %xmm6
7948 ; SSE2-NEXT: pand %xmm6, %xmm0
7949 ; SSE2-NEXT: pandn %xmm2, %xmm6
7950 ; SSE2-NEXT: por %xmm6, %xmm0
7951 ; SSE2-NEXT: movdqa %xmm3, %xmm2
7952 ; SSE2-NEXT: pxor %xmm4, %xmm2
7953 ; SSE2-NEXT: pxor %xmm1, %xmm4
7954 ; SSE2-NEXT: movdqa %xmm4, %xmm5
7955 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
7956 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7957 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
7958 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7959 ; SSE2-NEXT: pand %xmm6, %xmm2
7960 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7961 ; SSE2-NEXT: por %xmm2, %xmm4
7962 ; SSE2-NEXT: pand %xmm4, %xmm1
7963 ; SSE2-NEXT: pandn %xmm3, %xmm4
7964 ; SSE2-NEXT: por %xmm4, %xmm1
7967 ; SSE4-LABEL: test164:
7968 ; SSE4: # %bb.0: # %entry
7969 ; SSE4-NEXT: movdqa %xmm0, %xmm4
7970 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
7971 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
7972 ; SSE4-NEXT: movdqa %xmm1, %xmm0
7973 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
7974 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
7975 ; SSE4-NEXT: movapd %xmm2, %xmm0
7976 ; SSE4-NEXT: movapd %xmm3, %xmm1
7979 ; AVX1-LABEL: test164:
7980 ; AVX1: # %bb.0: # %entry
7981 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
7982 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
7983 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
7984 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
7985 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
7986 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7989 ; AVX2-LABEL: test164:
7990 ; AVX2: # %bb.0: # %entry
7991 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2
7992 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7995 ; AVX512BW-LABEL: test164:
7996 ; AVX512BW: # %bb.0: # %entry
7997 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
7998 ; AVX512BW-NEXT: retq
8000 %cmp = icmp sge <4 x i64> %a, %b
8001 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8005 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
8006 ; SSE2-LABEL: test165:
8007 ; SSE2: # %bb.0: # %entry
8008 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8009 ; SSE2-NEXT: movdqa %xmm0, %xmm5
8010 ; SSE2-NEXT: pxor %xmm4, %xmm5
8011 ; SSE2-NEXT: movdqa %xmm2, %xmm6
8012 ; SSE2-NEXT: pxor %xmm4, %xmm6
8013 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8014 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8015 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8016 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8017 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8018 ; SSE2-NEXT: pand %xmm8, %xmm5
8019 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8020 ; SSE2-NEXT: por %xmm5, %xmm6
8021 ; SSE2-NEXT: pand %xmm6, %xmm0
8022 ; SSE2-NEXT: pandn %xmm2, %xmm6
8023 ; SSE2-NEXT: por %xmm6, %xmm0
8024 ; SSE2-NEXT: movdqa %xmm1, %xmm2
8025 ; SSE2-NEXT: pxor %xmm4, %xmm2
8026 ; SSE2-NEXT: pxor %xmm3, %xmm4
8027 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8028 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8029 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8030 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8031 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8032 ; SSE2-NEXT: pand %xmm6, %xmm2
8033 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8034 ; SSE2-NEXT: por %xmm2, %xmm4
8035 ; SSE2-NEXT: pand %xmm4, %xmm1
8036 ; SSE2-NEXT: pandn %xmm3, %xmm4
8037 ; SSE2-NEXT: por %xmm4, %xmm1
8040 ; SSE4-LABEL: test165:
8041 ; SSE4: # %bb.0: # %entry
8042 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8043 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8044 ; SSE4-NEXT: movdqa %xmm0, %xmm6
8045 ; SSE4-NEXT: pxor %xmm5, %xmm6
8046 ; SSE4-NEXT: movdqa %xmm2, %xmm0
8047 ; SSE4-NEXT: pxor %xmm5, %xmm0
8048 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
8049 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8050 ; SSE4-NEXT: movdqa %xmm1, %xmm0
8051 ; SSE4-NEXT: pxor %xmm5, %xmm0
8052 ; SSE4-NEXT: pxor %xmm3, %xmm5
8053 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5
8054 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8055 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8056 ; SSE4-NEXT: movapd %xmm2, %xmm0
8057 ; SSE4-NEXT: movapd %xmm3, %xmm1
8060 ; AVX1-LABEL: test165:
8061 ; AVX1: # %bb.0: # %entry
8062 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
8063 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8064 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8065 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
8066 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
8067 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
8068 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
8069 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
8070 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
8071 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8072 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8075 ; AVX2-LABEL: test165:
8076 ; AVX2: # %bb.0: # %entry
8077 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8078 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
8079 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
8080 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
8081 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8084 ; AVX512BW-LABEL: test165:
8085 ; AVX512BW: # %bb.0: # %entry
8086 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0
8087 ; AVX512BW-NEXT: retq
8089 %cmp = icmp ult <4 x i64> %a, %b
8090 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8094 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
8095 ; SSE2-LABEL: test166:
8096 ; SSE2: # %bb.0: # %entry
8097 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8098 ; SSE2-NEXT: movdqa %xmm0, %xmm5
8099 ; SSE2-NEXT: pxor %xmm4, %xmm5
8100 ; SSE2-NEXT: movdqa %xmm2, %xmm6
8101 ; SSE2-NEXT: pxor %xmm4, %xmm6
8102 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8103 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8104 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8105 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8106 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8107 ; SSE2-NEXT: pand %xmm8, %xmm5
8108 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8109 ; SSE2-NEXT: por %xmm5, %xmm6
8110 ; SSE2-NEXT: pand %xmm6, %xmm0
8111 ; SSE2-NEXT: pandn %xmm2, %xmm6
8112 ; SSE2-NEXT: por %xmm6, %xmm0
8113 ; SSE2-NEXT: movdqa %xmm1, %xmm2
8114 ; SSE2-NEXT: pxor %xmm4, %xmm2
8115 ; SSE2-NEXT: pxor %xmm3, %xmm4
8116 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8117 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8118 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8119 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8120 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8121 ; SSE2-NEXT: pand %xmm6, %xmm2
8122 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8123 ; SSE2-NEXT: por %xmm2, %xmm4
8124 ; SSE2-NEXT: pand %xmm4, %xmm1
8125 ; SSE2-NEXT: pandn %xmm3, %xmm4
8126 ; SSE2-NEXT: por %xmm4, %xmm1
8129 ; SSE4-LABEL: test166:
8130 ; SSE4: # %bb.0: # %entry
8131 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8132 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8133 ; SSE4-NEXT: movdqa %xmm0, %xmm6
8134 ; SSE4-NEXT: pxor %xmm5, %xmm6
8135 ; SSE4-NEXT: movdqa %xmm2, %xmm0
8136 ; SSE4-NEXT: pxor %xmm5, %xmm0
8137 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
8138 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8139 ; SSE4-NEXT: movdqa %xmm1, %xmm0
8140 ; SSE4-NEXT: pxor %xmm5, %xmm0
8141 ; SSE4-NEXT: pxor %xmm3, %xmm5
8142 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5
8143 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8144 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8145 ; SSE4-NEXT: movapd %xmm2, %xmm0
8146 ; SSE4-NEXT: movapd %xmm3, %xmm1
8149 ; AVX1-LABEL: test166:
8150 ; AVX1: # %bb.0: # %entry
8151 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
8152 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8153 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8154 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
8155 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
8156 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
8157 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
8158 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
8159 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
8160 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8161 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8164 ; AVX2-LABEL: test166:
8165 ; AVX2: # %bb.0: # %entry
8166 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8167 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
8168 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
8169 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
8170 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8173 ; AVX512BW-LABEL: test166:
8174 ; AVX512BW: # %bb.0: # %entry
8175 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0
8176 ; AVX512BW-NEXT: retq
8178 %cmp = icmp ule <4 x i64> %a, %b
8179 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8183 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
8184 ; SSE2-LABEL: test167:
8185 ; SSE2: # %bb.0: # %entry
8186 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8187 ; SSE2-NEXT: movdqa %xmm2, %xmm5
8188 ; SSE2-NEXT: pxor %xmm4, %xmm5
8189 ; SSE2-NEXT: movdqa %xmm0, %xmm6
8190 ; SSE2-NEXT: pxor %xmm4, %xmm6
8191 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8192 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8193 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8194 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8195 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8196 ; SSE2-NEXT: pand %xmm8, %xmm5
8197 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8198 ; SSE2-NEXT: por %xmm5, %xmm6
8199 ; SSE2-NEXT: pand %xmm6, %xmm0
8200 ; SSE2-NEXT: pandn %xmm2, %xmm6
8201 ; SSE2-NEXT: por %xmm6, %xmm0
8202 ; SSE2-NEXT: movdqa %xmm3, %xmm2
8203 ; SSE2-NEXT: pxor %xmm4, %xmm2
8204 ; SSE2-NEXT: pxor %xmm1, %xmm4
8205 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8206 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8207 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8208 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8209 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8210 ; SSE2-NEXT: pand %xmm6, %xmm2
8211 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8212 ; SSE2-NEXT: por %xmm2, %xmm4
8213 ; SSE2-NEXT: pand %xmm4, %xmm1
8214 ; SSE2-NEXT: pandn %xmm3, %xmm4
8215 ; SSE2-NEXT: por %xmm4, %xmm1
8218 ; SSE4-LABEL: test167:
8219 ; SSE4: # %bb.0: # %entry
8220 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8221 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8222 ; SSE4-NEXT: movdqa %xmm2, %xmm6
8223 ; SSE4-NEXT: pxor %xmm5, %xmm6
8224 ; SSE4-NEXT: pxor %xmm5, %xmm0
8225 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
8226 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8227 ; SSE4-NEXT: movdqa %xmm3, %xmm0
8228 ; SSE4-NEXT: pxor %xmm5, %xmm0
8229 ; SSE4-NEXT: pxor %xmm1, %xmm5
8230 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5
8231 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8232 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8233 ; SSE4-NEXT: movapd %xmm2, %xmm0
8234 ; SSE4-NEXT: movapd %xmm3, %xmm1
8237 ; AVX1-LABEL: test167:
8238 ; AVX1: # %bb.0: # %entry
8239 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
8240 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8241 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8242 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
8243 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
8244 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
8245 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
8246 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
8247 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
8248 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8249 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8252 ; AVX2-LABEL: test167:
8253 ; AVX2: # %bb.0: # %entry
8254 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8255 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
8256 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
8257 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
8258 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8261 ; AVX512BW-LABEL: test167:
8262 ; AVX512BW: # %bb.0: # %entry
8263 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
8264 ; AVX512BW-NEXT: retq
8266 %cmp = icmp ugt <4 x i64> %a, %b
8267 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8271 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
8272 ; SSE2-LABEL: test168:
8273 ; SSE2: # %bb.0: # %entry
8274 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8275 ; SSE2-NEXT: movdqa %xmm2, %xmm5
8276 ; SSE2-NEXT: pxor %xmm4, %xmm5
8277 ; SSE2-NEXT: movdqa %xmm0, %xmm6
8278 ; SSE2-NEXT: pxor %xmm4, %xmm6
8279 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8280 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8281 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8282 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8283 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8284 ; SSE2-NEXT: pand %xmm8, %xmm5
8285 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8286 ; SSE2-NEXT: por %xmm5, %xmm6
8287 ; SSE2-NEXT: pand %xmm6, %xmm0
8288 ; SSE2-NEXT: pandn %xmm2, %xmm6
8289 ; SSE2-NEXT: por %xmm6, %xmm0
8290 ; SSE2-NEXT: movdqa %xmm3, %xmm2
8291 ; SSE2-NEXT: pxor %xmm4, %xmm2
8292 ; SSE2-NEXT: pxor %xmm1, %xmm4
8293 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8294 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8295 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8296 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8297 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8298 ; SSE2-NEXT: pand %xmm6, %xmm2
8299 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8300 ; SSE2-NEXT: por %xmm2, %xmm4
8301 ; SSE2-NEXT: pand %xmm4, %xmm1
8302 ; SSE2-NEXT: pandn %xmm3, %xmm4
8303 ; SSE2-NEXT: por %xmm4, %xmm1
8306 ; SSE4-LABEL: test168:
8307 ; SSE4: # %bb.0: # %entry
8308 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8309 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8310 ; SSE4-NEXT: movdqa %xmm2, %xmm6
8311 ; SSE4-NEXT: pxor %xmm5, %xmm6
8312 ; SSE4-NEXT: pxor %xmm5, %xmm0
8313 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
8314 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8315 ; SSE4-NEXT: movdqa %xmm3, %xmm0
8316 ; SSE4-NEXT: pxor %xmm5, %xmm0
8317 ; SSE4-NEXT: pxor %xmm1, %xmm5
8318 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5
8319 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8320 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8321 ; SSE4-NEXT: movapd %xmm2, %xmm0
8322 ; SSE4-NEXT: movapd %xmm3, %xmm1
8325 ; AVX1-LABEL: test168:
8326 ; AVX1: # %bb.0: # %entry
8327 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
8328 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8329 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8330 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
8331 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
8332 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
8333 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
8334 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
8335 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
8336 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8337 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8340 ; AVX2-LABEL: test168:
8341 ; AVX2: # %bb.0: # %entry
8342 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8343 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
8344 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
8345 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
8346 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8349 ; AVX512BW-LABEL: test168:
8350 ; AVX512BW: # %bb.0: # %entry
8351 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
8352 ; AVX512BW-NEXT: retq
8354 %cmp = icmp uge <4 x i64> %a, %b
8355 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8359 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
8360 ; SSE2-LABEL: test169:
8361 ; SSE2: # %bb.0: # %entry
8362 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8363 ; SSE2-NEXT: movdqa %xmm2, %xmm5
8364 ; SSE2-NEXT: pxor %xmm4, %xmm5
8365 ; SSE2-NEXT: movdqa %xmm0, %xmm6
8366 ; SSE2-NEXT: pxor %xmm4, %xmm6
8367 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8368 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8369 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8370 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8371 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8372 ; SSE2-NEXT: pand %xmm8, %xmm5
8373 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8374 ; SSE2-NEXT: por %xmm5, %xmm6
8375 ; SSE2-NEXT: pand %xmm6, %xmm0
8376 ; SSE2-NEXT: pandn %xmm2, %xmm6
8377 ; SSE2-NEXT: por %xmm6, %xmm0
8378 ; SSE2-NEXT: movdqa %xmm3, %xmm2
8379 ; SSE2-NEXT: pxor %xmm4, %xmm2
8380 ; SSE2-NEXT: pxor %xmm1, %xmm4
8381 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8382 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8383 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8384 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8385 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8386 ; SSE2-NEXT: pand %xmm6, %xmm2
8387 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8388 ; SSE2-NEXT: por %xmm2, %xmm4
8389 ; SSE2-NEXT: pand %xmm4, %xmm1
8390 ; SSE2-NEXT: pandn %xmm3, %xmm4
8391 ; SSE2-NEXT: por %xmm4, %xmm1
8394 ; SSE4-LABEL: test169:
8395 ; SSE4: # %bb.0: # %entry
8396 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8397 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
8398 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8399 ; SSE4-NEXT: movdqa %xmm1, %xmm0
8400 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
8401 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8402 ; SSE4-NEXT: movapd %xmm2, %xmm0
8403 ; SSE4-NEXT: movapd %xmm3, %xmm1
8406 ; AVX1-LABEL: test169:
8407 ; AVX1: # %bb.0: # %entry
8408 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
8409 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
8410 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
8411 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
8412 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8413 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8416 ; AVX2-LABEL: test169:
8417 ; AVX2: # %bb.0: # %entry
8418 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2
8419 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8422 ; AVX512BW-LABEL: test169:
8423 ; AVX512BW: # %bb.0: # %entry
8424 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
8425 ; AVX512BW-NEXT: retq
8427 %cmp = icmp slt <4 x i64> %a, %b
8428 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8432 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
8433 ; SSE2-LABEL: test170:
8434 ; SSE2: # %bb.0: # %entry
8435 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8436 ; SSE2-NEXT: movdqa %xmm2, %xmm5
8437 ; SSE2-NEXT: pxor %xmm4, %xmm5
8438 ; SSE2-NEXT: movdqa %xmm0, %xmm6
8439 ; SSE2-NEXT: pxor %xmm4, %xmm6
8440 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8441 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8442 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8443 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8444 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8445 ; SSE2-NEXT: pand %xmm8, %xmm5
8446 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8447 ; SSE2-NEXT: por %xmm5, %xmm6
8448 ; SSE2-NEXT: pand %xmm6, %xmm0
8449 ; SSE2-NEXT: pandn %xmm2, %xmm6
8450 ; SSE2-NEXT: por %xmm6, %xmm0
8451 ; SSE2-NEXT: movdqa %xmm3, %xmm2
8452 ; SSE2-NEXT: pxor %xmm4, %xmm2
8453 ; SSE2-NEXT: pxor %xmm1, %xmm4
8454 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8455 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8456 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8457 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8458 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8459 ; SSE2-NEXT: pand %xmm6, %xmm2
8460 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8461 ; SSE2-NEXT: por %xmm2, %xmm4
8462 ; SSE2-NEXT: pand %xmm4, %xmm1
8463 ; SSE2-NEXT: pandn %xmm3, %xmm4
8464 ; SSE2-NEXT: por %xmm4, %xmm1
8467 ; SSE4-LABEL: test170:
8468 ; SSE4: # %bb.0: # %entry
8469 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8470 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
8471 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8472 ; SSE4-NEXT: movdqa %xmm1, %xmm0
8473 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
8474 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8475 ; SSE4-NEXT: movapd %xmm2, %xmm0
8476 ; SSE4-NEXT: movapd %xmm3, %xmm1
8479 ; AVX1-LABEL: test170:
8480 ; AVX1: # %bb.0: # %entry
8481 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
8482 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
8483 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
8484 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
8485 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8486 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8489 ; AVX2-LABEL: test170:
8490 ; AVX2: # %bb.0: # %entry
8491 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2
8492 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8495 ; AVX512BW-LABEL: test170:
8496 ; AVX512BW: # %bb.0: # %entry
8497 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
8498 ; AVX512BW-NEXT: retq
8500 %cmp = icmp sle <4 x i64> %a, %b
8501 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8505 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
8506 ; SSE2-LABEL: test171:
8507 ; SSE2: # %bb.0: # %entry
8508 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8509 ; SSE2-NEXT: movdqa %xmm0, %xmm5
8510 ; SSE2-NEXT: pxor %xmm4, %xmm5
8511 ; SSE2-NEXT: movdqa %xmm2, %xmm6
8512 ; SSE2-NEXT: pxor %xmm4, %xmm6
8513 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8514 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8515 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8516 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8517 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8518 ; SSE2-NEXT: pand %xmm8, %xmm5
8519 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8520 ; SSE2-NEXT: por %xmm5, %xmm6
8521 ; SSE2-NEXT: pand %xmm6, %xmm0
8522 ; SSE2-NEXT: pandn %xmm2, %xmm6
8523 ; SSE2-NEXT: por %xmm6, %xmm0
8524 ; SSE2-NEXT: movdqa %xmm1, %xmm2
8525 ; SSE2-NEXT: pxor %xmm4, %xmm2
8526 ; SSE2-NEXT: pxor %xmm3, %xmm4
8527 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8528 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8529 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8530 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8531 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8532 ; SSE2-NEXT: pand %xmm6, %xmm2
8533 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8534 ; SSE2-NEXT: por %xmm2, %xmm4
8535 ; SSE2-NEXT: pand %xmm4, %xmm1
8536 ; SSE2-NEXT: pandn %xmm3, %xmm4
8537 ; SSE2-NEXT: por %xmm4, %xmm1
8540 ; SSE4-LABEL: test171:
8541 ; SSE4: # %bb.0: # %entry
8542 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8543 ; SSE4-NEXT: movdqa %xmm2, %xmm0
8544 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
8545 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8546 ; SSE4-NEXT: movdqa %xmm3, %xmm0
8547 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
8548 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8549 ; SSE4-NEXT: movapd %xmm2, %xmm0
8550 ; SSE4-NEXT: movapd %xmm3, %xmm1
8553 ; AVX1-LABEL: test171:
8554 ; AVX1: # %bb.0: # %entry
8555 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
8556 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
8557 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
8558 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
8559 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8560 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8563 ; AVX2-LABEL: test171:
8564 ; AVX2: # %bb.0: # %entry
8565 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
8566 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8569 ; AVX512BW-LABEL: test171:
8570 ; AVX512BW: # %bb.0: # %entry
8571 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0
8572 ; AVX512BW-NEXT: retq
8574 %cmp = icmp sgt <4 x i64> %a, %b
8575 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8579 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
8580 ; SSE2-LABEL: test172:
8581 ; SSE2: # %bb.0: # %entry
8582 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8583 ; SSE2-NEXT: movdqa %xmm0, %xmm5
8584 ; SSE2-NEXT: pxor %xmm4, %xmm5
8585 ; SSE2-NEXT: movdqa %xmm2, %xmm6
8586 ; SSE2-NEXT: pxor %xmm4, %xmm6
8587 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8588 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8589 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8590 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8591 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8592 ; SSE2-NEXT: pand %xmm8, %xmm5
8593 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8594 ; SSE2-NEXT: por %xmm5, %xmm6
8595 ; SSE2-NEXT: pand %xmm6, %xmm0
8596 ; SSE2-NEXT: pandn %xmm2, %xmm6
8597 ; SSE2-NEXT: por %xmm6, %xmm0
8598 ; SSE2-NEXT: movdqa %xmm1, %xmm2
8599 ; SSE2-NEXT: pxor %xmm4, %xmm2
8600 ; SSE2-NEXT: pxor %xmm3, %xmm4
8601 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8602 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8603 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8604 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8605 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8606 ; SSE2-NEXT: pand %xmm6, %xmm2
8607 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8608 ; SSE2-NEXT: por %xmm2, %xmm4
8609 ; SSE2-NEXT: pand %xmm4, %xmm1
8610 ; SSE2-NEXT: pandn %xmm3, %xmm4
8611 ; SSE2-NEXT: por %xmm4, %xmm1
8614 ; SSE4-LABEL: test172:
8615 ; SSE4: # %bb.0: # %entry
8616 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8617 ; SSE4-NEXT: movdqa %xmm2, %xmm0
8618 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
8619 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8620 ; SSE4-NEXT: movdqa %xmm3, %xmm0
8621 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
8622 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8623 ; SSE4-NEXT: movapd %xmm2, %xmm0
8624 ; SSE4-NEXT: movapd %xmm3, %xmm1
8627 ; AVX1-LABEL: test172:
8628 ; AVX1: # %bb.0: # %entry
8629 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
8630 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
8631 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
8632 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
8633 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8634 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8637 ; AVX2-LABEL: test172:
8638 ; AVX2: # %bb.0: # %entry
8639 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
8640 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8643 ; AVX512BW-LABEL: test172:
8644 ; AVX512BW: # %bb.0: # %entry
8645 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0
8646 ; AVX512BW-NEXT: retq
8648 %cmp = icmp sge <4 x i64> %a, %b
8649 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8653 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
8654 ; SSE2-LABEL: test173:
8655 ; SSE2: # %bb.0: # %entry
8656 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8657 ; SSE2-NEXT: movdqa %xmm2, %xmm5
8658 ; SSE2-NEXT: pxor %xmm4, %xmm5
8659 ; SSE2-NEXT: movdqa %xmm0, %xmm6
8660 ; SSE2-NEXT: pxor %xmm4, %xmm6
8661 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8662 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8663 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8664 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8665 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8666 ; SSE2-NEXT: pand %xmm8, %xmm5
8667 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8668 ; SSE2-NEXT: por %xmm5, %xmm6
8669 ; SSE2-NEXT: pand %xmm6, %xmm0
8670 ; SSE2-NEXT: pandn %xmm2, %xmm6
8671 ; SSE2-NEXT: por %xmm6, %xmm0
8672 ; SSE2-NEXT: movdqa %xmm3, %xmm2
8673 ; SSE2-NEXT: pxor %xmm4, %xmm2
8674 ; SSE2-NEXT: pxor %xmm1, %xmm4
8675 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8676 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8677 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8678 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8679 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8680 ; SSE2-NEXT: pand %xmm6, %xmm2
8681 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8682 ; SSE2-NEXT: por %xmm2, %xmm4
8683 ; SSE2-NEXT: pand %xmm4, %xmm1
8684 ; SSE2-NEXT: pandn %xmm3, %xmm4
8685 ; SSE2-NEXT: por %xmm4, %xmm1
8688 ; SSE4-LABEL: test173:
8689 ; SSE4: # %bb.0: # %entry
8690 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8691 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8692 ; SSE4-NEXT: movdqa %xmm2, %xmm6
8693 ; SSE4-NEXT: pxor %xmm5, %xmm6
8694 ; SSE4-NEXT: pxor %xmm5, %xmm0
8695 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
8696 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8697 ; SSE4-NEXT: movdqa %xmm3, %xmm0
8698 ; SSE4-NEXT: pxor %xmm5, %xmm0
8699 ; SSE4-NEXT: pxor %xmm1, %xmm5
8700 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5
8701 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8702 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8703 ; SSE4-NEXT: movapd %xmm2, %xmm0
8704 ; SSE4-NEXT: movapd %xmm3, %xmm1
8707 ; AVX1-LABEL: test173:
8708 ; AVX1: # %bb.0: # %entry
8709 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
8710 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8711 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8712 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
8713 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
8714 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
8715 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
8716 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
8717 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
8718 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8719 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8722 ; AVX2-LABEL: test173:
8723 ; AVX2: # %bb.0: # %entry
8724 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8725 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
8726 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
8727 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
8728 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8731 ; AVX512BW-LABEL: test173:
8732 ; AVX512BW: # %bb.0: # %entry
8733 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
8734 ; AVX512BW-NEXT: retq
8736 %cmp = icmp ult <4 x i64> %a, %b
8737 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8741 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
8742 ; SSE2-LABEL: test174:
8743 ; SSE2: # %bb.0: # %entry
8744 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8745 ; SSE2-NEXT: movdqa %xmm2, %xmm5
8746 ; SSE2-NEXT: pxor %xmm4, %xmm5
8747 ; SSE2-NEXT: movdqa %xmm0, %xmm6
8748 ; SSE2-NEXT: pxor %xmm4, %xmm6
8749 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8750 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8751 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8752 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8753 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8754 ; SSE2-NEXT: pand %xmm8, %xmm5
8755 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8756 ; SSE2-NEXT: por %xmm5, %xmm6
8757 ; SSE2-NEXT: pand %xmm6, %xmm0
8758 ; SSE2-NEXT: pandn %xmm2, %xmm6
8759 ; SSE2-NEXT: por %xmm6, %xmm0
8760 ; SSE2-NEXT: movdqa %xmm3, %xmm2
8761 ; SSE2-NEXT: pxor %xmm4, %xmm2
8762 ; SSE2-NEXT: pxor %xmm1, %xmm4
8763 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8764 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8765 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8766 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8767 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8768 ; SSE2-NEXT: pand %xmm6, %xmm2
8769 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8770 ; SSE2-NEXT: por %xmm2, %xmm4
8771 ; SSE2-NEXT: pand %xmm4, %xmm1
8772 ; SSE2-NEXT: pandn %xmm3, %xmm4
8773 ; SSE2-NEXT: por %xmm4, %xmm1
8776 ; SSE4-LABEL: test174:
8777 ; SSE4: # %bb.0: # %entry
8778 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8779 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8780 ; SSE4-NEXT: movdqa %xmm2, %xmm6
8781 ; SSE4-NEXT: pxor %xmm5, %xmm6
8782 ; SSE4-NEXT: pxor %xmm5, %xmm0
8783 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
8784 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8785 ; SSE4-NEXT: movdqa %xmm3, %xmm0
8786 ; SSE4-NEXT: pxor %xmm5, %xmm0
8787 ; SSE4-NEXT: pxor %xmm1, %xmm5
8788 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5
8789 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8790 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8791 ; SSE4-NEXT: movapd %xmm2, %xmm0
8792 ; SSE4-NEXT: movapd %xmm3, %xmm1
8795 ; AVX1-LABEL: test174:
8796 ; AVX1: # %bb.0: # %entry
8797 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
8798 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8799 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8800 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
8801 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
8802 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
8803 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
8804 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
8805 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
8806 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8807 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8810 ; AVX2-LABEL: test174:
8811 ; AVX2: # %bb.0: # %entry
8812 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8813 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
8814 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
8815 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
8816 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8819 ; AVX512BW-LABEL: test174:
8820 ; AVX512BW: # %bb.0: # %entry
8821 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
8822 ; AVX512BW-NEXT: retq
8824 %cmp = icmp ule <4 x i64> %a, %b
8825 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8829 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
8830 ; SSE2-LABEL: test175:
8831 ; SSE2: # %bb.0: # %entry
8832 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8833 ; SSE2-NEXT: movdqa %xmm0, %xmm5
8834 ; SSE2-NEXT: pxor %xmm4, %xmm5
8835 ; SSE2-NEXT: movdqa %xmm2, %xmm6
8836 ; SSE2-NEXT: pxor %xmm4, %xmm6
8837 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8838 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8839 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8840 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8841 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8842 ; SSE2-NEXT: pand %xmm8, %xmm5
8843 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8844 ; SSE2-NEXT: por %xmm5, %xmm6
8845 ; SSE2-NEXT: pand %xmm6, %xmm0
8846 ; SSE2-NEXT: pandn %xmm2, %xmm6
8847 ; SSE2-NEXT: por %xmm6, %xmm0
8848 ; SSE2-NEXT: movdqa %xmm1, %xmm2
8849 ; SSE2-NEXT: pxor %xmm4, %xmm2
8850 ; SSE2-NEXT: pxor %xmm3, %xmm4
8851 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8852 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8853 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8854 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8855 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8856 ; SSE2-NEXT: pand %xmm6, %xmm2
8857 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8858 ; SSE2-NEXT: por %xmm2, %xmm4
8859 ; SSE2-NEXT: pand %xmm4, %xmm1
8860 ; SSE2-NEXT: pandn %xmm3, %xmm4
8861 ; SSE2-NEXT: por %xmm4, %xmm1
8864 ; SSE4-LABEL: test175:
8865 ; SSE4: # %bb.0: # %entry
8866 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8867 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8868 ; SSE4-NEXT: movdqa %xmm0, %xmm6
8869 ; SSE4-NEXT: pxor %xmm5, %xmm6
8870 ; SSE4-NEXT: movdqa %xmm2, %xmm0
8871 ; SSE4-NEXT: pxor %xmm5, %xmm0
8872 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
8873 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8874 ; SSE4-NEXT: movdqa %xmm1, %xmm0
8875 ; SSE4-NEXT: pxor %xmm5, %xmm0
8876 ; SSE4-NEXT: pxor %xmm3, %xmm5
8877 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5
8878 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8879 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8880 ; SSE4-NEXT: movapd %xmm2, %xmm0
8881 ; SSE4-NEXT: movapd %xmm3, %xmm1
8884 ; AVX1-LABEL: test175:
8885 ; AVX1: # %bb.0: # %entry
8886 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
8887 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8888 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8889 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
8890 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
8891 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
8892 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
8893 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
8894 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
8895 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8896 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8899 ; AVX2-LABEL: test175:
8900 ; AVX2: # %bb.0: # %entry
8901 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8902 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
8903 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
8904 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
8905 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8908 ; AVX512BW-LABEL: test175:
8909 ; AVX512BW: # %bb.0: # %entry
8910 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0
8911 ; AVX512BW-NEXT: retq
8913 %cmp = icmp ugt <4 x i64> %a, %b
8914 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8918 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
8919 ; SSE2-LABEL: test176:
8920 ; SSE2: # %bb.0: # %entry
8921 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8922 ; SSE2-NEXT: movdqa %xmm0, %xmm5
8923 ; SSE2-NEXT: pxor %xmm4, %xmm5
8924 ; SSE2-NEXT: movdqa %xmm2, %xmm6
8925 ; SSE2-NEXT: pxor %xmm4, %xmm6
8926 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8927 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8928 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8929 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8930 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8931 ; SSE2-NEXT: pand %xmm8, %xmm5
8932 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8933 ; SSE2-NEXT: por %xmm5, %xmm6
8934 ; SSE2-NEXT: pand %xmm6, %xmm0
8935 ; SSE2-NEXT: pandn %xmm2, %xmm6
8936 ; SSE2-NEXT: por %xmm6, %xmm0
8937 ; SSE2-NEXT: movdqa %xmm1, %xmm2
8938 ; SSE2-NEXT: pxor %xmm4, %xmm2
8939 ; SSE2-NEXT: pxor %xmm3, %xmm4
8940 ; SSE2-NEXT: movdqa %xmm4, %xmm5
8941 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
8942 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8943 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm4
8944 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8945 ; SSE2-NEXT: pand %xmm6, %xmm2
8946 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8947 ; SSE2-NEXT: por %xmm2, %xmm4
8948 ; SSE2-NEXT: pand %xmm4, %xmm1
8949 ; SSE2-NEXT: pandn %xmm3, %xmm4
8950 ; SSE2-NEXT: por %xmm4, %xmm1
8953 ; SSE4-LABEL: test176:
8954 ; SSE4: # %bb.0: # %entry
8955 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8956 ; SSE4-NEXT: movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8957 ; SSE4-NEXT: movdqa %xmm0, %xmm6
8958 ; SSE4-NEXT: pxor %xmm5, %xmm6
8959 ; SSE4-NEXT: movdqa %xmm2, %xmm0
8960 ; SSE4-NEXT: pxor %xmm5, %xmm0
8961 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
8962 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8963 ; SSE4-NEXT: movdqa %xmm1, %xmm0
8964 ; SSE4-NEXT: pxor %xmm5, %xmm0
8965 ; SSE4-NEXT: pxor %xmm3, %xmm5
8966 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm5
8967 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8968 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8969 ; SSE4-NEXT: movapd %xmm2, %xmm0
8970 ; SSE4-NEXT: movapd %xmm3, %xmm1
8973 ; AVX1-LABEL: test176:
8974 ; AVX1: # %bb.0: # %entry
8975 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
8976 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8977 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8978 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
8979 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
8980 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
8981 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
8982 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
8983 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
8984 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8985 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8988 ; AVX2-LABEL: test176:
8989 ; AVX2: # %bb.0: # %entry
8990 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8991 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
8992 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
8993 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
8994 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8997 ; AVX512BW-LABEL: test176:
8998 ; AVX512BW: # %bb.0: # %entry
8999 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0
9000 ; AVX512BW-NEXT: retq
9002 %cmp = icmp uge <4 x i64> %a, %b
9003 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9007 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
9008 ; SSE2-LABEL: test177:
9009 ; SSE2: # %bb.0: # %entry
9010 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9011 ; SSE2-NEXT: movdqa %xmm0, %xmm3
9012 ; SSE2-NEXT: pxor %xmm2, %xmm3
9013 ; SSE2-NEXT: pxor %xmm1, %xmm2
9014 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9015 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9016 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9017 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9018 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9019 ; SSE2-NEXT: pand %xmm5, %xmm2
9020 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9021 ; SSE2-NEXT: por %xmm2, %xmm3
9022 ; SSE2-NEXT: pand %xmm3, %xmm0
9023 ; SSE2-NEXT: pandn %xmm1, %xmm3
9024 ; SSE2-NEXT: por %xmm3, %xmm0
9027 ; SSE4-LABEL: test177:
9028 ; SSE4: # %bb.0: # %entry
9029 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9030 ; SSE4-NEXT: movdqa %xmm1, %xmm0
9031 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
9032 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9033 ; SSE4-NEXT: movapd %xmm1, %xmm0
9036 ; AVX1-LABEL: test177:
9037 ; AVX1: # %bb.0: # %entry
9038 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
9039 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9042 ; AVX2-LABEL: test177:
9043 ; AVX2: # %bb.0: # %entry
9044 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
9045 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9048 ; AVX512BW-LABEL: test177:
9049 ; AVX512BW: # %bb.0: # %entry
9050 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0
9051 ; AVX512BW-NEXT: retq
9053 %cmp = icmp slt <2 x i64> %a, %b
9054 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9058 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
9059 ; SSE2-LABEL: test178:
9060 ; SSE2: # %bb.0: # %entry
9061 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9062 ; SSE2-NEXT: movdqa %xmm0, %xmm3
9063 ; SSE2-NEXT: pxor %xmm2, %xmm3
9064 ; SSE2-NEXT: pxor %xmm1, %xmm2
9065 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9066 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9067 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9068 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9069 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9070 ; SSE2-NEXT: pand %xmm5, %xmm2
9071 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9072 ; SSE2-NEXT: por %xmm2, %xmm3
9073 ; SSE2-NEXT: pand %xmm3, %xmm0
9074 ; SSE2-NEXT: pandn %xmm1, %xmm3
9075 ; SSE2-NEXT: por %xmm3, %xmm0
9078 ; SSE4-LABEL: test178:
9079 ; SSE4: # %bb.0: # %entry
9080 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9081 ; SSE4-NEXT: movdqa %xmm1, %xmm0
9082 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
9083 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9084 ; SSE4-NEXT: movapd %xmm1, %xmm0
9087 ; AVX1-LABEL: test178:
9088 ; AVX1: # %bb.0: # %entry
9089 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
9090 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9093 ; AVX2-LABEL: test178:
9094 ; AVX2: # %bb.0: # %entry
9095 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
9096 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9099 ; AVX512BW-LABEL: test178:
9100 ; AVX512BW: # %bb.0: # %entry
9101 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0
9102 ; AVX512BW-NEXT: retq
9104 %cmp = icmp sle <2 x i64> %a, %b
9105 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9109 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
9110 ; SSE2-LABEL: test179:
9111 ; SSE2: # %bb.0: # %entry
9112 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9113 ; SSE2-NEXT: movdqa %xmm1, %xmm3
9114 ; SSE2-NEXT: pxor %xmm2, %xmm3
9115 ; SSE2-NEXT: pxor %xmm0, %xmm2
9116 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9117 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9118 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9119 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9120 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9121 ; SSE2-NEXT: pand %xmm5, %xmm2
9122 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9123 ; SSE2-NEXT: por %xmm2, %xmm3
9124 ; SSE2-NEXT: pand %xmm3, %xmm0
9125 ; SSE2-NEXT: pandn %xmm1, %xmm3
9126 ; SSE2-NEXT: por %xmm3, %xmm0
9129 ; SSE4-LABEL: test179:
9130 ; SSE4: # %bb.0: # %entry
9131 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9132 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
9133 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9134 ; SSE4-NEXT: movapd %xmm1, %xmm0
9137 ; AVX1-LABEL: test179:
9138 ; AVX1: # %bb.0: # %entry
9139 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
9140 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9143 ; AVX2-LABEL: test179:
9144 ; AVX2: # %bb.0: # %entry
9145 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
9146 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9149 ; AVX512BW-LABEL: test179:
9150 ; AVX512BW: # %bb.0: # %entry
9151 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
9152 ; AVX512BW-NEXT: retq
9154 %cmp = icmp sgt <2 x i64> %a, %b
9155 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9159 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
9160 ; SSE2-LABEL: test180:
9161 ; SSE2: # %bb.0: # %entry
9162 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9163 ; SSE2-NEXT: movdqa %xmm1, %xmm3
9164 ; SSE2-NEXT: pxor %xmm2, %xmm3
9165 ; SSE2-NEXT: pxor %xmm0, %xmm2
9166 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9167 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9168 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9169 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9170 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9171 ; SSE2-NEXT: pand %xmm5, %xmm2
9172 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9173 ; SSE2-NEXT: por %xmm2, %xmm3
9174 ; SSE2-NEXT: pand %xmm3, %xmm0
9175 ; SSE2-NEXT: pandn %xmm1, %xmm3
9176 ; SSE2-NEXT: por %xmm3, %xmm0
9179 ; SSE4-LABEL: test180:
9180 ; SSE4: # %bb.0: # %entry
9181 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9182 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
9183 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9184 ; SSE4-NEXT: movapd %xmm1, %xmm0
9187 ; AVX1-LABEL: test180:
9188 ; AVX1: # %bb.0: # %entry
9189 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
9190 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9193 ; AVX2-LABEL: test180:
9194 ; AVX2: # %bb.0: # %entry
9195 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
9196 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9199 ; AVX512BW-LABEL: test180:
9200 ; AVX512BW: # %bb.0: # %entry
9201 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
9202 ; AVX512BW-NEXT: retq
9204 %cmp = icmp sge <2 x i64> %a, %b
9205 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9209 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
9210 ; SSE2-LABEL: test181:
9211 ; SSE2: # %bb.0: # %entry
9212 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9213 ; SSE2-NEXT: movdqa %xmm0, %xmm3
9214 ; SSE2-NEXT: pxor %xmm2, %xmm3
9215 ; SSE2-NEXT: pxor %xmm1, %xmm2
9216 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9217 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9218 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9219 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9220 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9221 ; SSE2-NEXT: pand %xmm5, %xmm2
9222 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9223 ; SSE2-NEXT: por %xmm2, %xmm3
9224 ; SSE2-NEXT: pand %xmm3, %xmm0
9225 ; SSE2-NEXT: pandn %xmm1, %xmm3
9226 ; SSE2-NEXT: por %xmm3, %xmm0
9229 ; SSE4-LABEL: test181:
9230 ; SSE4: # %bb.0: # %entry
9231 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9232 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9233 ; SSE4-NEXT: movdqa %xmm2, %xmm3
9234 ; SSE4-NEXT: pxor %xmm0, %xmm3
9235 ; SSE4-NEXT: pxor %xmm1, %xmm0
9236 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
9237 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9238 ; SSE4-NEXT: movapd %xmm1, %xmm0
9241 ; AVX1-LABEL: test181:
9242 ; AVX1: # %bb.0: # %entry
9243 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9244 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
9245 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2
9246 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9247 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9250 ; AVX2-LABEL: test181:
9251 ; AVX2: # %bb.0: # %entry
9252 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9253 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3
9254 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2
9255 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9256 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9259 ; AVX512BW-LABEL: test181:
9260 ; AVX512BW: # %bb.0: # %entry
9261 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0
9262 ; AVX512BW-NEXT: retq
9264 %cmp = icmp ult <2 x i64> %a, %b
9265 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9269 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
9270 ; SSE2-LABEL: test182:
9271 ; SSE2: # %bb.0: # %entry
9272 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9273 ; SSE2-NEXT: movdqa %xmm0, %xmm3
9274 ; SSE2-NEXT: pxor %xmm2, %xmm3
9275 ; SSE2-NEXT: pxor %xmm1, %xmm2
9276 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9277 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9278 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9279 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9280 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9281 ; SSE2-NEXT: pand %xmm5, %xmm2
9282 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9283 ; SSE2-NEXT: por %xmm2, %xmm3
9284 ; SSE2-NEXT: pand %xmm3, %xmm0
9285 ; SSE2-NEXT: pandn %xmm1, %xmm3
9286 ; SSE2-NEXT: por %xmm3, %xmm0
9289 ; SSE4-LABEL: test182:
9290 ; SSE4: # %bb.0: # %entry
9291 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9292 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9293 ; SSE4-NEXT: movdqa %xmm2, %xmm3
9294 ; SSE4-NEXT: pxor %xmm0, %xmm3
9295 ; SSE4-NEXT: pxor %xmm1, %xmm0
9296 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
9297 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9298 ; SSE4-NEXT: movapd %xmm1, %xmm0
9301 ; AVX1-LABEL: test182:
9302 ; AVX1: # %bb.0: # %entry
9303 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9304 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
9305 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2
9306 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9307 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9310 ; AVX2-LABEL: test182:
9311 ; AVX2: # %bb.0: # %entry
9312 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9313 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3
9314 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2
9315 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9316 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9319 ; AVX512BW-LABEL: test182:
9320 ; AVX512BW: # %bb.0: # %entry
9321 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0
9322 ; AVX512BW-NEXT: retq
9324 %cmp = icmp ule <2 x i64> %a, %b
9325 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9329 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
9330 ; SSE2-LABEL: test183:
9331 ; SSE2: # %bb.0: # %entry
9332 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9333 ; SSE2-NEXT: movdqa %xmm1, %xmm3
9334 ; SSE2-NEXT: pxor %xmm2, %xmm3
9335 ; SSE2-NEXT: pxor %xmm0, %xmm2
9336 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9337 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9338 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9339 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9340 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9341 ; SSE2-NEXT: pand %xmm5, %xmm2
9342 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9343 ; SSE2-NEXT: por %xmm2, %xmm3
9344 ; SSE2-NEXT: pand %xmm3, %xmm0
9345 ; SSE2-NEXT: pandn %xmm1, %xmm3
9346 ; SSE2-NEXT: por %xmm3, %xmm0
9349 ; SSE4-LABEL: test183:
9350 ; SSE4: # %bb.0: # %entry
9351 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9352 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9353 ; SSE4-NEXT: movdqa %xmm1, %xmm3
9354 ; SSE4-NEXT: pxor %xmm0, %xmm3
9355 ; SSE4-NEXT: pxor %xmm2, %xmm0
9356 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
9357 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9358 ; SSE4-NEXT: movapd %xmm1, %xmm0
9361 ; AVX1-LABEL: test183:
9362 ; AVX1: # %bb.0: # %entry
9363 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9364 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
9365 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
9366 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9367 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9370 ; AVX2-LABEL: test183:
9371 ; AVX2: # %bb.0: # %entry
9372 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9373 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3
9374 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2
9375 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9376 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9379 ; AVX512BW-LABEL: test183:
9380 ; AVX512BW: # %bb.0: # %entry
9381 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
9382 ; AVX512BW-NEXT: retq
9384 %cmp = icmp ugt <2 x i64> %a, %b
9385 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9389 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
9390 ; SSE2-LABEL: test184:
9391 ; SSE2: # %bb.0: # %entry
9392 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9393 ; SSE2-NEXT: movdqa %xmm1, %xmm3
9394 ; SSE2-NEXT: pxor %xmm2, %xmm3
9395 ; SSE2-NEXT: pxor %xmm0, %xmm2
9396 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9397 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9398 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9399 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9400 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9401 ; SSE2-NEXT: pand %xmm5, %xmm2
9402 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9403 ; SSE2-NEXT: por %xmm2, %xmm3
9404 ; SSE2-NEXT: pand %xmm3, %xmm0
9405 ; SSE2-NEXT: pandn %xmm1, %xmm3
9406 ; SSE2-NEXT: por %xmm3, %xmm0
9409 ; SSE4-LABEL: test184:
9410 ; SSE4: # %bb.0: # %entry
9411 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9412 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9413 ; SSE4-NEXT: movdqa %xmm1, %xmm3
9414 ; SSE4-NEXT: pxor %xmm0, %xmm3
9415 ; SSE4-NEXT: pxor %xmm2, %xmm0
9416 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
9417 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9418 ; SSE4-NEXT: movapd %xmm1, %xmm0
9421 ; AVX1-LABEL: test184:
9422 ; AVX1: # %bb.0: # %entry
9423 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9424 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
9425 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
9426 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9427 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9430 ; AVX2-LABEL: test184:
9431 ; AVX2: # %bb.0: # %entry
9432 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9433 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3
9434 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2
9435 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9436 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9439 ; AVX512BW-LABEL: test184:
9440 ; AVX512BW: # %bb.0: # %entry
9441 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
9442 ; AVX512BW-NEXT: retq
9444 %cmp = icmp uge <2 x i64> %a, %b
9445 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9449 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
9450 ; SSE2-LABEL: test185:
9451 ; SSE2: # %bb.0: # %entry
9452 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9453 ; SSE2-NEXT: movdqa %xmm1, %xmm3
9454 ; SSE2-NEXT: pxor %xmm2, %xmm3
9455 ; SSE2-NEXT: pxor %xmm0, %xmm2
9456 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9457 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9458 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9459 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9460 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9461 ; SSE2-NEXT: pand %xmm5, %xmm2
9462 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9463 ; SSE2-NEXT: por %xmm2, %xmm3
9464 ; SSE2-NEXT: pand %xmm3, %xmm0
9465 ; SSE2-NEXT: pandn %xmm1, %xmm3
9466 ; SSE2-NEXT: por %xmm3, %xmm0
9469 ; SSE4-LABEL: test185:
9470 ; SSE4: # %bb.0: # %entry
9471 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9472 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
9473 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9474 ; SSE4-NEXT: movapd %xmm1, %xmm0
9477 ; AVX1-LABEL: test185:
9478 ; AVX1: # %bb.0: # %entry
9479 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
9480 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9483 ; AVX2-LABEL: test185:
9484 ; AVX2: # %bb.0: # %entry
9485 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
9486 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9489 ; AVX512BW-LABEL: test185:
9490 ; AVX512BW: # %bb.0: # %entry
9491 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
9492 ; AVX512BW-NEXT: retq
9494 %cmp = icmp slt <2 x i64> %a, %b
9495 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9499 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
9500 ; SSE2-LABEL: test186:
9501 ; SSE2: # %bb.0: # %entry
9502 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9503 ; SSE2-NEXT: movdqa %xmm1, %xmm3
9504 ; SSE2-NEXT: pxor %xmm2, %xmm3
9505 ; SSE2-NEXT: pxor %xmm0, %xmm2
9506 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9507 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9508 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9509 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9510 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9511 ; SSE2-NEXT: pand %xmm5, %xmm2
9512 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9513 ; SSE2-NEXT: por %xmm2, %xmm3
9514 ; SSE2-NEXT: pand %xmm3, %xmm0
9515 ; SSE2-NEXT: pandn %xmm1, %xmm3
9516 ; SSE2-NEXT: por %xmm3, %xmm0
9519 ; SSE4-LABEL: test186:
9520 ; SSE4: # %bb.0: # %entry
9521 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9522 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
9523 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9524 ; SSE4-NEXT: movapd %xmm1, %xmm0
9527 ; AVX1-LABEL: test186:
9528 ; AVX1: # %bb.0: # %entry
9529 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
9530 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9533 ; AVX2-LABEL: test186:
9534 ; AVX2: # %bb.0: # %entry
9535 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
9536 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9539 ; AVX512BW-LABEL: test186:
9540 ; AVX512BW: # %bb.0: # %entry
9541 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
9542 ; AVX512BW-NEXT: retq
9544 %cmp = icmp sle <2 x i64> %a, %b
9545 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9549 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
9550 ; SSE2-LABEL: test187:
9551 ; SSE2: # %bb.0: # %entry
9552 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9553 ; SSE2-NEXT: movdqa %xmm0, %xmm3
9554 ; SSE2-NEXT: pxor %xmm2, %xmm3
9555 ; SSE2-NEXT: pxor %xmm1, %xmm2
9556 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9557 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9558 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9559 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9560 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9561 ; SSE2-NEXT: pand %xmm5, %xmm2
9562 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9563 ; SSE2-NEXT: por %xmm2, %xmm3
9564 ; SSE2-NEXT: pand %xmm3, %xmm0
9565 ; SSE2-NEXT: pandn %xmm1, %xmm3
9566 ; SSE2-NEXT: por %xmm3, %xmm0
9569 ; SSE4-LABEL: test187:
9570 ; SSE4: # %bb.0: # %entry
9571 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9572 ; SSE4-NEXT: movdqa %xmm1, %xmm0
9573 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
9574 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9575 ; SSE4-NEXT: movapd %xmm1, %xmm0
9578 ; AVX1-LABEL: test187:
9579 ; AVX1: # %bb.0: # %entry
9580 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
9581 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9584 ; AVX2-LABEL: test187:
9585 ; AVX2: # %bb.0: # %entry
9586 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
9587 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9590 ; AVX512BW-LABEL: test187:
9591 ; AVX512BW: # %bb.0: # %entry
9592 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0
9593 ; AVX512BW-NEXT: retq
9595 %cmp = icmp sgt <2 x i64> %a, %b
9596 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9600 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
9601 ; SSE2-LABEL: test188:
9602 ; SSE2: # %bb.0: # %entry
9603 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9604 ; SSE2-NEXT: movdqa %xmm0, %xmm3
9605 ; SSE2-NEXT: pxor %xmm2, %xmm3
9606 ; SSE2-NEXT: pxor %xmm1, %xmm2
9607 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9608 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9609 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9610 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9611 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9612 ; SSE2-NEXT: pand %xmm5, %xmm2
9613 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9614 ; SSE2-NEXT: por %xmm2, %xmm3
9615 ; SSE2-NEXT: pand %xmm3, %xmm0
9616 ; SSE2-NEXT: pandn %xmm1, %xmm3
9617 ; SSE2-NEXT: por %xmm3, %xmm0
9620 ; SSE4-LABEL: test188:
9621 ; SSE4: # %bb.0: # %entry
9622 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9623 ; SSE4-NEXT: movdqa %xmm1, %xmm0
9624 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
9625 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9626 ; SSE4-NEXT: movapd %xmm1, %xmm0
9629 ; AVX1-LABEL: test188:
9630 ; AVX1: # %bb.0: # %entry
9631 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
9632 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9635 ; AVX2-LABEL: test188:
9636 ; AVX2: # %bb.0: # %entry
9637 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
9638 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9641 ; AVX512BW-LABEL: test188:
9642 ; AVX512BW: # %bb.0: # %entry
9643 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0
9644 ; AVX512BW-NEXT: retq
9646 %cmp = icmp sge <2 x i64> %a, %b
9647 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9651 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
9652 ; SSE2-LABEL: test189:
9653 ; SSE2: # %bb.0: # %entry
9654 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9655 ; SSE2-NEXT: movdqa %xmm1, %xmm3
9656 ; SSE2-NEXT: pxor %xmm2, %xmm3
9657 ; SSE2-NEXT: pxor %xmm0, %xmm2
9658 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9659 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9660 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9661 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9662 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9663 ; SSE2-NEXT: pand %xmm5, %xmm2
9664 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9665 ; SSE2-NEXT: por %xmm2, %xmm3
9666 ; SSE2-NEXT: pand %xmm3, %xmm0
9667 ; SSE2-NEXT: pandn %xmm1, %xmm3
9668 ; SSE2-NEXT: por %xmm3, %xmm0
9671 ; SSE4-LABEL: test189:
9672 ; SSE4: # %bb.0: # %entry
9673 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9674 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9675 ; SSE4-NEXT: movdqa %xmm1, %xmm3
9676 ; SSE4-NEXT: pxor %xmm0, %xmm3
9677 ; SSE4-NEXT: pxor %xmm2, %xmm0
9678 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
9679 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9680 ; SSE4-NEXT: movapd %xmm1, %xmm0
9683 ; AVX1-LABEL: test189:
9684 ; AVX1: # %bb.0: # %entry
9685 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9686 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
9687 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
9688 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9689 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9692 ; AVX2-LABEL: test189:
9693 ; AVX2: # %bb.0: # %entry
9694 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9695 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3
9696 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2
9697 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9698 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9701 ; AVX512BW-LABEL: test189:
9702 ; AVX512BW: # %bb.0: # %entry
9703 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
9704 ; AVX512BW-NEXT: retq
9706 %cmp = icmp ult <2 x i64> %a, %b
9707 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9711 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
9712 ; SSE2-LABEL: test190:
9713 ; SSE2: # %bb.0: # %entry
9714 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9715 ; SSE2-NEXT: movdqa %xmm1, %xmm3
9716 ; SSE2-NEXT: pxor %xmm2, %xmm3
9717 ; SSE2-NEXT: pxor %xmm0, %xmm2
9718 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9719 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9720 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9721 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9722 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9723 ; SSE2-NEXT: pand %xmm5, %xmm2
9724 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9725 ; SSE2-NEXT: por %xmm2, %xmm3
9726 ; SSE2-NEXT: pand %xmm3, %xmm0
9727 ; SSE2-NEXT: pandn %xmm1, %xmm3
9728 ; SSE2-NEXT: por %xmm3, %xmm0
9731 ; SSE4-LABEL: test190:
9732 ; SSE4: # %bb.0: # %entry
9733 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9734 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9735 ; SSE4-NEXT: movdqa %xmm1, %xmm3
9736 ; SSE4-NEXT: pxor %xmm0, %xmm3
9737 ; SSE4-NEXT: pxor %xmm2, %xmm0
9738 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
9739 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9740 ; SSE4-NEXT: movapd %xmm1, %xmm0
9743 ; AVX1-LABEL: test190:
9744 ; AVX1: # %bb.0: # %entry
9745 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9746 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
9747 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
9748 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9749 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9752 ; AVX2-LABEL: test190:
9753 ; AVX2: # %bb.0: # %entry
9754 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9755 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3
9756 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2
9757 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9758 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9761 ; AVX512BW-LABEL: test190:
9762 ; AVX512BW: # %bb.0: # %entry
9763 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
9764 ; AVX512BW-NEXT: retq
9766 %cmp = icmp ule <2 x i64> %a, %b
9767 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9771 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
9772 ; SSE2-LABEL: test191:
9773 ; SSE2: # %bb.0: # %entry
9774 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9775 ; SSE2-NEXT: movdqa %xmm0, %xmm3
9776 ; SSE2-NEXT: pxor %xmm2, %xmm3
9777 ; SSE2-NEXT: pxor %xmm1, %xmm2
9778 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9779 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9780 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9781 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9782 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9783 ; SSE2-NEXT: pand %xmm5, %xmm2
9784 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9785 ; SSE2-NEXT: por %xmm2, %xmm3
9786 ; SSE2-NEXT: pand %xmm3, %xmm0
9787 ; SSE2-NEXT: pandn %xmm1, %xmm3
9788 ; SSE2-NEXT: por %xmm3, %xmm0
9791 ; SSE4-LABEL: test191:
9792 ; SSE4: # %bb.0: # %entry
9793 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9794 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9795 ; SSE4-NEXT: movdqa %xmm2, %xmm3
9796 ; SSE4-NEXT: pxor %xmm0, %xmm3
9797 ; SSE4-NEXT: pxor %xmm1, %xmm0
9798 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
9799 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9800 ; SSE4-NEXT: movapd %xmm1, %xmm0
9803 ; AVX1-LABEL: test191:
9804 ; AVX1: # %bb.0: # %entry
9805 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9806 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
9807 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2
9808 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9809 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9812 ; AVX2-LABEL: test191:
9813 ; AVX2: # %bb.0: # %entry
9814 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9815 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3
9816 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2
9817 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9818 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9821 ; AVX512BW-LABEL: test191:
9822 ; AVX512BW: # %bb.0: # %entry
9823 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0
9824 ; AVX512BW-NEXT: retq
9826 %cmp = icmp ugt <2 x i64> %a, %b
9827 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9831 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
9832 ; SSE2-LABEL: test192:
9833 ; SSE2: # %bb.0: # %entry
9834 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9835 ; SSE2-NEXT: movdqa %xmm0, %xmm3
9836 ; SSE2-NEXT: pxor %xmm2, %xmm3
9837 ; SSE2-NEXT: pxor %xmm1, %xmm2
9838 ; SSE2-NEXT: movdqa %xmm2, %xmm4
9839 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
9840 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9841 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
9842 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9843 ; SSE2-NEXT: pand %xmm5, %xmm2
9844 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9845 ; SSE2-NEXT: por %xmm2, %xmm3
9846 ; SSE2-NEXT: pand %xmm3, %xmm0
9847 ; SSE2-NEXT: pandn %xmm1, %xmm3
9848 ; SSE2-NEXT: por %xmm3, %xmm0
9851 ; SSE4-LABEL: test192:
9852 ; SSE4: # %bb.0: # %entry
9853 ; SSE4-NEXT: movdqa %xmm0, %xmm2
9854 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9855 ; SSE4-NEXT: movdqa %xmm2, %xmm3
9856 ; SSE4-NEXT: pxor %xmm0, %xmm3
9857 ; SSE4-NEXT: pxor %xmm1, %xmm0
9858 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
9859 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
9860 ; SSE4-NEXT: movapd %xmm1, %xmm0
9863 ; AVX1-LABEL: test192:
9864 ; AVX1: # %bb.0: # %entry
9865 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9866 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
9867 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2
9868 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9869 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9872 ; AVX2-LABEL: test192:
9873 ; AVX2: # %bb.0: # %entry
9874 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9875 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3
9876 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2
9877 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
9878 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9881 ; AVX512BW-LABEL: test192:
9882 ; AVX512BW: # %bb.0: # %entry
9883 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0
9884 ; AVX512BW-NEXT: retq
9886 %cmp = icmp uge <2 x i64> %a, %b
9887 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a