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 %xmm0, %xmm2
38 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
39 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3
40 ; SSE2-NEXT: pxor %xmm2, %xmm3
41 ; SSE2-NEXT: pandn %xmm0, %xmm2
42 ; SSE2-NEXT: pandn %xmm1, %xmm3
43 ; SSE2-NEXT: por %xmm3, %xmm2
44 ; SSE2-NEXT: movdqa %xmm2, %xmm0
48 ; SSE4: # BB#0: # %entry
49 ; SSE4-NEXT: pminsb %xmm1, %xmm0
53 ; AVX: # BB#0: # %entry
54 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
57 %cmp = icmp sle <16 x i8> %a, %b
58 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
62 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
64 ; SSE2: # BB#0: # %entry
65 ; SSE2-NEXT: movdqa %xmm0, %xmm2
66 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
67 ; SSE2-NEXT: pand %xmm2, %xmm0
68 ; SSE2-NEXT: pandn %xmm1, %xmm2
69 ; SSE2-NEXT: por %xmm0, %xmm2
70 ; SSE2-NEXT: movdqa %xmm2, %xmm0
74 ; SSE4: # BB#0: # %entry
75 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0
79 ; AVX: # BB#0: # %entry
80 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
83 %cmp = icmp sgt <16 x i8> %a, %b
84 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
88 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
90 ; SSE2: # BB#0: # %entry
91 ; SSE2-NEXT: movdqa %xmm1, %xmm3
92 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm3
93 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
94 ; SSE2-NEXT: pxor %xmm3, %xmm2
95 ; SSE2-NEXT: pandn %xmm0, %xmm3
96 ; SSE2-NEXT: pandn %xmm1, %xmm2
97 ; SSE2-NEXT: por %xmm3, %xmm2
98 ; SSE2-NEXT: movdqa %xmm2, %xmm0
102 ; SSE4: # BB#0: # %entry
103 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0
107 ; AVX: # BB#0: # %entry
108 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
111 %cmp = icmp sge <16 x i8> %a, %b
112 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
116 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
118 ; SSE: # BB#0: # %entry
119 ; SSE-NEXT: pminub %xmm1, %xmm0
123 ; AVX: # BB#0: # %entry
124 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
127 %cmp = icmp ult <16 x i8> %a, %b
128 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
132 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
134 ; SSE: # BB#0: # %entry
135 ; SSE-NEXT: pminub %xmm1, %xmm0
139 ; AVX: # BB#0: # %entry
140 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
143 %cmp = icmp ule <16 x i8> %a, %b
144 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
148 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
150 ; SSE: # BB#0: # %entry
151 ; SSE-NEXT: pmaxub %xmm1, %xmm0
155 ; AVX: # BB#0: # %entry
156 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
159 %cmp = icmp ugt <16 x i8> %a, %b
160 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
164 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
166 ; SSE: # BB#0: # %entry
167 ; SSE-NEXT: pmaxub %xmm1, %xmm0
171 ; AVX: # BB#0: # %entry
172 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
175 %cmp = icmp uge <16 x i8> %a, %b
176 %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
180 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
182 ; SSE: # BB#0: # %entry
183 ; SSE-NEXT: pminsw %xmm1, %xmm0
187 ; AVX: # BB#0: # %entry
188 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
191 %cmp = icmp slt <8 x i16> %a, %b
192 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
196 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
198 ; SSE: # BB#0: # %entry
199 ; SSE-NEXT: pminsw %xmm1, %xmm0
203 ; AVX: # BB#0: # %entry
204 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
207 %cmp = icmp sle <8 x i16> %a, %b
208 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
212 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
214 ; SSE: # BB#0: # %entry
215 ; SSE-NEXT: pmaxsw %xmm1, %xmm0
219 ; AVX: # BB#0: # %entry
220 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
223 %cmp = icmp sgt <8 x i16> %a, %b
224 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
228 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
230 ; SSE: # BB#0: # %entry
231 ; SSE-NEXT: pmaxsw %xmm1, %xmm0
235 ; AVX: # BB#0: # %entry
236 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
239 %cmp = icmp sge <8 x i16> %a, %b
240 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
244 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
245 ; SSE2-LABEL: test13:
246 ; SSE2: # BB#0: # %entry
247 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
248 ; SSE2-NEXT: movdqa %xmm0, %xmm3
249 ; SSE2-NEXT: pxor %xmm2, %xmm3
250 ; SSE2-NEXT: pxor %xmm1, %xmm2
251 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2
252 ; SSE2-NEXT: pand %xmm2, %xmm0
253 ; SSE2-NEXT: pandn %xmm1, %xmm2
254 ; SSE2-NEXT: por %xmm2, %xmm0
257 ; SSE4-LABEL: test13:
258 ; SSE4: # BB#0: # %entry
259 ; SSE4-NEXT: pminuw %xmm1, %xmm0
263 ; AVX: # BB#0: # %entry
264 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
267 %cmp = icmp ult <8 x i16> %a, %b
268 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
272 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
273 ; SSE2-LABEL: test14:
274 ; SSE2: # BB#0: # %entry
275 ; SSE2-NEXT: movdqa %xmm0, %xmm2
276 ; SSE2-NEXT: psubusw %xmm1, %xmm2
277 ; SSE2-NEXT: pxor %xmm3, %xmm3
278 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3
279 ; SSE2-NEXT: pand %xmm3, %xmm0
280 ; SSE2-NEXT: pandn %xmm1, %xmm3
281 ; SSE2-NEXT: por %xmm3, %xmm0
284 ; SSE4-LABEL: test14:
285 ; SSE4: # BB#0: # %entry
286 ; SSE4-NEXT: pminuw %xmm1, %xmm0
290 ; AVX: # BB#0: # %entry
291 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
294 %cmp = icmp ule <8 x i16> %a, %b
295 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
299 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
300 ; SSE2-LABEL: test15:
301 ; SSE2: # BB#0: # %entry
302 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
303 ; SSE2-NEXT: movdqa %xmm1, %xmm3
304 ; SSE2-NEXT: pxor %xmm2, %xmm3
305 ; SSE2-NEXT: pxor %xmm0, %xmm2
306 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2
307 ; SSE2-NEXT: pand %xmm2, %xmm0
308 ; SSE2-NEXT: pandn %xmm1, %xmm2
309 ; SSE2-NEXT: por %xmm2, %xmm0
312 ; SSE4-LABEL: test15:
313 ; SSE4: # BB#0: # %entry
314 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0
318 ; AVX: # BB#0: # %entry
319 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
322 %cmp = icmp ugt <8 x i16> %a, %b
323 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
327 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
328 ; SSE2-LABEL: test16:
329 ; SSE2: # BB#0: # %entry
330 ; SSE2-NEXT: movdqa %xmm1, %xmm2
331 ; SSE2-NEXT: psubusw %xmm0, %xmm2
332 ; SSE2-NEXT: pxor %xmm3, %xmm3
333 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3
334 ; SSE2-NEXT: pand %xmm3, %xmm0
335 ; SSE2-NEXT: pandn %xmm1, %xmm3
336 ; SSE2-NEXT: por %xmm3, %xmm0
339 ; SSE4-LABEL: test16:
340 ; SSE4: # BB#0: # %entry
341 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0
345 ; AVX: # BB#0: # %entry
346 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
349 %cmp = icmp uge <8 x i16> %a, %b
350 %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
354 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
355 ; SSE2-LABEL: test17:
356 ; SSE2: # BB#0: # %entry
357 ; SSE2-NEXT: movdqa %xmm1, %xmm2
358 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
359 ; SSE2-NEXT: pand %xmm2, %xmm0
360 ; SSE2-NEXT: pandn %xmm1, %xmm2
361 ; SSE2-NEXT: por %xmm2, %xmm0
364 ; SSE4-LABEL: test17:
365 ; SSE4: # BB#0: # %entry
366 ; SSE4-NEXT: pminsd %xmm1, %xmm0
370 ; AVX: # BB#0: # %entry
371 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
374 %cmp = icmp slt <4 x i32> %a, %b
375 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
379 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
380 ; SSE2-LABEL: test18:
381 ; SSE2: # BB#0: # %entry
382 ; SSE2-NEXT: movdqa %xmm0, %xmm2
383 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
384 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3
385 ; SSE2-NEXT: pxor %xmm2, %xmm3
386 ; SSE2-NEXT: pandn %xmm0, %xmm2
387 ; SSE2-NEXT: pandn %xmm1, %xmm3
388 ; SSE2-NEXT: por %xmm3, %xmm2
389 ; SSE2-NEXT: movdqa %xmm2, %xmm0
392 ; SSE4-LABEL: test18:
393 ; SSE4: # BB#0: # %entry
394 ; SSE4-NEXT: pminsd %xmm1, %xmm0
398 ; AVX: # BB#0: # %entry
399 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
402 %cmp = icmp sle <4 x i32> %a, %b
403 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
407 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
408 ; SSE2-LABEL: test19:
409 ; SSE2: # BB#0: # %entry
410 ; SSE2-NEXT: movdqa %xmm0, %xmm2
411 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
412 ; SSE2-NEXT: pand %xmm2, %xmm0
413 ; SSE2-NEXT: pandn %xmm1, %xmm2
414 ; SSE2-NEXT: por %xmm0, %xmm2
415 ; SSE2-NEXT: movdqa %xmm2, %xmm0
418 ; SSE4-LABEL: test19:
419 ; SSE4: # BB#0: # %entry
420 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0
424 ; AVX: # BB#0: # %entry
425 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
428 %cmp = icmp sgt <4 x i32> %a, %b
429 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
433 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
434 ; SSE2-LABEL: test20:
435 ; SSE2: # BB#0: # %entry
436 ; SSE2-NEXT: movdqa %xmm1, %xmm3
437 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3
438 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
439 ; SSE2-NEXT: pxor %xmm3, %xmm2
440 ; SSE2-NEXT: pandn %xmm0, %xmm3
441 ; SSE2-NEXT: pandn %xmm1, %xmm2
442 ; SSE2-NEXT: por %xmm3, %xmm2
443 ; SSE2-NEXT: movdqa %xmm2, %xmm0
446 ; SSE4-LABEL: test20:
447 ; SSE4: # BB#0: # %entry
448 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0
452 ; AVX: # BB#0: # %entry
453 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
456 %cmp = icmp sge <4 x i32> %a, %b
457 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
461 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
462 ; SSE2-LABEL: test21:
463 ; SSE2: # BB#0: # %entry
464 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
465 ; SSE2-NEXT: movdqa %xmm0, %xmm3
466 ; SSE2-NEXT: pxor %xmm2, %xmm3
467 ; SSE2-NEXT: pxor %xmm1, %xmm2
468 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
469 ; SSE2-NEXT: pand %xmm2, %xmm0
470 ; SSE2-NEXT: pandn %xmm1, %xmm2
471 ; SSE2-NEXT: por %xmm2, %xmm0
474 ; SSE4-LABEL: test21:
475 ; SSE4: # BB#0: # %entry
476 ; SSE4-NEXT: pminud %xmm1, %xmm0
480 ; AVX: # BB#0: # %entry
481 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
484 %cmp = icmp ult <4 x i32> %a, %b
485 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
489 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
490 ; SSE2-LABEL: test22:
491 ; SSE2: # BB#0: # %entry
492 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
493 ; SSE2-NEXT: movdqa %xmm1, %xmm2
494 ; SSE2-NEXT: pxor %xmm3, %xmm2
495 ; SSE2-NEXT: pxor %xmm0, %xmm3
496 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
497 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
498 ; SSE2-NEXT: pxor %xmm3, %xmm2
499 ; SSE2-NEXT: pandn %xmm0, %xmm3
500 ; SSE2-NEXT: pandn %xmm1, %xmm2
501 ; SSE2-NEXT: por %xmm3, %xmm2
502 ; SSE2-NEXT: movdqa %xmm2, %xmm0
505 ; SSE4-LABEL: test22:
506 ; SSE4: # BB#0: # %entry
507 ; SSE4-NEXT: pminud %xmm1, %xmm0
511 ; AVX: # BB#0: # %entry
512 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
515 %cmp = icmp ule <4 x i32> %a, %b
516 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
520 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
521 ; SSE2-LABEL: test23:
522 ; SSE2: # BB#0: # %entry
523 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
524 ; SSE2-NEXT: movdqa %xmm1, %xmm3
525 ; SSE2-NEXT: pxor %xmm2, %xmm3
526 ; SSE2-NEXT: pxor %xmm0, %xmm2
527 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
528 ; SSE2-NEXT: pand %xmm2, %xmm0
529 ; SSE2-NEXT: pandn %xmm1, %xmm2
530 ; SSE2-NEXT: por %xmm2, %xmm0
533 ; SSE4-LABEL: test23:
534 ; SSE4: # BB#0: # %entry
535 ; SSE4-NEXT: pmaxud %xmm1, %xmm0
539 ; AVX: # BB#0: # %entry
540 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
543 %cmp = icmp ugt <4 x i32> %a, %b
544 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
548 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
549 ; SSE2-LABEL: test24:
550 ; SSE2: # BB#0: # %entry
551 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
552 ; SSE2-NEXT: movdqa %xmm0, %xmm2
553 ; SSE2-NEXT: pxor %xmm3, %xmm2
554 ; SSE2-NEXT: pxor %xmm1, %xmm3
555 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
556 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
557 ; SSE2-NEXT: pxor %xmm3, %xmm2
558 ; SSE2-NEXT: pandn %xmm0, %xmm3
559 ; SSE2-NEXT: pandn %xmm1, %xmm2
560 ; SSE2-NEXT: por %xmm3, %xmm2
561 ; SSE2-NEXT: movdqa %xmm2, %xmm0
564 ; SSE4-LABEL: test24:
565 ; SSE4: # BB#0: # %entry
566 ; SSE4-NEXT: pmaxud %xmm1, %xmm0
570 ; AVX: # BB#0: # %entry
571 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
574 %cmp = icmp uge <4 x i32> %a, %b
575 %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
579 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
580 ; SSE2-LABEL: test25:
581 ; SSE2: # BB#0: # %entry
582 ; SSE2-NEXT: movdqa %xmm3, %xmm4
583 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4
584 ; SSE2-NEXT: movdqa %xmm2, %xmm5
585 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm5
586 ; SSE2-NEXT: pand %xmm5, %xmm0
587 ; SSE2-NEXT: pandn %xmm2, %xmm5
588 ; SSE2-NEXT: por %xmm5, %xmm0
589 ; SSE2-NEXT: pand %xmm4, %xmm1
590 ; SSE2-NEXT: pandn %xmm3, %xmm4
591 ; SSE2-NEXT: por %xmm4, %xmm1
594 ; SSE4-LABEL: test25:
595 ; SSE4: # BB#0: # %entry
596 ; SSE4-NEXT: pminsb %xmm2, %xmm0
597 ; SSE4-NEXT: pminsb %xmm3, %xmm1
600 ; AVX1-LABEL: test25:
601 ; AVX1: # BB#0: # %entry
602 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
603 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
604 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
605 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
606 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
609 ; AVX2-LABEL: test25:
610 ; AVX2: # BB#0: # %entry
611 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
614 ; AVX512F-LABEL: test25:
615 ; AVX512F: # BB#0: # %entry
616 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0
619 %cmp = icmp slt <32 x i8> %a, %b
620 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
624 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
625 ; SSE2-LABEL: test26:
626 ; SSE2: # BB#0: # %entry
627 ; SSE2-NEXT: movdqa %xmm1, %xmm6
628 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm6
629 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7
630 ; SSE2-NEXT: movdqa %xmm6, %xmm4
631 ; SSE2-NEXT: pxor %xmm7, %xmm4
632 ; SSE2-NEXT: movdqa %xmm0, %xmm5
633 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5
634 ; SSE2-NEXT: pxor %xmm5, %xmm7
635 ; SSE2-NEXT: pandn %xmm0, %xmm5
636 ; SSE2-NEXT: pandn %xmm2, %xmm7
637 ; SSE2-NEXT: por %xmm7, %xmm5
638 ; SSE2-NEXT: pandn %xmm1, %xmm6
639 ; SSE2-NEXT: pandn %xmm3, %xmm4
640 ; SSE2-NEXT: por %xmm6, %xmm4
641 ; SSE2-NEXT: movdqa %xmm5, %xmm0
642 ; SSE2-NEXT: movdqa %xmm4, %xmm1
645 ; SSE4-LABEL: test26:
646 ; SSE4: # BB#0: # %entry
647 ; SSE4-NEXT: pminsb %xmm2, %xmm0
648 ; SSE4-NEXT: pminsb %xmm3, %xmm1
651 ; AVX1-LABEL: test26:
652 ; AVX1: # BB#0: # %entry
653 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
654 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
655 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
656 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
657 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
660 ; AVX2-LABEL: test26:
661 ; AVX2: # BB#0: # %entry
662 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
665 ; AVX512F-LABEL: test26:
666 ; AVX512F: # BB#0: # %entry
667 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0
670 %cmp = icmp sle <32 x i8> %a, %b
671 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
675 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
676 ; SSE2-LABEL: test27:
677 ; SSE2: # BB#0: # %entry
678 ; SSE2-NEXT: movdqa %xmm1, %xmm4
679 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4
680 ; SSE2-NEXT: movdqa %xmm0, %xmm5
681 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5
682 ; SSE2-NEXT: pand %xmm5, %xmm0
683 ; SSE2-NEXT: pandn %xmm2, %xmm5
684 ; SSE2-NEXT: por %xmm0, %xmm5
685 ; SSE2-NEXT: pand %xmm4, %xmm1
686 ; SSE2-NEXT: pandn %xmm3, %xmm4
687 ; SSE2-NEXT: por %xmm1, %xmm4
688 ; SSE2-NEXT: movdqa %xmm5, %xmm0
689 ; SSE2-NEXT: movdqa %xmm4, %xmm1
692 ; SSE4-LABEL: test27:
693 ; SSE4: # BB#0: # %entry
694 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0
695 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1
698 ; AVX1-LABEL: test27:
699 ; AVX1: # BB#0: # %entry
700 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
701 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
702 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
703 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
704 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
707 ; AVX2-LABEL: test27:
708 ; AVX2: # BB#0: # %entry
709 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
712 ; AVX512F-LABEL: test27:
713 ; AVX512F: # BB#0: # %entry
714 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
717 %cmp = icmp sgt <32 x i8> %a, %b
718 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
722 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
723 ; SSE2-LABEL: test28:
724 ; SSE2: # BB#0: # %entry
725 ; SSE2-NEXT: movdqa %xmm3, %xmm6
726 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm6
727 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
728 ; SSE2-NEXT: movdqa %xmm6, %xmm5
729 ; SSE2-NEXT: pxor %xmm4, %xmm5
730 ; SSE2-NEXT: movdqa %xmm2, %xmm7
731 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm7
732 ; SSE2-NEXT: pxor %xmm7, %xmm4
733 ; SSE2-NEXT: pandn %xmm0, %xmm7
734 ; SSE2-NEXT: pandn %xmm2, %xmm4
735 ; SSE2-NEXT: por %xmm7, %xmm4
736 ; SSE2-NEXT: pandn %xmm1, %xmm6
737 ; SSE2-NEXT: pandn %xmm3, %xmm5
738 ; SSE2-NEXT: por %xmm6, %xmm5
739 ; SSE2-NEXT: movdqa %xmm4, %xmm0
740 ; SSE2-NEXT: movdqa %xmm5, %xmm1
743 ; SSE4-LABEL: test28:
744 ; SSE4: # BB#0: # %entry
745 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0
746 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1
749 ; AVX1-LABEL: test28:
750 ; AVX1: # BB#0: # %entry
751 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
752 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
753 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
754 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
755 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
758 ; AVX2-LABEL: test28:
759 ; AVX2: # BB#0: # %entry
760 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
763 ; AVX512F-LABEL: test28:
764 ; AVX512F: # BB#0: # %entry
765 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
768 %cmp = icmp sge <32 x i8> %a, %b
769 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
773 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
775 ; SSE: # BB#0: # %entry
776 ; SSE-NEXT: pminub %xmm2, %xmm0
777 ; SSE-NEXT: pminub %xmm3, %xmm1
780 ; AVX1-LABEL: test29:
781 ; AVX1: # BB#0: # %entry
782 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
783 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
784 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
785 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
786 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
789 ; AVX2-LABEL: test29:
790 ; AVX2: # BB#0: # %entry
791 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
794 ; AVX512F-LABEL: test29:
795 ; AVX512F: # BB#0: # %entry
796 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0
799 %cmp = icmp ult <32 x i8> %a, %b
800 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
804 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
806 ; SSE: # BB#0: # %entry
807 ; SSE-NEXT: pminub %xmm2, %xmm0
808 ; SSE-NEXT: pminub %xmm3, %xmm1
811 ; AVX1-LABEL: test30:
812 ; AVX1: # BB#0: # %entry
813 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
814 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
815 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
816 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
817 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
820 ; AVX2-LABEL: test30:
821 ; AVX2: # BB#0: # %entry
822 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
825 ; AVX512F-LABEL: test30:
826 ; AVX512F: # BB#0: # %entry
827 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0
830 %cmp = icmp ule <32 x i8> %a, %b
831 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
835 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
837 ; SSE: # BB#0: # %entry
838 ; SSE-NEXT: pmaxub %xmm2, %xmm0
839 ; SSE-NEXT: pmaxub %xmm3, %xmm1
842 ; AVX1-LABEL: test31:
843 ; AVX1: # BB#0: # %entry
844 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
845 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
846 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
847 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
848 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
851 ; AVX2-LABEL: test31:
852 ; AVX2: # BB#0: # %entry
853 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
856 ; AVX512F-LABEL: test31:
857 ; AVX512F: # BB#0: # %entry
858 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
861 %cmp = icmp ugt <32 x i8> %a, %b
862 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
866 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
868 ; SSE: # BB#0: # %entry
869 ; SSE-NEXT: pmaxub %xmm2, %xmm0
870 ; SSE-NEXT: pmaxub %xmm3, %xmm1
873 ; AVX1-LABEL: test32:
874 ; AVX1: # BB#0: # %entry
875 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
876 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
877 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
878 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
879 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
882 ; AVX2-LABEL: test32:
883 ; AVX2: # BB#0: # %entry
884 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
887 ; AVX512F-LABEL: test32:
888 ; AVX512F: # BB#0: # %entry
889 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
892 %cmp = icmp uge <32 x i8> %a, %b
893 %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
897 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
899 ; SSE: # BB#0: # %entry
900 ; SSE-NEXT: pminsw %xmm2, %xmm0
901 ; SSE-NEXT: pminsw %xmm3, %xmm1
904 ; AVX1-LABEL: test33:
905 ; AVX1: # BB#0: # %entry
906 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
907 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
908 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
909 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
910 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
913 ; AVX2-LABEL: test33:
914 ; AVX2: # BB#0: # %entry
915 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
918 ; AVX512F-LABEL: test33:
919 ; AVX512F: # BB#0: # %entry
920 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0
923 %cmp = icmp slt <16 x i16> %a, %b
924 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
928 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
930 ; SSE: # BB#0: # %entry
931 ; SSE-NEXT: pminsw %xmm2, %xmm0
932 ; SSE-NEXT: pminsw %xmm3, %xmm1
935 ; AVX1-LABEL: test34:
936 ; AVX1: # BB#0: # %entry
937 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
938 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
939 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
940 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
941 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
944 ; AVX2-LABEL: test34:
945 ; AVX2: # BB#0: # %entry
946 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
949 ; AVX512F-LABEL: test34:
950 ; AVX512F: # BB#0: # %entry
951 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0
954 %cmp = icmp sle <16 x i16> %a, %b
955 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
959 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
961 ; SSE: # BB#0: # %entry
962 ; SSE-NEXT: pmaxsw %xmm2, %xmm0
963 ; SSE-NEXT: pmaxsw %xmm3, %xmm1
966 ; AVX1-LABEL: test35:
967 ; AVX1: # BB#0: # %entry
968 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
969 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
970 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
971 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
972 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
975 ; AVX2-LABEL: test35:
976 ; AVX2: # BB#0: # %entry
977 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
980 ; AVX512F-LABEL: test35:
981 ; AVX512F: # BB#0: # %entry
982 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
985 %cmp = icmp sgt <16 x i16> %a, %b
986 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
990 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
992 ; SSE: # BB#0: # %entry
993 ; SSE-NEXT: pmaxsw %xmm2, %xmm0
994 ; SSE-NEXT: pmaxsw %xmm3, %xmm1
997 ; AVX1-LABEL: test36:
998 ; AVX1: # BB#0: # %entry
999 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1000 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1001 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
1002 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
1003 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1006 ; AVX2-LABEL: test36:
1007 ; AVX2: # BB#0: # %entry
1008 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
1011 ; AVX512F-LABEL: test36:
1012 ; AVX512F: # BB#0: # %entry
1013 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
1014 ; AVX512F-NEXT: retq
1016 %cmp = icmp sge <16 x i16> %a, %b
1017 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1021 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
1022 ; SSE2-LABEL: test37:
1023 ; SSE2: # BB#0: # %entry
1024 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1025 ; SSE2-NEXT: movdqa %xmm1, %xmm5
1026 ; SSE2-NEXT: pxor %xmm4, %xmm5
1027 ; SSE2-NEXT: movdqa %xmm3, %xmm6
1028 ; SSE2-NEXT: pxor %xmm4, %xmm6
1029 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm6
1030 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1031 ; SSE2-NEXT: pxor %xmm4, %xmm5
1032 ; SSE2-NEXT: pxor %xmm2, %xmm4
1033 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm4
1034 ; SSE2-NEXT: pand %xmm4, %xmm0
1035 ; SSE2-NEXT: pandn %xmm2, %xmm4
1036 ; SSE2-NEXT: por %xmm4, %xmm0
1037 ; SSE2-NEXT: pand %xmm6, %xmm1
1038 ; SSE2-NEXT: pandn %xmm3, %xmm6
1039 ; SSE2-NEXT: por %xmm6, %xmm1
1042 ; SSE4-LABEL: test37:
1043 ; SSE4: # BB#0: # %entry
1044 ; SSE4-NEXT: pminuw %xmm2, %xmm0
1045 ; SSE4-NEXT: pminuw %xmm3, %xmm1
1048 ; AVX1-LABEL: test37:
1049 ; AVX1: # BB#0: # %entry
1050 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1051 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1052 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
1053 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1054 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1057 ; AVX2-LABEL: test37:
1058 ; AVX2: # BB#0: # %entry
1059 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1062 ; AVX512F-LABEL: test37:
1063 ; AVX512F: # BB#0: # %entry
1064 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1065 ; AVX512F-NEXT: retq
1067 %cmp = icmp ult <16 x i16> %a, %b
1068 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1072 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1073 ; SSE2-LABEL: test38:
1074 ; SSE2: # BB#0: # %entry
1075 ; SSE2-NEXT: movdqa %xmm1, %xmm4
1076 ; SSE2-NEXT: psubusw %xmm3, %xmm4
1077 ; SSE2-NEXT: pxor %xmm6, %xmm6
1078 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4
1079 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1080 ; SSE2-NEXT: psubusw %xmm2, %xmm5
1081 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5
1082 ; SSE2-NEXT: pand %xmm5, %xmm0
1083 ; SSE2-NEXT: pandn %xmm2, %xmm5
1084 ; SSE2-NEXT: por %xmm0, %xmm5
1085 ; SSE2-NEXT: pand %xmm4, %xmm1
1086 ; SSE2-NEXT: pandn %xmm3, %xmm4
1087 ; SSE2-NEXT: por %xmm1, %xmm4
1088 ; SSE2-NEXT: movdqa %xmm5, %xmm0
1089 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1092 ; SSE4-LABEL: test38:
1093 ; SSE4: # BB#0: # %entry
1094 ; SSE4-NEXT: pminuw %xmm2, %xmm0
1095 ; SSE4-NEXT: pminuw %xmm3, %xmm1
1098 ; AVX1-LABEL: test38:
1099 ; AVX1: # BB#0: # %entry
1100 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1101 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1102 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
1103 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1104 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1107 ; AVX2-LABEL: test38:
1108 ; AVX2: # BB#0: # %entry
1109 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1112 ; AVX512F-LABEL: test38:
1113 ; AVX512F: # BB#0: # %entry
1114 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1115 ; AVX512F-NEXT: retq
1117 %cmp = icmp ule <16 x i16> %a, %b
1118 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1122 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1123 ; SSE2-LABEL: test39:
1124 ; SSE2: # BB#0: # %entry
1125 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1126 ; SSE2-NEXT: movdqa %xmm3, %xmm6
1127 ; SSE2-NEXT: pxor %xmm5, %xmm6
1128 ; SSE2-NEXT: movdqa %xmm1, %xmm4
1129 ; SSE2-NEXT: pxor %xmm5, %xmm4
1130 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4
1131 ; SSE2-NEXT: movdqa %xmm2, %xmm6
1132 ; SSE2-NEXT: pxor %xmm5, %xmm6
1133 ; SSE2-NEXT: pxor %xmm0, %xmm5
1134 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5
1135 ; SSE2-NEXT: pand %xmm5, %xmm0
1136 ; SSE2-NEXT: pandn %xmm2, %xmm5
1137 ; SSE2-NEXT: por %xmm5, %xmm0
1138 ; SSE2-NEXT: pand %xmm4, %xmm1
1139 ; SSE2-NEXT: pandn %xmm3, %xmm4
1140 ; SSE2-NEXT: por %xmm1, %xmm4
1141 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1144 ; SSE4-LABEL: test39:
1145 ; SSE4: # BB#0: # %entry
1146 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0
1147 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1
1150 ; AVX1-LABEL: test39:
1151 ; AVX1: # BB#0: # %entry
1152 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1153 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1154 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
1155 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
1156 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1159 ; AVX2-LABEL: test39:
1160 ; AVX2: # BB#0: # %entry
1161 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
1164 ; AVX512F-LABEL: test39:
1165 ; AVX512F: # BB#0: # %entry
1166 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
1167 ; AVX512F-NEXT: retq
1169 %cmp = icmp ugt <16 x i16> %a, %b
1170 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1174 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1175 ; SSE2-LABEL: test40:
1176 ; SSE2: # BB#0: # %entry
1177 ; SSE2-NEXT: movdqa %xmm3, %xmm4
1178 ; SSE2-NEXT: psubusw %xmm1, %xmm4
1179 ; SSE2-NEXT: pxor %xmm5, %xmm5
1180 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm4
1181 ; SSE2-NEXT: movdqa %xmm2, %xmm6
1182 ; SSE2-NEXT: psubusw %xmm0, %xmm6
1183 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm6
1184 ; SSE2-NEXT: pand %xmm6, %xmm0
1185 ; SSE2-NEXT: pandn %xmm2, %xmm6
1186 ; SSE2-NEXT: por %xmm6, %xmm0
1187 ; SSE2-NEXT: pand %xmm4, %xmm1
1188 ; SSE2-NEXT: pandn %xmm3, %xmm4
1189 ; SSE2-NEXT: por %xmm4, %xmm1
1192 ; SSE4-LABEL: test40:
1193 ; SSE4: # BB#0: # %entry
1194 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0
1195 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1
1198 ; AVX1-LABEL: test40:
1199 ; AVX1: # BB#0: # %entry
1200 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1201 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1202 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
1203 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
1204 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1207 ; AVX2-LABEL: test40:
1208 ; AVX2: # BB#0: # %entry
1209 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
1212 ; AVX512F-LABEL: test40:
1213 ; AVX512F: # BB#0: # %entry
1214 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
1215 ; AVX512F-NEXT: retq
1217 %cmp = icmp uge <16 x i16> %a, %b
1218 %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1222 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1223 ; SSE2-LABEL: test41:
1224 ; SSE2: # BB#0: # %entry
1225 ; SSE2-NEXT: movdqa %xmm3, %xmm4
1226 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
1227 ; SSE2-NEXT: movdqa %xmm2, %xmm5
1228 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5
1229 ; SSE2-NEXT: pand %xmm5, %xmm0
1230 ; SSE2-NEXT: pandn %xmm2, %xmm5
1231 ; SSE2-NEXT: por %xmm5, %xmm0
1232 ; SSE2-NEXT: pand %xmm4, %xmm1
1233 ; SSE2-NEXT: pandn %xmm3, %xmm4
1234 ; SSE2-NEXT: por %xmm4, %xmm1
1237 ; SSE4-LABEL: test41:
1238 ; SSE4: # BB#0: # %entry
1239 ; SSE4-NEXT: pminsd %xmm2, %xmm0
1240 ; SSE4-NEXT: pminsd %xmm3, %xmm1
1243 ; AVX1-LABEL: test41:
1244 ; AVX1: # BB#0: # %entry
1245 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1246 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1247 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
1248 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
1249 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1252 ; AVX2-LABEL: test41:
1253 ; AVX2: # BB#0: # %entry
1254 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1257 ; AVX512F-LABEL: test41:
1258 ; AVX512F: # BB#0: # %entry
1259 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1260 ; AVX512F-NEXT: retq
1262 %cmp = icmp slt <8 x i32> %a, %b
1263 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1267 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1268 ; SSE2-LABEL: test42:
1269 ; SSE2: # BB#0: # %entry
1270 ; SSE2-NEXT: movdqa %xmm1, %xmm6
1271 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6
1272 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7
1273 ; SSE2-NEXT: movdqa %xmm6, %xmm4
1274 ; SSE2-NEXT: pxor %xmm7, %xmm4
1275 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1276 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
1277 ; SSE2-NEXT: pxor %xmm5, %xmm7
1278 ; SSE2-NEXT: pandn %xmm0, %xmm5
1279 ; SSE2-NEXT: pandn %xmm2, %xmm7
1280 ; SSE2-NEXT: por %xmm7, %xmm5
1281 ; SSE2-NEXT: pandn %xmm1, %xmm6
1282 ; SSE2-NEXT: pandn %xmm3, %xmm4
1283 ; SSE2-NEXT: por %xmm6, %xmm4
1284 ; SSE2-NEXT: movdqa %xmm5, %xmm0
1285 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1288 ; SSE4-LABEL: test42:
1289 ; SSE4: # BB#0: # %entry
1290 ; SSE4-NEXT: pminsd %xmm2, %xmm0
1291 ; SSE4-NEXT: pminsd %xmm3, %xmm1
1294 ; AVX1-LABEL: test42:
1295 ; AVX1: # BB#0: # %entry
1296 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1297 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1298 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
1299 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
1300 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1303 ; AVX2-LABEL: test42:
1304 ; AVX2: # BB#0: # %entry
1305 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1308 ; AVX512F-LABEL: test42:
1309 ; AVX512F: # BB#0: # %entry
1310 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
1311 ; AVX512F-NEXT: retq
1313 %cmp = icmp sle <8 x i32> %a, %b
1314 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1318 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1319 ; SSE2-LABEL: test43:
1320 ; SSE2: # BB#0: # %entry
1321 ; SSE2-NEXT: movdqa %xmm1, %xmm4
1322 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
1323 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1324 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
1325 ; SSE2-NEXT: pand %xmm5, %xmm0
1326 ; SSE2-NEXT: pandn %xmm2, %xmm5
1327 ; SSE2-NEXT: por %xmm0, %xmm5
1328 ; SSE2-NEXT: pand %xmm4, %xmm1
1329 ; SSE2-NEXT: pandn %xmm3, %xmm4
1330 ; SSE2-NEXT: por %xmm1, %xmm4
1331 ; SSE2-NEXT: movdqa %xmm5, %xmm0
1332 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1335 ; SSE4-LABEL: test43:
1336 ; SSE4: # BB#0: # %entry
1337 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0
1338 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1
1341 ; AVX1-LABEL: test43:
1342 ; AVX1: # BB#0: # %entry
1343 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1344 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1345 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
1346 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
1347 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1350 ; AVX2-LABEL: test43:
1351 ; AVX2: # BB#0: # %entry
1352 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1355 ; AVX512F-LABEL: test43:
1356 ; AVX512F: # BB#0: # %entry
1357 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1358 ; AVX512F-NEXT: retq
1360 %cmp = icmp sgt <8 x i32> %a, %b
1361 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1365 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1366 ; SSE2-LABEL: test44:
1367 ; SSE2: # BB#0: # %entry
1368 ; SSE2-NEXT: movdqa %xmm3, %xmm6
1369 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6
1370 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
1371 ; SSE2-NEXT: movdqa %xmm6, %xmm5
1372 ; SSE2-NEXT: pxor %xmm4, %xmm5
1373 ; SSE2-NEXT: movdqa %xmm2, %xmm7
1374 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm7
1375 ; SSE2-NEXT: pxor %xmm7, %xmm4
1376 ; SSE2-NEXT: pandn %xmm0, %xmm7
1377 ; SSE2-NEXT: pandn %xmm2, %xmm4
1378 ; SSE2-NEXT: por %xmm7, %xmm4
1379 ; SSE2-NEXT: pandn %xmm1, %xmm6
1380 ; SSE2-NEXT: pandn %xmm3, %xmm5
1381 ; SSE2-NEXT: por %xmm6, %xmm5
1382 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1383 ; SSE2-NEXT: movdqa %xmm5, %xmm1
1386 ; SSE4-LABEL: test44:
1387 ; SSE4: # BB#0: # %entry
1388 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0
1389 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1
1392 ; AVX1-LABEL: test44:
1393 ; AVX1: # BB#0: # %entry
1394 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1395 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1396 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
1397 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
1398 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1401 ; AVX2-LABEL: test44:
1402 ; AVX2: # BB#0: # %entry
1403 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1406 ; AVX512F-LABEL: test44:
1407 ; AVX512F: # BB#0: # %entry
1408 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
1409 ; AVX512F-NEXT: retq
1411 %cmp = icmp sge <8 x i32> %a, %b
1412 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1416 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1417 ; SSE2-LABEL: test45:
1418 ; SSE2: # BB#0: # %entry
1419 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1420 ; SSE2-NEXT: movdqa %xmm1, %xmm5
1421 ; SSE2-NEXT: pxor %xmm4, %xmm5
1422 ; SSE2-NEXT: movdqa %xmm3, %xmm6
1423 ; SSE2-NEXT: pxor %xmm4, %xmm6
1424 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
1425 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1426 ; SSE2-NEXT: pxor %xmm4, %xmm5
1427 ; SSE2-NEXT: pxor %xmm2, %xmm4
1428 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
1429 ; SSE2-NEXT: pand %xmm4, %xmm0
1430 ; SSE2-NEXT: pandn %xmm2, %xmm4
1431 ; SSE2-NEXT: por %xmm4, %xmm0
1432 ; SSE2-NEXT: pand %xmm6, %xmm1
1433 ; SSE2-NEXT: pandn %xmm3, %xmm6
1434 ; SSE2-NEXT: por %xmm6, %xmm1
1437 ; SSE4-LABEL: test45:
1438 ; SSE4: # BB#0: # %entry
1439 ; SSE4-NEXT: pminud %xmm2, %xmm0
1440 ; SSE4-NEXT: pminud %xmm3, %xmm1
1443 ; AVX1-LABEL: test45:
1444 ; AVX1: # BB#0: # %entry
1445 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1446 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1447 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
1448 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
1449 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1452 ; AVX2-LABEL: test45:
1453 ; AVX2: # BB#0: # %entry
1454 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
1457 ; AVX512F-LABEL: test45:
1458 ; AVX512F: # BB#0: # %entry
1459 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0
1460 ; AVX512F-NEXT: retq
1462 %cmp = icmp ult <8 x i32> %a, %b
1463 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1467 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1468 ; SSE2-LABEL: test46:
1469 ; SSE2: # BB#0: # %entry
1470 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
1471 ; SSE2-NEXT: movdqa %xmm3, %xmm4
1472 ; SSE2-NEXT: pxor %xmm6, %xmm4
1473 ; SSE2-NEXT: movdqa %xmm1, %xmm7
1474 ; SSE2-NEXT: pxor %xmm6, %xmm7
1475 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
1476 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
1477 ; SSE2-NEXT: movdqa %xmm7, %xmm5
1478 ; SSE2-NEXT: pxor %xmm4, %xmm5
1479 ; SSE2-NEXT: movdqa %xmm2, %xmm8
1480 ; SSE2-NEXT: pxor %xmm6, %xmm8
1481 ; SSE2-NEXT: pxor %xmm0, %xmm6
1482 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
1483 ; SSE2-NEXT: pxor %xmm6, %xmm4
1484 ; SSE2-NEXT: pandn %xmm0, %xmm6
1485 ; SSE2-NEXT: pandn %xmm2, %xmm4
1486 ; SSE2-NEXT: por %xmm6, %xmm4
1487 ; SSE2-NEXT: pandn %xmm1, %xmm7
1488 ; SSE2-NEXT: pandn %xmm3, %xmm5
1489 ; SSE2-NEXT: por %xmm7, %xmm5
1490 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1491 ; SSE2-NEXT: movdqa %xmm5, %xmm1
1494 ; SSE4-LABEL: test46:
1495 ; SSE4: # BB#0: # %entry
1496 ; SSE4-NEXT: pminud %xmm2, %xmm0
1497 ; SSE4-NEXT: pminud %xmm3, %xmm1
1500 ; AVX1-LABEL: test46:
1501 ; AVX1: # BB#0: # %entry
1502 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1503 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1504 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
1505 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
1506 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1509 ; AVX2-LABEL: test46:
1510 ; AVX2: # BB#0: # %entry
1511 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
1514 ; AVX512F-LABEL: test46:
1515 ; AVX512F: # BB#0: # %entry
1516 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0
1517 ; AVX512F-NEXT: retq
1519 %cmp = icmp ule <8 x i32> %a, %b
1520 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1524 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1525 ; SSE2-LABEL: test47:
1526 ; SSE2: # BB#0: # %entry
1527 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1528 ; SSE2-NEXT: movdqa %xmm3, %xmm6
1529 ; SSE2-NEXT: pxor %xmm5, %xmm6
1530 ; SSE2-NEXT: movdqa %xmm1, %xmm4
1531 ; SSE2-NEXT: pxor %xmm5, %xmm4
1532 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
1533 ; SSE2-NEXT: movdqa %xmm2, %xmm6
1534 ; SSE2-NEXT: pxor %xmm5, %xmm6
1535 ; SSE2-NEXT: pxor %xmm0, %xmm5
1536 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
1537 ; SSE2-NEXT: pand %xmm5, %xmm0
1538 ; SSE2-NEXT: pandn %xmm2, %xmm5
1539 ; SSE2-NEXT: por %xmm5, %xmm0
1540 ; SSE2-NEXT: pand %xmm4, %xmm1
1541 ; SSE2-NEXT: pandn %xmm3, %xmm4
1542 ; SSE2-NEXT: por %xmm1, %xmm4
1543 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1546 ; SSE4-LABEL: test47:
1547 ; SSE4: # BB#0: # %entry
1548 ; SSE4-NEXT: pmaxud %xmm2, %xmm0
1549 ; SSE4-NEXT: pmaxud %xmm3, %xmm1
1552 ; AVX1-LABEL: test47:
1553 ; AVX1: # BB#0: # %entry
1554 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1555 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1556 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
1557 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
1558 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1561 ; AVX2-LABEL: test47:
1562 ; AVX2: # BB#0: # %entry
1563 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
1566 ; AVX512F-LABEL: test47:
1567 ; AVX512F: # BB#0: # %entry
1568 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
1569 ; AVX512F-NEXT: retq
1571 %cmp = icmp ugt <8 x i32> %a, %b
1572 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1576 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1577 ; SSE2-LABEL: test48:
1578 ; SSE2: # BB#0: # %entry
1579 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
1580 ; SSE2-NEXT: movdqa %xmm1, %xmm4
1581 ; SSE2-NEXT: pxor %xmm6, %xmm4
1582 ; SSE2-NEXT: movdqa %xmm3, %xmm7
1583 ; SSE2-NEXT: pxor %xmm6, %xmm7
1584 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
1585 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
1586 ; SSE2-NEXT: movdqa %xmm7, %xmm5
1587 ; SSE2-NEXT: pxor %xmm4, %xmm5
1588 ; SSE2-NEXT: movdqa %xmm0, %xmm8
1589 ; SSE2-NEXT: pxor %xmm6, %xmm8
1590 ; SSE2-NEXT: pxor %xmm2, %xmm6
1591 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
1592 ; SSE2-NEXT: pxor %xmm6, %xmm4
1593 ; SSE2-NEXT: pandn %xmm0, %xmm6
1594 ; SSE2-NEXT: pandn %xmm2, %xmm4
1595 ; SSE2-NEXT: por %xmm6, %xmm4
1596 ; SSE2-NEXT: pandn %xmm1, %xmm7
1597 ; SSE2-NEXT: pandn %xmm3, %xmm5
1598 ; SSE2-NEXT: por %xmm7, %xmm5
1599 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1600 ; SSE2-NEXT: movdqa %xmm5, %xmm1
1603 ; SSE4-LABEL: test48:
1604 ; SSE4: # BB#0: # %entry
1605 ; SSE4-NEXT: pmaxud %xmm2, %xmm0
1606 ; SSE4-NEXT: pmaxud %xmm3, %xmm1
1609 ; AVX1-LABEL: test48:
1610 ; AVX1: # BB#0: # %entry
1611 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1612 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1613 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
1614 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
1615 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1618 ; AVX2-LABEL: test48:
1619 ; AVX2: # BB#0: # %entry
1620 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
1623 ; AVX512F-LABEL: test48:
1624 ; AVX512F: # BB#0: # %entry
1625 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
1626 ; AVX512F-NEXT: retq
1628 %cmp = icmp uge <8 x i32> %a, %b
1629 %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1633 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1634 ; SSE2-LABEL: test49:
1635 ; SSE2: # BB#0: # %entry
1636 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1637 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm2
1638 ; SSE2-NEXT: pand %xmm2, %xmm1
1639 ; SSE2-NEXT: pandn %xmm0, %xmm2
1640 ; SSE2-NEXT: por %xmm1, %xmm2
1641 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1644 ; SSE4-LABEL: test49:
1645 ; SSE4: # BB#0: # %entry
1646 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0
1649 ; AVX-LABEL: test49:
1650 ; AVX: # BB#0: # %entry
1651 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
1654 %cmp = icmp slt <16 x i8> %a, %b
1655 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1659 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1660 ; SSE2-LABEL: test50:
1661 ; SSE2: # BB#0: # %entry
1662 ; SSE2-NEXT: movdqa %xmm0, %xmm2
1663 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
1664 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3
1665 ; SSE2-NEXT: pxor %xmm2, %xmm3
1666 ; SSE2-NEXT: pandn %xmm1, %xmm2
1667 ; SSE2-NEXT: pandn %xmm0, %xmm3
1668 ; SSE2-NEXT: por %xmm3, %xmm2
1669 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1672 ; SSE4-LABEL: test50:
1673 ; SSE4: # BB#0: # %entry
1674 ; SSE4-NEXT: pmaxsb %xmm1, %xmm0
1677 ; AVX-LABEL: test50:
1678 ; AVX: # BB#0: # %entry
1679 ; AVX-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
1682 %cmp = icmp sle <16 x i8> %a, %b
1683 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1687 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1688 ; SSE2-LABEL: test51:
1689 ; SSE2: # BB#0: # %entry
1690 ; SSE2-NEXT: movdqa %xmm0, %xmm2
1691 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm2
1692 ; SSE2-NEXT: pand %xmm2, %xmm1
1693 ; SSE2-NEXT: pandn %xmm0, %xmm2
1694 ; SSE2-NEXT: por %xmm1, %xmm2
1695 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1698 ; SSE4-LABEL: test51:
1699 ; SSE4: # BB#0: # %entry
1700 ; SSE4-NEXT: pminsb %xmm1, %xmm0
1703 ; AVX-LABEL: test51:
1704 ; AVX: # BB#0: # %entry
1705 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
1708 %cmp = icmp sgt <16 x i8> %a, %b
1709 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1713 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1714 ; SSE2-LABEL: test52:
1715 ; SSE2: # BB#0: # %entry
1716 ; SSE2-NEXT: movdqa %xmm1, %xmm3
1717 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm3
1718 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
1719 ; SSE2-NEXT: pxor %xmm3, %xmm2
1720 ; SSE2-NEXT: pandn %xmm1, %xmm3
1721 ; SSE2-NEXT: pandn %xmm0, %xmm2
1722 ; SSE2-NEXT: por %xmm3, %xmm2
1723 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1726 ; SSE4-LABEL: test52:
1727 ; SSE4: # BB#0: # %entry
1728 ; SSE4-NEXT: pminsb %xmm1, %xmm0
1731 ; AVX-LABEL: test52:
1732 ; AVX: # BB#0: # %entry
1733 ; AVX-NEXT: vpminsb %xmm1, %xmm0, %xmm0
1736 %cmp = icmp sge <16 x i8> %a, %b
1737 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1741 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
1742 ; SSE-LABEL: test53:
1743 ; SSE: # BB#0: # %entry
1744 ; SSE-NEXT: pmaxub %xmm1, %xmm0
1747 ; AVX-LABEL: test53:
1748 ; AVX: # BB#0: # %entry
1749 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
1752 %cmp = icmp ult <16 x i8> %a, %b
1753 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1757 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
1758 ; SSE-LABEL: test54:
1759 ; SSE: # BB#0: # %entry
1760 ; SSE-NEXT: pmaxub %xmm1, %xmm0
1763 ; AVX-LABEL: test54:
1764 ; AVX: # BB#0: # %entry
1765 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
1768 %cmp = icmp ule <16 x i8> %a, %b
1769 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1773 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
1774 ; SSE-LABEL: test55:
1775 ; SSE: # BB#0: # %entry
1776 ; SSE-NEXT: pminub %xmm1, %xmm0
1779 ; AVX-LABEL: test55:
1780 ; AVX: # BB#0: # %entry
1781 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
1784 %cmp = icmp ugt <16 x i8> %a, %b
1785 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1789 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1790 ; SSE-LABEL: test56:
1791 ; SSE: # BB#0: # %entry
1792 ; SSE-NEXT: pminub %xmm1, %xmm0
1795 ; AVX-LABEL: test56:
1796 ; AVX: # BB#0: # %entry
1797 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
1800 %cmp = icmp uge <16 x i8> %a, %b
1801 %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1805 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1806 ; SSE-LABEL: test57:
1807 ; SSE: # BB#0: # %entry
1808 ; SSE-NEXT: pmaxsw %xmm1, %xmm0
1811 ; AVX-LABEL: test57:
1812 ; AVX: # BB#0: # %entry
1813 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
1816 %cmp = icmp slt <8 x i16> %a, %b
1817 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1821 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
1822 ; SSE-LABEL: test58:
1823 ; SSE: # BB#0: # %entry
1824 ; SSE-NEXT: pmaxsw %xmm1, %xmm0
1827 ; AVX-LABEL: test58:
1828 ; AVX: # BB#0: # %entry
1829 ; AVX-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
1832 %cmp = icmp sle <8 x i16> %a, %b
1833 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1837 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
1838 ; SSE-LABEL: test59:
1839 ; SSE: # BB#0: # %entry
1840 ; SSE-NEXT: pminsw %xmm1, %xmm0
1843 ; AVX-LABEL: test59:
1844 ; AVX: # BB#0: # %entry
1845 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
1848 %cmp = icmp sgt <8 x i16> %a, %b
1849 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1853 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
1854 ; SSE-LABEL: test60:
1855 ; SSE: # BB#0: # %entry
1856 ; SSE-NEXT: pminsw %xmm1, %xmm0
1859 ; AVX-LABEL: test60:
1860 ; AVX: # BB#0: # %entry
1861 ; AVX-NEXT: vpminsw %xmm1, %xmm0, %xmm0
1864 %cmp = icmp sge <8 x i16> %a, %b
1865 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1869 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1870 ; SSE2-LABEL: test61:
1871 ; SSE2: # BB#0: # %entry
1872 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1873 ; SSE2-NEXT: movdqa %xmm0, %xmm3
1874 ; SSE2-NEXT: pxor %xmm2, %xmm3
1875 ; SSE2-NEXT: pxor %xmm1, %xmm2
1876 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2
1877 ; SSE2-NEXT: pand %xmm2, %xmm1
1878 ; SSE2-NEXT: pandn %xmm0, %xmm2
1879 ; SSE2-NEXT: por %xmm1, %xmm2
1880 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1883 ; SSE4-LABEL: test61:
1884 ; SSE4: # BB#0: # %entry
1885 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0
1888 ; AVX-LABEL: test61:
1889 ; AVX: # BB#0: # %entry
1890 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
1893 %cmp = icmp ult <8 x i16> %a, %b
1894 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1898 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1899 ; SSE2-LABEL: test62:
1900 ; SSE2: # BB#0: # %entry
1901 ; SSE2-NEXT: movdqa %xmm0, %xmm3
1902 ; SSE2-NEXT: psubusw %xmm1, %xmm3
1903 ; SSE2-NEXT: pxor %xmm2, %xmm2
1904 ; SSE2-NEXT: pcmpeqw %xmm3, %xmm2
1905 ; SSE2-NEXT: pand %xmm2, %xmm1
1906 ; SSE2-NEXT: pandn %xmm0, %xmm2
1907 ; SSE2-NEXT: por %xmm1, %xmm2
1908 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1911 ; SSE4-LABEL: test62:
1912 ; SSE4: # BB#0: # %entry
1913 ; SSE4-NEXT: pmaxuw %xmm1, %xmm0
1916 ; AVX-LABEL: test62:
1917 ; AVX: # BB#0: # %entry
1918 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
1921 %cmp = icmp ule <8 x i16> %a, %b
1922 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1926 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1927 ; SSE2-LABEL: test63:
1928 ; SSE2: # BB#0: # %entry
1929 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1930 ; SSE2-NEXT: movdqa %xmm1, %xmm3
1931 ; SSE2-NEXT: pxor %xmm2, %xmm3
1932 ; SSE2-NEXT: pxor %xmm0, %xmm2
1933 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2
1934 ; SSE2-NEXT: pand %xmm2, %xmm1
1935 ; SSE2-NEXT: pandn %xmm0, %xmm2
1936 ; SSE2-NEXT: por %xmm1, %xmm2
1937 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1940 ; SSE4-LABEL: test63:
1941 ; SSE4: # BB#0: # %entry
1942 ; SSE4-NEXT: pminuw %xmm1, %xmm0
1945 ; AVX-LABEL: test63:
1946 ; AVX: # BB#0: # %entry
1947 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1950 %cmp = icmp ugt <8 x i16> %a, %b
1951 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1955 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1956 ; SSE2-LABEL: test64:
1957 ; SSE2: # BB#0: # %entry
1958 ; SSE2-NEXT: movdqa %xmm1, %xmm3
1959 ; SSE2-NEXT: psubusw %xmm0, %xmm3
1960 ; SSE2-NEXT: pxor %xmm2, %xmm2
1961 ; SSE2-NEXT: pcmpeqw %xmm3, %xmm2
1962 ; SSE2-NEXT: pand %xmm2, %xmm1
1963 ; SSE2-NEXT: pandn %xmm0, %xmm2
1964 ; SSE2-NEXT: por %xmm1, %xmm2
1965 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1968 ; SSE4-LABEL: test64:
1969 ; SSE4: # BB#0: # %entry
1970 ; SSE4-NEXT: pminuw %xmm1, %xmm0
1973 ; AVX-LABEL: test64:
1974 ; AVX: # BB#0: # %entry
1975 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1978 %cmp = icmp uge <8 x i16> %a, %b
1979 %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1983 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1984 ; SSE2-LABEL: test65:
1985 ; SSE2: # BB#0: # %entry
1986 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1987 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2
1988 ; SSE2-NEXT: pand %xmm2, %xmm1
1989 ; SSE2-NEXT: pandn %xmm0, %xmm2
1990 ; SSE2-NEXT: por %xmm1, %xmm2
1991 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1994 ; SSE4-LABEL: test65:
1995 ; SSE4: # BB#0: # %entry
1996 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0
1999 ; AVX-LABEL: test65:
2000 ; AVX: # BB#0: # %entry
2001 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
2004 %cmp = icmp slt <4 x i32> %a, %b
2005 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2009 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
2010 ; SSE2-LABEL: test66:
2011 ; SSE2: # BB#0: # %entry
2012 ; SSE2-NEXT: movdqa %xmm0, %xmm2
2013 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
2014 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm3
2015 ; SSE2-NEXT: pxor %xmm2, %xmm3
2016 ; SSE2-NEXT: pandn %xmm1, %xmm2
2017 ; SSE2-NEXT: pandn %xmm0, %xmm3
2018 ; SSE2-NEXT: por %xmm3, %xmm2
2019 ; SSE2-NEXT: movdqa %xmm2, %xmm0
2022 ; SSE4-LABEL: test66:
2023 ; SSE4: # BB#0: # %entry
2024 ; SSE4-NEXT: pmaxsd %xmm1, %xmm0
2027 ; AVX-LABEL: test66:
2028 ; AVX: # BB#0: # %entry
2029 ; AVX-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
2032 %cmp = icmp sle <4 x i32> %a, %b
2033 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2037 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
2038 ; SSE2-LABEL: test67:
2039 ; SSE2: # BB#0: # %entry
2040 ; SSE2-NEXT: movdqa %xmm0, %xmm2
2041 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2
2042 ; SSE2-NEXT: pand %xmm2, %xmm1
2043 ; SSE2-NEXT: pandn %xmm0, %xmm2
2044 ; SSE2-NEXT: por %xmm1, %xmm2
2045 ; SSE2-NEXT: movdqa %xmm2, %xmm0
2048 ; SSE4-LABEL: test67:
2049 ; SSE4: # BB#0: # %entry
2050 ; SSE4-NEXT: pminsd %xmm1, %xmm0
2053 ; AVX-LABEL: test67:
2054 ; AVX: # BB#0: # %entry
2055 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
2058 %cmp = icmp sgt <4 x i32> %a, %b
2059 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2063 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
2064 ; SSE2-LABEL: test68:
2065 ; SSE2: # BB#0: # %entry
2066 ; SSE2-NEXT: movdqa %xmm1, %xmm3
2067 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm3
2068 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
2069 ; SSE2-NEXT: pxor %xmm3, %xmm2
2070 ; SSE2-NEXT: pandn %xmm1, %xmm3
2071 ; SSE2-NEXT: pandn %xmm0, %xmm2
2072 ; SSE2-NEXT: por %xmm3, %xmm2
2073 ; SSE2-NEXT: movdqa %xmm2, %xmm0
2076 ; SSE4-LABEL: test68:
2077 ; SSE4: # BB#0: # %entry
2078 ; SSE4-NEXT: pminsd %xmm1, %xmm0
2081 ; AVX-LABEL: test68:
2082 ; AVX: # BB#0: # %entry
2083 ; AVX-NEXT: vpminsd %xmm1, %xmm0, %xmm0
2086 %cmp = icmp sge <4 x i32> %a, %b
2087 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2091 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
2092 ; SSE2-LABEL: test69:
2093 ; SSE2: # BB#0: # %entry
2094 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2095 ; SSE2-NEXT: movdqa %xmm0, %xmm3
2096 ; SSE2-NEXT: pxor %xmm2, %xmm3
2097 ; SSE2-NEXT: pxor %xmm1, %xmm2
2098 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
2099 ; SSE2-NEXT: pand %xmm2, %xmm1
2100 ; SSE2-NEXT: pandn %xmm0, %xmm2
2101 ; SSE2-NEXT: por %xmm1, %xmm2
2102 ; SSE2-NEXT: movdqa %xmm2, %xmm0
2105 ; SSE4-LABEL: test69:
2106 ; SSE4: # BB#0: # %entry
2107 ; SSE4-NEXT: pmaxud %xmm1, %xmm0
2110 ; AVX-LABEL: test69:
2111 ; AVX: # BB#0: # %entry
2112 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
2115 %cmp = icmp ult <4 x i32> %a, %b
2116 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2120 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
2121 ; SSE2-LABEL: test70:
2122 ; SSE2: # BB#0: # %entry
2123 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
2124 ; SSE2-NEXT: movdqa %xmm1, %xmm2
2125 ; SSE2-NEXT: pxor %xmm3, %xmm2
2126 ; SSE2-NEXT: pxor %xmm0, %xmm3
2127 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
2128 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
2129 ; SSE2-NEXT: pxor %xmm3, %xmm2
2130 ; SSE2-NEXT: pandn %xmm1, %xmm3
2131 ; SSE2-NEXT: pandn %xmm0, %xmm2
2132 ; SSE2-NEXT: por %xmm3, %xmm2
2133 ; SSE2-NEXT: movdqa %xmm2, %xmm0
2136 ; SSE4-LABEL: test70:
2137 ; SSE4: # BB#0: # %entry
2138 ; SSE4-NEXT: pmaxud %xmm1, %xmm0
2141 ; AVX-LABEL: test70:
2142 ; AVX: # BB#0: # %entry
2143 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
2146 %cmp = icmp ule <4 x i32> %a, %b
2147 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2151 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
2152 ; SSE2-LABEL: test71:
2153 ; SSE2: # BB#0: # %entry
2154 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2155 ; SSE2-NEXT: movdqa %xmm1, %xmm3
2156 ; SSE2-NEXT: pxor %xmm2, %xmm3
2157 ; SSE2-NEXT: pxor %xmm0, %xmm2
2158 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
2159 ; SSE2-NEXT: pand %xmm2, %xmm1
2160 ; SSE2-NEXT: pandn %xmm0, %xmm2
2161 ; SSE2-NEXT: por %xmm1, %xmm2
2162 ; SSE2-NEXT: movdqa %xmm2, %xmm0
2165 ; SSE4-LABEL: test71:
2166 ; SSE4: # BB#0: # %entry
2167 ; SSE4-NEXT: pminud %xmm1, %xmm0
2170 ; AVX-LABEL: test71:
2171 ; AVX: # BB#0: # %entry
2172 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
2175 %cmp = icmp ugt <4 x i32> %a, %b
2176 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2180 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2181 ; SSE2-LABEL: test72:
2182 ; SSE2: # BB#0: # %entry
2183 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
2184 ; SSE2-NEXT: movdqa %xmm0, %xmm2
2185 ; SSE2-NEXT: pxor %xmm3, %xmm2
2186 ; SSE2-NEXT: pxor %xmm1, %xmm3
2187 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
2188 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
2189 ; SSE2-NEXT: pxor %xmm3, %xmm2
2190 ; SSE2-NEXT: pandn %xmm1, %xmm3
2191 ; SSE2-NEXT: pandn %xmm0, %xmm2
2192 ; SSE2-NEXT: por %xmm3, %xmm2
2193 ; SSE2-NEXT: movdqa %xmm2, %xmm0
2196 ; SSE4-LABEL: test72:
2197 ; SSE4: # BB#0: # %entry
2198 ; SSE4-NEXT: pminud %xmm1, %xmm0
2201 ; AVX-LABEL: test72:
2202 ; AVX: # BB#0: # %entry
2203 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
2206 %cmp = icmp uge <4 x i32> %a, %b
2207 %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2211 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2212 ; SSE2-LABEL: test73:
2213 ; SSE2: # BB#0: # %entry
2214 ; SSE2-NEXT: movdqa %xmm3, %xmm4
2215 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm4
2216 ; SSE2-NEXT: movdqa %xmm2, %xmm5
2217 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm5
2218 ; SSE2-NEXT: pand %xmm5, %xmm2
2219 ; SSE2-NEXT: pandn %xmm0, %xmm5
2220 ; SSE2-NEXT: por %xmm2, %xmm5
2221 ; SSE2-NEXT: pand %xmm4, %xmm3
2222 ; SSE2-NEXT: pandn %xmm1, %xmm4
2223 ; SSE2-NEXT: por %xmm3, %xmm4
2224 ; SSE2-NEXT: movdqa %xmm5, %xmm0
2225 ; SSE2-NEXT: movdqa %xmm4, %xmm1
2228 ; SSE4-LABEL: test73:
2229 ; SSE4: # BB#0: # %entry
2230 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0
2231 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1
2234 ; AVX1-LABEL: test73:
2235 ; AVX1: # BB#0: # %entry
2236 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2237 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2238 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
2239 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
2240 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2243 ; AVX2-LABEL: test73:
2244 ; AVX2: # BB#0: # %entry
2245 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
2248 ; AVX512F-LABEL: test73:
2249 ; AVX512F: # BB#0: # %entry
2250 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
2251 ; AVX512F-NEXT: retq
2253 %cmp = icmp slt <32 x i8> %a, %b
2254 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2258 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2259 ; SSE2-LABEL: test74:
2260 ; SSE2: # BB#0: # %entry
2261 ; SSE2-NEXT: movdqa %xmm1, %xmm6
2262 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm6
2263 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7
2264 ; SSE2-NEXT: movdqa %xmm6, %xmm4
2265 ; SSE2-NEXT: pxor %xmm7, %xmm4
2266 ; SSE2-NEXT: movdqa %xmm0, %xmm5
2267 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5
2268 ; SSE2-NEXT: pxor %xmm5, %xmm7
2269 ; SSE2-NEXT: pandn %xmm2, %xmm5
2270 ; SSE2-NEXT: pandn %xmm0, %xmm7
2271 ; SSE2-NEXT: por %xmm7, %xmm5
2272 ; SSE2-NEXT: pandn %xmm3, %xmm6
2273 ; SSE2-NEXT: pandn %xmm1, %xmm4
2274 ; SSE2-NEXT: por %xmm6, %xmm4
2275 ; SSE2-NEXT: movdqa %xmm5, %xmm0
2276 ; SSE2-NEXT: movdqa %xmm4, %xmm1
2279 ; SSE4-LABEL: test74:
2280 ; SSE4: # BB#0: # %entry
2281 ; SSE4-NEXT: pmaxsb %xmm2, %xmm0
2282 ; SSE4-NEXT: pmaxsb %xmm3, %xmm1
2285 ; AVX1-LABEL: test74:
2286 ; AVX1: # BB#0: # %entry
2287 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2288 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2289 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm3, %xmm2
2290 ; AVX1-NEXT: vpmaxsb %xmm1, %xmm0, %xmm0
2291 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2294 ; AVX2-LABEL: test74:
2295 ; AVX2: # BB#0: # %entry
2296 ; AVX2-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
2299 ; AVX512F-LABEL: test74:
2300 ; AVX512F: # BB#0: # %entry
2301 ; AVX512F-NEXT: vpmaxsb %ymm1, %ymm0, %ymm0
2302 ; AVX512F-NEXT: retq
2304 %cmp = icmp sle <32 x i8> %a, %b
2305 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2309 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2310 ; SSE2-LABEL: test75:
2311 ; SSE2: # BB#0: # %entry
2312 ; SSE2-NEXT: movdqa %xmm1, %xmm4
2313 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm4
2314 ; SSE2-NEXT: movdqa %xmm0, %xmm5
2315 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm5
2316 ; SSE2-NEXT: pand %xmm5, %xmm2
2317 ; SSE2-NEXT: pandn %xmm0, %xmm5
2318 ; SSE2-NEXT: por %xmm2, %xmm5
2319 ; SSE2-NEXT: pand %xmm4, %xmm3
2320 ; SSE2-NEXT: pandn %xmm1, %xmm4
2321 ; SSE2-NEXT: por %xmm3, %xmm4
2322 ; SSE2-NEXT: movdqa %xmm5, %xmm0
2323 ; SSE2-NEXT: movdqa %xmm4, %xmm1
2326 ; SSE4-LABEL: test75:
2327 ; SSE4: # BB#0: # %entry
2328 ; SSE4-NEXT: pminsb %xmm2, %xmm0
2329 ; SSE4-NEXT: pminsb %xmm3, %xmm1
2332 ; AVX1-LABEL: test75:
2333 ; AVX1: # BB#0: # %entry
2334 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2335 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2336 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
2337 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
2338 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2341 ; AVX2-LABEL: test75:
2342 ; AVX2: # BB#0: # %entry
2343 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
2346 ; AVX512F-LABEL: test75:
2347 ; AVX512F: # BB#0: # %entry
2348 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0
2349 ; AVX512F-NEXT: retq
2351 %cmp = icmp sgt <32 x i8> %a, %b
2352 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2356 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2357 ; SSE2-LABEL: test76:
2358 ; SSE2: # BB#0: # %entry
2359 ; SSE2-NEXT: movdqa %xmm3, %xmm6
2360 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm6
2361 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
2362 ; SSE2-NEXT: movdqa %xmm6, %xmm5
2363 ; SSE2-NEXT: pxor %xmm4, %xmm5
2364 ; SSE2-NEXT: movdqa %xmm2, %xmm7
2365 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm7
2366 ; SSE2-NEXT: pxor %xmm7, %xmm4
2367 ; SSE2-NEXT: pandn %xmm2, %xmm7
2368 ; SSE2-NEXT: pandn %xmm0, %xmm4
2369 ; SSE2-NEXT: por %xmm7, %xmm4
2370 ; SSE2-NEXT: pandn %xmm3, %xmm6
2371 ; SSE2-NEXT: pandn %xmm1, %xmm5
2372 ; SSE2-NEXT: por %xmm6, %xmm5
2373 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2374 ; SSE2-NEXT: movdqa %xmm5, %xmm1
2377 ; SSE4-LABEL: test76:
2378 ; SSE4: # BB#0: # %entry
2379 ; SSE4-NEXT: pminsb %xmm2, %xmm0
2380 ; SSE4-NEXT: pminsb %xmm3, %xmm1
2383 ; AVX1-LABEL: test76:
2384 ; AVX1: # BB#0: # %entry
2385 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2386 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2387 ; AVX1-NEXT: vpminsb %xmm2, %xmm3, %xmm2
2388 ; AVX1-NEXT: vpminsb %xmm1, %xmm0, %xmm0
2389 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2392 ; AVX2-LABEL: test76:
2393 ; AVX2: # BB#0: # %entry
2394 ; AVX2-NEXT: vpminsb %ymm1, %ymm0, %ymm0
2397 ; AVX512F-LABEL: test76:
2398 ; AVX512F: # BB#0: # %entry
2399 ; AVX512F-NEXT: vpminsb %ymm1, %ymm0, %ymm0
2400 ; AVX512F-NEXT: retq
2402 %cmp = icmp sge <32 x i8> %a, %b
2403 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2407 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2408 ; SSE-LABEL: test77:
2409 ; SSE: # BB#0: # %entry
2410 ; SSE-NEXT: pmaxub %xmm2, %xmm0
2411 ; SSE-NEXT: pmaxub %xmm3, %xmm1
2414 ; AVX1-LABEL: test77:
2415 ; AVX1: # BB#0: # %entry
2416 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2417 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2418 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
2419 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
2420 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2423 ; AVX2-LABEL: test77:
2424 ; AVX2: # BB#0: # %entry
2425 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
2428 ; AVX512F-LABEL: test77:
2429 ; AVX512F: # BB#0: # %entry
2430 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
2431 ; AVX512F-NEXT: retq
2433 %cmp = icmp ult <32 x i8> %a, %b
2434 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2438 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2439 ; SSE-LABEL: test78:
2440 ; SSE: # BB#0: # %entry
2441 ; SSE-NEXT: pmaxub %xmm2, %xmm0
2442 ; SSE-NEXT: pmaxub %xmm3, %xmm1
2445 ; AVX1-LABEL: test78:
2446 ; AVX1: # BB#0: # %entry
2447 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2448 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2449 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
2450 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
2451 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2454 ; AVX2-LABEL: test78:
2455 ; AVX2: # BB#0: # %entry
2456 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
2459 ; AVX512F-LABEL: test78:
2460 ; AVX512F: # BB#0: # %entry
2461 ; AVX512F-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
2462 ; AVX512F-NEXT: retq
2464 %cmp = icmp ule <32 x i8> %a, %b
2465 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2469 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2470 ; SSE-LABEL: test79:
2471 ; SSE: # BB#0: # %entry
2472 ; SSE-NEXT: pminub %xmm2, %xmm0
2473 ; SSE-NEXT: pminub %xmm3, %xmm1
2476 ; AVX1-LABEL: test79:
2477 ; AVX1: # BB#0: # %entry
2478 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2479 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2480 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
2481 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
2482 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2485 ; AVX2-LABEL: test79:
2486 ; AVX2: # BB#0: # %entry
2487 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
2490 ; AVX512F-LABEL: test79:
2491 ; AVX512F: # BB#0: # %entry
2492 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0
2493 ; AVX512F-NEXT: retq
2495 %cmp = icmp ugt <32 x i8> %a, %b
2496 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2500 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2501 ; SSE-LABEL: test80:
2502 ; SSE: # BB#0: # %entry
2503 ; SSE-NEXT: pminub %xmm2, %xmm0
2504 ; SSE-NEXT: pminub %xmm3, %xmm1
2507 ; AVX1-LABEL: test80:
2508 ; AVX1: # BB#0: # %entry
2509 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2510 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2511 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
2512 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
2513 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2516 ; AVX2-LABEL: test80:
2517 ; AVX2: # BB#0: # %entry
2518 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
2521 ; AVX512F-LABEL: test80:
2522 ; AVX512F: # BB#0: # %entry
2523 ; AVX512F-NEXT: vpminub %ymm1, %ymm0, %ymm0
2524 ; AVX512F-NEXT: retq
2526 %cmp = icmp uge <32 x i8> %a, %b
2527 %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2531 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2532 ; SSE-LABEL: test81:
2533 ; SSE: # BB#0: # %entry
2534 ; SSE-NEXT: pmaxsw %xmm2, %xmm0
2535 ; SSE-NEXT: pmaxsw %xmm3, %xmm1
2538 ; AVX1-LABEL: test81:
2539 ; AVX1: # BB#0: # %entry
2540 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2541 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2542 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
2543 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
2544 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2547 ; AVX2-LABEL: test81:
2548 ; AVX2: # BB#0: # %entry
2549 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2552 ; AVX512F-LABEL: test81:
2553 ; AVX512F: # BB#0: # %entry
2554 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2555 ; AVX512F-NEXT: retq
2557 %cmp = icmp slt <16 x i16> %a, %b
2558 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2562 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2563 ; SSE-LABEL: test82:
2564 ; SSE: # BB#0: # %entry
2565 ; SSE-NEXT: pmaxsw %xmm2, %xmm0
2566 ; SSE-NEXT: pmaxsw %xmm3, %xmm1
2569 ; AVX1-LABEL: test82:
2570 ; AVX1: # BB#0: # %entry
2571 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2572 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2573 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm3, %xmm2
2574 ; AVX1-NEXT: vpmaxsw %xmm1, %xmm0, %xmm0
2575 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2578 ; AVX2-LABEL: test82:
2579 ; AVX2: # BB#0: # %entry
2580 ; AVX2-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2583 ; AVX512F-LABEL: test82:
2584 ; AVX512F: # BB#0: # %entry
2585 ; AVX512F-NEXT: vpmaxsw %ymm1, %ymm0, %ymm0
2586 ; AVX512F-NEXT: retq
2588 %cmp = icmp sle <16 x i16> %a, %b
2589 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2593 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2594 ; SSE-LABEL: test83:
2595 ; SSE: # BB#0: # %entry
2596 ; SSE-NEXT: pminsw %xmm2, %xmm0
2597 ; SSE-NEXT: pminsw %xmm3, %xmm1
2600 ; AVX1-LABEL: test83:
2601 ; AVX1: # BB#0: # %entry
2602 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2603 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2604 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
2605 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
2606 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2609 ; AVX2-LABEL: test83:
2610 ; AVX2: # BB#0: # %entry
2611 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
2614 ; AVX512F-LABEL: test83:
2615 ; AVX512F: # BB#0: # %entry
2616 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0
2617 ; AVX512F-NEXT: retq
2619 %cmp = icmp sgt <16 x i16> %a, %b
2620 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2624 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2625 ; SSE-LABEL: test84:
2626 ; SSE: # BB#0: # %entry
2627 ; SSE-NEXT: pminsw %xmm2, %xmm0
2628 ; SSE-NEXT: pminsw %xmm3, %xmm1
2631 ; AVX1-LABEL: test84:
2632 ; AVX1: # BB#0: # %entry
2633 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2634 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2635 ; AVX1-NEXT: vpminsw %xmm2, %xmm3, %xmm2
2636 ; AVX1-NEXT: vpminsw %xmm1, %xmm0, %xmm0
2637 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2640 ; AVX2-LABEL: test84:
2641 ; AVX2: # BB#0: # %entry
2642 ; AVX2-NEXT: vpminsw %ymm1, %ymm0, %ymm0
2645 ; AVX512F-LABEL: test84:
2646 ; AVX512F: # BB#0: # %entry
2647 ; AVX512F-NEXT: vpminsw %ymm1, %ymm0, %ymm0
2648 ; AVX512F-NEXT: retq
2650 %cmp = icmp sge <16 x i16> %a, %b
2651 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2655 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2656 ; SSE2-LABEL: test85:
2657 ; SSE2: # BB#0: # %entry
2658 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2659 ; SSE2-NEXT: movdqa %xmm1, %xmm6
2660 ; SSE2-NEXT: pxor %xmm4, %xmm6
2661 ; SSE2-NEXT: movdqa %xmm3, %xmm5
2662 ; SSE2-NEXT: pxor %xmm4, %xmm5
2663 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5
2664 ; SSE2-NEXT: movdqa %xmm0, %xmm6
2665 ; SSE2-NEXT: pxor %xmm4, %xmm6
2666 ; SSE2-NEXT: pxor %xmm2, %xmm4
2667 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4
2668 ; SSE2-NEXT: pand %xmm4, %xmm2
2669 ; SSE2-NEXT: pandn %xmm0, %xmm4
2670 ; SSE2-NEXT: por %xmm2, %xmm4
2671 ; SSE2-NEXT: pand %xmm5, %xmm3
2672 ; SSE2-NEXT: pandn %xmm1, %xmm5
2673 ; SSE2-NEXT: por %xmm3, %xmm5
2674 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2675 ; SSE2-NEXT: movdqa %xmm5, %xmm1
2678 ; SSE4-LABEL: test85:
2679 ; SSE4: # BB#0: # %entry
2680 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0
2681 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1
2684 ; AVX1-LABEL: test85:
2685 ; AVX1: # BB#0: # %entry
2686 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2687 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2688 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
2689 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
2690 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2693 ; AVX2-LABEL: test85:
2694 ; AVX2: # BB#0: # %entry
2695 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
2698 ; AVX512F-LABEL: test85:
2699 ; AVX512F: # BB#0: # %entry
2700 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
2701 ; AVX512F-NEXT: retq
2703 %cmp = icmp ult <16 x i16> %a, %b
2704 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2708 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2709 ; SSE2-LABEL: test86:
2710 ; SSE2: # BB#0: # %entry
2711 ; SSE2-NEXT: movdqa %xmm1, %xmm4
2712 ; SSE2-NEXT: psubusw %xmm3, %xmm4
2713 ; SSE2-NEXT: pxor %xmm6, %xmm6
2714 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4
2715 ; SSE2-NEXT: movdqa %xmm0, %xmm5
2716 ; SSE2-NEXT: psubusw %xmm2, %xmm5
2717 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5
2718 ; SSE2-NEXT: pand %xmm5, %xmm2
2719 ; SSE2-NEXT: pandn %xmm0, %xmm5
2720 ; SSE2-NEXT: por %xmm2, %xmm5
2721 ; SSE2-NEXT: pand %xmm4, %xmm3
2722 ; SSE2-NEXT: pandn %xmm1, %xmm4
2723 ; SSE2-NEXT: por %xmm3, %xmm4
2724 ; SSE2-NEXT: movdqa %xmm5, %xmm0
2725 ; SSE2-NEXT: movdqa %xmm4, %xmm1
2728 ; SSE4-LABEL: test86:
2729 ; SSE4: # BB#0: # %entry
2730 ; SSE4-NEXT: pmaxuw %xmm2, %xmm0
2731 ; SSE4-NEXT: pmaxuw %xmm3, %xmm1
2734 ; AVX1-LABEL: test86:
2735 ; AVX1: # BB#0: # %entry
2736 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2737 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2738 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
2739 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
2740 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2743 ; AVX2-LABEL: test86:
2744 ; AVX2: # BB#0: # %entry
2745 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
2748 ; AVX512F-LABEL: test86:
2749 ; AVX512F: # BB#0: # %entry
2750 ; AVX512F-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
2751 ; AVX512F-NEXT: retq
2753 %cmp = icmp ule <16 x i16> %a, %b
2754 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2758 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2759 ; SSE2-LABEL: test87:
2760 ; SSE2: # BB#0: # %entry
2761 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2762 ; SSE2-NEXT: movdqa %xmm3, %xmm6
2763 ; SSE2-NEXT: pxor %xmm4, %xmm6
2764 ; SSE2-NEXT: movdqa %xmm1, %xmm5
2765 ; SSE2-NEXT: pxor %xmm4, %xmm5
2766 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5
2767 ; SSE2-NEXT: movdqa %xmm2, %xmm6
2768 ; SSE2-NEXT: pxor %xmm4, %xmm6
2769 ; SSE2-NEXT: pxor %xmm0, %xmm4
2770 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4
2771 ; SSE2-NEXT: pand %xmm4, %xmm2
2772 ; SSE2-NEXT: pandn %xmm0, %xmm4
2773 ; SSE2-NEXT: por %xmm2, %xmm4
2774 ; SSE2-NEXT: pand %xmm5, %xmm3
2775 ; SSE2-NEXT: pandn %xmm1, %xmm5
2776 ; SSE2-NEXT: por %xmm3, %xmm5
2777 ; SSE2-NEXT: movdqa %xmm4, %xmm0
2778 ; SSE2-NEXT: movdqa %xmm5, %xmm1
2781 ; SSE4-LABEL: test87:
2782 ; SSE4: # BB#0: # %entry
2783 ; SSE4-NEXT: pminuw %xmm2, %xmm0
2784 ; SSE4-NEXT: pminuw %xmm3, %xmm1
2787 ; AVX1-LABEL: test87:
2788 ; AVX1: # BB#0: # %entry
2789 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2790 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2791 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
2792 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
2793 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2796 ; AVX2-LABEL: test87:
2797 ; AVX2: # BB#0: # %entry
2798 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
2801 ; AVX512F-LABEL: test87:
2802 ; AVX512F: # BB#0: # %entry
2803 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0
2804 ; AVX512F-NEXT: retq
2806 %cmp = icmp ugt <16 x i16> %a, %b
2807 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2811 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2812 ; SSE2-LABEL: test88:
2813 ; SSE2: # BB#0: # %entry
2814 ; SSE2-NEXT: movdqa %xmm3, %xmm4
2815 ; SSE2-NEXT: psubusw %xmm1, %xmm4
2816 ; SSE2-NEXT: pxor %xmm6, %xmm6
2817 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4
2818 ; SSE2-NEXT: movdqa %xmm2, %xmm5
2819 ; SSE2-NEXT: psubusw %xmm0, %xmm5
2820 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5
2821 ; SSE2-NEXT: pand %xmm5, %xmm2
2822 ; SSE2-NEXT: pandn %xmm0, %xmm5
2823 ; SSE2-NEXT: por %xmm2, %xmm5
2824 ; SSE2-NEXT: pand %xmm4, %xmm3
2825 ; SSE2-NEXT: pandn %xmm1, %xmm4
2826 ; SSE2-NEXT: por %xmm3, %xmm4
2827 ; SSE2-NEXT: movdqa %xmm5, %xmm0
2828 ; SSE2-NEXT: movdqa %xmm4, %xmm1
2831 ; SSE4-LABEL: test88:
2832 ; SSE4: # BB#0: # %entry
2833 ; SSE4-NEXT: pminuw %xmm2, %xmm0
2834 ; SSE4-NEXT: pminuw %xmm3, %xmm1
2837 ; AVX1-LABEL: test88:
2838 ; AVX1: # BB#0: # %entry
2839 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2840 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2841 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
2842 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
2843 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2846 ; AVX2-LABEL: test88:
2847 ; AVX2: # BB#0: # %entry
2848 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
2851 ; AVX512F-LABEL: test88:
2852 ; AVX512F: # BB#0: # %entry
2853 ; AVX512F-NEXT: vpminuw %ymm1, %ymm0, %ymm0
2854 ; AVX512F-NEXT: retq
2856 %cmp = icmp uge <16 x i16> %a, %b
2857 %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2861 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2862 ; SSE2-LABEL: test89:
2863 ; SSE2: # BB#0: # %entry
2864 ; SSE2-NEXT: movdqa %xmm3, %xmm4
2865 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm4
2866 ; SSE2-NEXT: movdqa %xmm2, %xmm5
2867 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm5
2868 ; SSE2-NEXT: pand %xmm5, %xmm2
2869 ; SSE2-NEXT: pandn %xmm0, %xmm5
2870 ; SSE2-NEXT: por %xmm2, %xmm5
2871 ; SSE2-NEXT: pand %xmm4, %xmm3
2872 ; SSE2-NEXT: pandn %xmm1, %xmm4
2873 ; SSE2-NEXT: por %xmm3, %xmm4
2874 ; SSE2-NEXT: movdqa %xmm5, %xmm0
2875 ; SSE2-NEXT: movdqa %xmm4, %xmm1
2878 ; SSE4-LABEL: test89:
2879 ; SSE4: # BB#0: # %entry
2880 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0
2881 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1
2884 ; AVX1-LABEL: test89:
2885 ; AVX1: # BB#0: # %entry
2886 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2887 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2888 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
2889 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
2890 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2893 ; AVX2-LABEL: test89:
2894 ; AVX2: # BB#0: # %entry
2895 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2898 ; AVX512F-LABEL: test89:
2899 ; AVX512F: # BB#0: # %entry
2900 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2901 ; AVX512F-NEXT: retq
2903 %cmp = icmp slt <8 x i32> %a, %b
2904 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2908 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2909 ; SSE2-LABEL: test90:
2910 ; SSE2: # BB#0: # %entry
2911 ; SSE2-NEXT: movdqa %xmm1, %xmm6
2912 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm6
2913 ; SSE2-NEXT: pcmpeqd %xmm7, %xmm7
2914 ; SSE2-NEXT: movdqa %xmm6, %xmm4
2915 ; SSE2-NEXT: pxor %xmm7, %xmm4
2916 ; SSE2-NEXT: movdqa %xmm0, %xmm5
2917 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
2918 ; SSE2-NEXT: pxor %xmm5, %xmm7
2919 ; SSE2-NEXT: pandn %xmm2, %xmm5
2920 ; SSE2-NEXT: pandn %xmm0, %xmm7
2921 ; SSE2-NEXT: por %xmm7, %xmm5
2922 ; SSE2-NEXT: pandn %xmm3, %xmm6
2923 ; SSE2-NEXT: pandn %xmm1, %xmm4
2924 ; SSE2-NEXT: por %xmm6, %xmm4
2925 ; SSE2-NEXT: movdqa %xmm5, %xmm0
2926 ; SSE2-NEXT: movdqa %xmm4, %xmm1
2929 ; SSE4-LABEL: test90:
2930 ; SSE4: # BB#0: # %entry
2931 ; SSE4-NEXT: pmaxsd %xmm2, %xmm0
2932 ; SSE4-NEXT: pmaxsd %xmm3, %xmm1
2935 ; AVX1-LABEL: test90:
2936 ; AVX1: # BB#0: # %entry
2937 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2938 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2939 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm3, %xmm2
2940 ; AVX1-NEXT: vpmaxsd %xmm1, %xmm0, %xmm0
2941 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2944 ; AVX2-LABEL: test90:
2945 ; AVX2: # BB#0: # %entry
2946 ; AVX2-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2949 ; AVX512F-LABEL: test90:
2950 ; AVX512F: # BB#0: # %entry
2951 ; AVX512F-NEXT: vpmaxsd %ymm1, %ymm0, %ymm0
2952 ; AVX512F-NEXT: retq
2954 %cmp = icmp sle <8 x i32> %a, %b
2955 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2959 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2960 ; SSE2-LABEL: test91:
2961 ; SSE2: # BB#0: # %entry
2962 ; SSE2-NEXT: movdqa %xmm1, %xmm4
2963 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
2964 ; SSE2-NEXT: movdqa %xmm0, %xmm5
2965 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm5
2966 ; SSE2-NEXT: pand %xmm5, %xmm2
2967 ; SSE2-NEXT: pandn %xmm0, %xmm5
2968 ; SSE2-NEXT: por %xmm2, %xmm5
2969 ; SSE2-NEXT: pand %xmm4, %xmm3
2970 ; SSE2-NEXT: pandn %xmm1, %xmm4
2971 ; SSE2-NEXT: por %xmm3, %xmm4
2972 ; SSE2-NEXT: movdqa %xmm5, %xmm0
2973 ; SSE2-NEXT: movdqa %xmm4, %xmm1
2976 ; SSE4-LABEL: test91:
2977 ; SSE4: # BB#0: # %entry
2978 ; SSE4-NEXT: pminsd %xmm2, %xmm0
2979 ; SSE4-NEXT: pminsd %xmm3, %xmm1
2982 ; AVX1-LABEL: test91:
2983 ; AVX1: # BB#0: # %entry
2984 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
2985 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
2986 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
2987 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
2988 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
2991 ; AVX2-LABEL: test91:
2992 ; AVX2: # BB#0: # %entry
2993 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2996 ; AVX512F-LABEL: test91:
2997 ; AVX512F: # BB#0: # %entry
2998 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
2999 ; AVX512F-NEXT: retq
3001 %cmp = icmp sgt <8 x i32> %a, %b
3002 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3006 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
3007 ; SSE2-LABEL: test92:
3008 ; SSE2: # BB#0: # %entry
3009 ; SSE2-NEXT: movdqa %xmm3, %xmm6
3010 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm6
3011 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
3012 ; SSE2-NEXT: movdqa %xmm6, %xmm5
3013 ; SSE2-NEXT: pxor %xmm4, %xmm5
3014 ; SSE2-NEXT: movdqa %xmm2, %xmm7
3015 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm7
3016 ; SSE2-NEXT: pxor %xmm7, %xmm4
3017 ; SSE2-NEXT: pandn %xmm2, %xmm7
3018 ; SSE2-NEXT: pandn %xmm0, %xmm4
3019 ; SSE2-NEXT: por %xmm7, %xmm4
3020 ; SSE2-NEXT: pandn %xmm3, %xmm6
3021 ; SSE2-NEXT: pandn %xmm1, %xmm5
3022 ; SSE2-NEXT: por %xmm6, %xmm5
3023 ; SSE2-NEXT: movdqa %xmm4, %xmm0
3024 ; SSE2-NEXT: movdqa %xmm5, %xmm1
3027 ; SSE4-LABEL: test92:
3028 ; SSE4: # BB#0: # %entry
3029 ; SSE4-NEXT: pminsd %xmm2, %xmm0
3030 ; SSE4-NEXT: pminsd %xmm3, %xmm1
3033 ; AVX1-LABEL: test92:
3034 ; AVX1: # BB#0: # %entry
3035 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3036 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3037 ; AVX1-NEXT: vpminsd %xmm2, %xmm3, %xmm2
3038 ; AVX1-NEXT: vpminsd %xmm1, %xmm0, %xmm0
3039 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
3042 ; AVX2-LABEL: test92:
3043 ; AVX2: # BB#0: # %entry
3044 ; AVX2-NEXT: vpminsd %ymm1, %ymm0, %ymm0
3047 ; AVX512F-LABEL: test92:
3048 ; AVX512F: # BB#0: # %entry
3049 ; AVX512F-NEXT: vpminsd %ymm1, %ymm0, %ymm0
3050 ; AVX512F-NEXT: retq
3052 %cmp = icmp sge <8 x i32> %a, %b
3053 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3057 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
3058 ; SSE2-LABEL: test93:
3059 ; SSE2: # BB#0: # %entry
3060 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
3061 ; SSE2-NEXT: movdqa %xmm1, %xmm6
3062 ; SSE2-NEXT: pxor %xmm4, %xmm6
3063 ; SSE2-NEXT: movdqa %xmm3, %xmm5
3064 ; SSE2-NEXT: pxor %xmm4, %xmm5
3065 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
3066 ; SSE2-NEXT: movdqa %xmm0, %xmm6
3067 ; SSE2-NEXT: pxor %xmm4, %xmm6
3068 ; SSE2-NEXT: pxor %xmm2, %xmm4
3069 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
3070 ; SSE2-NEXT: pand %xmm4, %xmm2
3071 ; SSE2-NEXT: pandn %xmm0, %xmm4
3072 ; SSE2-NEXT: por %xmm2, %xmm4
3073 ; SSE2-NEXT: pand %xmm5, %xmm3
3074 ; SSE2-NEXT: pandn %xmm1, %xmm5
3075 ; SSE2-NEXT: por %xmm3, %xmm5
3076 ; SSE2-NEXT: movdqa %xmm4, %xmm0
3077 ; SSE2-NEXT: movdqa %xmm5, %xmm1
3080 ; SSE4-LABEL: test93:
3081 ; SSE4: # BB#0: # %entry
3082 ; SSE4-NEXT: pmaxud %xmm2, %xmm0
3083 ; SSE4-NEXT: pmaxud %xmm3, %xmm1
3086 ; AVX1-LABEL: test93:
3087 ; AVX1: # BB#0: # %entry
3088 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3089 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3090 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
3091 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
3092 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
3095 ; AVX2-LABEL: test93:
3096 ; AVX2: # BB#0: # %entry
3097 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
3100 ; AVX512F-LABEL: test93:
3101 ; AVX512F: # BB#0: # %entry
3102 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
3103 ; AVX512F-NEXT: retq
3105 %cmp = icmp ult <8 x i32> %a, %b
3106 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3110 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
3111 ; SSE2-LABEL: test94:
3112 ; SSE2: # BB#0: # %entry
3113 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
3114 ; SSE2-NEXT: movdqa %xmm3, %xmm4
3115 ; SSE2-NEXT: pxor %xmm6, %xmm4
3116 ; SSE2-NEXT: movdqa %xmm1, %xmm7
3117 ; SSE2-NEXT: pxor %xmm6, %xmm7
3118 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
3119 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
3120 ; SSE2-NEXT: movdqa %xmm7, %xmm5
3121 ; SSE2-NEXT: pxor %xmm4, %xmm5
3122 ; SSE2-NEXT: movdqa %xmm2, %xmm8
3123 ; SSE2-NEXT: pxor %xmm6, %xmm8
3124 ; SSE2-NEXT: pxor %xmm0, %xmm6
3125 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
3126 ; SSE2-NEXT: pxor %xmm6, %xmm4
3127 ; SSE2-NEXT: pandn %xmm2, %xmm6
3128 ; SSE2-NEXT: pandn %xmm0, %xmm4
3129 ; SSE2-NEXT: por %xmm6, %xmm4
3130 ; SSE2-NEXT: pandn %xmm3, %xmm7
3131 ; SSE2-NEXT: pandn %xmm1, %xmm5
3132 ; SSE2-NEXT: por %xmm7, %xmm5
3133 ; SSE2-NEXT: movdqa %xmm4, %xmm0
3134 ; SSE2-NEXT: movdqa %xmm5, %xmm1
3137 ; SSE4-LABEL: test94:
3138 ; SSE4: # BB#0: # %entry
3139 ; SSE4-NEXT: pmaxud %xmm2, %xmm0
3140 ; SSE4-NEXT: pmaxud %xmm3, %xmm1
3143 ; AVX1-LABEL: test94:
3144 ; AVX1: # BB#0: # %entry
3145 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3146 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3147 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
3148 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
3149 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
3152 ; AVX2-LABEL: test94:
3153 ; AVX2: # BB#0: # %entry
3154 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
3157 ; AVX512F-LABEL: test94:
3158 ; AVX512F: # BB#0: # %entry
3159 ; AVX512F-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
3160 ; AVX512F-NEXT: retq
3162 %cmp = icmp ule <8 x i32> %a, %b
3163 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3167 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
3168 ; SSE2-LABEL: test95:
3169 ; SSE2: # BB#0: # %entry
3170 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
3171 ; SSE2-NEXT: movdqa %xmm3, %xmm6
3172 ; SSE2-NEXT: pxor %xmm4, %xmm6
3173 ; SSE2-NEXT: movdqa %xmm1, %xmm5
3174 ; SSE2-NEXT: pxor %xmm4, %xmm5
3175 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
3176 ; SSE2-NEXT: movdqa %xmm2, %xmm6
3177 ; SSE2-NEXT: pxor %xmm4, %xmm6
3178 ; SSE2-NEXT: pxor %xmm0, %xmm4
3179 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
3180 ; SSE2-NEXT: pand %xmm4, %xmm2
3181 ; SSE2-NEXT: pandn %xmm0, %xmm4
3182 ; SSE2-NEXT: por %xmm2, %xmm4
3183 ; SSE2-NEXT: pand %xmm5, %xmm3
3184 ; SSE2-NEXT: pandn %xmm1, %xmm5
3185 ; SSE2-NEXT: por %xmm3, %xmm5
3186 ; SSE2-NEXT: movdqa %xmm4, %xmm0
3187 ; SSE2-NEXT: movdqa %xmm5, %xmm1
3190 ; SSE4-LABEL: test95:
3191 ; SSE4: # BB#0: # %entry
3192 ; SSE4-NEXT: pminud %xmm2, %xmm0
3193 ; SSE4-NEXT: pminud %xmm3, %xmm1
3196 ; AVX1-LABEL: test95:
3197 ; AVX1: # BB#0: # %entry
3198 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3199 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3200 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
3201 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
3202 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
3205 ; AVX2-LABEL: test95:
3206 ; AVX2: # BB#0: # %entry
3207 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
3210 ; AVX512F-LABEL: test95:
3211 ; AVX512F: # BB#0: # %entry
3212 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0
3213 ; AVX512F-NEXT: retq
3215 %cmp = icmp ugt <8 x i32> %a, %b
3216 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3220 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
3221 ; SSE2-LABEL: test96:
3222 ; SSE2: # BB#0: # %entry
3223 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
3224 ; SSE2-NEXT: movdqa %xmm1, %xmm4
3225 ; SSE2-NEXT: pxor %xmm6, %xmm4
3226 ; SSE2-NEXT: movdqa %xmm3, %xmm7
3227 ; SSE2-NEXT: pxor %xmm6, %xmm7
3228 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
3229 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
3230 ; SSE2-NEXT: movdqa %xmm7, %xmm5
3231 ; SSE2-NEXT: pxor %xmm4, %xmm5
3232 ; SSE2-NEXT: movdqa %xmm0, %xmm8
3233 ; SSE2-NEXT: pxor %xmm6, %xmm8
3234 ; SSE2-NEXT: pxor %xmm2, %xmm6
3235 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
3236 ; SSE2-NEXT: pxor %xmm6, %xmm4
3237 ; SSE2-NEXT: pandn %xmm2, %xmm6
3238 ; SSE2-NEXT: pandn %xmm0, %xmm4
3239 ; SSE2-NEXT: por %xmm6, %xmm4
3240 ; SSE2-NEXT: pandn %xmm3, %xmm7
3241 ; SSE2-NEXT: pandn %xmm1, %xmm5
3242 ; SSE2-NEXT: por %xmm7, %xmm5
3243 ; SSE2-NEXT: movdqa %xmm4, %xmm0
3244 ; SSE2-NEXT: movdqa %xmm5, %xmm1
3247 ; SSE4-LABEL: test96:
3248 ; SSE4: # BB#0: # %entry
3249 ; SSE4-NEXT: pminud %xmm2, %xmm0
3250 ; SSE4-NEXT: pminud %xmm3, %xmm1
3253 ; AVX1-LABEL: test96:
3254 ; AVX1: # BB#0: # %entry
3255 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
3256 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
3257 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
3258 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
3259 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
3262 ; AVX2-LABEL: test96:
3263 ; AVX2: # BB#0: # %entry
3264 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
3267 ; AVX512F-LABEL: test96:
3268 ; AVX512F: # BB#0: # %entry
3269 ; AVX512F-NEXT: vpminud %ymm1, %ymm0, %ymm0
3270 ; AVX512F-NEXT: retq
3272 %cmp = icmp uge <8 x i32> %a, %b
3273 %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3277 ; ----------------------------
3279 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3280 ; SSE2-LABEL: test97:
3281 ; SSE2: # BB#0: # %entry
3282 ; SSE2-NEXT: movdqa %xmm7, %xmm8
3283 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm8
3284 ; SSE2-NEXT: movdqa %xmm6, %xmm9
3285 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm9
3286 ; SSE2-NEXT: movdqa %xmm5, %xmm10
3287 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm10
3288 ; SSE2-NEXT: movdqa %xmm4, %xmm11
3289 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm11
3290 ; SSE2-NEXT: pand %xmm11, %xmm0
3291 ; SSE2-NEXT: pandn %xmm4, %xmm11
3292 ; SSE2-NEXT: por %xmm11, %xmm0
3293 ; SSE2-NEXT: pand %xmm10, %xmm1
3294 ; SSE2-NEXT: pandn %xmm5, %xmm10
3295 ; SSE2-NEXT: por %xmm10, %xmm1
3296 ; SSE2-NEXT: pand %xmm9, %xmm2
3297 ; SSE2-NEXT: pandn %xmm6, %xmm9
3298 ; SSE2-NEXT: por %xmm9, %xmm2
3299 ; SSE2-NEXT: pand %xmm8, %xmm3
3300 ; SSE2-NEXT: pandn %xmm7, %xmm8
3301 ; SSE2-NEXT: por %xmm8, %xmm3
3304 ; SSE4-LABEL: test97:
3305 ; SSE4: # BB#0: # %entry
3306 ; SSE4-NEXT: pminsb %xmm4, %xmm0
3307 ; SSE4-NEXT: pminsb %xmm5, %xmm1
3308 ; SSE4-NEXT: pminsb %xmm6, %xmm2
3309 ; SSE4-NEXT: pminsb %xmm7, %xmm3
3312 ; AVX1-LABEL: test97:
3313 ; AVX1: # BB#0: # %entry
3314 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3315 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3316 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
3317 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
3318 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3319 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3320 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3321 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2
3322 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
3323 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3326 ; AVX2-LABEL: test97:
3327 ; AVX2: # BB#0: # %entry
3328 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
3329 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
3332 ; AVX512BW-LABEL: test97:
3333 ; AVX512BW: # BB#0: # %entry
3334 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0
3335 ; AVX512BW-NEXT: retq
3337 %cmp = icmp slt <64 x i8> %a, %b
3338 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3342 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3343 ; SSE2-LABEL: test98:
3344 ; SSE2: # BB#0: # %entry
3345 ; SSE2-NEXT: movdqa %xmm3, %xmm8
3346 ; SSE2-NEXT: movdqa %xmm2, %xmm9
3347 ; SSE2-NEXT: movdqa %xmm8, %xmm12
3348 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm12
3349 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13
3350 ; SSE2-NEXT: movdqa %xmm12, %xmm3
3351 ; SSE2-NEXT: pxor %xmm13, %xmm3
3352 ; SSE2-NEXT: movdqa %xmm9, %xmm14
3353 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm14
3354 ; SSE2-NEXT: movdqa %xmm14, %xmm2
3355 ; SSE2-NEXT: pxor %xmm13, %xmm2
3356 ; SSE2-NEXT: movdqa %xmm1, %xmm15
3357 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm15
3358 ; SSE2-NEXT: movdqa %xmm15, %xmm10
3359 ; SSE2-NEXT: pxor %xmm13, %xmm10
3360 ; SSE2-NEXT: movdqa %xmm0, %xmm11
3361 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11
3362 ; SSE2-NEXT: pxor %xmm11, %xmm13
3363 ; SSE2-NEXT: pandn %xmm0, %xmm11
3364 ; SSE2-NEXT: pandn %xmm4, %xmm13
3365 ; SSE2-NEXT: por %xmm13, %xmm11
3366 ; SSE2-NEXT: pandn %xmm1, %xmm15
3367 ; SSE2-NEXT: pandn %xmm5, %xmm10
3368 ; SSE2-NEXT: por %xmm15, %xmm10
3369 ; SSE2-NEXT: pandn %xmm9, %xmm14
3370 ; SSE2-NEXT: pandn %xmm6, %xmm2
3371 ; SSE2-NEXT: por %xmm14, %xmm2
3372 ; SSE2-NEXT: pandn %xmm8, %xmm12
3373 ; SSE2-NEXT: pandn %xmm7, %xmm3
3374 ; SSE2-NEXT: por %xmm12, %xmm3
3375 ; SSE2-NEXT: movdqa %xmm11, %xmm0
3376 ; SSE2-NEXT: movdqa %xmm10, %xmm1
3379 ; SSE4-LABEL: test98:
3380 ; SSE4: # BB#0: # %entry
3381 ; SSE4-NEXT: pminsb %xmm4, %xmm0
3382 ; SSE4-NEXT: pminsb %xmm5, %xmm1
3383 ; SSE4-NEXT: pminsb %xmm6, %xmm2
3384 ; SSE4-NEXT: pminsb %xmm7, %xmm3
3387 ; AVX1-LABEL: test98:
3388 ; AVX1: # BB#0: # %entry
3389 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3390 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3391 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
3392 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
3393 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3394 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3395 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3396 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2
3397 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
3398 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3401 ; AVX2-LABEL: test98:
3402 ; AVX2: # BB#0: # %entry
3403 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
3404 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
3407 ; AVX512BW-LABEL: test98:
3408 ; AVX512BW: # BB#0: # %entry
3409 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0
3410 ; AVX512BW-NEXT: retq
3412 %cmp = icmp sle <64 x i8> %a, %b
3413 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3417 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3418 ; SSE2-LABEL: test99:
3419 ; SSE2: # BB#0: # %entry
3420 ; SSE2-NEXT: movdqa %xmm3, %xmm8
3421 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm3
3422 ; SSE2-NEXT: movdqa %xmm2, %xmm9
3423 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm9
3424 ; SSE2-NEXT: movdqa %xmm1, %xmm10
3425 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm10
3426 ; SSE2-NEXT: movdqa %xmm0, %xmm11
3427 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11
3428 ; SSE2-NEXT: pand %xmm11, %xmm0
3429 ; SSE2-NEXT: pandn %xmm4, %xmm11
3430 ; SSE2-NEXT: por %xmm0, %xmm11
3431 ; SSE2-NEXT: pand %xmm10, %xmm1
3432 ; SSE2-NEXT: pandn %xmm5, %xmm10
3433 ; SSE2-NEXT: por %xmm1, %xmm10
3434 ; SSE2-NEXT: pand %xmm9, %xmm2
3435 ; SSE2-NEXT: pandn %xmm6, %xmm9
3436 ; SSE2-NEXT: por %xmm2, %xmm9
3437 ; SSE2-NEXT: pand %xmm3, %xmm8
3438 ; SSE2-NEXT: pandn %xmm7, %xmm3
3439 ; SSE2-NEXT: por %xmm8, %xmm3
3440 ; SSE2-NEXT: movdqa %xmm11, %xmm0
3441 ; SSE2-NEXT: movdqa %xmm10, %xmm1
3442 ; SSE2-NEXT: movdqa %xmm9, %xmm2
3445 ; SSE4-LABEL: test99:
3446 ; SSE4: # BB#0: # %entry
3447 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0
3448 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1
3449 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2
3450 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3
3453 ; AVX1-LABEL: test99:
3454 ; AVX1: # BB#0: # %entry
3455 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3456 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3457 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
3458 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
3459 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3460 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3461 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3462 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2
3463 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
3464 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3467 ; AVX2-LABEL: test99:
3468 ; AVX2: # BB#0: # %entry
3469 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
3470 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
3473 ; AVX512BW-LABEL: test99:
3474 ; AVX512BW: # BB#0: # %entry
3475 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
3476 ; AVX512BW-NEXT: retq
3478 %cmp = icmp sgt <64 x i8> %a, %b
3479 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3483 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3484 ; SSE2-LABEL: test100:
3485 ; SSE2: # BB#0: # %entry
3486 ; SSE2-NEXT: movdqa %xmm3, %xmm8
3487 ; SSE2-NEXT: movdqa %xmm2, %xmm9
3488 ; SSE2-NEXT: movdqa %xmm0, %xmm10
3489 ; SSE2-NEXT: movdqa %xmm7, %xmm12
3490 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm12
3491 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
3492 ; SSE2-NEXT: movdqa %xmm12, %xmm3
3493 ; SSE2-NEXT: pxor %xmm0, %xmm3
3494 ; SSE2-NEXT: movdqa %xmm6, %xmm13
3495 ; SSE2-NEXT: pcmpgtb %xmm9, %xmm13
3496 ; SSE2-NEXT: movdqa %xmm13, %xmm2
3497 ; SSE2-NEXT: pxor %xmm0, %xmm2
3498 ; SSE2-NEXT: movdqa %xmm5, %xmm14
3499 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm14
3500 ; SSE2-NEXT: movdqa %xmm14, %xmm11
3501 ; SSE2-NEXT: pxor %xmm0, %xmm11
3502 ; SSE2-NEXT: movdqa %xmm4, %xmm15
3503 ; SSE2-NEXT: pcmpgtb %xmm10, %xmm15
3504 ; SSE2-NEXT: pxor %xmm15, %xmm0
3505 ; SSE2-NEXT: pandn %xmm10, %xmm15
3506 ; SSE2-NEXT: pandn %xmm4, %xmm0
3507 ; SSE2-NEXT: por %xmm15, %xmm0
3508 ; SSE2-NEXT: pandn %xmm1, %xmm14
3509 ; SSE2-NEXT: pandn %xmm5, %xmm11
3510 ; SSE2-NEXT: por %xmm14, %xmm11
3511 ; SSE2-NEXT: pandn %xmm9, %xmm13
3512 ; SSE2-NEXT: pandn %xmm6, %xmm2
3513 ; SSE2-NEXT: por %xmm13, %xmm2
3514 ; SSE2-NEXT: pandn %xmm8, %xmm12
3515 ; SSE2-NEXT: pandn %xmm7, %xmm3
3516 ; SSE2-NEXT: por %xmm12, %xmm3
3517 ; SSE2-NEXT: movdqa %xmm11, %xmm1
3520 ; SSE4-LABEL: test100:
3521 ; SSE4: # BB#0: # %entry
3522 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0
3523 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1
3524 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2
3525 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3
3528 ; AVX1-LABEL: test100:
3529 ; AVX1: # BB#0: # %entry
3530 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3531 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3532 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
3533 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
3534 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3535 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3536 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3537 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2
3538 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
3539 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3542 ; AVX2-LABEL: test100:
3543 ; AVX2: # BB#0: # %entry
3544 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
3545 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
3548 ; AVX512BW-LABEL: test100:
3549 ; AVX512BW: # BB#0: # %entry
3550 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
3551 ; AVX512BW-NEXT: retq
3553 %cmp = icmp sge <64 x i8> %a, %b
3554 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3558 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3559 ; SSE-LABEL: test101:
3560 ; SSE: # BB#0: # %entry
3561 ; SSE-NEXT: pminub %xmm4, %xmm0
3562 ; SSE-NEXT: pminub %xmm5, %xmm1
3563 ; SSE-NEXT: pminub %xmm6, %xmm2
3564 ; SSE-NEXT: pminub %xmm7, %xmm3
3567 ; AVX1-LABEL: test101:
3568 ; AVX1: # BB#0: # %entry
3569 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3570 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3571 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
3572 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
3573 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3574 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3575 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3576 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2
3577 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
3578 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3581 ; AVX2-LABEL: test101:
3582 ; AVX2: # BB#0: # %entry
3583 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
3584 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
3587 ; AVX512BW-LABEL: test101:
3588 ; AVX512BW: # BB#0: # %entry
3589 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0
3590 ; AVX512BW-NEXT: retq
3592 %cmp = icmp ult <64 x i8> %a, %b
3593 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3597 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3598 ; SSE-LABEL: test102:
3599 ; SSE: # BB#0: # %entry
3600 ; SSE-NEXT: pminub %xmm4, %xmm0
3601 ; SSE-NEXT: pminub %xmm5, %xmm1
3602 ; SSE-NEXT: pminub %xmm6, %xmm2
3603 ; SSE-NEXT: pminub %xmm7, %xmm3
3606 ; AVX1-LABEL: test102:
3607 ; AVX1: # BB#0: # %entry
3608 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3609 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3610 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
3611 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
3612 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3613 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3614 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3615 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2
3616 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
3617 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3620 ; AVX2-LABEL: test102:
3621 ; AVX2: # BB#0: # %entry
3622 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
3623 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
3626 ; AVX512BW-LABEL: test102:
3627 ; AVX512BW: # BB#0: # %entry
3628 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0
3629 ; AVX512BW-NEXT: retq
3631 %cmp = icmp ule <64 x i8> %a, %b
3632 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3636 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3637 ; SSE-LABEL: test103:
3638 ; SSE: # BB#0: # %entry
3639 ; SSE-NEXT: pmaxub %xmm4, %xmm0
3640 ; SSE-NEXT: pmaxub %xmm5, %xmm1
3641 ; SSE-NEXT: pmaxub %xmm6, %xmm2
3642 ; SSE-NEXT: pmaxub %xmm7, %xmm3
3645 ; AVX1-LABEL: test103:
3646 ; AVX1: # BB#0: # %entry
3647 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3648 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3649 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
3650 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
3651 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3652 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3653 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3654 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2
3655 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
3656 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3659 ; AVX2-LABEL: test103:
3660 ; AVX2: # BB#0: # %entry
3661 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
3662 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
3665 ; AVX512BW-LABEL: test103:
3666 ; AVX512BW: # BB#0: # %entry
3667 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
3668 ; AVX512BW-NEXT: retq
3670 %cmp = icmp ugt <64 x i8> %a, %b
3671 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3675 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3676 ; SSE-LABEL: test104:
3677 ; SSE: # BB#0: # %entry
3678 ; SSE-NEXT: pmaxub %xmm4, %xmm0
3679 ; SSE-NEXT: pmaxub %xmm5, %xmm1
3680 ; SSE-NEXT: pmaxub %xmm6, %xmm2
3681 ; SSE-NEXT: pmaxub %xmm7, %xmm3
3684 ; AVX1-LABEL: test104:
3685 ; AVX1: # BB#0: # %entry
3686 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3687 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3688 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
3689 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
3690 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3691 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3692 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3693 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2
3694 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
3695 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3698 ; AVX2-LABEL: test104:
3699 ; AVX2: # BB#0: # %entry
3700 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
3701 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
3704 ; AVX512BW-LABEL: test104:
3705 ; AVX512BW: # BB#0: # %entry
3706 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
3707 ; AVX512BW-NEXT: retq
3709 %cmp = icmp uge <64 x i8> %a, %b
3710 %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3714 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3715 ; SSE-LABEL: test105:
3716 ; SSE: # BB#0: # %entry
3717 ; SSE-NEXT: pminsw %xmm4, %xmm0
3718 ; SSE-NEXT: pminsw %xmm5, %xmm1
3719 ; SSE-NEXT: pminsw %xmm6, %xmm2
3720 ; SSE-NEXT: pminsw %xmm7, %xmm3
3723 ; AVX1-LABEL: test105:
3724 ; AVX1: # BB#0: # %entry
3725 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3726 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3727 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
3728 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
3729 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3730 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3731 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3732 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2
3733 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
3734 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3737 ; AVX2-LABEL: test105:
3738 ; AVX2: # BB#0: # %entry
3739 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
3740 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
3743 ; AVX512BW-LABEL: test105:
3744 ; AVX512BW: # BB#0: # %entry
3745 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0
3746 ; AVX512BW-NEXT: retq
3748 %cmp = icmp slt <32 x i16> %a, %b
3749 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3753 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3754 ; SSE-LABEL: test106:
3755 ; SSE: # BB#0: # %entry
3756 ; SSE-NEXT: pminsw %xmm4, %xmm0
3757 ; SSE-NEXT: pminsw %xmm5, %xmm1
3758 ; SSE-NEXT: pminsw %xmm6, %xmm2
3759 ; SSE-NEXT: pminsw %xmm7, %xmm3
3762 ; AVX1-LABEL: test106:
3763 ; AVX1: # BB#0: # %entry
3764 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3765 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3766 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
3767 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
3768 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3769 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3770 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3771 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2
3772 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
3773 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3776 ; AVX2-LABEL: test106:
3777 ; AVX2: # BB#0: # %entry
3778 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
3779 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
3782 ; AVX512BW-LABEL: test106:
3783 ; AVX512BW: # BB#0: # %entry
3784 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0
3785 ; AVX512BW-NEXT: retq
3787 %cmp = icmp sle <32 x i16> %a, %b
3788 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3792 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3793 ; SSE-LABEL: test107:
3794 ; SSE: # BB#0: # %entry
3795 ; SSE-NEXT: pmaxsw %xmm4, %xmm0
3796 ; SSE-NEXT: pmaxsw %xmm5, %xmm1
3797 ; SSE-NEXT: pmaxsw %xmm6, %xmm2
3798 ; SSE-NEXT: pmaxsw %xmm7, %xmm3
3801 ; AVX1-LABEL: test107:
3802 ; AVX1: # BB#0: # %entry
3803 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3804 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3805 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
3806 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
3807 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3808 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3809 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3810 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2
3811 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
3812 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3815 ; AVX2-LABEL: test107:
3816 ; AVX2: # BB#0: # %entry
3817 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
3818 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
3821 ; AVX512BW-LABEL: test107:
3822 ; AVX512BW: # BB#0: # %entry
3823 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
3824 ; AVX512BW-NEXT: retq
3826 %cmp = icmp sgt <32 x i16> %a, %b
3827 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3831 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3832 ; SSE-LABEL: test108:
3833 ; SSE: # BB#0: # %entry
3834 ; SSE-NEXT: pmaxsw %xmm4, %xmm0
3835 ; SSE-NEXT: pmaxsw %xmm5, %xmm1
3836 ; SSE-NEXT: pmaxsw %xmm6, %xmm2
3837 ; SSE-NEXT: pmaxsw %xmm7, %xmm3
3840 ; AVX1-LABEL: test108:
3841 ; AVX1: # BB#0: # %entry
3842 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3843 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3844 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
3845 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
3846 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3847 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3848 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3849 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2
3850 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
3851 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3854 ; AVX2-LABEL: test108:
3855 ; AVX2: # BB#0: # %entry
3856 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
3857 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
3860 ; AVX512BW-LABEL: test108:
3861 ; AVX512BW: # BB#0: # %entry
3862 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
3863 ; AVX512BW-NEXT: retq
3865 %cmp = icmp sge <32 x i16> %a, %b
3866 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3870 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3871 ; SSE2-LABEL: test109:
3872 ; SSE2: # BB#0: # %entry
3873 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768,32768,32768,32768,32768]
3874 ; SSE2-NEXT: movdqa %xmm3, %xmm9
3875 ; SSE2-NEXT: pxor %xmm10, %xmm9
3876 ; SSE2-NEXT: movdqa %xmm7, %xmm8
3877 ; SSE2-NEXT: pxor %xmm10, %xmm8
3878 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8
3879 ; SSE2-NEXT: movdqa %xmm2, %xmm11
3880 ; SSE2-NEXT: pxor %xmm10, %xmm11
3881 ; SSE2-NEXT: movdqa %xmm6, %xmm9
3882 ; SSE2-NEXT: pxor %xmm10, %xmm9
3883 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm9
3884 ; SSE2-NEXT: movdqa %xmm1, %xmm11
3885 ; SSE2-NEXT: pxor %xmm10, %xmm11
3886 ; SSE2-NEXT: movdqa %xmm5, %xmm12
3887 ; SSE2-NEXT: pxor %xmm10, %xmm12
3888 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm12
3889 ; SSE2-NEXT: movdqa %xmm0, %xmm11
3890 ; SSE2-NEXT: pxor %xmm10, %xmm11
3891 ; SSE2-NEXT: pxor %xmm4, %xmm10
3892 ; SSE2-NEXT: pcmpgtw %xmm11, %xmm10
3893 ; SSE2-NEXT: pand %xmm10, %xmm0
3894 ; SSE2-NEXT: pandn %xmm4, %xmm10
3895 ; SSE2-NEXT: por %xmm10, %xmm0
3896 ; SSE2-NEXT: pand %xmm12, %xmm1
3897 ; SSE2-NEXT: pandn %xmm5, %xmm12
3898 ; SSE2-NEXT: por %xmm12, %xmm1
3899 ; SSE2-NEXT: pand %xmm9, %xmm2
3900 ; SSE2-NEXT: pandn %xmm6, %xmm9
3901 ; SSE2-NEXT: por %xmm9, %xmm2
3902 ; SSE2-NEXT: pand %xmm8, %xmm3
3903 ; SSE2-NEXT: pandn %xmm7, %xmm8
3904 ; SSE2-NEXT: por %xmm8, %xmm3
3907 ; SSE4-LABEL: test109:
3908 ; SSE4: # BB#0: # %entry
3909 ; SSE4-NEXT: pminuw %xmm4, %xmm0
3910 ; SSE4-NEXT: pminuw %xmm5, %xmm1
3911 ; SSE4-NEXT: pminuw %xmm6, %xmm2
3912 ; SSE4-NEXT: pminuw %xmm7, %xmm3
3915 ; AVX1-LABEL: test109:
3916 ; AVX1: # BB#0: # %entry
3917 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3918 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3919 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
3920 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
3921 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3922 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3923 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3924 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2
3925 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
3926 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3929 ; AVX2-LABEL: test109:
3930 ; AVX2: # BB#0: # %entry
3931 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
3932 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
3935 ; AVX512BW-LABEL: test109:
3936 ; AVX512BW: # BB#0: # %entry
3937 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0
3938 ; AVX512BW-NEXT: retq
3940 %cmp = icmp ult <32 x i16> %a, %b
3941 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3945 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3946 ; SSE2-LABEL: test110:
3947 ; SSE2: # BB#0: # %entry
3948 ; SSE2-NEXT: movdqa %xmm3, %xmm8
3949 ; SSE2-NEXT: movdqa %xmm2, %xmm9
3950 ; SSE2-NEXT: movdqa %xmm1, %xmm10
3951 ; SSE2-NEXT: psubusw %xmm7, %xmm3
3952 ; SSE2-NEXT: pxor %xmm12, %xmm12
3953 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3
3954 ; SSE2-NEXT: psubusw %xmm6, %xmm2
3955 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2
3956 ; SSE2-NEXT: psubusw %xmm5, %xmm1
3957 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1
3958 ; SSE2-NEXT: movdqa %xmm0, %xmm11
3959 ; SSE2-NEXT: psubusw %xmm4, %xmm11
3960 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11
3961 ; SSE2-NEXT: pand %xmm11, %xmm0
3962 ; SSE2-NEXT: pandn %xmm4, %xmm11
3963 ; SSE2-NEXT: por %xmm0, %xmm11
3964 ; SSE2-NEXT: pand %xmm1, %xmm10
3965 ; SSE2-NEXT: pandn %xmm5, %xmm1
3966 ; SSE2-NEXT: por %xmm10, %xmm1
3967 ; SSE2-NEXT: pand %xmm2, %xmm9
3968 ; SSE2-NEXT: pandn %xmm6, %xmm2
3969 ; SSE2-NEXT: por %xmm9, %xmm2
3970 ; SSE2-NEXT: pand %xmm3, %xmm8
3971 ; SSE2-NEXT: pandn %xmm7, %xmm3
3972 ; SSE2-NEXT: por %xmm8, %xmm3
3973 ; SSE2-NEXT: movdqa %xmm11, %xmm0
3976 ; SSE4-LABEL: test110:
3977 ; SSE4: # BB#0: # %entry
3978 ; SSE4-NEXT: pminuw %xmm4, %xmm0
3979 ; SSE4-NEXT: pminuw %xmm5, %xmm1
3980 ; SSE4-NEXT: pminuw %xmm6, %xmm2
3981 ; SSE4-NEXT: pminuw %xmm7, %xmm3
3984 ; AVX1-LABEL: test110:
3985 ; AVX1: # BB#0: # %entry
3986 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
3987 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
3988 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
3989 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
3990 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
3991 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
3992 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
3993 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2
3994 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
3995 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
3998 ; AVX2-LABEL: test110:
3999 ; AVX2: # BB#0: # %entry
4000 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
4001 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
4004 ; AVX512BW-LABEL: test110:
4005 ; AVX512BW: # BB#0: # %entry
4006 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0
4007 ; AVX512BW-NEXT: retq
4009 %cmp = icmp ule <32 x i16> %a, %b
4010 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
4014 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
4015 ; SSE2-LABEL: test111:
4016 ; SSE2: # BB#0: # %entry
4017 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [32768,32768,32768,32768,32768,32768,32768,32768]
4018 ; SSE2-NEXT: movdqa %xmm7, %xmm9
4019 ; SSE2-NEXT: pxor %xmm11, %xmm9
4020 ; SSE2-NEXT: movdqa %xmm3, %xmm8
4021 ; SSE2-NEXT: pxor %xmm11, %xmm8
4022 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8
4023 ; SSE2-NEXT: movdqa %xmm6, %xmm10
4024 ; SSE2-NEXT: pxor %xmm11, %xmm10
4025 ; SSE2-NEXT: movdqa %xmm2, %xmm9
4026 ; SSE2-NEXT: pxor %xmm11, %xmm9
4027 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9
4028 ; SSE2-NEXT: movdqa %xmm5, %xmm12
4029 ; SSE2-NEXT: pxor %xmm11, %xmm12
4030 ; SSE2-NEXT: movdqa %xmm1, %xmm10
4031 ; SSE2-NEXT: pxor %xmm11, %xmm10
4032 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10
4033 ; SSE2-NEXT: movdqa %xmm4, %xmm12
4034 ; SSE2-NEXT: pxor %xmm11, %xmm12
4035 ; SSE2-NEXT: pxor %xmm0, %xmm11
4036 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm11
4037 ; SSE2-NEXT: pand %xmm11, %xmm0
4038 ; SSE2-NEXT: pandn %xmm4, %xmm11
4039 ; SSE2-NEXT: por %xmm11, %xmm0
4040 ; SSE2-NEXT: pand %xmm10, %xmm1
4041 ; SSE2-NEXT: pandn %xmm5, %xmm10
4042 ; SSE2-NEXT: por %xmm1, %xmm10
4043 ; SSE2-NEXT: pand %xmm9, %xmm2
4044 ; SSE2-NEXT: pandn %xmm6, %xmm9
4045 ; SSE2-NEXT: por %xmm2, %xmm9
4046 ; SSE2-NEXT: pand %xmm8, %xmm3
4047 ; SSE2-NEXT: pandn %xmm7, %xmm8
4048 ; SSE2-NEXT: por %xmm3, %xmm8
4049 ; SSE2-NEXT: movdqa %xmm10, %xmm1
4050 ; SSE2-NEXT: movdqa %xmm9, %xmm2
4051 ; SSE2-NEXT: movdqa %xmm8, %xmm3
4054 ; SSE4-LABEL: test111:
4055 ; SSE4: # BB#0: # %entry
4056 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0
4057 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1
4058 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2
4059 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3
4062 ; AVX1-LABEL: test111:
4063 ; AVX1: # BB#0: # %entry
4064 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4065 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4066 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
4067 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
4068 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4069 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4070 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4071 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2
4072 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
4073 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4076 ; AVX2-LABEL: test111:
4077 ; AVX2: # BB#0: # %entry
4078 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
4079 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
4082 ; AVX512BW-LABEL: test111:
4083 ; AVX512BW: # BB#0: # %entry
4084 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
4085 ; AVX512BW-NEXT: retq
4087 %cmp = icmp ugt <32 x i16> %a, %b
4088 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
4092 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
4093 ; SSE2-LABEL: test112:
4094 ; SSE2: # BB#0: # %entry
4095 ; SSE2-NEXT: movdqa %xmm7, %xmm8
4096 ; SSE2-NEXT: psubusw %xmm3, %xmm8
4097 ; SSE2-NEXT: pxor %xmm9, %xmm9
4098 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm8
4099 ; SSE2-NEXT: movdqa %xmm6, %xmm10
4100 ; SSE2-NEXT: psubusw %xmm2, %xmm10
4101 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm10
4102 ; SSE2-NEXT: movdqa %xmm5, %xmm11
4103 ; SSE2-NEXT: psubusw %xmm1, %xmm11
4104 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm11
4105 ; SSE2-NEXT: movdqa %xmm4, %xmm12
4106 ; SSE2-NEXT: psubusw %xmm0, %xmm12
4107 ; SSE2-NEXT: pcmpeqw %xmm9, %xmm12
4108 ; SSE2-NEXT: pand %xmm12, %xmm0
4109 ; SSE2-NEXT: pandn %xmm4, %xmm12
4110 ; SSE2-NEXT: por %xmm12, %xmm0
4111 ; SSE2-NEXT: pand %xmm11, %xmm1
4112 ; SSE2-NEXT: pandn %xmm5, %xmm11
4113 ; SSE2-NEXT: por %xmm11, %xmm1
4114 ; SSE2-NEXT: pand %xmm10, %xmm2
4115 ; SSE2-NEXT: pandn %xmm6, %xmm10
4116 ; SSE2-NEXT: por %xmm10, %xmm2
4117 ; SSE2-NEXT: pand %xmm8, %xmm3
4118 ; SSE2-NEXT: pandn %xmm7, %xmm8
4119 ; SSE2-NEXT: por %xmm8, %xmm3
4122 ; SSE4-LABEL: test112:
4123 ; SSE4: # BB#0: # %entry
4124 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0
4125 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1
4126 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2
4127 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3
4130 ; AVX1-LABEL: test112:
4131 ; AVX1: # BB#0: # %entry
4132 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4133 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4134 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
4135 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
4136 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4137 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4138 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4139 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2
4140 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
4141 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4144 ; AVX2-LABEL: test112:
4145 ; AVX2: # BB#0: # %entry
4146 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
4147 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
4150 ; AVX512BW-LABEL: test112:
4151 ; AVX512BW: # BB#0: # %entry
4152 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
4153 ; AVX512BW-NEXT: retq
4155 %cmp = icmp uge <32 x i16> %a, %b
4156 %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
4160 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
4161 ; SSE2-LABEL: test113:
4162 ; SSE2: # BB#0: # %entry
4163 ; SSE2-NEXT: movdqa %xmm7, %xmm8
4164 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm8
4165 ; SSE2-NEXT: movdqa %xmm6, %xmm9
4166 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9
4167 ; SSE2-NEXT: movdqa %xmm5, %xmm10
4168 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm10
4169 ; SSE2-NEXT: movdqa %xmm4, %xmm11
4170 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm11
4171 ; SSE2-NEXT: pand %xmm11, %xmm0
4172 ; SSE2-NEXT: pandn %xmm4, %xmm11
4173 ; SSE2-NEXT: por %xmm11, %xmm0
4174 ; SSE2-NEXT: pand %xmm10, %xmm1
4175 ; SSE2-NEXT: pandn %xmm5, %xmm10
4176 ; SSE2-NEXT: por %xmm10, %xmm1
4177 ; SSE2-NEXT: pand %xmm9, %xmm2
4178 ; SSE2-NEXT: pandn %xmm6, %xmm9
4179 ; SSE2-NEXT: por %xmm9, %xmm2
4180 ; SSE2-NEXT: pand %xmm8, %xmm3
4181 ; SSE2-NEXT: pandn %xmm7, %xmm8
4182 ; SSE2-NEXT: por %xmm8, %xmm3
4185 ; SSE4-LABEL: test113:
4186 ; SSE4: # BB#0: # %entry
4187 ; SSE4-NEXT: pminsd %xmm4, %xmm0
4188 ; SSE4-NEXT: pminsd %xmm5, %xmm1
4189 ; SSE4-NEXT: pminsd %xmm6, %xmm2
4190 ; SSE4-NEXT: pminsd %xmm7, %xmm3
4193 ; AVX1-LABEL: test113:
4194 ; AVX1: # BB#0: # %entry
4195 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4196 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4197 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
4198 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
4199 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4200 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4201 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4202 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2
4203 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
4204 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4207 ; AVX2-LABEL: test113:
4208 ; AVX2: # BB#0: # %entry
4209 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
4210 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
4213 ; AVX512F-LABEL: test113:
4214 ; AVX512F: # BB#0: # %entry
4215 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0
4216 ; AVX512F-NEXT: retq
4218 %cmp = icmp slt <16 x i32> %a, %b
4219 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4223 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
4224 ; SSE2-LABEL: test114:
4225 ; SSE2: # BB#0: # %entry
4226 ; SSE2-NEXT: movdqa %xmm3, %xmm8
4227 ; SSE2-NEXT: movdqa %xmm2, %xmm9
4228 ; SSE2-NEXT: movdqa %xmm8, %xmm12
4229 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm12
4230 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13
4231 ; SSE2-NEXT: movdqa %xmm12, %xmm3
4232 ; SSE2-NEXT: pxor %xmm13, %xmm3
4233 ; SSE2-NEXT: movdqa %xmm9, %xmm14
4234 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm14
4235 ; SSE2-NEXT: movdqa %xmm14, %xmm2
4236 ; SSE2-NEXT: pxor %xmm13, %xmm2
4237 ; SSE2-NEXT: movdqa %xmm1, %xmm15
4238 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm15
4239 ; SSE2-NEXT: movdqa %xmm15, %xmm10
4240 ; SSE2-NEXT: pxor %xmm13, %xmm10
4241 ; SSE2-NEXT: movdqa %xmm0, %xmm11
4242 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11
4243 ; SSE2-NEXT: pxor %xmm11, %xmm13
4244 ; SSE2-NEXT: pandn %xmm0, %xmm11
4245 ; SSE2-NEXT: pandn %xmm4, %xmm13
4246 ; SSE2-NEXT: por %xmm13, %xmm11
4247 ; SSE2-NEXT: pandn %xmm1, %xmm15
4248 ; SSE2-NEXT: pandn %xmm5, %xmm10
4249 ; SSE2-NEXT: por %xmm15, %xmm10
4250 ; SSE2-NEXT: pandn %xmm9, %xmm14
4251 ; SSE2-NEXT: pandn %xmm6, %xmm2
4252 ; SSE2-NEXT: por %xmm14, %xmm2
4253 ; SSE2-NEXT: pandn %xmm8, %xmm12
4254 ; SSE2-NEXT: pandn %xmm7, %xmm3
4255 ; SSE2-NEXT: por %xmm12, %xmm3
4256 ; SSE2-NEXT: movdqa %xmm11, %xmm0
4257 ; SSE2-NEXT: movdqa %xmm10, %xmm1
4260 ; SSE4-LABEL: test114:
4261 ; SSE4: # BB#0: # %entry
4262 ; SSE4-NEXT: pminsd %xmm4, %xmm0
4263 ; SSE4-NEXT: pminsd %xmm5, %xmm1
4264 ; SSE4-NEXT: pminsd %xmm6, %xmm2
4265 ; SSE4-NEXT: pminsd %xmm7, %xmm3
4268 ; AVX1-LABEL: test114:
4269 ; AVX1: # BB#0: # %entry
4270 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4271 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4272 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
4273 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
4274 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4275 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4276 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4277 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2
4278 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
4279 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4282 ; AVX2-LABEL: test114:
4283 ; AVX2: # BB#0: # %entry
4284 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
4285 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
4288 ; AVX512F-LABEL: test114:
4289 ; AVX512F: # BB#0: # %entry
4290 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0
4291 ; AVX512F-NEXT: retq
4293 %cmp = icmp sle <16 x i32> %a, %b
4294 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4298 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4299 ; SSE2-LABEL: test115:
4300 ; SSE2: # BB#0: # %entry
4301 ; SSE2-NEXT: movdqa %xmm3, %xmm8
4302 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm3
4303 ; SSE2-NEXT: movdqa %xmm2, %xmm9
4304 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm9
4305 ; SSE2-NEXT: movdqa %xmm1, %xmm10
4306 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm10
4307 ; SSE2-NEXT: movdqa %xmm0, %xmm11
4308 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11
4309 ; SSE2-NEXT: pand %xmm11, %xmm0
4310 ; SSE2-NEXT: pandn %xmm4, %xmm11
4311 ; SSE2-NEXT: por %xmm0, %xmm11
4312 ; SSE2-NEXT: pand %xmm10, %xmm1
4313 ; SSE2-NEXT: pandn %xmm5, %xmm10
4314 ; SSE2-NEXT: por %xmm1, %xmm10
4315 ; SSE2-NEXT: pand %xmm9, %xmm2
4316 ; SSE2-NEXT: pandn %xmm6, %xmm9
4317 ; SSE2-NEXT: por %xmm2, %xmm9
4318 ; SSE2-NEXT: pand %xmm3, %xmm8
4319 ; SSE2-NEXT: pandn %xmm7, %xmm3
4320 ; SSE2-NEXT: por %xmm8, %xmm3
4321 ; SSE2-NEXT: movdqa %xmm11, %xmm0
4322 ; SSE2-NEXT: movdqa %xmm10, %xmm1
4323 ; SSE2-NEXT: movdqa %xmm9, %xmm2
4326 ; SSE4-LABEL: test115:
4327 ; SSE4: # BB#0: # %entry
4328 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0
4329 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1
4330 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2
4331 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3
4334 ; AVX1-LABEL: test115:
4335 ; AVX1: # BB#0: # %entry
4336 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4337 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4338 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4
4339 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
4340 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4341 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4342 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4343 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2
4344 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
4345 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4348 ; AVX2-LABEL: test115:
4349 ; AVX2: # BB#0: # %entry
4350 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
4351 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
4354 ; AVX512F-LABEL: test115:
4355 ; AVX512F: # BB#0: # %entry
4356 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
4357 ; AVX512F-NEXT: retq
4359 %cmp = icmp sgt <16 x i32> %a, %b
4360 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4364 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4365 ; SSE2-LABEL: test116:
4366 ; SSE2: # BB#0: # %entry
4367 ; SSE2-NEXT: movdqa %xmm3, %xmm8
4368 ; SSE2-NEXT: movdqa %xmm2, %xmm9
4369 ; SSE2-NEXT: movdqa %xmm0, %xmm10
4370 ; SSE2-NEXT: movdqa %xmm7, %xmm12
4371 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm12
4372 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
4373 ; SSE2-NEXT: movdqa %xmm12, %xmm3
4374 ; SSE2-NEXT: pxor %xmm0, %xmm3
4375 ; SSE2-NEXT: movdqa %xmm6, %xmm13
4376 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13
4377 ; SSE2-NEXT: movdqa %xmm13, %xmm2
4378 ; SSE2-NEXT: pxor %xmm0, %xmm2
4379 ; SSE2-NEXT: movdqa %xmm5, %xmm14
4380 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm14
4381 ; SSE2-NEXT: movdqa %xmm14, %xmm11
4382 ; SSE2-NEXT: pxor %xmm0, %xmm11
4383 ; SSE2-NEXT: movdqa %xmm4, %xmm15
4384 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm15
4385 ; SSE2-NEXT: pxor %xmm15, %xmm0
4386 ; SSE2-NEXT: pandn %xmm10, %xmm15
4387 ; SSE2-NEXT: pandn %xmm4, %xmm0
4388 ; SSE2-NEXT: por %xmm15, %xmm0
4389 ; SSE2-NEXT: pandn %xmm1, %xmm14
4390 ; SSE2-NEXT: pandn %xmm5, %xmm11
4391 ; SSE2-NEXT: por %xmm14, %xmm11
4392 ; SSE2-NEXT: pandn %xmm9, %xmm13
4393 ; SSE2-NEXT: pandn %xmm6, %xmm2
4394 ; SSE2-NEXT: por %xmm13, %xmm2
4395 ; SSE2-NEXT: pandn %xmm8, %xmm12
4396 ; SSE2-NEXT: pandn %xmm7, %xmm3
4397 ; SSE2-NEXT: por %xmm12, %xmm3
4398 ; SSE2-NEXT: movdqa %xmm11, %xmm1
4401 ; SSE4-LABEL: test116:
4402 ; SSE4: # BB#0: # %entry
4403 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0
4404 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1
4405 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2
4406 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3
4409 ; AVX1-LABEL: test116:
4410 ; AVX1: # BB#0: # %entry
4411 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4412 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4413 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4
4414 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
4415 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4416 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4417 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4418 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2
4419 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
4420 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4423 ; AVX2-LABEL: test116:
4424 ; AVX2: # BB#0: # %entry
4425 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
4426 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
4429 ; AVX512F-LABEL: test116:
4430 ; AVX512F: # BB#0: # %entry
4431 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
4432 ; AVX512F-NEXT: retq
4434 %cmp = icmp sge <16 x i32> %a, %b
4435 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4439 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4440 ; SSE2-LABEL: test117:
4441 ; SSE2: # BB#0: # %entry
4442 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
4443 ; SSE2-NEXT: movdqa %xmm3, %xmm9
4444 ; SSE2-NEXT: pxor %xmm10, %xmm9
4445 ; SSE2-NEXT: movdqa %xmm7, %xmm8
4446 ; SSE2-NEXT: pxor %xmm10, %xmm8
4447 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8
4448 ; SSE2-NEXT: movdqa %xmm2, %xmm11
4449 ; SSE2-NEXT: pxor %xmm10, %xmm11
4450 ; SSE2-NEXT: movdqa %xmm6, %xmm9
4451 ; SSE2-NEXT: pxor %xmm10, %xmm9
4452 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm9
4453 ; SSE2-NEXT: movdqa %xmm1, %xmm11
4454 ; SSE2-NEXT: pxor %xmm10, %xmm11
4455 ; SSE2-NEXT: movdqa %xmm5, %xmm12
4456 ; SSE2-NEXT: pxor %xmm10, %xmm12
4457 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm12
4458 ; SSE2-NEXT: movdqa %xmm0, %xmm11
4459 ; SSE2-NEXT: pxor %xmm10, %xmm11
4460 ; SSE2-NEXT: pxor %xmm4, %xmm10
4461 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm10
4462 ; SSE2-NEXT: pand %xmm10, %xmm0
4463 ; SSE2-NEXT: pandn %xmm4, %xmm10
4464 ; SSE2-NEXT: por %xmm10, %xmm0
4465 ; SSE2-NEXT: pand %xmm12, %xmm1
4466 ; SSE2-NEXT: pandn %xmm5, %xmm12
4467 ; SSE2-NEXT: por %xmm12, %xmm1
4468 ; SSE2-NEXT: pand %xmm9, %xmm2
4469 ; SSE2-NEXT: pandn %xmm6, %xmm9
4470 ; SSE2-NEXT: por %xmm9, %xmm2
4471 ; SSE2-NEXT: pand %xmm8, %xmm3
4472 ; SSE2-NEXT: pandn %xmm7, %xmm8
4473 ; SSE2-NEXT: por %xmm8, %xmm3
4476 ; SSE4-LABEL: test117:
4477 ; SSE4: # BB#0: # %entry
4478 ; SSE4-NEXT: pminud %xmm4, %xmm0
4479 ; SSE4-NEXT: pminud %xmm5, %xmm1
4480 ; SSE4-NEXT: pminud %xmm6, %xmm2
4481 ; SSE4-NEXT: pminud %xmm7, %xmm3
4484 ; AVX1-LABEL: test117:
4485 ; AVX1: # BB#0: # %entry
4486 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4487 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4488 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
4489 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
4490 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4491 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4492 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4493 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2
4494 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
4495 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4498 ; AVX2-LABEL: test117:
4499 ; AVX2: # BB#0: # %entry
4500 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
4501 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
4504 ; AVX512F-LABEL: test117:
4505 ; AVX512F: # BB#0: # %entry
4506 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0
4507 ; AVX512F-NEXT: retq
4509 %cmp = icmp ult <16 x i32> %a, %b
4510 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4514 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4515 ; SSE2-LABEL: test118:
4516 ; SSE2: # BB#0: # %entry
4517 ; SSE2-NEXT: movdqa %xmm0, %xmm10
4518 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
4519 ; SSE2-NEXT: movdqa %xmm7, %xmm0
4520 ; SSE2-NEXT: pxor %xmm14, %xmm0
4521 ; SSE2-NEXT: movdqa %xmm3, %xmm12
4522 ; SSE2-NEXT: pxor %xmm14, %xmm12
4523 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12
4524 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
4525 ; SSE2-NEXT: movdqa %xmm12, %xmm8
4526 ; SSE2-NEXT: pxor %xmm0, %xmm8
4527 ; SSE2-NEXT: movdqa %xmm6, %xmm9
4528 ; SSE2-NEXT: pxor %xmm14, %xmm9
4529 ; SSE2-NEXT: movdqa %xmm2, %xmm13
4530 ; SSE2-NEXT: pxor %xmm14, %xmm13
4531 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13
4532 ; SSE2-NEXT: movdqa %xmm13, %xmm9
4533 ; SSE2-NEXT: pxor %xmm0, %xmm9
4534 ; SSE2-NEXT: movdqa %xmm5, %xmm11
4535 ; SSE2-NEXT: pxor %xmm14, %xmm11
4536 ; SSE2-NEXT: movdqa %xmm1, %xmm15
4537 ; SSE2-NEXT: pxor %xmm14, %xmm15
4538 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
4539 ; SSE2-NEXT: movdqa %xmm4, %xmm11
4540 ; SSE2-NEXT: pxor %xmm14, %xmm11
4541 ; SSE2-NEXT: pxor %xmm10, %xmm14
4542 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
4543 ; SSE2-NEXT: movdqa %xmm15, %xmm11
4544 ; SSE2-NEXT: pxor %xmm0, %xmm11
4545 ; SSE2-NEXT: pxor %xmm14, %xmm0
4546 ; SSE2-NEXT: pandn %xmm10, %xmm14
4547 ; SSE2-NEXT: pandn %xmm4, %xmm0
4548 ; SSE2-NEXT: por %xmm14, %xmm0
4549 ; SSE2-NEXT: pandn %xmm1, %xmm15
4550 ; SSE2-NEXT: pandn %xmm5, %xmm11
4551 ; SSE2-NEXT: por %xmm15, %xmm11
4552 ; SSE2-NEXT: pandn %xmm2, %xmm13
4553 ; SSE2-NEXT: pandn %xmm6, %xmm9
4554 ; SSE2-NEXT: por %xmm13, %xmm9
4555 ; SSE2-NEXT: pandn %xmm3, %xmm12
4556 ; SSE2-NEXT: pandn %xmm7, %xmm8
4557 ; SSE2-NEXT: por %xmm12, %xmm8
4558 ; SSE2-NEXT: movdqa %xmm11, %xmm1
4559 ; SSE2-NEXT: movdqa %xmm9, %xmm2
4560 ; SSE2-NEXT: movdqa %xmm8, %xmm3
4563 ; SSE4-LABEL: test118:
4564 ; SSE4: # BB#0: # %entry
4565 ; SSE4-NEXT: pminud %xmm4, %xmm0
4566 ; SSE4-NEXT: pminud %xmm5, %xmm1
4567 ; SSE4-NEXT: pminud %xmm6, %xmm2
4568 ; SSE4-NEXT: pminud %xmm7, %xmm3
4571 ; AVX1-LABEL: test118:
4572 ; AVX1: # BB#0: # %entry
4573 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4574 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4575 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
4576 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
4577 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4578 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4579 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4580 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2
4581 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
4582 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4585 ; AVX2-LABEL: test118:
4586 ; AVX2: # BB#0: # %entry
4587 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
4588 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
4591 ; AVX512F-LABEL: test118:
4592 ; AVX512F: # BB#0: # %entry
4593 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0
4594 ; AVX512F-NEXT: retq
4596 %cmp = icmp ule <16 x i32> %a, %b
4597 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4601 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4602 ; SSE2-LABEL: test119:
4603 ; SSE2: # BB#0: # %entry
4604 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
4605 ; SSE2-NEXT: movdqa %xmm7, %xmm9
4606 ; SSE2-NEXT: pxor %xmm11, %xmm9
4607 ; SSE2-NEXT: movdqa %xmm3, %xmm8
4608 ; SSE2-NEXT: pxor %xmm11, %xmm8
4609 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8
4610 ; SSE2-NEXT: movdqa %xmm6, %xmm10
4611 ; SSE2-NEXT: pxor %xmm11, %xmm10
4612 ; SSE2-NEXT: movdqa %xmm2, %xmm9
4613 ; SSE2-NEXT: pxor %xmm11, %xmm9
4614 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9
4615 ; SSE2-NEXT: movdqa %xmm5, %xmm12
4616 ; SSE2-NEXT: pxor %xmm11, %xmm12
4617 ; SSE2-NEXT: movdqa %xmm1, %xmm10
4618 ; SSE2-NEXT: pxor %xmm11, %xmm10
4619 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10
4620 ; SSE2-NEXT: movdqa %xmm4, %xmm12
4621 ; SSE2-NEXT: pxor %xmm11, %xmm12
4622 ; SSE2-NEXT: pxor %xmm0, %xmm11
4623 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm11
4624 ; SSE2-NEXT: pand %xmm11, %xmm0
4625 ; SSE2-NEXT: pandn %xmm4, %xmm11
4626 ; SSE2-NEXT: por %xmm11, %xmm0
4627 ; SSE2-NEXT: pand %xmm10, %xmm1
4628 ; SSE2-NEXT: pandn %xmm5, %xmm10
4629 ; SSE2-NEXT: por %xmm1, %xmm10
4630 ; SSE2-NEXT: pand %xmm9, %xmm2
4631 ; SSE2-NEXT: pandn %xmm6, %xmm9
4632 ; SSE2-NEXT: por %xmm2, %xmm9
4633 ; SSE2-NEXT: pand %xmm8, %xmm3
4634 ; SSE2-NEXT: pandn %xmm7, %xmm8
4635 ; SSE2-NEXT: por %xmm3, %xmm8
4636 ; SSE2-NEXT: movdqa %xmm10, %xmm1
4637 ; SSE2-NEXT: movdqa %xmm9, %xmm2
4638 ; SSE2-NEXT: movdqa %xmm8, %xmm3
4641 ; SSE4-LABEL: test119:
4642 ; SSE4: # BB#0: # %entry
4643 ; SSE4-NEXT: pmaxud %xmm4, %xmm0
4644 ; SSE4-NEXT: pmaxud %xmm5, %xmm1
4645 ; SSE4-NEXT: pmaxud %xmm6, %xmm2
4646 ; SSE4-NEXT: pmaxud %xmm7, %xmm3
4649 ; AVX1-LABEL: test119:
4650 ; AVX1: # BB#0: # %entry
4651 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4652 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4653 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
4654 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
4655 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4656 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4657 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4658 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2
4659 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
4660 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4663 ; AVX2-LABEL: test119:
4664 ; AVX2: # BB#0: # %entry
4665 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
4666 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
4669 ; AVX512F-LABEL: test119:
4670 ; AVX512F: # BB#0: # %entry
4671 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
4672 ; AVX512F-NEXT: retq
4674 %cmp = icmp ugt <16 x i32> %a, %b
4675 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4679 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4680 ; SSE2-LABEL: test120:
4681 ; SSE2: # BB#0: # %entry
4682 ; SSE2-NEXT: movdqa %xmm0, %xmm10
4683 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
4684 ; SSE2-NEXT: movdqa %xmm3, %xmm0
4685 ; SSE2-NEXT: pxor %xmm14, %xmm0
4686 ; SSE2-NEXT: movdqa %xmm7, %xmm12
4687 ; SSE2-NEXT: pxor %xmm14, %xmm12
4688 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12
4689 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
4690 ; SSE2-NEXT: movdqa %xmm12, %xmm8
4691 ; SSE2-NEXT: pxor %xmm0, %xmm8
4692 ; SSE2-NEXT: movdqa %xmm2, %xmm9
4693 ; SSE2-NEXT: pxor %xmm14, %xmm9
4694 ; SSE2-NEXT: movdqa %xmm6, %xmm13
4695 ; SSE2-NEXT: pxor %xmm14, %xmm13
4696 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13
4697 ; SSE2-NEXT: movdqa %xmm13, %xmm9
4698 ; SSE2-NEXT: pxor %xmm0, %xmm9
4699 ; SSE2-NEXT: movdqa %xmm1, %xmm11
4700 ; SSE2-NEXT: pxor %xmm14, %xmm11
4701 ; SSE2-NEXT: movdqa %xmm5, %xmm15
4702 ; SSE2-NEXT: pxor %xmm14, %xmm15
4703 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
4704 ; SSE2-NEXT: movdqa %xmm10, %xmm11
4705 ; SSE2-NEXT: pxor %xmm14, %xmm11
4706 ; SSE2-NEXT: pxor %xmm4, %xmm14
4707 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
4708 ; SSE2-NEXT: movdqa %xmm15, %xmm11
4709 ; SSE2-NEXT: pxor %xmm0, %xmm11
4710 ; SSE2-NEXT: pxor %xmm14, %xmm0
4711 ; SSE2-NEXT: pandn %xmm10, %xmm14
4712 ; SSE2-NEXT: pandn %xmm4, %xmm0
4713 ; SSE2-NEXT: por %xmm14, %xmm0
4714 ; SSE2-NEXT: pandn %xmm1, %xmm15
4715 ; SSE2-NEXT: pandn %xmm5, %xmm11
4716 ; SSE2-NEXT: por %xmm15, %xmm11
4717 ; SSE2-NEXT: pandn %xmm2, %xmm13
4718 ; SSE2-NEXT: pandn %xmm6, %xmm9
4719 ; SSE2-NEXT: por %xmm13, %xmm9
4720 ; SSE2-NEXT: pandn %xmm3, %xmm12
4721 ; SSE2-NEXT: pandn %xmm7, %xmm8
4722 ; SSE2-NEXT: por %xmm12, %xmm8
4723 ; SSE2-NEXT: movdqa %xmm11, %xmm1
4724 ; SSE2-NEXT: movdqa %xmm9, %xmm2
4725 ; SSE2-NEXT: movdqa %xmm8, %xmm3
4728 ; SSE4-LABEL: test120:
4729 ; SSE4: # BB#0: # %entry
4730 ; SSE4-NEXT: pmaxud %xmm4, %xmm0
4731 ; SSE4-NEXT: pmaxud %xmm5, %xmm1
4732 ; SSE4-NEXT: pmaxud %xmm6, %xmm2
4733 ; SSE4-NEXT: pmaxud %xmm7, %xmm3
4736 ; AVX1-LABEL: test120:
4737 ; AVX1: # BB#0: # %entry
4738 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
4739 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4740 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
4741 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
4742 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
4743 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
4744 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4745 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2
4746 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
4747 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
4750 ; AVX2-LABEL: test120:
4751 ; AVX2: # BB#0: # %entry
4752 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
4753 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
4756 ; AVX512F-LABEL: test120:
4757 ; AVX512F: # BB#0: # %entry
4758 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
4759 ; AVX512F-NEXT: retq
4761 %cmp = icmp uge <16 x i32> %a, %b
4762 %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4766 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4767 ; SSE2-LABEL: test121:
4768 ; SSE2: # BB#0: # %entry
4769 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
4770 ; SSE2-NEXT: movdqa %xmm3, %xmm8
4771 ; SSE2-NEXT: pxor %xmm9, %xmm8
4772 ; SSE2-NEXT: movdqa %xmm7, %xmm10
4773 ; SSE2-NEXT: pxor %xmm9, %xmm10
4774 ; SSE2-NEXT: movdqa %xmm10, %xmm11
4775 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
4776 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4777 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10
4778 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
4779 ; SSE2-NEXT: pand %xmm12, %xmm10
4780 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
4781 ; SSE2-NEXT: por %xmm10, %xmm8
4782 ; SSE2-NEXT: movdqa %xmm2, %xmm10
4783 ; SSE2-NEXT: pxor %xmm9, %xmm10
4784 ; SSE2-NEXT: movdqa %xmm6, %xmm11
4785 ; SSE2-NEXT: pxor %xmm9, %xmm11
4786 ; SSE2-NEXT: movdqa %xmm11, %xmm12
4787 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12
4788 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
4789 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11
4790 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
4791 ; SSE2-NEXT: pand %xmm13, %xmm11
4792 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
4793 ; SSE2-NEXT: por %xmm11, %xmm10
4794 ; SSE2-NEXT: movdqa %xmm1, %xmm11
4795 ; SSE2-NEXT: pxor %xmm9, %xmm11
4796 ; SSE2-NEXT: movdqa %xmm5, %xmm12
4797 ; SSE2-NEXT: pxor %xmm9, %xmm12
4798 ; SSE2-NEXT: movdqa %xmm12, %xmm13
4799 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13
4800 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
4801 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12
4802 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
4803 ; SSE2-NEXT: pand %xmm14, %xmm11
4804 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
4805 ; SSE2-NEXT: por %xmm11, %xmm12
4806 ; SSE2-NEXT: movdqa %xmm0, %xmm11
4807 ; SSE2-NEXT: pxor %xmm9, %xmm11
4808 ; SSE2-NEXT: pxor %xmm4, %xmm9
4809 ; SSE2-NEXT: movdqa %xmm9, %xmm13
4810 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13
4811 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
4812 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9
4813 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
4814 ; SSE2-NEXT: pand %xmm14, %xmm9
4815 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
4816 ; SSE2-NEXT: por %xmm9, %xmm11
4817 ; SSE2-NEXT: pand %xmm11, %xmm0
4818 ; SSE2-NEXT: pandn %xmm4, %xmm11
4819 ; SSE2-NEXT: por %xmm11, %xmm0
4820 ; SSE2-NEXT: pand %xmm12, %xmm1
4821 ; SSE2-NEXT: pandn %xmm5, %xmm12
4822 ; SSE2-NEXT: por %xmm12, %xmm1
4823 ; SSE2-NEXT: pand %xmm10, %xmm2
4824 ; SSE2-NEXT: pandn %xmm6, %xmm10
4825 ; SSE2-NEXT: por %xmm10, %xmm2
4826 ; SSE2-NEXT: pand %xmm8, %xmm3
4827 ; SSE2-NEXT: pandn %xmm7, %xmm8
4828 ; SSE2-NEXT: por %xmm8, %xmm3
4831 ; SSE4-LABEL: test121:
4832 ; SSE4: # BB#0: # %entry
4833 ; SSE4-NEXT: movdqa %xmm0, %xmm8
4834 ; SSE4-NEXT: movdqa %xmm7, %xmm9
4835 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9
4836 ; SSE4-NEXT: movdqa %xmm6, %xmm10
4837 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10
4838 ; SSE4-NEXT: movdqa %xmm5, %xmm11
4839 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11
4840 ; SSE4-NEXT: movdqa %xmm4, %xmm0
4841 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0
4842 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
4843 ; SSE4-NEXT: movdqa %xmm11, %xmm0
4844 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
4845 ; SSE4-NEXT: movdqa %xmm10, %xmm0
4846 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
4847 ; SSE4-NEXT: movdqa %xmm9, %xmm0
4848 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
4849 ; SSE4-NEXT: movapd %xmm4, %xmm0
4850 ; SSE4-NEXT: movapd %xmm5, %xmm1
4851 ; SSE4-NEXT: movapd %xmm6, %xmm2
4852 ; SSE4-NEXT: movapd %xmm7, %xmm3
4855 ; AVX1-LABEL: test121:
4856 ; AVX1: # BB#0: # %entry
4857 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
4858 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
4859 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
4860 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5
4861 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
4862 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
4863 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
4864 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
4865 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm6
4866 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
4867 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
4868 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
4871 ; AVX2-LABEL: test121:
4872 ; AVX2: # BB#0: # %entry
4873 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4
4874 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5
4875 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
4876 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
4879 ; AVX512F-LABEL: test121:
4880 ; AVX512F: # BB#0: # %entry
4881 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0
4882 ; AVX512F-NEXT: retq
4884 %cmp = icmp slt <8 x i64> %a, %b
4885 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4889 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4890 ; SSE2-LABEL: test122:
4891 ; SSE2: # BB#0: # %entry
4892 ; SSE2-NEXT: movdqa %xmm7, %xmm8
4893 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
4894 ; SSE2-NEXT: movdqa %xmm3, %xmm7
4895 ; SSE2-NEXT: movdqa %xmm2, %xmm3
4896 ; SSE2-NEXT: movdqa %xmm1, %xmm2
4897 ; SSE2-NEXT: movdqa %xmm0, %xmm9
4898 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
4899 ; SSE2-NEXT: pxor %xmm10, %xmm8
4900 ; SSE2-NEXT: movdqa %xmm7, %xmm0
4901 ; SSE2-NEXT: pxor %xmm10, %xmm0
4902 ; SSE2-NEXT: movdqa %xmm0, %xmm11
4903 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
4904 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4905 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
4906 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
4907 ; SSE2-NEXT: pand %xmm12, %xmm0
4908 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
4909 ; SSE2-NEXT: por %xmm0, %xmm12
4910 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
4911 ; SSE2-NEXT: movdqa %xmm12, %xmm8
4912 ; SSE2-NEXT: pxor %xmm1, %xmm8
4913 ; SSE2-NEXT: movdqa %xmm6, %xmm11
4914 ; SSE2-NEXT: pxor %xmm10, %xmm11
4915 ; SSE2-NEXT: movdqa %xmm3, %xmm13
4916 ; SSE2-NEXT: pxor %xmm10, %xmm13
4917 ; SSE2-NEXT: movdqa %xmm13, %xmm14
4918 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
4919 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
4920 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13
4921 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
4922 ; SSE2-NEXT: pand %xmm15, %xmm11
4923 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
4924 ; SSE2-NEXT: por %xmm11, %xmm13
4925 ; SSE2-NEXT: movdqa %xmm5, %xmm11
4926 ; SSE2-NEXT: pxor %xmm10, %xmm11
4927 ; SSE2-NEXT: movdqa %xmm2, %xmm14
4928 ; SSE2-NEXT: pxor %xmm10, %xmm14
4929 ; SSE2-NEXT: movdqa %xmm14, %xmm15
4930 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
4931 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14
4932 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
4933 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
4934 ; SSE2-NEXT: pand %xmm11, %xmm14
4935 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
4936 ; SSE2-NEXT: por %xmm14, %xmm15
4937 ; SSE2-NEXT: movdqa %xmm4, %xmm11
4938 ; SSE2-NEXT: pxor %xmm10, %xmm11
4939 ; SSE2-NEXT: pxor %xmm9, %xmm10
4940 ; SSE2-NEXT: movdqa %xmm10, %xmm14
4941 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
4942 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10
4943 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
4944 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
4945 ; SSE2-NEXT: pand %xmm11, %xmm0
4946 ; SSE2-NEXT: movdqa %xmm13, %xmm10
4947 ; SSE2-NEXT: pxor %xmm1, %xmm10
4948 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
4949 ; SSE2-NEXT: por %xmm0, %xmm14
4950 ; SSE2-NEXT: movdqa %xmm15, %xmm11
4951 ; SSE2-NEXT: pxor %xmm1, %xmm11
4952 ; SSE2-NEXT: pxor %xmm14, %xmm1
4953 ; SSE2-NEXT: pandn %xmm9, %xmm14
4954 ; SSE2-NEXT: pandn %xmm4, %xmm1
4955 ; SSE2-NEXT: por %xmm14, %xmm1
4956 ; SSE2-NEXT: pandn %xmm2, %xmm15
4957 ; SSE2-NEXT: pandn %xmm5, %xmm11
4958 ; SSE2-NEXT: por %xmm15, %xmm11
4959 ; SSE2-NEXT: pandn %xmm3, %xmm13
4960 ; SSE2-NEXT: pandn %xmm6, %xmm10
4961 ; SSE2-NEXT: por %xmm13, %xmm10
4962 ; SSE2-NEXT: pandn %xmm7, %xmm12
4963 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
4964 ; SSE2-NEXT: por %xmm12, %xmm8
4965 ; SSE2-NEXT: movdqa %xmm1, %xmm0
4966 ; SSE2-NEXT: movdqa %xmm11, %xmm1
4967 ; SSE2-NEXT: movdqa %xmm10, %xmm2
4968 ; SSE2-NEXT: movdqa %xmm8, %xmm3
4971 ; SSE4-LABEL: test122:
4972 ; SSE4: # BB#0: # %entry
4973 ; SSE4-NEXT: movdqa %xmm0, %xmm8
4974 ; SSE4-NEXT: movdqa %xmm3, %xmm9
4975 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9
4976 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12
4977 ; SSE4-NEXT: pxor %xmm12, %xmm9
4978 ; SSE4-NEXT: movdqa %xmm2, %xmm10
4979 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10
4980 ; SSE4-NEXT: pxor %xmm12, %xmm10
4981 ; SSE4-NEXT: movdqa %xmm1, %xmm11
4982 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11
4983 ; SSE4-NEXT: pxor %xmm12, %xmm11
4984 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
4985 ; SSE4-NEXT: pxor %xmm12, %xmm0
4986 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
4987 ; SSE4-NEXT: movdqa %xmm11, %xmm0
4988 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
4989 ; SSE4-NEXT: movdqa %xmm10, %xmm0
4990 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
4991 ; SSE4-NEXT: movdqa %xmm9, %xmm0
4992 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
4993 ; SSE4-NEXT: movapd %xmm4, %xmm0
4994 ; SSE4-NEXT: movapd %xmm5, %xmm1
4995 ; SSE4-NEXT: movapd %xmm6, %xmm2
4996 ; SSE4-NEXT: movapd %xmm7, %xmm3
4999 ; AVX1-LABEL: test122:
5000 ; AVX1: # BB#0: # %entry
5001 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
5002 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
5003 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
5004 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
5005 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5006 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm6
5007 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5008 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5009 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
5010 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
5011 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5012 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5013 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm7
5014 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5
5015 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
5016 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5017 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5020 ; AVX2-LABEL: test122:
5021 ; AVX2: # BB#0: # %entry
5022 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4
5023 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5
5024 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4
5025 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6
5026 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5
5027 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5028 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5031 ; AVX512F-LABEL: test122:
5032 ; AVX512F: # BB#0: # %entry
5033 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0
5034 ; AVX512F-NEXT: retq
5036 %cmp = icmp sle <8 x i64> %a, %b
5037 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5041 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
5042 ; SSE2-LABEL: test123:
5043 ; SSE2: # BB#0: # %entry
5044 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
5045 ; SSE2-NEXT: movdqa %xmm7, %xmm8
5046 ; SSE2-NEXT: pxor %xmm9, %xmm8
5047 ; SSE2-NEXT: movdqa %xmm3, %xmm10
5048 ; SSE2-NEXT: pxor %xmm9, %xmm10
5049 ; SSE2-NEXT: movdqa %xmm10, %xmm11
5050 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
5051 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5052 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10
5053 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
5054 ; SSE2-NEXT: pand %xmm12, %xmm10
5055 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
5056 ; SSE2-NEXT: por %xmm10, %xmm8
5057 ; SSE2-NEXT: movdqa %xmm6, %xmm10
5058 ; SSE2-NEXT: pxor %xmm9, %xmm10
5059 ; SSE2-NEXT: movdqa %xmm2, %xmm11
5060 ; SSE2-NEXT: pxor %xmm9, %xmm11
5061 ; SSE2-NEXT: movdqa %xmm11, %xmm12
5062 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12
5063 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
5064 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11
5065 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
5066 ; SSE2-NEXT: pand %xmm13, %xmm11
5067 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
5068 ; SSE2-NEXT: por %xmm11, %xmm10
5069 ; SSE2-NEXT: movdqa %xmm5, %xmm11
5070 ; SSE2-NEXT: pxor %xmm9, %xmm11
5071 ; SSE2-NEXT: movdqa %xmm1, %xmm12
5072 ; SSE2-NEXT: pxor %xmm9, %xmm12
5073 ; SSE2-NEXT: movdqa %xmm12, %xmm13
5074 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13
5075 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5076 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12
5077 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
5078 ; SSE2-NEXT: pand %xmm14, %xmm11
5079 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
5080 ; SSE2-NEXT: por %xmm11, %xmm12
5081 ; SSE2-NEXT: movdqa %xmm4, %xmm11
5082 ; SSE2-NEXT: pxor %xmm9, %xmm11
5083 ; SSE2-NEXT: pxor %xmm0, %xmm9
5084 ; SSE2-NEXT: movdqa %xmm9, %xmm13
5085 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13
5086 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5087 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9
5088 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
5089 ; SSE2-NEXT: pand %xmm14, %xmm9
5090 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5091 ; SSE2-NEXT: por %xmm9, %xmm11
5092 ; SSE2-NEXT: pand %xmm11, %xmm0
5093 ; SSE2-NEXT: pandn %xmm4, %xmm11
5094 ; SSE2-NEXT: por %xmm11, %xmm0
5095 ; SSE2-NEXT: pand %xmm12, %xmm1
5096 ; SSE2-NEXT: pandn %xmm5, %xmm12
5097 ; SSE2-NEXT: por %xmm12, %xmm1
5098 ; SSE2-NEXT: pand %xmm10, %xmm2
5099 ; SSE2-NEXT: pandn %xmm6, %xmm10
5100 ; SSE2-NEXT: por %xmm10, %xmm2
5101 ; SSE2-NEXT: pand %xmm8, %xmm3
5102 ; SSE2-NEXT: pandn %xmm7, %xmm8
5103 ; SSE2-NEXT: por %xmm8, %xmm3
5106 ; SSE4-LABEL: test123:
5107 ; SSE4: # BB#0: # %entry
5108 ; SSE4-NEXT: movdqa %xmm0, %xmm8
5109 ; SSE4-NEXT: movdqa %xmm3, %xmm9
5110 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9
5111 ; SSE4-NEXT: movdqa %xmm2, %xmm10
5112 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10
5113 ; SSE4-NEXT: movdqa %xmm1, %xmm11
5114 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11
5115 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
5116 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
5117 ; SSE4-NEXT: movdqa %xmm11, %xmm0
5118 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5119 ; SSE4-NEXT: movdqa %xmm10, %xmm0
5120 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5121 ; SSE4-NEXT: movdqa %xmm9, %xmm0
5122 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5123 ; SSE4-NEXT: movapd %xmm4, %xmm0
5124 ; SSE4-NEXT: movapd %xmm5, %xmm1
5125 ; SSE4-NEXT: movapd %xmm6, %xmm2
5126 ; SSE4-NEXT: movapd %xmm7, %xmm3
5129 ; AVX1-LABEL: test123:
5130 ; AVX1: # BB#0: # %entry
5131 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
5132 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
5133 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
5134 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm5
5135 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
5136 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
5137 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
5138 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
5139 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm6
5140 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
5141 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5142 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5145 ; AVX2-LABEL: test123:
5146 ; AVX2: # BB#0: # %entry
5147 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4
5148 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5
5149 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5150 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5153 ; AVX512F-LABEL: test123:
5154 ; AVX512F: # BB#0: # %entry
5155 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
5156 ; AVX512F-NEXT: retq
5158 %cmp = icmp sgt <8 x i64> %a, %b
5159 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5163 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
5164 ; SSE2-LABEL: test124:
5165 ; SSE2: # BB#0: # %entry
5166 ; SSE2-NEXT: movdqa %xmm7, %xmm11
5167 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
5168 ; SSE2-NEXT: movdqa %xmm3, %xmm7
5169 ; SSE2-NEXT: movdqa %xmm2, %xmm3
5170 ; SSE2-NEXT: movdqa %xmm1, %xmm2
5171 ; SSE2-NEXT: movdqa %xmm0, %xmm9
5172 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
5173 ; SSE2-NEXT: movdqa %xmm7, %xmm8
5174 ; SSE2-NEXT: pxor %xmm10, %xmm8
5175 ; SSE2-NEXT: movdqa %xmm11, %xmm0
5176 ; SSE2-NEXT: pxor %xmm10, %xmm0
5177 ; SSE2-NEXT: movdqa %xmm0, %xmm11
5178 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
5179 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5180 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
5181 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
5182 ; SSE2-NEXT: pand %xmm12, %xmm0
5183 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
5184 ; SSE2-NEXT: por %xmm0, %xmm12
5185 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
5186 ; SSE2-NEXT: movdqa %xmm12, %xmm8
5187 ; SSE2-NEXT: pxor %xmm1, %xmm8
5188 ; SSE2-NEXT: movdqa %xmm3, %xmm11
5189 ; SSE2-NEXT: pxor %xmm10, %xmm11
5190 ; SSE2-NEXT: movdqa %xmm6, %xmm13
5191 ; SSE2-NEXT: pxor %xmm10, %xmm13
5192 ; SSE2-NEXT: movdqa %xmm13, %xmm14
5193 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
5194 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
5195 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13
5196 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5197 ; SSE2-NEXT: pand %xmm15, %xmm11
5198 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
5199 ; SSE2-NEXT: por %xmm11, %xmm13
5200 ; SSE2-NEXT: movdqa %xmm2, %xmm11
5201 ; SSE2-NEXT: pxor %xmm10, %xmm11
5202 ; SSE2-NEXT: movdqa %xmm5, %xmm14
5203 ; SSE2-NEXT: pxor %xmm10, %xmm14
5204 ; SSE2-NEXT: movdqa %xmm14, %xmm15
5205 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
5206 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14
5207 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
5208 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5209 ; SSE2-NEXT: pand %xmm11, %xmm14
5210 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
5211 ; SSE2-NEXT: por %xmm14, %xmm15
5212 ; SSE2-NEXT: movdqa %xmm9, %xmm11
5213 ; SSE2-NEXT: pxor %xmm10, %xmm11
5214 ; SSE2-NEXT: pxor %xmm4, %xmm10
5215 ; SSE2-NEXT: movdqa %xmm10, %xmm14
5216 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
5217 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10
5218 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
5219 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
5220 ; SSE2-NEXT: pand %xmm11, %xmm0
5221 ; SSE2-NEXT: movdqa %xmm13, %xmm10
5222 ; SSE2-NEXT: pxor %xmm1, %xmm10
5223 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5224 ; SSE2-NEXT: por %xmm0, %xmm14
5225 ; SSE2-NEXT: movdqa %xmm15, %xmm11
5226 ; SSE2-NEXT: pxor %xmm1, %xmm11
5227 ; SSE2-NEXT: pxor %xmm14, %xmm1
5228 ; SSE2-NEXT: pandn %xmm9, %xmm14
5229 ; SSE2-NEXT: pandn %xmm4, %xmm1
5230 ; SSE2-NEXT: por %xmm14, %xmm1
5231 ; SSE2-NEXT: pandn %xmm2, %xmm15
5232 ; SSE2-NEXT: pandn %xmm5, %xmm11
5233 ; SSE2-NEXT: por %xmm15, %xmm11
5234 ; SSE2-NEXT: pandn %xmm3, %xmm13
5235 ; SSE2-NEXT: pandn %xmm6, %xmm10
5236 ; SSE2-NEXT: por %xmm13, %xmm10
5237 ; SSE2-NEXT: pandn %xmm7, %xmm12
5238 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
5239 ; SSE2-NEXT: por %xmm12, %xmm8
5240 ; SSE2-NEXT: movdqa %xmm1, %xmm0
5241 ; SSE2-NEXT: movdqa %xmm11, %xmm1
5242 ; SSE2-NEXT: movdqa %xmm10, %xmm2
5243 ; SSE2-NEXT: movdqa %xmm8, %xmm3
5246 ; SSE4-LABEL: test124:
5247 ; SSE4: # BB#0: # %entry
5248 ; SSE4-NEXT: movdqa %xmm0, %xmm8
5249 ; SSE4-NEXT: movdqa %xmm7, %xmm9
5250 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9
5251 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
5252 ; SSE4-NEXT: pxor %xmm0, %xmm9
5253 ; SSE4-NEXT: movdqa %xmm6, %xmm10
5254 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10
5255 ; SSE4-NEXT: pxor %xmm0, %xmm10
5256 ; SSE4-NEXT: movdqa %xmm5, %xmm11
5257 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11
5258 ; SSE4-NEXT: pxor %xmm0, %xmm11
5259 ; SSE4-NEXT: movdqa %xmm4, %xmm12
5260 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm12
5261 ; SSE4-NEXT: pxor %xmm12, %xmm0
5262 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
5263 ; SSE4-NEXT: movdqa %xmm11, %xmm0
5264 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5265 ; SSE4-NEXT: movdqa %xmm10, %xmm0
5266 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5267 ; SSE4-NEXT: movdqa %xmm9, %xmm0
5268 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5269 ; SSE4-NEXT: movapd %xmm4, %xmm0
5270 ; SSE4-NEXT: movapd %xmm5, %xmm1
5271 ; SSE4-NEXT: movapd %xmm6, %xmm2
5272 ; SSE4-NEXT: movapd %xmm7, %xmm3
5275 ; AVX1-LABEL: test124:
5276 ; AVX1: # BB#0: # %entry
5277 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5278 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
5279 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
5280 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
5281 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5282 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm6
5283 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5284 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5285 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
5286 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
5287 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5288 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5289 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm7
5290 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5
5291 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
5292 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5293 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5296 ; AVX2-LABEL: test124:
5297 ; AVX2: # BB#0: # %entry
5298 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4
5299 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5
5300 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4
5301 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6
5302 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5
5303 ; AVX2-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5304 ; AVX2-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5307 ; AVX512F-LABEL: test124:
5308 ; AVX512F: # BB#0: # %entry
5309 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
5310 ; AVX512F-NEXT: retq
5312 %cmp = icmp sge <8 x i64> %a, %b
5313 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5317 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
5318 ; SSE2-LABEL: test125:
5319 ; SSE2: # BB#0: # %entry
5320 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
5321 ; SSE2-NEXT: movdqa %xmm3, %xmm8
5322 ; SSE2-NEXT: pxor %xmm9, %xmm8
5323 ; SSE2-NEXT: movdqa %xmm7, %xmm10
5324 ; SSE2-NEXT: pxor %xmm9, %xmm10
5325 ; SSE2-NEXT: movdqa %xmm10, %xmm11
5326 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
5327 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5328 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10
5329 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
5330 ; SSE2-NEXT: pand %xmm12, %xmm10
5331 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
5332 ; SSE2-NEXT: por %xmm10, %xmm8
5333 ; SSE2-NEXT: movdqa %xmm2, %xmm10
5334 ; SSE2-NEXT: pxor %xmm9, %xmm10
5335 ; SSE2-NEXT: movdqa %xmm6, %xmm11
5336 ; SSE2-NEXT: pxor %xmm9, %xmm11
5337 ; SSE2-NEXT: movdqa %xmm11, %xmm12
5338 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12
5339 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
5340 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11
5341 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
5342 ; SSE2-NEXT: pand %xmm13, %xmm11
5343 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
5344 ; SSE2-NEXT: por %xmm11, %xmm10
5345 ; SSE2-NEXT: movdqa %xmm1, %xmm11
5346 ; SSE2-NEXT: pxor %xmm9, %xmm11
5347 ; SSE2-NEXT: movdqa %xmm5, %xmm12
5348 ; SSE2-NEXT: pxor %xmm9, %xmm12
5349 ; SSE2-NEXT: movdqa %xmm12, %xmm13
5350 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13
5351 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5352 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12
5353 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
5354 ; SSE2-NEXT: pand %xmm14, %xmm11
5355 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
5356 ; SSE2-NEXT: por %xmm11, %xmm12
5357 ; SSE2-NEXT: movdqa %xmm0, %xmm11
5358 ; SSE2-NEXT: pxor %xmm9, %xmm11
5359 ; SSE2-NEXT: pxor %xmm4, %xmm9
5360 ; SSE2-NEXT: movdqa %xmm9, %xmm13
5361 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13
5362 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5363 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9
5364 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
5365 ; SSE2-NEXT: pand %xmm14, %xmm9
5366 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5367 ; SSE2-NEXT: por %xmm9, %xmm11
5368 ; SSE2-NEXT: pand %xmm11, %xmm0
5369 ; SSE2-NEXT: pandn %xmm4, %xmm11
5370 ; SSE2-NEXT: por %xmm11, %xmm0
5371 ; SSE2-NEXT: pand %xmm12, %xmm1
5372 ; SSE2-NEXT: pandn %xmm5, %xmm12
5373 ; SSE2-NEXT: por %xmm12, %xmm1
5374 ; SSE2-NEXT: pand %xmm10, %xmm2
5375 ; SSE2-NEXT: pandn %xmm6, %xmm10
5376 ; SSE2-NEXT: por %xmm10, %xmm2
5377 ; SSE2-NEXT: pand %xmm8, %xmm3
5378 ; SSE2-NEXT: pandn %xmm7, %xmm8
5379 ; SSE2-NEXT: por %xmm8, %xmm3
5382 ; SSE4-LABEL: test125:
5383 ; SSE4: # BB#0: # %entry
5384 ; SSE4-NEXT: movdqa %xmm0, %xmm8
5385 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
5386 ; SSE4-NEXT: movdqa %xmm3, %xmm10
5387 ; SSE4-NEXT: pxor %xmm0, %xmm10
5388 ; SSE4-NEXT: movdqa %xmm7, %xmm9
5389 ; SSE4-NEXT: pxor %xmm0, %xmm9
5390 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9
5391 ; SSE4-NEXT: movdqa %xmm2, %xmm11
5392 ; SSE4-NEXT: pxor %xmm0, %xmm11
5393 ; SSE4-NEXT: movdqa %xmm6, %xmm10
5394 ; SSE4-NEXT: pxor %xmm0, %xmm10
5395 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10
5396 ; SSE4-NEXT: movdqa %xmm1, %xmm12
5397 ; SSE4-NEXT: pxor %xmm0, %xmm12
5398 ; SSE4-NEXT: movdqa %xmm5, %xmm11
5399 ; SSE4-NEXT: pxor %xmm0, %xmm11
5400 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11
5401 ; SSE4-NEXT: movdqa %xmm8, %xmm12
5402 ; SSE4-NEXT: pxor %xmm0, %xmm12
5403 ; SSE4-NEXT: pxor %xmm4, %xmm0
5404 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0
5405 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
5406 ; SSE4-NEXT: movdqa %xmm11, %xmm0
5407 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5408 ; SSE4-NEXT: movdqa %xmm10, %xmm0
5409 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5410 ; SSE4-NEXT: movdqa %xmm9, %xmm0
5411 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5412 ; SSE4-NEXT: movapd %xmm4, %xmm0
5413 ; SSE4-NEXT: movapd %xmm5, %xmm1
5414 ; SSE4-NEXT: movapd %xmm6, %xmm2
5415 ; SSE4-NEXT: movapd %xmm7, %xmm3
5418 ; AVX1-LABEL: test125:
5419 ; AVX1: # BB#0: # %entry
5420 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5421 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5422 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5423 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
5424 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5425 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5426 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm6
5427 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm7
5428 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5429 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5430 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
5431 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5432 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
5433 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
5434 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5435 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
5436 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm5
5437 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
5438 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
5439 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5440 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5443 ; AVX2-LABEL: test125:
5444 ; AVX2: # BB#0: # %entry
5445 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4
5446 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5
5447 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6
5448 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
5449 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6
5450 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4
5451 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4
5452 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5453 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
5456 ; AVX512F-LABEL: test125:
5457 ; AVX512F: # BB#0: # %entry
5458 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0
5459 ; AVX512F-NEXT: retq
5461 %cmp = icmp ult <8 x i64> %a, %b
5462 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5466 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5467 ; SSE2-LABEL: test126:
5468 ; SSE2: # BB#0: # %entry
5469 ; SSE2-NEXT: movdqa %xmm7, %xmm8
5470 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
5471 ; SSE2-NEXT: movdqa %xmm3, %xmm7
5472 ; SSE2-NEXT: movdqa %xmm2, %xmm3
5473 ; SSE2-NEXT: movdqa %xmm1, %xmm2
5474 ; SSE2-NEXT: movdqa %xmm0, %xmm9
5475 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
5476 ; SSE2-NEXT: pxor %xmm10, %xmm8
5477 ; SSE2-NEXT: movdqa %xmm7, %xmm0
5478 ; SSE2-NEXT: pxor %xmm10, %xmm0
5479 ; SSE2-NEXT: movdqa %xmm0, %xmm11
5480 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
5481 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5482 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
5483 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
5484 ; SSE2-NEXT: pand %xmm12, %xmm0
5485 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
5486 ; SSE2-NEXT: por %xmm0, %xmm12
5487 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
5488 ; SSE2-NEXT: movdqa %xmm12, %xmm8
5489 ; SSE2-NEXT: pxor %xmm1, %xmm8
5490 ; SSE2-NEXT: movdqa %xmm6, %xmm11
5491 ; SSE2-NEXT: pxor %xmm10, %xmm11
5492 ; SSE2-NEXT: movdqa %xmm3, %xmm13
5493 ; SSE2-NEXT: pxor %xmm10, %xmm13
5494 ; SSE2-NEXT: movdqa %xmm13, %xmm14
5495 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
5496 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
5497 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13
5498 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5499 ; SSE2-NEXT: pand %xmm15, %xmm11
5500 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
5501 ; SSE2-NEXT: por %xmm11, %xmm13
5502 ; SSE2-NEXT: movdqa %xmm5, %xmm11
5503 ; SSE2-NEXT: pxor %xmm10, %xmm11
5504 ; SSE2-NEXT: movdqa %xmm2, %xmm14
5505 ; SSE2-NEXT: pxor %xmm10, %xmm14
5506 ; SSE2-NEXT: movdqa %xmm14, %xmm15
5507 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
5508 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14
5509 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
5510 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5511 ; SSE2-NEXT: pand %xmm11, %xmm14
5512 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
5513 ; SSE2-NEXT: por %xmm14, %xmm15
5514 ; SSE2-NEXT: movdqa %xmm4, %xmm11
5515 ; SSE2-NEXT: pxor %xmm10, %xmm11
5516 ; SSE2-NEXT: pxor %xmm9, %xmm10
5517 ; SSE2-NEXT: movdqa %xmm10, %xmm14
5518 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
5519 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10
5520 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
5521 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
5522 ; SSE2-NEXT: pand %xmm11, %xmm0
5523 ; SSE2-NEXT: movdqa %xmm13, %xmm10
5524 ; SSE2-NEXT: pxor %xmm1, %xmm10
5525 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5526 ; SSE2-NEXT: por %xmm0, %xmm14
5527 ; SSE2-NEXT: movdqa %xmm15, %xmm11
5528 ; SSE2-NEXT: pxor %xmm1, %xmm11
5529 ; SSE2-NEXT: pxor %xmm14, %xmm1
5530 ; SSE2-NEXT: pandn %xmm9, %xmm14
5531 ; SSE2-NEXT: pandn %xmm4, %xmm1
5532 ; SSE2-NEXT: por %xmm14, %xmm1
5533 ; SSE2-NEXT: pandn %xmm2, %xmm15
5534 ; SSE2-NEXT: pandn %xmm5, %xmm11
5535 ; SSE2-NEXT: por %xmm15, %xmm11
5536 ; SSE2-NEXT: pandn %xmm3, %xmm13
5537 ; SSE2-NEXT: pandn %xmm6, %xmm10
5538 ; SSE2-NEXT: por %xmm13, %xmm10
5539 ; SSE2-NEXT: pandn %xmm7, %xmm12
5540 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
5541 ; SSE2-NEXT: por %xmm12, %xmm8
5542 ; SSE2-NEXT: movdqa %xmm1, %xmm0
5543 ; SSE2-NEXT: movdqa %xmm11, %xmm1
5544 ; SSE2-NEXT: movdqa %xmm10, %xmm2
5545 ; SSE2-NEXT: movdqa %xmm8, %xmm3
5548 ; SSE4-LABEL: test126:
5549 ; SSE4: # BB#0: # %entry
5550 ; SSE4-NEXT: movdqa %xmm0, %xmm9
5551 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
5552 ; SSE4-NEXT: movdqa %xmm7, %xmm10
5553 ; SSE4-NEXT: pxor %xmm0, %xmm10
5554 ; SSE4-NEXT: movdqa %xmm3, %xmm8
5555 ; SSE4-NEXT: pxor %xmm0, %xmm8
5556 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm8
5557 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12
5558 ; SSE4-NEXT: pxor %xmm12, %xmm8
5559 ; SSE4-NEXT: movdqa %xmm6, %xmm11
5560 ; SSE4-NEXT: pxor %xmm0, %xmm11
5561 ; SSE4-NEXT: movdqa %xmm2, %xmm10
5562 ; SSE4-NEXT: pxor %xmm0, %xmm10
5563 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10
5564 ; SSE4-NEXT: pxor %xmm12, %xmm10
5565 ; SSE4-NEXT: movdqa %xmm5, %xmm13
5566 ; SSE4-NEXT: pxor %xmm0, %xmm13
5567 ; SSE4-NEXT: movdqa %xmm1, %xmm11
5568 ; SSE4-NEXT: pxor %xmm0, %xmm11
5569 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11
5570 ; SSE4-NEXT: pxor %xmm12, %xmm11
5571 ; SSE4-NEXT: movdqa %xmm4, %xmm13
5572 ; SSE4-NEXT: pxor %xmm0, %xmm13
5573 ; SSE4-NEXT: pxor %xmm9, %xmm0
5574 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0
5575 ; SSE4-NEXT: pxor %xmm12, %xmm0
5576 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
5577 ; SSE4-NEXT: movdqa %xmm11, %xmm0
5578 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5579 ; SSE4-NEXT: movdqa %xmm10, %xmm0
5580 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5581 ; SSE4-NEXT: movdqa %xmm8, %xmm0
5582 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5583 ; SSE4-NEXT: movapd %xmm4, %xmm0
5584 ; SSE4-NEXT: movapd %xmm5, %xmm1
5585 ; SSE4-NEXT: movapd %xmm6, %xmm2
5586 ; SSE4-NEXT: movapd %xmm7, %xmm3
5589 ; AVX1-LABEL: test126:
5590 ; AVX1: # BB#0: # %entry
5591 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
5592 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5593 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5594 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
5595 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5596 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5597 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8
5598 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4
5599 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm7
5600 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm6
5601 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
5602 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
5603 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5604 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
5605 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5606 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
5607 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
5608 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5609 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
5610 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
5611 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
5612 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
5613 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5
5614 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
5615 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5616 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5619 ; AVX2-LABEL: test126:
5620 ; AVX2: # BB#0: # %entry
5621 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4
5622 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5
5623 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6
5624 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
5625 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6
5626 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5
5627 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7
5628 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4
5629 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4
5630 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4
5631 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5632 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
5635 ; AVX512F-LABEL: test126:
5636 ; AVX512F: # BB#0: # %entry
5637 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0
5638 ; AVX512F-NEXT: retq
5640 %cmp = icmp ule <8 x i64> %a, %b
5641 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5645 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5646 ; SSE2-LABEL: test127:
5647 ; SSE2: # BB#0: # %entry
5648 ; SSE2-NEXT: movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
5649 ; SSE2-NEXT: movdqa %xmm7, %xmm8
5650 ; SSE2-NEXT: pxor %xmm9, %xmm8
5651 ; SSE2-NEXT: movdqa %xmm3, %xmm10
5652 ; SSE2-NEXT: pxor %xmm9, %xmm10
5653 ; SSE2-NEXT: movdqa %xmm10, %xmm11
5654 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
5655 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5656 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm10
5657 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
5658 ; SSE2-NEXT: pand %xmm12, %xmm10
5659 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
5660 ; SSE2-NEXT: por %xmm10, %xmm8
5661 ; SSE2-NEXT: movdqa %xmm6, %xmm10
5662 ; SSE2-NEXT: pxor %xmm9, %xmm10
5663 ; SSE2-NEXT: movdqa %xmm2, %xmm11
5664 ; SSE2-NEXT: pxor %xmm9, %xmm11
5665 ; SSE2-NEXT: movdqa %xmm11, %xmm12
5666 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm12
5667 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
5668 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm11
5669 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
5670 ; SSE2-NEXT: pand %xmm13, %xmm11
5671 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
5672 ; SSE2-NEXT: por %xmm11, %xmm10
5673 ; SSE2-NEXT: movdqa %xmm5, %xmm11
5674 ; SSE2-NEXT: pxor %xmm9, %xmm11
5675 ; SSE2-NEXT: movdqa %xmm1, %xmm12
5676 ; SSE2-NEXT: pxor %xmm9, %xmm12
5677 ; SSE2-NEXT: movdqa %xmm12, %xmm13
5678 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13
5679 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5680 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm12
5681 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
5682 ; SSE2-NEXT: pand %xmm14, %xmm11
5683 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
5684 ; SSE2-NEXT: por %xmm11, %xmm12
5685 ; SSE2-NEXT: movdqa %xmm4, %xmm11
5686 ; SSE2-NEXT: pxor %xmm9, %xmm11
5687 ; SSE2-NEXT: pxor %xmm0, %xmm9
5688 ; SSE2-NEXT: movdqa %xmm9, %xmm13
5689 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm13
5690 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5691 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm9
5692 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
5693 ; SSE2-NEXT: pand %xmm14, %xmm9
5694 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5695 ; SSE2-NEXT: por %xmm9, %xmm11
5696 ; SSE2-NEXT: pand %xmm11, %xmm0
5697 ; SSE2-NEXT: pandn %xmm4, %xmm11
5698 ; SSE2-NEXT: por %xmm11, %xmm0
5699 ; SSE2-NEXT: pand %xmm12, %xmm1
5700 ; SSE2-NEXT: pandn %xmm5, %xmm12
5701 ; SSE2-NEXT: por %xmm12, %xmm1
5702 ; SSE2-NEXT: pand %xmm10, %xmm2
5703 ; SSE2-NEXT: pandn %xmm6, %xmm10
5704 ; SSE2-NEXT: por %xmm10, %xmm2
5705 ; SSE2-NEXT: pand %xmm8, %xmm3
5706 ; SSE2-NEXT: pandn %xmm7, %xmm8
5707 ; SSE2-NEXT: por %xmm8, %xmm3
5710 ; SSE4-LABEL: test127:
5711 ; SSE4: # BB#0: # %entry
5712 ; SSE4-NEXT: movdqa %xmm0, %xmm8
5713 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
5714 ; SSE4-NEXT: movdqa %xmm7, %xmm10
5715 ; SSE4-NEXT: pxor %xmm0, %xmm10
5716 ; SSE4-NEXT: movdqa %xmm3, %xmm9
5717 ; SSE4-NEXT: pxor %xmm0, %xmm9
5718 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9
5719 ; SSE4-NEXT: movdqa %xmm6, %xmm11
5720 ; SSE4-NEXT: pxor %xmm0, %xmm11
5721 ; SSE4-NEXT: movdqa %xmm2, %xmm10
5722 ; SSE4-NEXT: pxor %xmm0, %xmm10
5723 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10
5724 ; SSE4-NEXT: movdqa %xmm5, %xmm12
5725 ; SSE4-NEXT: pxor %xmm0, %xmm12
5726 ; SSE4-NEXT: movdqa %xmm1, %xmm11
5727 ; SSE4-NEXT: pxor %xmm0, %xmm11
5728 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11
5729 ; SSE4-NEXT: movdqa %xmm4, %xmm12
5730 ; SSE4-NEXT: pxor %xmm0, %xmm12
5731 ; SSE4-NEXT: pxor %xmm8, %xmm0
5732 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0
5733 ; SSE4-NEXT: blendvpd %xmm0, %xmm8, %xmm4
5734 ; SSE4-NEXT: movdqa %xmm11, %xmm0
5735 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5736 ; SSE4-NEXT: movdqa %xmm10, %xmm0
5737 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5738 ; SSE4-NEXT: movdqa %xmm9, %xmm0
5739 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5740 ; SSE4-NEXT: movapd %xmm4, %xmm0
5741 ; SSE4-NEXT: movapd %xmm5, %xmm1
5742 ; SSE4-NEXT: movapd %xmm6, %xmm2
5743 ; SSE4-NEXT: movapd %xmm7, %xmm3
5746 ; AVX1-LABEL: test127:
5747 ; AVX1: # BB#0: # %entry
5748 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
5749 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5750 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5751 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
5752 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5753 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5754 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
5755 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm7
5756 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5757 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5758 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
5759 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5760 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
5761 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
5762 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5763 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
5764 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
5765 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
5766 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
5767 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5768 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5771 ; AVX2-LABEL: test127:
5772 ; AVX2: # BB#0: # %entry
5773 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4
5774 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5
5775 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6
5776 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
5777 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6
5778 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4
5779 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4
5780 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5781 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
5784 ; AVX512F-LABEL: test127:
5785 ; AVX512F: # BB#0: # %entry
5786 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
5787 ; AVX512F-NEXT: retq
5789 %cmp = icmp ugt <8 x i64> %a, %b
5790 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5794 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5795 ; SSE2-LABEL: test128:
5796 ; SSE2: # BB#0: # %entry
5797 ; SSE2-NEXT: movdqa %xmm7, %xmm11
5798 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
5799 ; SSE2-NEXT: movdqa %xmm3, %xmm7
5800 ; SSE2-NEXT: movdqa %xmm2, %xmm3
5801 ; SSE2-NEXT: movdqa %xmm1, %xmm2
5802 ; SSE2-NEXT: movdqa %xmm0, %xmm9
5803 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
5804 ; SSE2-NEXT: movdqa %xmm7, %xmm8
5805 ; SSE2-NEXT: pxor %xmm10, %xmm8
5806 ; SSE2-NEXT: movdqa %xmm11, %xmm0
5807 ; SSE2-NEXT: pxor %xmm10, %xmm0
5808 ; SSE2-NEXT: movdqa %xmm0, %xmm11
5809 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
5810 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5811 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
5812 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
5813 ; SSE2-NEXT: pand %xmm12, %xmm0
5814 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
5815 ; SSE2-NEXT: por %xmm0, %xmm12
5816 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
5817 ; SSE2-NEXT: movdqa %xmm12, %xmm8
5818 ; SSE2-NEXT: pxor %xmm1, %xmm8
5819 ; SSE2-NEXT: movdqa %xmm3, %xmm11
5820 ; SSE2-NEXT: pxor %xmm10, %xmm11
5821 ; SSE2-NEXT: movdqa %xmm6, %xmm13
5822 ; SSE2-NEXT: pxor %xmm10, %xmm13
5823 ; SSE2-NEXT: movdqa %xmm13, %xmm14
5824 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
5825 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
5826 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13
5827 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5828 ; SSE2-NEXT: pand %xmm15, %xmm11
5829 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
5830 ; SSE2-NEXT: por %xmm11, %xmm13
5831 ; SSE2-NEXT: movdqa %xmm2, %xmm11
5832 ; SSE2-NEXT: pxor %xmm10, %xmm11
5833 ; SSE2-NEXT: movdqa %xmm5, %xmm14
5834 ; SSE2-NEXT: pxor %xmm10, %xmm14
5835 ; SSE2-NEXT: movdqa %xmm14, %xmm15
5836 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
5837 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14
5838 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
5839 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5840 ; SSE2-NEXT: pand %xmm11, %xmm14
5841 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
5842 ; SSE2-NEXT: por %xmm14, %xmm15
5843 ; SSE2-NEXT: movdqa %xmm9, %xmm11
5844 ; SSE2-NEXT: pxor %xmm10, %xmm11
5845 ; SSE2-NEXT: pxor %xmm4, %xmm10
5846 ; SSE2-NEXT: movdqa %xmm10, %xmm14
5847 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
5848 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10
5849 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
5850 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
5851 ; SSE2-NEXT: pand %xmm11, %xmm0
5852 ; SSE2-NEXT: movdqa %xmm13, %xmm10
5853 ; SSE2-NEXT: pxor %xmm1, %xmm10
5854 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5855 ; SSE2-NEXT: por %xmm0, %xmm14
5856 ; SSE2-NEXT: movdqa %xmm15, %xmm11
5857 ; SSE2-NEXT: pxor %xmm1, %xmm11
5858 ; SSE2-NEXT: pxor %xmm14, %xmm1
5859 ; SSE2-NEXT: pandn %xmm9, %xmm14
5860 ; SSE2-NEXT: pandn %xmm4, %xmm1
5861 ; SSE2-NEXT: por %xmm14, %xmm1
5862 ; SSE2-NEXT: pandn %xmm2, %xmm15
5863 ; SSE2-NEXT: pandn %xmm5, %xmm11
5864 ; SSE2-NEXT: por %xmm15, %xmm11
5865 ; SSE2-NEXT: pandn %xmm3, %xmm13
5866 ; SSE2-NEXT: pandn %xmm6, %xmm10
5867 ; SSE2-NEXT: por %xmm13, %xmm10
5868 ; SSE2-NEXT: pandn %xmm7, %xmm12
5869 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
5870 ; SSE2-NEXT: por %xmm12, %xmm8
5871 ; SSE2-NEXT: movdqa %xmm1, %xmm0
5872 ; SSE2-NEXT: movdqa %xmm11, %xmm1
5873 ; SSE2-NEXT: movdqa %xmm10, %xmm2
5874 ; SSE2-NEXT: movdqa %xmm8, %xmm3
5877 ; SSE4-LABEL: test128:
5878 ; SSE4: # BB#0: # %entry
5879 ; SSE4-NEXT: movdqa %xmm0, %xmm9
5880 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
5881 ; SSE4-NEXT: movdqa %xmm3, %xmm10
5882 ; SSE4-NEXT: pxor %xmm0, %xmm10
5883 ; SSE4-NEXT: movdqa %xmm7, %xmm8
5884 ; SSE4-NEXT: pxor %xmm0, %xmm8
5885 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm8
5886 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12
5887 ; SSE4-NEXT: pxor %xmm12, %xmm8
5888 ; SSE4-NEXT: movdqa %xmm2, %xmm11
5889 ; SSE4-NEXT: pxor %xmm0, %xmm11
5890 ; SSE4-NEXT: movdqa %xmm6, %xmm10
5891 ; SSE4-NEXT: pxor %xmm0, %xmm10
5892 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10
5893 ; SSE4-NEXT: pxor %xmm12, %xmm10
5894 ; SSE4-NEXT: movdqa %xmm1, %xmm13
5895 ; SSE4-NEXT: pxor %xmm0, %xmm13
5896 ; SSE4-NEXT: movdqa %xmm5, %xmm11
5897 ; SSE4-NEXT: pxor %xmm0, %xmm11
5898 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11
5899 ; SSE4-NEXT: pxor %xmm12, %xmm11
5900 ; SSE4-NEXT: movdqa %xmm9, %xmm13
5901 ; SSE4-NEXT: pxor %xmm0, %xmm13
5902 ; SSE4-NEXT: pxor %xmm4, %xmm0
5903 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0
5904 ; SSE4-NEXT: pxor %xmm12, %xmm0
5905 ; SSE4-NEXT: blendvpd %xmm0, %xmm9, %xmm4
5906 ; SSE4-NEXT: movdqa %xmm11, %xmm0
5907 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm5
5908 ; SSE4-NEXT: movdqa %xmm10, %xmm0
5909 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm6
5910 ; SSE4-NEXT: movdqa %xmm8, %xmm0
5911 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm7
5912 ; SSE4-NEXT: movapd %xmm4, %xmm0
5913 ; SSE4-NEXT: movapd %xmm5, %xmm1
5914 ; SSE4-NEXT: movapd %xmm6, %xmm2
5915 ; SSE4-NEXT: movapd %xmm7, %xmm3
5918 ; AVX1-LABEL: test128:
5919 ; AVX1: # BB#0: # %entry
5920 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
5921 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5922 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
5923 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
5924 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5925 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
5926 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8
5927 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4
5928 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm7
5929 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
5930 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
5931 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
5932 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
5933 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
5934 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
5935 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
5936 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
5937 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
5938 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
5939 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
5940 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm5
5941 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
5942 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5
5943 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
5944 ; AVX1-NEXT: vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5945 ; AVX1-NEXT: vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5948 ; AVX2-LABEL: test128:
5949 ; AVX2: # BB#0: # %entry
5950 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4
5951 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5
5952 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6
5953 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
5954 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6
5955 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5
5956 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7
5957 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4
5958 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4
5959 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4
5960 ; AVX2-NEXT: vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5961 ; AVX2-NEXT: vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
5964 ; AVX512F-LABEL: test128:
5965 ; AVX512F: # BB#0: # %entry
5966 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
5967 ; AVX512F-NEXT: retq
5969 %cmp = icmp uge <8 x i64> %a, %b
5970 %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5974 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5975 ; SSE2-LABEL: test129:
5976 ; SSE2: # BB#0: # %entry
5977 ; SSE2-NEXT: movdqa %xmm3, %xmm8
5978 ; SSE2-NEXT: movdqa %xmm7, %xmm3
5979 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm3
5980 ; SSE2-NEXT: movdqa %xmm6, %xmm9
5981 ; SSE2-NEXT: pcmpgtb %xmm2, %xmm9
5982 ; SSE2-NEXT: movdqa %xmm5, %xmm10
5983 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm10
5984 ; SSE2-NEXT: movdqa %xmm4, %xmm11
5985 ; SSE2-NEXT: pcmpgtb %xmm0, %xmm11
5986 ; SSE2-NEXT: pand %xmm11, %xmm4
5987 ; SSE2-NEXT: pandn %xmm0, %xmm11
5988 ; SSE2-NEXT: por %xmm4, %xmm11
5989 ; SSE2-NEXT: pand %xmm10, %xmm5
5990 ; SSE2-NEXT: pandn %xmm1, %xmm10
5991 ; SSE2-NEXT: por %xmm5, %xmm10
5992 ; SSE2-NEXT: pand %xmm9, %xmm6
5993 ; SSE2-NEXT: pandn %xmm2, %xmm9
5994 ; SSE2-NEXT: por %xmm6, %xmm9
5995 ; SSE2-NEXT: pand %xmm3, %xmm7
5996 ; SSE2-NEXT: pandn %xmm8, %xmm3
5997 ; SSE2-NEXT: por %xmm7, %xmm3
5998 ; SSE2-NEXT: movdqa %xmm11, %xmm0
5999 ; SSE2-NEXT: movdqa %xmm10, %xmm1
6000 ; SSE2-NEXT: movdqa %xmm9, %xmm2
6003 ; SSE4-LABEL: test129:
6004 ; SSE4: # BB#0: # %entry
6005 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0
6006 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1
6007 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2
6008 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3
6011 ; AVX1-LABEL: test129:
6012 ; AVX1: # BB#0: # %entry
6013 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6014 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6015 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
6016 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
6017 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6018 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6019 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6020 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2
6021 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
6022 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6025 ; AVX2-LABEL: test129:
6026 ; AVX2: # BB#0: # %entry
6027 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
6028 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
6031 ; AVX512BW-LABEL: test129:
6032 ; AVX512BW: # BB#0: # %entry
6033 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
6034 ; AVX512BW-NEXT: retq
6036 %cmp = icmp slt <64 x i8> %a, %b
6037 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6041 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
6042 ; SSE2-LABEL: test130:
6043 ; SSE2: # BB#0: # %entry
6044 ; SSE2-NEXT: movdqa %xmm2, %xmm8
6045 ; SSE2-NEXT: movdqa %xmm3, %xmm12
6046 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm12
6047 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13
6048 ; SSE2-NEXT: movdqa %xmm12, %xmm9
6049 ; SSE2-NEXT: pxor %xmm13, %xmm9
6050 ; SSE2-NEXT: movdqa %xmm8, %xmm14
6051 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm14
6052 ; SSE2-NEXT: movdqa %xmm14, %xmm2
6053 ; SSE2-NEXT: pxor %xmm13, %xmm2
6054 ; SSE2-NEXT: movdqa %xmm1, %xmm15
6055 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm15
6056 ; SSE2-NEXT: movdqa %xmm15, %xmm10
6057 ; SSE2-NEXT: pxor %xmm13, %xmm10
6058 ; SSE2-NEXT: movdqa %xmm0, %xmm11
6059 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11
6060 ; SSE2-NEXT: pxor %xmm11, %xmm13
6061 ; SSE2-NEXT: pandn %xmm4, %xmm11
6062 ; SSE2-NEXT: pandn %xmm0, %xmm13
6063 ; SSE2-NEXT: por %xmm13, %xmm11
6064 ; SSE2-NEXT: pandn %xmm5, %xmm15
6065 ; SSE2-NEXT: pandn %xmm1, %xmm10
6066 ; SSE2-NEXT: por %xmm15, %xmm10
6067 ; SSE2-NEXT: pandn %xmm6, %xmm14
6068 ; SSE2-NEXT: pandn %xmm8, %xmm2
6069 ; SSE2-NEXT: por %xmm14, %xmm2
6070 ; SSE2-NEXT: pandn %xmm7, %xmm12
6071 ; SSE2-NEXT: pandn %xmm3, %xmm9
6072 ; SSE2-NEXT: por %xmm12, %xmm9
6073 ; SSE2-NEXT: movdqa %xmm11, %xmm0
6074 ; SSE2-NEXT: movdqa %xmm10, %xmm1
6075 ; SSE2-NEXT: movdqa %xmm9, %xmm3
6078 ; SSE4-LABEL: test130:
6079 ; SSE4: # BB#0: # %entry
6080 ; SSE4-NEXT: pmaxsb %xmm4, %xmm0
6081 ; SSE4-NEXT: pmaxsb %xmm5, %xmm1
6082 ; SSE4-NEXT: pmaxsb %xmm6, %xmm2
6083 ; SSE4-NEXT: pmaxsb %xmm7, %xmm3
6086 ; AVX1-LABEL: test130:
6087 ; AVX1: # BB#0: # %entry
6088 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6089 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6090 ; AVX1-NEXT: vpmaxsb %xmm4, %xmm5, %xmm4
6091 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm0, %xmm0
6092 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6093 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6094 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6095 ; AVX1-NEXT: vpmaxsb %xmm2, %xmm4, %xmm2
6096 ; AVX1-NEXT: vpmaxsb %xmm3, %xmm1, %xmm1
6097 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6100 ; AVX2-LABEL: test130:
6101 ; AVX2: # BB#0: # %entry
6102 ; AVX2-NEXT: vpmaxsb %ymm2, %ymm0, %ymm0
6103 ; AVX2-NEXT: vpmaxsb %ymm3, %ymm1, %ymm1
6106 ; AVX512BW-LABEL: test130:
6107 ; AVX512BW: # BB#0: # %entry
6108 ; AVX512BW-NEXT: vpmaxsb %zmm1, %zmm0, %zmm0
6109 ; AVX512BW-NEXT: retq
6111 %cmp = icmp sle <64 x i8> %a, %b
6112 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6116 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
6117 ; SSE2-LABEL: test131:
6118 ; SSE2: # BB#0: # %entry
6119 ; SSE2-NEXT: movdqa %xmm3, %xmm8
6120 ; SSE2-NEXT: pcmpgtb %xmm7, %xmm3
6121 ; SSE2-NEXT: movdqa %xmm2, %xmm9
6122 ; SSE2-NEXT: pcmpgtb %xmm6, %xmm9
6123 ; SSE2-NEXT: movdqa %xmm1, %xmm10
6124 ; SSE2-NEXT: pcmpgtb %xmm5, %xmm10
6125 ; SSE2-NEXT: movdqa %xmm0, %xmm11
6126 ; SSE2-NEXT: pcmpgtb %xmm4, %xmm11
6127 ; SSE2-NEXT: pand %xmm11, %xmm4
6128 ; SSE2-NEXT: pandn %xmm0, %xmm11
6129 ; SSE2-NEXT: por %xmm4, %xmm11
6130 ; SSE2-NEXT: pand %xmm10, %xmm5
6131 ; SSE2-NEXT: pandn %xmm1, %xmm10
6132 ; SSE2-NEXT: por %xmm5, %xmm10
6133 ; SSE2-NEXT: pand %xmm9, %xmm6
6134 ; SSE2-NEXT: pandn %xmm2, %xmm9
6135 ; SSE2-NEXT: por %xmm6, %xmm9
6136 ; SSE2-NEXT: pand %xmm3, %xmm7
6137 ; SSE2-NEXT: pandn %xmm8, %xmm3
6138 ; SSE2-NEXT: por %xmm7, %xmm3
6139 ; SSE2-NEXT: movdqa %xmm11, %xmm0
6140 ; SSE2-NEXT: movdqa %xmm10, %xmm1
6141 ; SSE2-NEXT: movdqa %xmm9, %xmm2
6144 ; SSE4-LABEL: test131:
6145 ; SSE4: # BB#0: # %entry
6146 ; SSE4-NEXT: pminsb %xmm4, %xmm0
6147 ; SSE4-NEXT: pminsb %xmm5, %xmm1
6148 ; SSE4-NEXT: pminsb %xmm6, %xmm2
6149 ; SSE4-NEXT: pminsb %xmm7, %xmm3
6152 ; AVX1-LABEL: test131:
6153 ; AVX1: # BB#0: # %entry
6154 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6155 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6156 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
6157 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
6158 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6159 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6160 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6161 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2
6162 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
6163 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6166 ; AVX2-LABEL: test131:
6167 ; AVX2: # BB#0: # %entry
6168 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
6169 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
6172 ; AVX512BW-LABEL: test131:
6173 ; AVX512BW: # BB#0: # %entry
6174 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0
6175 ; AVX512BW-NEXT: retq
6177 %cmp = icmp sgt <64 x i8> %a, %b
6178 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6182 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
6183 ; SSE2-LABEL: test132:
6184 ; SSE2: # BB#0: # %entry
6185 ; SSE2-NEXT: movdqa %xmm2, %xmm8
6186 ; SSE2-NEXT: movdqa %xmm0, %xmm10
6187 ; SSE2-NEXT: movdqa %xmm7, %xmm12
6188 ; SSE2-NEXT: pcmpgtb %xmm3, %xmm12
6189 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
6190 ; SSE2-NEXT: movdqa %xmm12, %xmm9
6191 ; SSE2-NEXT: pxor %xmm0, %xmm9
6192 ; SSE2-NEXT: movdqa %xmm6, %xmm13
6193 ; SSE2-NEXT: pcmpgtb %xmm8, %xmm13
6194 ; SSE2-NEXT: movdqa %xmm13, %xmm2
6195 ; SSE2-NEXT: pxor %xmm0, %xmm2
6196 ; SSE2-NEXT: movdqa %xmm5, %xmm14
6197 ; SSE2-NEXT: pcmpgtb %xmm1, %xmm14
6198 ; SSE2-NEXT: movdqa %xmm14, %xmm11
6199 ; SSE2-NEXT: pxor %xmm0, %xmm11
6200 ; SSE2-NEXT: movdqa %xmm4, %xmm15
6201 ; SSE2-NEXT: pcmpgtb %xmm10, %xmm15
6202 ; SSE2-NEXT: pxor %xmm15, %xmm0
6203 ; SSE2-NEXT: pandn %xmm4, %xmm15
6204 ; SSE2-NEXT: pandn %xmm10, %xmm0
6205 ; SSE2-NEXT: por %xmm15, %xmm0
6206 ; SSE2-NEXT: pandn %xmm5, %xmm14
6207 ; SSE2-NEXT: pandn %xmm1, %xmm11
6208 ; SSE2-NEXT: por %xmm14, %xmm11
6209 ; SSE2-NEXT: pandn %xmm6, %xmm13
6210 ; SSE2-NEXT: pandn %xmm8, %xmm2
6211 ; SSE2-NEXT: por %xmm13, %xmm2
6212 ; SSE2-NEXT: pandn %xmm7, %xmm12
6213 ; SSE2-NEXT: pandn %xmm3, %xmm9
6214 ; SSE2-NEXT: por %xmm12, %xmm9
6215 ; SSE2-NEXT: movdqa %xmm11, %xmm1
6216 ; SSE2-NEXT: movdqa %xmm9, %xmm3
6219 ; SSE4-LABEL: test132:
6220 ; SSE4: # BB#0: # %entry
6221 ; SSE4-NEXT: pminsb %xmm4, %xmm0
6222 ; SSE4-NEXT: pminsb %xmm5, %xmm1
6223 ; SSE4-NEXT: pminsb %xmm6, %xmm2
6224 ; SSE4-NEXT: pminsb %xmm7, %xmm3
6227 ; AVX1-LABEL: test132:
6228 ; AVX1: # BB#0: # %entry
6229 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6230 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6231 ; AVX1-NEXT: vpminsb %xmm4, %xmm5, %xmm4
6232 ; AVX1-NEXT: vpminsb %xmm2, %xmm0, %xmm0
6233 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6234 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6235 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6236 ; AVX1-NEXT: vpminsb %xmm2, %xmm4, %xmm2
6237 ; AVX1-NEXT: vpminsb %xmm3, %xmm1, %xmm1
6238 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6241 ; AVX2-LABEL: test132:
6242 ; AVX2: # BB#0: # %entry
6243 ; AVX2-NEXT: vpminsb %ymm2, %ymm0, %ymm0
6244 ; AVX2-NEXT: vpminsb %ymm3, %ymm1, %ymm1
6247 ; AVX512BW-LABEL: test132:
6248 ; AVX512BW: # BB#0: # %entry
6249 ; AVX512BW-NEXT: vpminsb %zmm1, %zmm0, %zmm0
6250 ; AVX512BW-NEXT: retq
6252 %cmp = icmp sge <64 x i8> %a, %b
6253 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6257 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
6258 ; SSE-LABEL: test133:
6259 ; SSE: # BB#0: # %entry
6260 ; SSE-NEXT: pmaxub %xmm4, %xmm0
6261 ; SSE-NEXT: pmaxub %xmm5, %xmm1
6262 ; SSE-NEXT: pmaxub %xmm6, %xmm2
6263 ; SSE-NEXT: pmaxub %xmm7, %xmm3
6266 ; AVX1-LABEL: test133:
6267 ; AVX1: # BB#0: # %entry
6268 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6269 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6270 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
6271 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
6272 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6273 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6274 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6275 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2
6276 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
6277 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6280 ; AVX2-LABEL: test133:
6281 ; AVX2: # BB#0: # %entry
6282 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
6283 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
6286 ; AVX512BW-LABEL: test133:
6287 ; AVX512BW: # BB#0: # %entry
6288 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
6289 ; AVX512BW-NEXT: retq
6291 %cmp = icmp ult <64 x i8> %a, %b
6292 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6296 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
6297 ; SSE-LABEL: test134:
6298 ; SSE: # BB#0: # %entry
6299 ; SSE-NEXT: pmaxub %xmm4, %xmm0
6300 ; SSE-NEXT: pmaxub %xmm5, %xmm1
6301 ; SSE-NEXT: pmaxub %xmm6, %xmm2
6302 ; SSE-NEXT: pmaxub %xmm7, %xmm3
6305 ; AVX1-LABEL: test134:
6306 ; AVX1: # BB#0: # %entry
6307 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6308 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6309 ; AVX1-NEXT: vpmaxub %xmm4, %xmm5, %xmm4
6310 ; AVX1-NEXT: vpmaxub %xmm2, %xmm0, %xmm0
6311 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6312 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6313 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6314 ; AVX1-NEXT: vpmaxub %xmm2, %xmm4, %xmm2
6315 ; AVX1-NEXT: vpmaxub %xmm3, %xmm1, %xmm1
6316 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6319 ; AVX2-LABEL: test134:
6320 ; AVX2: # BB#0: # %entry
6321 ; AVX2-NEXT: vpmaxub %ymm2, %ymm0, %ymm0
6322 ; AVX2-NEXT: vpmaxub %ymm3, %ymm1, %ymm1
6325 ; AVX512BW-LABEL: test134:
6326 ; AVX512BW: # BB#0: # %entry
6327 ; AVX512BW-NEXT: vpmaxub %zmm1, %zmm0, %zmm0
6328 ; AVX512BW-NEXT: retq
6330 %cmp = icmp ule <64 x i8> %a, %b
6331 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6335 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
6336 ; SSE-LABEL: test135:
6337 ; SSE: # BB#0: # %entry
6338 ; SSE-NEXT: pminub %xmm4, %xmm0
6339 ; SSE-NEXT: pminub %xmm5, %xmm1
6340 ; SSE-NEXT: pminub %xmm6, %xmm2
6341 ; SSE-NEXT: pminub %xmm7, %xmm3
6344 ; AVX1-LABEL: test135:
6345 ; AVX1: # BB#0: # %entry
6346 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6347 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6348 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
6349 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
6350 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6351 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6352 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6353 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2
6354 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
6355 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6358 ; AVX2-LABEL: test135:
6359 ; AVX2: # BB#0: # %entry
6360 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
6361 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
6364 ; AVX512BW-LABEL: test135:
6365 ; AVX512BW: # BB#0: # %entry
6366 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0
6367 ; AVX512BW-NEXT: retq
6369 %cmp = icmp ugt <64 x i8> %a, %b
6370 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6374 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
6375 ; SSE-LABEL: test136:
6376 ; SSE: # BB#0: # %entry
6377 ; SSE-NEXT: pminub %xmm4, %xmm0
6378 ; SSE-NEXT: pminub %xmm5, %xmm1
6379 ; SSE-NEXT: pminub %xmm6, %xmm2
6380 ; SSE-NEXT: pminub %xmm7, %xmm3
6383 ; AVX1-LABEL: test136:
6384 ; AVX1: # BB#0: # %entry
6385 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6386 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6387 ; AVX1-NEXT: vpminub %xmm4, %xmm5, %xmm4
6388 ; AVX1-NEXT: vpminub %xmm2, %xmm0, %xmm0
6389 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6390 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6391 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6392 ; AVX1-NEXT: vpminub %xmm2, %xmm4, %xmm2
6393 ; AVX1-NEXT: vpminub %xmm3, %xmm1, %xmm1
6394 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6397 ; AVX2-LABEL: test136:
6398 ; AVX2: # BB#0: # %entry
6399 ; AVX2-NEXT: vpminub %ymm2, %ymm0, %ymm0
6400 ; AVX2-NEXT: vpminub %ymm3, %ymm1, %ymm1
6403 ; AVX512BW-LABEL: test136:
6404 ; AVX512BW: # BB#0: # %entry
6405 ; AVX512BW-NEXT: vpminub %zmm1, %zmm0, %zmm0
6406 ; AVX512BW-NEXT: retq
6408 %cmp = icmp uge <64 x i8> %a, %b
6409 %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6413 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
6414 ; SSE-LABEL: test137:
6415 ; SSE: # BB#0: # %entry
6416 ; SSE-NEXT: pmaxsw %xmm4, %xmm0
6417 ; SSE-NEXT: pmaxsw %xmm5, %xmm1
6418 ; SSE-NEXT: pmaxsw %xmm6, %xmm2
6419 ; SSE-NEXT: pmaxsw %xmm7, %xmm3
6422 ; AVX1-LABEL: test137:
6423 ; AVX1: # BB#0: # %entry
6424 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6425 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6426 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
6427 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
6428 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6429 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6430 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6431 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2
6432 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
6433 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6436 ; AVX2-LABEL: test137:
6437 ; AVX2: # BB#0: # %entry
6438 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
6439 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
6442 ; AVX512BW-LABEL: test137:
6443 ; AVX512BW: # BB#0: # %entry
6444 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
6445 ; AVX512BW-NEXT: retq
6447 %cmp = icmp slt <32 x i16> %a, %b
6448 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6452 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
6453 ; SSE-LABEL: test138:
6454 ; SSE: # BB#0: # %entry
6455 ; SSE-NEXT: pmaxsw %xmm4, %xmm0
6456 ; SSE-NEXT: pmaxsw %xmm5, %xmm1
6457 ; SSE-NEXT: pmaxsw %xmm6, %xmm2
6458 ; SSE-NEXT: pmaxsw %xmm7, %xmm3
6461 ; AVX1-LABEL: test138:
6462 ; AVX1: # BB#0: # %entry
6463 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6464 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6465 ; AVX1-NEXT: vpmaxsw %xmm4, %xmm5, %xmm4
6466 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm0, %xmm0
6467 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6468 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6469 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6470 ; AVX1-NEXT: vpmaxsw %xmm2, %xmm4, %xmm2
6471 ; AVX1-NEXT: vpmaxsw %xmm3, %xmm1, %xmm1
6472 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6475 ; AVX2-LABEL: test138:
6476 ; AVX2: # BB#0: # %entry
6477 ; AVX2-NEXT: vpmaxsw %ymm2, %ymm0, %ymm0
6478 ; AVX2-NEXT: vpmaxsw %ymm3, %ymm1, %ymm1
6481 ; AVX512BW-LABEL: test138:
6482 ; AVX512BW: # BB#0: # %entry
6483 ; AVX512BW-NEXT: vpmaxsw %zmm1, %zmm0, %zmm0
6484 ; AVX512BW-NEXT: retq
6486 %cmp = icmp sle <32 x i16> %a, %b
6487 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6491 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6492 ; SSE-LABEL: test139:
6493 ; SSE: # BB#0: # %entry
6494 ; SSE-NEXT: pminsw %xmm4, %xmm0
6495 ; SSE-NEXT: pminsw %xmm5, %xmm1
6496 ; SSE-NEXT: pminsw %xmm6, %xmm2
6497 ; SSE-NEXT: pminsw %xmm7, %xmm3
6500 ; AVX1-LABEL: test139:
6501 ; AVX1: # BB#0: # %entry
6502 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6503 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6504 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
6505 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
6506 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6507 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6508 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6509 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2
6510 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
6511 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6514 ; AVX2-LABEL: test139:
6515 ; AVX2: # BB#0: # %entry
6516 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
6517 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
6520 ; AVX512BW-LABEL: test139:
6521 ; AVX512BW: # BB#0: # %entry
6522 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0
6523 ; AVX512BW-NEXT: retq
6525 %cmp = icmp sgt <32 x i16> %a, %b
6526 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6530 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6531 ; SSE-LABEL: test140:
6532 ; SSE: # BB#0: # %entry
6533 ; SSE-NEXT: pminsw %xmm4, %xmm0
6534 ; SSE-NEXT: pminsw %xmm5, %xmm1
6535 ; SSE-NEXT: pminsw %xmm6, %xmm2
6536 ; SSE-NEXT: pminsw %xmm7, %xmm3
6539 ; AVX1-LABEL: test140:
6540 ; AVX1: # BB#0: # %entry
6541 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6542 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6543 ; AVX1-NEXT: vpminsw %xmm4, %xmm5, %xmm4
6544 ; AVX1-NEXT: vpminsw %xmm2, %xmm0, %xmm0
6545 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6546 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6547 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6548 ; AVX1-NEXT: vpminsw %xmm2, %xmm4, %xmm2
6549 ; AVX1-NEXT: vpminsw %xmm3, %xmm1, %xmm1
6550 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6553 ; AVX2-LABEL: test140:
6554 ; AVX2: # BB#0: # %entry
6555 ; AVX2-NEXT: vpminsw %ymm2, %ymm0, %ymm0
6556 ; AVX2-NEXT: vpminsw %ymm3, %ymm1, %ymm1
6559 ; AVX512BW-LABEL: test140:
6560 ; AVX512BW: # BB#0: # %entry
6561 ; AVX512BW-NEXT: vpminsw %zmm1, %zmm0, %zmm0
6562 ; AVX512BW-NEXT: retq
6564 %cmp = icmp sge <32 x i16> %a, %b
6565 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6569 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6570 ; SSE2-LABEL: test141:
6571 ; SSE2: # BB#0: # %entry
6572 ; SSE2-NEXT: movdqa %xmm0, %xmm11
6573 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768]
6574 ; SSE2-NEXT: movdqa %xmm3, %xmm9
6575 ; SSE2-NEXT: pxor %xmm0, %xmm9
6576 ; SSE2-NEXT: movdqa %xmm7, %xmm8
6577 ; SSE2-NEXT: pxor %xmm0, %xmm8
6578 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8
6579 ; SSE2-NEXT: movdqa %xmm2, %xmm10
6580 ; SSE2-NEXT: pxor %xmm0, %xmm10
6581 ; SSE2-NEXT: movdqa %xmm6, %xmm9
6582 ; SSE2-NEXT: pxor %xmm0, %xmm9
6583 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9
6584 ; SSE2-NEXT: movdqa %xmm1, %xmm12
6585 ; SSE2-NEXT: pxor %xmm0, %xmm12
6586 ; SSE2-NEXT: movdqa %xmm5, %xmm10
6587 ; SSE2-NEXT: pxor %xmm0, %xmm10
6588 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10
6589 ; SSE2-NEXT: movdqa %xmm11, %xmm12
6590 ; SSE2-NEXT: pxor %xmm0, %xmm12
6591 ; SSE2-NEXT: pxor %xmm4, %xmm0
6592 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm0
6593 ; SSE2-NEXT: pand %xmm0, %xmm4
6594 ; SSE2-NEXT: pandn %xmm11, %xmm0
6595 ; SSE2-NEXT: por %xmm4, %xmm0
6596 ; SSE2-NEXT: pand %xmm10, %xmm5
6597 ; SSE2-NEXT: pandn %xmm1, %xmm10
6598 ; SSE2-NEXT: por %xmm5, %xmm10
6599 ; SSE2-NEXT: pand %xmm9, %xmm6
6600 ; SSE2-NEXT: pandn %xmm2, %xmm9
6601 ; SSE2-NEXT: por %xmm6, %xmm9
6602 ; SSE2-NEXT: pand %xmm8, %xmm7
6603 ; SSE2-NEXT: pandn %xmm3, %xmm8
6604 ; SSE2-NEXT: por %xmm7, %xmm8
6605 ; SSE2-NEXT: movdqa %xmm10, %xmm1
6606 ; SSE2-NEXT: movdqa %xmm9, %xmm2
6607 ; SSE2-NEXT: movdqa %xmm8, %xmm3
6610 ; SSE4-LABEL: test141:
6611 ; SSE4: # BB#0: # %entry
6612 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0
6613 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1
6614 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2
6615 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3
6618 ; AVX1-LABEL: test141:
6619 ; AVX1: # BB#0: # %entry
6620 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6621 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6622 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
6623 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
6624 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6625 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6626 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6627 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2
6628 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
6629 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6632 ; AVX2-LABEL: test141:
6633 ; AVX2: # BB#0: # %entry
6634 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
6635 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
6638 ; AVX512BW-LABEL: test141:
6639 ; AVX512BW: # BB#0: # %entry
6640 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
6641 ; AVX512BW-NEXT: retq
6643 %cmp = icmp ult <32 x i16> %a, %b
6644 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6648 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6649 ; SSE2-LABEL: test142:
6650 ; SSE2: # BB#0: # %entry
6651 ; SSE2-NEXT: movdqa %xmm3, %xmm8
6652 ; SSE2-NEXT: movdqa %xmm2, %xmm9
6653 ; SSE2-NEXT: movdqa %xmm1, %xmm10
6654 ; SSE2-NEXT: psubusw %xmm7, %xmm3
6655 ; SSE2-NEXT: pxor %xmm12, %xmm12
6656 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3
6657 ; SSE2-NEXT: psubusw %xmm6, %xmm2
6658 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2
6659 ; SSE2-NEXT: psubusw %xmm5, %xmm1
6660 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1
6661 ; SSE2-NEXT: movdqa %xmm0, %xmm11
6662 ; SSE2-NEXT: psubusw %xmm4, %xmm11
6663 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11
6664 ; SSE2-NEXT: pand %xmm11, %xmm4
6665 ; SSE2-NEXT: pandn %xmm0, %xmm11
6666 ; SSE2-NEXT: por %xmm4, %xmm11
6667 ; SSE2-NEXT: pand %xmm1, %xmm5
6668 ; SSE2-NEXT: pandn %xmm10, %xmm1
6669 ; SSE2-NEXT: por %xmm5, %xmm1
6670 ; SSE2-NEXT: pand %xmm2, %xmm6
6671 ; SSE2-NEXT: pandn %xmm9, %xmm2
6672 ; SSE2-NEXT: por %xmm6, %xmm2
6673 ; SSE2-NEXT: pand %xmm3, %xmm7
6674 ; SSE2-NEXT: pandn %xmm8, %xmm3
6675 ; SSE2-NEXT: por %xmm7, %xmm3
6676 ; SSE2-NEXT: movdqa %xmm11, %xmm0
6679 ; SSE4-LABEL: test142:
6680 ; SSE4: # BB#0: # %entry
6681 ; SSE4-NEXT: pmaxuw %xmm4, %xmm0
6682 ; SSE4-NEXT: pmaxuw %xmm5, %xmm1
6683 ; SSE4-NEXT: pmaxuw %xmm6, %xmm2
6684 ; SSE4-NEXT: pmaxuw %xmm7, %xmm3
6687 ; AVX1-LABEL: test142:
6688 ; AVX1: # BB#0: # %entry
6689 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6690 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6691 ; AVX1-NEXT: vpmaxuw %xmm4, %xmm5, %xmm4
6692 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm0, %xmm0
6693 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6694 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6695 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6696 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm4, %xmm2
6697 ; AVX1-NEXT: vpmaxuw %xmm3, %xmm1, %xmm1
6698 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6701 ; AVX2-LABEL: test142:
6702 ; AVX2: # BB#0: # %entry
6703 ; AVX2-NEXT: vpmaxuw %ymm2, %ymm0, %ymm0
6704 ; AVX2-NEXT: vpmaxuw %ymm3, %ymm1, %ymm1
6707 ; AVX512BW-LABEL: test142:
6708 ; AVX512BW: # BB#0: # %entry
6709 ; AVX512BW-NEXT: vpmaxuw %zmm1, %zmm0, %zmm0
6710 ; AVX512BW-NEXT: retq
6712 %cmp = icmp ule <32 x i16> %a, %b
6713 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6717 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6718 ; SSE2-LABEL: test143:
6719 ; SSE2: # BB#0: # %entry
6720 ; SSE2-NEXT: movdqa %xmm0, %xmm11
6721 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768]
6722 ; SSE2-NEXT: movdqa %xmm7, %xmm9
6723 ; SSE2-NEXT: pxor %xmm0, %xmm9
6724 ; SSE2-NEXT: movdqa %xmm3, %xmm8
6725 ; SSE2-NEXT: pxor %xmm0, %xmm8
6726 ; SSE2-NEXT: pcmpgtw %xmm9, %xmm8
6727 ; SSE2-NEXT: movdqa %xmm6, %xmm10
6728 ; SSE2-NEXT: pxor %xmm0, %xmm10
6729 ; SSE2-NEXT: movdqa %xmm2, %xmm9
6730 ; SSE2-NEXT: pxor %xmm0, %xmm9
6731 ; SSE2-NEXT: pcmpgtw %xmm10, %xmm9
6732 ; SSE2-NEXT: movdqa %xmm5, %xmm12
6733 ; SSE2-NEXT: pxor %xmm0, %xmm12
6734 ; SSE2-NEXT: movdqa %xmm1, %xmm10
6735 ; SSE2-NEXT: pxor %xmm0, %xmm10
6736 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm10
6737 ; SSE2-NEXT: movdqa %xmm4, %xmm12
6738 ; SSE2-NEXT: pxor %xmm0, %xmm12
6739 ; SSE2-NEXT: pxor %xmm11, %xmm0
6740 ; SSE2-NEXT: pcmpgtw %xmm12, %xmm0
6741 ; SSE2-NEXT: pand %xmm0, %xmm4
6742 ; SSE2-NEXT: pandn %xmm11, %xmm0
6743 ; SSE2-NEXT: por %xmm4, %xmm0
6744 ; SSE2-NEXT: pand %xmm10, %xmm5
6745 ; SSE2-NEXT: pandn %xmm1, %xmm10
6746 ; SSE2-NEXT: por %xmm5, %xmm10
6747 ; SSE2-NEXT: pand %xmm9, %xmm6
6748 ; SSE2-NEXT: pandn %xmm2, %xmm9
6749 ; SSE2-NEXT: por %xmm6, %xmm9
6750 ; SSE2-NEXT: pand %xmm8, %xmm7
6751 ; SSE2-NEXT: pandn %xmm3, %xmm8
6752 ; SSE2-NEXT: por %xmm7, %xmm8
6753 ; SSE2-NEXT: movdqa %xmm10, %xmm1
6754 ; SSE2-NEXT: movdqa %xmm9, %xmm2
6755 ; SSE2-NEXT: movdqa %xmm8, %xmm3
6758 ; SSE4-LABEL: test143:
6759 ; SSE4: # BB#0: # %entry
6760 ; SSE4-NEXT: pminuw %xmm4, %xmm0
6761 ; SSE4-NEXT: pminuw %xmm5, %xmm1
6762 ; SSE4-NEXT: pminuw %xmm6, %xmm2
6763 ; SSE4-NEXT: pminuw %xmm7, %xmm3
6766 ; AVX1-LABEL: test143:
6767 ; AVX1: # BB#0: # %entry
6768 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6769 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6770 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
6771 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
6772 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6773 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6774 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6775 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2
6776 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
6777 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6780 ; AVX2-LABEL: test143:
6781 ; AVX2: # BB#0: # %entry
6782 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
6783 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
6786 ; AVX512BW-LABEL: test143:
6787 ; AVX512BW: # BB#0: # %entry
6788 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0
6789 ; AVX512BW-NEXT: retq
6791 %cmp = icmp ugt <32 x i16> %a, %b
6792 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6796 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6797 ; SSE2-LABEL: test144:
6798 ; SSE2: # BB#0: # %entry
6799 ; SSE2-NEXT: movdqa %xmm3, %xmm8
6800 ; SSE2-NEXT: movdqa %xmm2, %xmm9
6801 ; SSE2-NEXT: movdqa %xmm1, %xmm10
6802 ; SSE2-NEXT: movdqa %xmm7, %xmm3
6803 ; SSE2-NEXT: psubusw %xmm8, %xmm3
6804 ; SSE2-NEXT: pxor %xmm12, %xmm12
6805 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm3
6806 ; SSE2-NEXT: movdqa %xmm6, %xmm2
6807 ; SSE2-NEXT: psubusw %xmm9, %xmm2
6808 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm2
6809 ; SSE2-NEXT: movdqa %xmm5, %xmm1
6810 ; SSE2-NEXT: psubusw %xmm10, %xmm1
6811 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm1
6812 ; SSE2-NEXT: movdqa %xmm4, %xmm11
6813 ; SSE2-NEXT: psubusw %xmm0, %xmm11
6814 ; SSE2-NEXT: pcmpeqw %xmm12, %xmm11
6815 ; SSE2-NEXT: pand %xmm11, %xmm4
6816 ; SSE2-NEXT: pandn %xmm0, %xmm11
6817 ; SSE2-NEXT: por %xmm4, %xmm11
6818 ; SSE2-NEXT: pand %xmm1, %xmm5
6819 ; SSE2-NEXT: pandn %xmm10, %xmm1
6820 ; SSE2-NEXT: por %xmm5, %xmm1
6821 ; SSE2-NEXT: pand %xmm2, %xmm6
6822 ; SSE2-NEXT: pandn %xmm9, %xmm2
6823 ; SSE2-NEXT: por %xmm6, %xmm2
6824 ; SSE2-NEXT: pand %xmm3, %xmm7
6825 ; SSE2-NEXT: pandn %xmm8, %xmm3
6826 ; SSE2-NEXT: por %xmm7, %xmm3
6827 ; SSE2-NEXT: movdqa %xmm11, %xmm0
6830 ; SSE4-LABEL: test144:
6831 ; SSE4: # BB#0: # %entry
6832 ; SSE4-NEXT: pminuw %xmm4, %xmm0
6833 ; SSE4-NEXT: pminuw %xmm5, %xmm1
6834 ; SSE4-NEXT: pminuw %xmm6, %xmm2
6835 ; SSE4-NEXT: pminuw %xmm7, %xmm3
6838 ; AVX1-LABEL: test144:
6839 ; AVX1: # BB#0: # %entry
6840 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6841 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6842 ; AVX1-NEXT: vpminuw %xmm4, %xmm5, %xmm4
6843 ; AVX1-NEXT: vpminuw %xmm2, %xmm0, %xmm0
6844 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6845 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6846 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6847 ; AVX1-NEXT: vpminuw %xmm2, %xmm4, %xmm2
6848 ; AVX1-NEXT: vpminuw %xmm3, %xmm1, %xmm1
6849 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6852 ; AVX2-LABEL: test144:
6853 ; AVX2: # BB#0: # %entry
6854 ; AVX2-NEXT: vpminuw %ymm2, %ymm0, %ymm0
6855 ; AVX2-NEXT: vpminuw %ymm3, %ymm1, %ymm1
6858 ; AVX512BW-LABEL: test144:
6859 ; AVX512BW: # BB#0: # %entry
6860 ; AVX512BW-NEXT: vpminuw %zmm1, %zmm0, %zmm0
6861 ; AVX512BW-NEXT: retq
6863 %cmp = icmp uge <32 x i16> %a, %b
6864 %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6868 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6869 ; SSE2-LABEL: test145:
6870 ; SSE2: # BB#0: # %entry
6871 ; SSE2-NEXT: movdqa %xmm3, %xmm8
6872 ; SSE2-NEXT: movdqa %xmm7, %xmm3
6873 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm3
6874 ; SSE2-NEXT: movdqa %xmm6, %xmm9
6875 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm9
6876 ; SSE2-NEXT: movdqa %xmm5, %xmm10
6877 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm10
6878 ; SSE2-NEXT: movdqa %xmm4, %xmm11
6879 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm11
6880 ; SSE2-NEXT: pand %xmm11, %xmm4
6881 ; SSE2-NEXT: pandn %xmm0, %xmm11
6882 ; SSE2-NEXT: por %xmm4, %xmm11
6883 ; SSE2-NEXT: pand %xmm10, %xmm5
6884 ; SSE2-NEXT: pandn %xmm1, %xmm10
6885 ; SSE2-NEXT: por %xmm5, %xmm10
6886 ; SSE2-NEXT: pand %xmm9, %xmm6
6887 ; SSE2-NEXT: pandn %xmm2, %xmm9
6888 ; SSE2-NEXT: por %xmm6, %xmm9
6889 ; SSE2-NEXT: pand %xmm3, %xmm7
6890 ; SSE2-NEXT: pandn %xmm8, %xmm3
6891 ; SSE2-NEXT: por %xmm7, %xmm3
6892 ; SSE2-NEXT: movdqa %xmm11, %xmm0
6893 ; SSE2-NEXT: movdqa %xmm10, %xmm1
6894 ; SSE2-NEXT: movdqa %xmm9, %xmm2
6897 ; SSE4-LABEL: test145:
6898 ; SSE4: # BB#0: # %entry
6899 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0
6900 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1
6901 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2
6902 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3
6905 ; AVX1-LABEL: test145:
6906 ; AVX1: # BB#0: # %entry
6907 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6908 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6909 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4
6910 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
6911 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6912 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6913 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6914 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2
6915 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
6916 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6919 ; AVX2-LABEL: test145:
6920 ; AVX2: # BB#0: # %entry
6921 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
6922 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
6925 ; AVX512F-LABEL: test145:
6926 ; AVX512F: # BB#0: # %entry
6927 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
6928 ; AVX512F-NEXT: retq
6930 %cmp = icmp slt <16 x i32> %a, %b
6931 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6935 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6936 ; SSE2-LABEL: test146:
6937 ; SSE2: # BB#0: # %entry
6938 ; SSE2-NEXT: movdqa %xmm2, %xmm8
6939 ; SSE2-NEXT: movdqa %xmm3, %xmm12
6940 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm12
6941 ; SSE2-NEXT: pcmpeqd %xmm13, %xmm13
6942 ; SSE2-NEXT: movdqa %xmm12, %xmm9
6943 ; SSE2-NEXT: pxor %xmm13, %xmm9
6944 ; SSE2-NEXT: movdqa %xmm8, %xmm14
6945 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm14
6946 ; SSE2-NEXT: movdqa %xmm14, %xmm2
6947 ; SSE2-NEXT: pxor %xmm13, %xmm2
6948 ; SSE2-NEXT: movdqa %xmm1, %xmm15
6949 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm15
6950 ; SSE2-NEXT: movdqa %xmm15, %xmm10
6951 ; SSE2-NEXT: pxor %xmm13, %xmm10
6952 ; SSE2-NEXT: movdqa %xmm0, %xmm11
6953 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11
6954 ; SSE2-NEXT: pxor %xmm11, %xmm13
6955 ; SSE2-NEXT: pandn %xmm4, %xmm11
6956 ; SSE2-NEXT: pandn %xmm0, %xmm13
6957 ; SSE2-NEXT: por %xmm13, %xmm11
6958 ; SSE2-NEXT: pandn %xmm5, %xmm15
6959 ; SSE2-NEXT: pandn %xmm1, %xmm10
6960 ; SSE2-NEXT: por %xmm15, %xmm10
6961 ; SSE2-NEXT: pandn %xmm6, %xmm14
6962 ; SSE2-NEXT: pandn %xmm8, %xmm2
6963 ; SSE2-NEXT: por %xmm14, %xmm2
6964 ; SSE2-NEXT: pandn %xmm7, %xmm12
6965 ; SSE2-NEXT: pandn %xmm3, %xmm9
6966 ; SSE2-NEXT: por %xmm12, %xmm9
6967 ; SSE2-NEXT: movdqa %xmm11, %xmm0
6968 ; SSE2-NEXT: movdqa %xmm10, %xmm1
6969 ; SSE2-NEXT: movdqa %xmm9, %xmm3
6972 ; SSE4-LABEL: test146:
6973 ; SSE4: # BB#0: # %entry
6974 ; SSE4-NEXT: pmaxsd %xmm4, %xmm0
6975 ; SSE4-NEXT: pmaxsd %xmm5, %xmm1
6976 ; SSE4-NEXT: pmaxsd %xmm6, %xmm2
6977 ; SSE4-NEXT: pmaxsd %xmm7, %xmm3
6980 ; AVX1-LABEL: test146:
6981 ; AVX1: # BB#0: # %entry
6982 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
6983 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
6984 ; AVX1-NEXT: vpmaxsd %xmm4, %xmm5, %xmm4
6985 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm0, %xmm0
6986 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
6987 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
6988 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
6989 ; AVX1-NEXT: vpmaxsd %xmm2, %xmm4, %xmm2
6990 ; AVX1-NEXT: vpmaxsd %xmm3, %xmm1, %xmm1
6991 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
6994 ; AVX2-LABEL: test146:
6995 ; AVX2: # BB#0: # %entry
6996 ; AVX2-NEXT: vpmaxsd %ymm2, %ymm0, %ymm0
6997 ; AVX2-NEXT: vpmaxsd %ymm3, %ymm1, %ymm1
7000 ; AVX512F-LABEL: test146:
7001 ; AVX512F: # BB#0: # %entry
7002 ; AVX512F-NEXT: vpmaxsd %zmm1, %zmm0, %zmm0
7003 ; AVX512F-NEXT: retq
7005 %cmp = icmp sle <16 x i32> %a, %b
7006 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7010 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
7011 ; SSE2-LABEL: test147:
7012 ; SSE2: # BB#0: # %entry
7013 ; SSE2-NEXT: movdqa %xmm3, %xmm8
7014 ; SSE2-NEXT: pcmpgtd %xmm7, %xmm3
7015 ; SSE2-NEXT: movdqa %xmm2, %xmm9
7016 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm9
7017 ; SSE2-NEXT: movdqa %xmm1, %xmm10
7018 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm10
7019 ; SSE2-NEXT: movdqa %xmm0, %xmm11
7020 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm11
7021 ; SSE2-NEXT: pand %xmm11, %xmm4
7022 ; SSE2-NEXT: pandn %xmm0, %xmm11
7023 ; SSE2-NEXT: por %xmm4, %xmm11
7024 ; SSE2-NEXT: pand %xmm10, %xmm5
7025 ; SSE2-NEXT: pandn %xmm1, %xmm10
7026 ; SSE2-NEXT: por %xmm5, %xmm10
7027 ; SSE2-NEXT: pand %xmm9, %xmm6
7028 ; SSE2-NEXT: pandn %xmm2, %xmm9
7029 ; SSE2-NEXT: por %xmm6, %xmm9
7030 ; SSE2-NEXT: pand %xmm3, %xmm7
7031 ; SSE2-NEXT: pandn %xmm8, %xmm3
7032 ; SSE2-NEXT: por %xmm7, %xmm3
7033 ; SSE2-NEXT: movdqa %xmm11, %xmm0
7034 ; SSE2-NEXT: movdqa %xmm10, %xmm1
7035 ; SSE2-NEXT: movdqa %xmm9, %xmm2
7038 ; SSE4-LABEL: test147:
7039 ; SSE4: # BB#0: # %entry
7040 ; SSE4-NEXT: pminsd %xmm4, %xmm0
7041 ; SSE4-NEXT: pminsd %xmm5, %xmm1
7042 ; SSE4-NEXT: pminsd %xmm6, %xmm2
7043 ; SSE4-NEXT: pminsd %xmm7, %xmm3
7046 ; AVX1-LABEL: test147:
7047 ; AVX1: # BB#0: # %entry
7048 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7049 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7050 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
7051 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
7052 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
7053 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7054 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7055 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2
7056 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
7057 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
7060 ; AVX2-LABEL: test147:
7061 ; AVX2: # BB#0: # %entry
7062 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
7063 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
7066 ; AVX512F-LABEL: test147:
7067 ; AVX512F: # BB#0: # %entry
7068 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0
7069 ; AVX512F-NEXT: retq
7071 %cmp = icmp sgt <16 x i32> %a, %b
7072 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7076 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
7077 ; SSE2-LABEL: test148:
7078 ; SSE2: # BB#0: # %entry
7079 ; SSE2-NEXT: movdqa %xmm2, %xmm8
7080 ; SSE2-NEXT: movdqa %xmm0, %xmm10
7081 ; SSE2-NEXT: movdqa %xmm7, %xmm12
7082 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm12
7083 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
7084 ; SSE2-NEXT: movdqa %xmm12, %xmm9
7085 ; SSE2-NEXT: pxor %xmm0, %xmm9
7086 ; SSE2-NEXT: movdqa %xmm6, %xmm13
7087 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm13
7088 ; SSE2-NEXT: movdqa %xmm13, %xmm2
7089 ; SSE2-NEXT: pxor %xmm0, %xmm2
7090 ; SSE2-NEXT: movdqa %xmm5, %xmm14
7091 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm14
7092 ; SSE2-NEXT: movdqa %xmm14, %xmm11
7093 ; SSE2-NEXT: pxor %xmm0, %xmm11
7094 ; SSE2-NEXT: movdqa %xmm4, %xmm15
7095 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm15
7096 ; SSE2-NEXT: pxor %xmm15, %xmm0
7097 ; SSE2-NEXT: pandn %xmm4, %xmm15
7098 ; SSE2-NEXT: pandn %xmm10, %xmm0
7099 ; SSE2-NEXT: por %xmm15, %xmm0
7100 ; SSE2-NEXT: pandn %xmm5, %xmm14
7101 ; SSE2-NEXT: pandn %xmm1, %xmm11
7102 ; SSE2-NEXT: por %xmm14, %xmm11
7103 ; SSE2-NEXT: pandn %xmm6, %xmm13
7104 ; SSE2-NEXT: pandn %xmm8, %xmm2
7105 ; SSE2-NEXT: por %xmm13, %xmm2
7106 ; SSE2-NEXT: pandn %xmm7, %xmm12
7107 ; SSE2-NEXT: pandn %xmm3, %xmm9
7108 ; SSE2-NEXT: por %xmm12, %xmm9
7109 ; SSE2-NEXT: movdqa %xmm11, %xmm1
7110 ; SSE2-NEXT: movdqa %xmm9, %xmm3
7113 ; SSE4-LABEL: test148:
7114 ; SSE4: # BB#0: # %entry
7115 ; SSE4-NEXT: pminsd %xmm4, %xmm0
7116 ; SSE4-NEXT: pminsd %xmm5, %xmm1
7117 ; SSE4-NEXT: pminsd %xmm6, %xmm2
7118 ; SSE4-NEXT: pminsd %xmm7, %xmm3
7121 ; AVX1-LABEL: test148:
7122 ; AVX1: # BB#0: # %entry
7123 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7124 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7125 ; AVX1-NEXT: vpminsd %xmm4, %xmm5, %xmm4
7126 ; AVX1-NEXT: vpminsd %xmm2, %xmm0, %xmm0
7127 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
7128 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7129 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7130 ; AVX1-NEXT: vpminsd %xmm2, %xmm4, %xmm2
7131 ; AVX1-NEXT: vpminsd %xmm3, %xmm1, %xmm1
7132 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
7135 ; AVX2-LABEL: test148:
7136 ; AVX2: # BB#0: # %entry
7137 ; AVX2-NEXT: vpminsd %ymm2, %ymm0, %ymm0
7138 ; AVX2-NEXT: vpminsd %ymm3, %ymm1, %ymm1
7141 ; AVX512F-LABEL: test148:
7142 ; AVX512F: # BB#0: # %entry
7143 ; AVX512F-NEXT: vpminsd %zmm1, %zmm0, %zmm0
7144 ; AVX512F-NEXT: retq
7146 %cmp = icmp sge <16 x i32> %a, %b
7147 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7151 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
7152 ; SSE2-LABEL: test149:
7153 ; SSE2: # BB#0: # %entry
7154 ; SSE2-NEXT: movdqa %xmm0, %xmm11
7155 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
7156 ; SSE2-NEXT: movdqa %xmm3, %xmm9
7157 ; SSE2-NEXT: pxor %xmm0, %xmm9
7158 ; SSE2-NEXT: movdqa %xmm7, %xmm8
7159 ; SSE2-NEXT: pxor %xmm0, %xmm8
7160 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8
7161 ; SSE2-NEXT: movdqa %xmm2, %xmm10
7162 ; SSE2-NEXT: pxor %xmm0, %xmm10
7163 ; SSE2-NEXT: movdqa %xmm6, %xmm9
7164 ; SSE2-NEXT: pxor %xmm0, %xmm9
7165 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9
7166 ; SSE2-NEXT: movdqa %xmm1, %xmm12
7167 ; SSE2-NEXT: pxor %xmm0, %xmm12
7168 ; SSE2-NEXT: movdqa %xmm5, %xmm10
7169 ; SSE2-NEXT: pxor %xmm0, %xmm10
7170 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10
7171 ; SSE2-NEXT: movdqa %xmm11, %xmm12
7172 ; SSE2-NEXT: pxor %xmm0, %xmm12
7173 ; SSE2-NEXT: pxor %xmm4, %xmm0
7174 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm0
7175 ; SSE2-NEXT: pand %xmm0, %xmm4
7176 ; SSE2-NEXT: pandn %xmm11, %xmm0
7177 ; SSE2-NEXT: por %xmm4, %xmm0
7178 ; SSE2-NEXT: pand %xmm10, %xmm5
7179 ; SSE2-NEXT: pandn %xmm1, %xmm10
7180 ; SSE2-NEXT: por %xmm5, %xmm10
7181 ; SSE2-NEXT: pand %xmm9, %xmm6
7182 ; SSE2-NEXT: pandn %xmm2, %xmm9
7183 ; SSE2-NEXT: por %xmm6, %xmm9
7184 ; SSE2-NEXT: pand %xmm8, %xmm7
7185 ; SSE2-NEXT: pandn %xmm3, %xmm8
7186 ; SSE2-NEXT: por %xmm7, %xmm8
7187 ; SSE2-NEXT: movdqa %xmm10, %xmm1
7188 ; SSE2-NEXT: movdqa %xmm9, %xmm2
7189 ; SSE2-NEXT: movdqa %xmm8, %xmm3
7192 ; SSE4-LABEL: test149:
7193 ; SSE4: # BB#0: # %entry
7194 ; SSE4-NEXT: pmaxud %xmm4, %xmm0
7195 ; SSE4-NEXT: pmaxud %xmm5, %xmm1
7196 ; SSE4-NEXT: pmaxud %xmm6, %xmm2
7197 ; SSE4-NEXT: pmaxud %xmm7, %xmm3
7200 ; AVX1-LABEL: test149:
7201 ; AVX1: # BB#0: # %entry
7202 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7203 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7204 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
7205 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
7206 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
7207 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7208 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7209 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2
7210 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
7211 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
7214 ; AVX2-LABEL: test149:
7215 ; AVX2: # BB#0: # %entry
7216 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
7217 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
7220 ; AVX512F-LABEL: test149:
7221 ; AVX512F: # BB#0: # %entry
7222 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
7223 ; AVX512F-NEXT: retq
7225 %cmp = icmp ult <16 x i32> %a, %b
7226 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7230 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
7231 ; SSE2-LABEL: test150:
7232 ; SSE2: # BB#0: # %entry
7233 ; SSE2-NEXT: movdqa %xmm0, %xmm10
7234 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
7235 ; SSE2-NEXT: movdqa %xmm7, %xmm0
7236 ; SSE2-NEXT: pxor %xmm14, %xmm0
7237 ; SSE2-NEXT: movdqa %xmm3, %xmm12
7238 ; SSE2-NEXT: pxor %xmm14, %xmm12
7239 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12
7240 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
7241 ; SSE2-NEXT: movdqa %xmm12, %xmm8
7242 ; SSE2-NEXT: pxor %xmm0, %xmm8
7243 ; SSE2-NEXT: movdqa %xmm6, %xmm9
7244 ; SSE2-NEXT: pxor %xmm14, %xmm9
7245 ; SSE2-NEXT: movdqa %xmm2, %xmm13
7246 ; SSE2-NEXT: pxor %xmm14, %xmm13
7247 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13
7248 ; SSE2-NEXT: movdqa %xmm13, %xmm9
7249 ; SSE2-NEXT: pxor %xmm0, %xmm9
7250 ; SSE2-NEXT: movdqa %xmm5, %xmm11
7251 ; SSE2-NEXT: pxor %xmm14, %xmm11
7252 ; SSE2-NEXT: movdqa %xmm1, %xmm15
7253 ; SSE2-NEXT: pxor %xmm14, %xmm15
7254 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
7255 ; SSE2-NEXT: movdqa %xmm4, %xmm11
7256 ; SSE2-NEXT: pxor %xmm14, %xmm11
7257 ; SSE2-NEXT: pxor %xmm10, %xmm14
7258 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
7259 ; SSE2-NEXT: movdqa %xmm15, %xmm11
7260 ; SSE2-NEXT: pxor %xmm0, %xmm11
7261 ; SSE2-NEXT: pxor %xmm14, %xmm0
7262 ; SSE2-NEXT: pandn %xmm4, %xmm14
7263 ; SSE2-NEXT: pandn %xmm10, %xmm0
7264 ; SSE2-NEXT: por %xmm14, %xmm0
7265 ; SSE2-NEXT: pandn %xmm5, %xmm15
7266 ; SSE2-NEXT: pandn %xmm1, %xmm11
7267 ; SSE2-NEXT: por %xmm15, %xmm11
7268 ; SSE2-NEXT: pandn %xmm6, %xmm13
7269 ; SSE2-NEXT: pandn %xmm2, %xmm9
7270 ; SSE2-NEXT: por %xmm13, %xmm9
7271 ; SSE2-NEXT: pandn %xmm7, %xmm12
7272 ; SSE2-NEXT: pandn %xmm3, %xmm8
7273 ; SSE2-NEXT: por %xmm12, %xmm8
7274 ; SSE2-NEXT: movdqa %xmm11, %xmm1
7275 ; SSE2-NEXT: movdqa %xmm9, %xmm2
7276 ; SSE2-NEXT: movdqa %xmm8, %xmm3
7279 ; SSE4-LABEL: test150:
7280 ; SSE4: # BB#0: # %entry
7281 ; SSE4-NEXT: pmaxud %xmm4, %xmm0
7282 ; SSE4-NEXT: pmaxud %xmm5, %xmm1
7283 ; SSE4-NEXT: pmaxud %xmm6, %xmm2
7284 ; SSE4-NEXT: pmaxud %xmm7, %xmm3
7287 ; AVX1-LABEL: test150:
7288 ; AVX1: # BB#0: # %entry
7289 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7290 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7291 ; AVX1-NEXT: vpmaxud %xmm4, %xmm5, %xmm4
7292 ; AVX1-NEXT: vpmaxud %xmm2, %xmm0, %xmm0
7293 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
7294 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7295 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7296 ; AVX1-NEXT: vpmaxud %xmm2, %xmm4, %xmm2
7297 ; AVX1-NEXT: vpmaxud %xmm3, %xmm1, %xmm1
7298 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
7301 ; AVX2-LABEL: test150:
7302 ; AVX2: # BB#0: # %entry
7303 ; AVX2-NEXT: vpmaxud %ymm2, %ymm0, %ymm0
7304 ; AVX2-NEXT: vpmaxud %ymm3, %ymm1, %ymm1
7307 ; AVX512F-LABEL: test150:
7308 ; AVX512F: # BB#0: # %entry
7309 ; AVX512F-NEXT: vpmaxud %zmm1, %zmm0, %zmm0
7310 ; AVX512F-NEXT: retq
7312 %cmp = icmp ule <16 x i32> %a, %b
7313 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7317 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
7318 ; SSE2-LABEL: test151:
7319 ; SSE2: # BB#0: # %entry
7320 ; SSE2-NEXT: movdqa %xmm0, %xmm11
7321 ; SSE2-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
7322 ; SSE2-NEXT: movdqa %xmm7, %xmm9
7323 ; SSE2-NEXT: pxor %xmm0, %xmm9
7324 ; SSE2-NEXT: movdqa %xmm3, %xmm8
7325 ; SSE2-NEXT: pxor %xmm0, %xmm8
7326 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm8
7327 ; SSE2-NEXT: movdqa %xmm6, %xmm10
7328 ; SSE2-NEXT: pxor %xmm0, %xmm10
7329 ; SSE2-NEXT: movdqa %xmm2, %xmm9
7330 ; SSE2-NEXT: pxor %xmm0, %xmm9
7331 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm9
7332 ; SSE2-NEXT: movdqa %xmm5, %xmm12
7333 ; SSE2-NEXT: pxor %xmm0, %xmm12
7334 ; SSE2-NEXT: movdqa %xmm1, %xmm10
7335 ; SSE2-NEXT: pxor %xmm0, %xmm10
7336 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm10
7337 ; SSE2-NEXT: movdqa %xmm4, %xmm12
7338 ; SSE2-NEXT: pxor %xmm0, %xmm12
7339 ; SSE2-NEXT: pxor %xmm11, %xmm0
7340 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm0
7341 ; SSE2-NEXT: pand %xmm0, %xmm4
7342 ; SSE2-NEXT: pandn %xmm11, %xmm0
7343 ; SSE2-NEXT: por %xmm4, %xmm0
7344 ; SSE2-NEXT: pand %xmm10, %xmm5
7345 ; SSE2-NEXT: pandn %xmm1, %xmm10
7346 ; SSE2-NEXT: por %xmm5, %xmm10
7347 ; SSE2-NEXT: pand %xmm9, %xmm6
7348 ; SSE2-NEXT: pandn %xmm2, %xmm9
7349 ; SSE2-NEXT: por %xmm6, %xmm9
7350 ; SSE2-NEXT: pand %xmm8, %xmm7
7351 ; SSE2-NEXT: pandn %xmm3, %xmm8
7352 ; SSE2-NEXT: por %xmm7, %xmm8
7353 ; SSE2-NEXT: movdqa %xmm10, %xmm1
7354 ; SSE2-NEXT: movdqa %xmm9, %xmm2
7355 ; SSE2-NEXT: movdqa %xmm8, %xmm3
7358 ; SSE4-LABEL: test151:
7359 ; SSE4: # BB#0: # %entry
7360 ; SSE4-NEXT: pminud %xmm4, %xmm0
7361 ; SSE4-NEXT: pminud %xmm5, %xmm1
7362 ; SSE4-NEXT: pminud %xmm6, %xmm2
7363 ; SSE4-NEXT: pminud %xmm7, %xmm3
7366 ; AVX1-LABEL: test151:
7367 ; AVX1: # BB#0: # %entry
7368 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7369 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7370 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
7371 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
7372 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
7373 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7374 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7375 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2
7376 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
7377 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
7380 ; AVX2-LABEL: test151:
7381 ; AVX2: # BB#0: # %entry
7382 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
7383 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
7386 ; AVX512F-LABEL: test151:
7387 ; AVX512F: # BB#0: # %entry
7388 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0
7389 ; AVX512F-NEXT: retq
7391 %cmp = icmp ugt <16 x i32> %a, %b
7392 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7396 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
7397 ; SSE2-LABEL: test152:
7398 ; SSE2: # BB#0: # %entry
7399 ; SSE2-NEXT: movdqa %xmm0, %xmm10
7400 ; SSE2-NEXT: movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
7401 ; SSE2-NEXT: movdqa %xmm3, %xmm0
7402 ; SSE2-NEXT: pxor %xmm14, %xmm0
7403 ; SSE2-NEXT: movdqa %xmm7, %xmm12
7404 ; SSE2-NEXT: pxor %xmm14, %xmm12
7405 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm12
7406 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0
7407 ; SSE2-NEXT: movdqa %xmm12, %xmm8
7408 ; SSE2-NEXT: pxor %xmm0, %xmm8
7409 ; SSE2-NEXT: movdqa %xmm2, %xmm9
7410 ; SSE2-NEXT: pxor %xmm14, %xmm9
7411 ; SSE2-NEXT: movdqa %xmm6, %xmm13
7412 ; SSE2-NEXT: pxor %xmm14, %xmm13
7413 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm13
7414 ; SSE2-NEXT: movdqa %xmm13, %xmm9
7415 ; SSE2-NEXT: pxor %xmm0, %xmm9
7416 ; SSE2-NEXT: movdqa %xmm1, %xmm11
7417 ; SSE2-NEXT: pxor %xmm14, %xmm11
7418 ; SSE2-NEXT: movdqa %xmm5, %xmm15
7419 ; SSE2-NEXT: pxor %xmm14, %xmm15
7420 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
7421 ; SSE2-NEXT: movdqa %xmm10, %xmm11
7422 ; SSE2-NEXT: pxor %xmm14, %xmm11
7423 ; SSE2-NEXT: pxor %xmm4, %xmm14
7424 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
7425 ; SSE2-NEXT: movdqa %xmm15, %xmm11
7426 ; SSE2-NEXT: pxor %xmm0, %xmm11
7427 ; SSE2-NEXT: pxor %xmm14, %xmm0
7428 ; SSE2-NEXT: pandn %xmm4, %xmm14
7429 ; SSE2-NEXT: pandn %xmm10, %xmm0
7430 ; SSE2-NEXT: por %xmm14, %xmm0
7431 ; SSE2-NEXT: pandn %xmm5, %xmm15
7432 ; SSE2-NEXT: pandn %xmm1, %xmm11
7433 ; SSE2-NEXT: por %xmm15, %xmm11
7434 ; SSE2-NEXT: pandn %xmm6, %xmm13
7435 ; SSE2-NEXT: pandn %xmm2, %xmm9
7436 ; SSE2-NEXT: por %xmm13, %xmm9
7437 ; SSE2-NEXT: pandn %xmm7, %xmm12
7438 ; SSE2-NEXT: pandn %xmm3, %xmm8
7439 ; SSE2-NEXT: por %xmm12, %xmm8
7440 ; SSE2-NEXT: movdqa %xmm11, %xmm1
7441 ; SSE2-NEXT: movdqa %xmm9, %xmm2
7442 ; SSE2-NEXT: movdqa %xmm8, %xmm3
7445 ; SSE4-LABEL: test152:
7446 ; SSE4: # BB#0: # %entry
7447 ; SSE4-NEXT: pminud %xmm4, %xmm0
7448 ; SSE4-NEXT: pminud %xmm5, %xmm1
7449 ; SSE4-NEXT: pminud %xmm6, %xmm2
7450 ; SSE4-NEXT: pminud %xmm7, %xmm3
7453 ; AVX1-LABEL: test152:
7454 ; AVX1: # BB#0: # %entry
7455 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm4
7456 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7457 ; AVX1-NEXT: vpminud %xmm4, %xmm5, %xmm4
7458 ; AVX1-NEXT: vpminud %xmm2, %xmm0, %xmm0
7459 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0
7460 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm2
7461 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7462 ; AVX1-NEXT: vpminud %xmm2, %xmm4, %xmm2
7463 ; AVX1-NEXT: vpminud %xmm3, %xmm1, %xmm1
7464 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1
7467 ; AVX2-LABEL: test152:
7468 ; AVX2: # BB#0: # %entry
7469 ; AVX2-NEXT: vpminud %ymm2, %ymm0, %ymm0
7470 ; AVX2-NEXT: vpminud %ymm3, %ymm1, %ymm1
7473 ; AVX512F-LABEL: test152:
7474 ; AVX512F: # BB#0: # %entry
7475 ; AVX512F-NEXT: vpminud %zmm1, %zmm0, %zmm0
7476 ; AVX512F-NEXT: retq
7478 %cmp = icmp uge <16 x i32> %a, %b
7479 %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7483 ; -----------------------
7485 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
7486 ; SSE2-LABEL: test153:
7487 ; SSE2: # BB#0: # %entry
7488 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0]
7489 ; SSE2-NEXT: movdqa %xmm3, %xmm8
7490 ; SSE2-NEXT: pxor %xmm11, %xmm8
7491 ; SSE2-NEXT: movdqa %xmm7, %xmm9
7492 ; SSE2-NEXT: pxor %xmm11, %xmm9
7493 ; SSE2-NEXT: movdqa %xmm9, %xmm10
7494 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10
7495 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
7496 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9
7497 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
7498 ; SSE2-NEXT: pand %xmm12, %xmm9
7499 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
7500 ; SSE2-NEXT: por %xmm9, %xmm8
7501 ; SSE2-NEXT: movdqa %xmm2, %xmm9
7502 ; SSE2-NEXT: pxor %xmm11, %xmm9
7503 ; SSE2-NEXT: movdqa %xmm6, %xmm10
7504 ; SSE2-NEXT: pxor %xmm11, %xmm10
7505 ; SSE2-NEXT: movdqa %xmm10, %xmm12
7506 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12
7507 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
7508 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
7509 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
7510 ; SSE2-NEXT: pand %xmm13, %xmm10
7511 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
7512 ; SSE2-NEXT: por %xmm10, %xmm9
7513 ; SSE2-NEXT: movdqa %xmm1, %xmm10
7514 ; SSE2-NEXT: pxor %xmm11, %xmm10
7515 ; SSE2-NEXT: movdqa %xmm5, %xmm12
7516 ; SSE2-NEXT: pxor %xmm11, %xmm12
7517 ; SSE2-NEXT: movdqa %xmm12, %xmm13
7518 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13
7519 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
7520 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12
7521 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
7522 ; SSE2-NEXT: pand %xmm14, %xmm12
7523 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
7524 ; SSE2-NEXT: por %xmm12, %xmm10
7525 ; SSE2-NEXT: movdqa %xmm0, %xmm12
7526 ; SSE2-NEXT: pxor %xmm11, %xmm12
7527 ; SSE2-NEXT: pxor %xmm4, %xmm11
7528 ; SSE2-NEXT: movdqa %xmm11, %xmm13
7529 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13
7530 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
7531 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11
7532 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
7533 ; SSE2-NEXT: pand %xmm14, %xmm12
7534 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
7535 ; SSE2-NEXT: por %xmm12, %xmm11
7536 ; SSE2-NEXT: pand %xmm11, %xmm4
7537 ; SSE2-NEXT: pandn %xmm0, %xmm11
7538 ; SSE2-NEXT: por %xmm4, %xmm11
7539 ; SSE2-NEXT: pand %xmm10, %xmm5
7540 ; SSE2-NEXT: pandn %xmm1, %xmm10
7541 ; SSE2-NEXT: por %xmm5, %xmm10
7542 ; SSE2-NEXT: pand %xmm9, %xmm6
7543 ; SSE2-NEXT: pandn %xmm2, %xmm9
7544 ; SSE2-NEXT: por %xmm6, %xmm9
7545 ; SSE2-NEXT: pand %xmm8, %xmm7
7546 ; SSE2-NEXT: pandn %xmm3, %xmm8
7547 ; SSE2-NEXT: por %xmm7, %xmm8
7548 ; SSE2-NEXT: movdqa %xmm11, %xmm0
7549 ; SSE2-NEXT: movdqa %xmm10, %xmm1
7550 ; SSE2-NEXT: movdqa %xmm9, %xmm2
7551 ; SSE2-NEXT: movdqa %xmm8, %xmm3
7554 ; SSE4-LABEL: test153:
7555 ; SSE4: # BB#0: # %entry
7556 ; SSE4-NEXT: movdqa %xmm0, %xmm8
7557 ; SSE4-NEXT: movdqa %xmm7, %xmm9
7558 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9
7559 ; SSE4-NEXT: movdqa %xmm6, %xmm10
7560 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10
7561 ; SSE4-NEXT: movdqa %xmm5, %xmm11
7562 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11
7563 ; SSE4-NEXT: movdqa %xmm4, %xmm0
7564 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm0
7565 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm8
7566 ; SSE4-NEXT: movdqa %xmm11, %xmm0
7567 ; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm1
7568 ; SSE4-NEXT: movdqa %xmm10, %xmm0
7569 ; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm2
7570 ; SSE4-NEXT: movdqa %xmm9, %xmm0
7571 ; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm3
7572 ; SSE4-NEXT: movapd %xmm8, %xmm0
7575 ; AVX1-LABEL: test153:
7576 ; AVX1: # BB#0: # %entry
7577 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7578 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
7579 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7580 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm5
7581 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
7582 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
7583 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
7584 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
7585 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm6
7586 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
7587 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7588 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7591 ; AVX2-LABEL: test153:
7592 ; AVX2: # BB#0: # %entry
7593 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4
7594 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm5
7595 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7596 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7599 ; AVX512F-LABEL: test153:
7600 ; AVX512F: # BB#0: # %entry
7601 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
7602 ; AVX512F-NEXT: retq
7604 %cmp = icmp slt <8 x i64> %a, %b
7605 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7609 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7610 ; SSE2-LABEL: test154:
7611 ; SSE2: # BB#0: # %entry
7612 ; SSE2-NEXT: movdqa %xmm7, %xmm8
7613 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
7614 ; SSE2-NEXT: movdqa %xmm3, %xmm7
7615 ; SSE2-NEXT: movdqa %xmm2, %xmm3
7616 ; SSE2-NEXT: movdqa %xmm1, %xmm2
7617 ; SSE2-NEXT: movdqa %xmm0, %xmm9
7618 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
7619 ; SSE2-NEXT: pxor %xmm10, %xmm8
7620 ; SSE2-NEXT: movdqa %xmm7, %xmm0
7621 ; SSE2-NEXT: pxor %xmm10, %xmm0
7622 ; SSE2-NEXT: movdqa %xmm0, %xmm11
7623 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
7624 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7625 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
7626 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7627 ; SSE2-NEXT: pand %xmm12, %xmm0
7628 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
7629 ; SSE2-NEXT: por %xmm0, %xmm12
7630 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
7631 ; SSE2-NEXT: movdqa %xmm12, %xmm8
7632 ; SSE2-NEXT: pxor %xmm1, %xmm8
7633 ; SSE2-NEXT: movdqa %xmm6, %xmm11
7634 ; SSE2-NEXT: pxor %xmm10, %xmm11
7635 ; SSE2-NEXT: movdqa %xmm3, %xmm13
7636 ; SSE2-NEXT: pxor %xmm10, %xmm13
7637 ; SSE2-NEXT: movdqa %xmm13, %xmm14
7638 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
7639 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
7640 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13
7641 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
7642 ; SSE2-NEXT: pand %xmm15, %xmm11
7643 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
7644 ; SSE2-NEXT: por %xmm11, %xmm13
7645 ; SSE2-NEXT: movdqa %xmm5, %xmm11
7646 ; SSE2-NEXT: pxor %xmm10, %xmm11
7647 ; SSE2-NEXT: movdqa %xmm2, %xmm14
7648 ; SSE2-NEXT: pxor %xmm10, %xmm14
7649 ; SSE2-NEXT: movdqa %xmm14, %xmm15
7650 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
7651 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14
7652 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
7653 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
7654 ; SSE2-NEXT: pand %xmm11, %xmm14
7655 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
7656 ; SSE2-NEXT: por %xmm14, %xmm15
7657 ; SSE2-NEXT: movdqa %xmm4, %xmm11
7658 ; SSE2-NEXT: pxor %xmm10, %xmm11
7659 ; SSE2-NEXT: pxor %xmm9, %xmm10
7660 ; SSE2-NEXT: movdqa %xmm10, %xmm14
7661 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
7662 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10
7663 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
7664 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
7665 ; SSE2-NEXT: pand %xmm11, %xmm0
7666 ; SSE2-NEXT: movdqa %xmm13, %xmm10
7667 ; SSE2-NEXT: pxor %xmm1, %xmm10
7668 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
7669 ; SSE2-NEXT: por %xmm0, %xmm14
7670 ; SSE2-NEXT: movdqa %xmm15, %xmm11
7671 ; SSE2-NEXT: pxor %xmm1, %xmm11
7672 ; SSE2-NEXT: pxor %xmm14, %xmm1
7673 ; SSE2-NEXT: pandn %xmm4, %xmm14
7674 ; SSE2-NEXT: pandn %xmm9, %xmm1
7675 ; SSE2-NEXT: por %xmm14, %xmm1
7676 ; SSE2-NEXT: pandn %xmm5, %xmm15
7677 ; SSE2-NEXT: pandn %xmm2, %xmm11
7678 ; SSE2-NEXT: por %xmm15, %xmm11
7679 ; SSE2-NEXT: pandn %xmm6, %xmm13
7680 ; SSE2-NEXT: pandn %xmm3, %xmm10
7681 ; SSE2-NEXT: por %xmm13, %xmm10
7682 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
7683 ; SSE2-NEXT: pandn %xmm7, %xmm8
7684 ; SSE2-NEXT: por %xmm12, %xmm8
7685 ; SSE2-NEXT: movdqa %xmm1, %xmm0
7686 ; SSE2-NEXT: movdqa %xmm11, %xmm1
7687 ; SSE2-NEXT: movdqa %xmm10, %xmm2
7688 ; SSE2-NEXT: movdqa %xmm8, %xmm3
7691 ; SSE4-LABEL: test154:
7692 ; SSE4: # BB#0: # %entry
7693 ; SSE4-NEXT: movdqa %xmm0, %xmm8
7694 ; SSE4-NEXT: movdqa %xmm3, %xmm9
7695 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9
7696 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12
7697 ; SSE4-NEXT: pxor %xmm12, %xmm9
7698 ; SSE4-NEXT: movdqa %xmm2, %xmm10
7699 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10
7700 ; SSE4-NEXT: pxor %xmm12, %xmm10
7701 ; SSE4-NEXT: movdqa %xmm1, %xmm11
7702 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11
7703 ; SSE4-NEXT: pxor %xmm12, %xmm11
7704 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
7705 ; SSE4-NEXT: pxor %xmm12, %xmm0
7706 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm8
7707 ; SSE4-NEXT: movdqa %xmm11, %xmm0
7708 ; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm1
7709 ; SSE4-NEXT: movdqa %xmm10, %xmm0
7710 ; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm2
7711 ; SSE4-NEXT: movdqa %xmm9, %xmm0
7712 ; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm3
7713 ; SSE4-NEXT: movapd %xmm8, %xmm0
7716 ; AVX1-LABEL: test154:
7717 ; AVX1: # BB#0: # %entry
7718 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
7719 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
7720 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7721 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
7722 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
7723 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm6
7724 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
7725 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
7726 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
7727 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
7728 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
7729 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
7730 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm7
7731 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5
7732 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
7733 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7734 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7737 ; AVX2-LABEL: test154:
7738 ; AVX2: # BB#0: # %entry
7739 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4
7740 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5
7741 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4
7742 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm6
7743 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5
7744 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7745 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7748 ; AVX512F-LABEL: test154:
7749 ; AVX512F: # BB#0: # %entry
7750 ; AVX512F-NEXT: vpmaxsq %zmm1, %zmm0, %zmm0
7751 ; AVX512F-NEXT: retq
7753 %cmp = icmp sle <8 x i64> %a, %b
7754 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7758 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7759 ; SSE2-LABEL: test155:
7760 ; SSE2: # BB#0: # %entry
7761 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0]
7762 ; SSE2-NEXT: movdqa %xmm7, %xmm8
7763 ; SSE2-NEXT: pxor %xmm11, %xmm8
7764 ; SSE2-NEXT: movdqa %xmm3, %xmm9
7765 ; SSE2-NEXT: pxor %xmm11, %xmm9
7766 ; SSE2-NEXT: movdqa %xmm9, %xmm10
7767 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10
7768 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
7769 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9
7770 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
7771 ; SSE2-NEXT: pand %xmm12, %xmm9
7772 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
7773 ; SSE2-NEXT: por %xmm9, %xmm8
7774 ; SSE2-NEXT: movdqa %xmm6, %xmm9
7775 ; SSE2-NEXT: pxor %xmm11, %xmm9
7776 ; SSE2-NEXT: movdqa %xmm2, %xmm10
7777 ; SSE2-NEXT: pxor %xmm11, %xmm10
7778 ; SSE2-NEXT: movdqa %xmm10, %xmm12
7779 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12
7780 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
7781 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
7782 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
7783 ; SSE2-NEXT: pand %xmm13, %xmm10
7784 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
7785 ; SSE2-NEXT: por %xmm10, %xmm9
7786 ; SSE2-NEXT: movdqa %xmm5, %xmm10
7787 ; SSE2-NEXT: pxor %xmm11, %xmm10
7788 ; SSE2-NEXT: movdqa %xmm1, %xmm12
7789 ; SSE2-NEXT: pxor %xmm11, %xmm12
7790 ; SSE2-NEXT: movdqa %xmm12, %xmm13
7791 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13
7792 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
7793 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12
7794 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
7795 ; SSE2-NEXT: pand %xmm14, %xmm12
7796 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
7797 ; SSE2-NEXT: por %xmm12, %xmm10
7798 ; SSE2-NEXT: movdqa %xmm4, %xmm12
7799 ; SSE2-NEXT: pxor %xmm11, %xmm12
7800 ; SSE2-NEXT: pxor %xmm0, %xmm11
7801 ; SSE2-NEXT: movdqa %xmm11, %xmm13
7802 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13
7803 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
7804 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11
7805 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
7806 ; SSE2-NEXT: pand %xmm14, %xmm12
7807 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
7808 ; SSE2-NEXT: por %xmm12, %xmm11
7809 ; SSE2-NEXT: pand %xmm11, %xmm4
7810 ; SSE2-NEXT: pandn %xmm0, %xmm11
7811 ; SSE2-NEXT: por %xmm4, %xmm11
7812 ; SSE2-NEXT: pand %xmm10, %xmm5
7813 ; SSE2-NEXT: pandn %xmm1, %xmm10
7814 ; SSE2-NEXT: por %xmm5, %xmm10
7815 ; SSE2-NEXT: pand %xmm9, %xmm6
7816 ; SSE2-NEXT: pandn %xmm2, %xmm9
7817 ; SSE2-NEXT: por %xmm6, %xmm9
7818 ; SSE2-NEXT: pand %xmm8, %xmm7
7819 ; SSE2-NEXT: pandn %xmm3, %xmm8
7820 ; SSE2-NEXT: por %xmm7, %xmm8
7821 ; SSE2-NEXT: movdqa %xmm11, %xmm0
7822 ; SSE2-NEXT: movdqa %xmm10, %xmm1
7823 ; SSE2-NEXT: movdqa %xmm9, %xmm2
7824 ; SSE2-NEXT: movdqa %xmm8, %xmm3
7827 ; SSE4-LABEL: test155:
7828 ; SSE4: # BB#0: # %entry
7829 ; SSE4-NEXT: movdqa %xmm0, %xmm8
7830 ; SSE4-NEXT: movdqa %xmm3, %xmm9
7831 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm9
7832 ; SSE4-NEXT: movdqa %xmm2, %xmm10
7833 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm10
7834 ; SSE4-NEXT: movdqa %xmm1, %xmm11
7835 ; SSE4-NEXT: pcmpgtq %xmm5, %xmm11
7836 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
7837 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm8
7838 ; SSE4-NEXT: movdqa %xmm11, %xmm0
7839 ; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm1
7840 ; SSE4-NEXT: movdqa %xmm10, %xmm0
7841 ; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm2
7842 ; SSE4-NEXT: movdqa %xmm9, %xmm0
7843 ; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm3
7844 ; SSE4-NEXT: movapd %xmm8, %xmm0
7847 ; AVX1-LABEL: test155:
7848 ; AVX1: # BB#0: # %entry
7849 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
7850 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm5
7851 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7852 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm1, %xmm5
7853 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm5, %ymm4
7854 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm5
7855 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
7856 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm6, %xmm5
7857 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm0, %xmm6
7858 ; AVX1-NEXT: vinsertf128 $1, %xmm5, %ymm6, %ymm5
7859 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7860 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7863 ; AVX2-LABEL: test155:
7864 ; AVX2: # BB#0: # %entry
7865 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm1, %ymm4
7866 ; AVX2-NEXT: vpcmpgtq %ymm2, %ymm0, %ymm5
7867 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7868 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7871 ; AVX512F-LABEL: test155:
7872 ; AVX512F: # BB#0: # %entry
7873 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0
7874 ; AVX512F-NEXT: retq
7876 %cmp = icmp sgt <8 x i64> %a, %b
7877 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7881 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7882 ; SSE2-LABEL: test156:
7883 ; SSE2: # BB#0: # %entry
7884 ; SSE2-NEXT: movdqa %xmm7, %xmm11
7885 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
7886 ; SSE2-NEXT: movdqa %xmm3, %xmm7
7887 ; SSE2-NEXT: movdqa %xmm2, %xmm3
7888 ; SSE2-NEXT: movdqa %xmm1, %xmm2
7889 ; SSE2-NEXT: movdqa %xmm0, %xmm9
7890 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
7891 ; SSE2-NEXT: movdqa %xmm7, %xmm8
7892 ; SSE2-NEXT: pxor %xmm10, %xmm8
7893 ; SSE2-NEXT: movdqa %xmm11, %xmm0
7894 ; SSE2-NEXT: pxor %xmm10, %xmm0
7895 ; SSE2-NEXT: movdqa %xmm0, %xmm11
7896 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
7897 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7898 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
7899 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7900 ; SSE2-NEXT: pand %xmm12, %xmm0
7901 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
7902 ; SSE2-NEXT: por %xmm0, %xmm12
7903 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
7904 ; SSE2-NEXT: movdqa %xmm12, %xmm8
7905 ; SSE2-NEXT: pxor %xmm1, %xmm8
7906 ; SSE2-NEXT: movdqa %xmm3, %xmm11
7907 ; SSE2-NEXT: pxor %xmm10, %xmm11
7908 ; SSE2-NEXT: movdqa %xmm6, %xmm13
7909 ; SSE2-NEXT: pxor %xmm10, %xmm13
7910 ; SSE2-NEXT: movdqa %xmm13, %xmm14
7911 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
7912 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
7913 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13
7914 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
7915 ; SSE2-NEXT: pand %xmm15, %xmm11
7916 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
7917 ; SSE2-NEXT: por %xmm11, %xmm13
7918 ; SSE2-NEXT: movdqa %xmm2, %xmm11
7919 ; SSE2-NEXT: pxor %xmm10, %xmm11
7920 ; SSE2-NEXT: movdqa %xmm5, %xmm14
7921 ; SSE2-NEXT: pxor %xmm10, %xmm14
7922 ; SSE2-NEXT: movdqa %xmm14, %xmm15
7923 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
7924 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14
7925 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
7926 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
7927 ; SSE2-NEXT: pand %xmm11, %xmm14
7928 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
7929 ; SSE2-NEXT: por %xmm14, %xmm15
7930 ; SSE2-NEXT: movdqa %xmm9, %xmm11
7931 ; SSE2-NEXT: pxor %xmm10, %xmm11
7932 ; SSE2-NEXT: pxor %xmm4, %xmm10
7933 ; SSE2-NEXT: movdqa %xmm10, %xmm14
7934 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
7935 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10
7936 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
7937 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
7938 ; SSE2-NEXT: pand %xmm11, %xmm0
7939 ; SSE2-NEXT: movdqa %xmm13, %xmm10
7940 ; SSE2-NEXT: pxor %xmm1, %xmm10
7941 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
7942 ; SSE2-NEXT: por %xmm0, %xmm14
7943 ; SSE2-NEXT: movdqa %xmm15, %xmm11
7944 ; SSE2-NEXT: pxor %xmm1, %xmm11
7945 ; SSE2-NEXT: pxor %xmm14, %xmm1
7946 ; SSE2-NEXT: pandn %xmm4, %xmm14
7947 ; SSE2-NEXT: pandn %xmm9, %xmm1
7948 ; SSE2-NEXT: por %xmm14, %xmm1
7949 ; SSE2-NEXT: pandn %xmm5, %xmm15
7950 ; SSE2-NEXT: pandn %xmm2, %xmm11
7951 ; SSE2-NEXT: por %xmm15, %xmm11
7952 ; SSE2-NEXT: pandn %xmm6, %xmm13
7953 ; SSE2-NEXT: pandn %xmm3, %xmm10
7954 ; SSE2-NEXT: por %xmm13, %xmm10
7955 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
7956 ; SSE2-NEXT: pandn %xmm7, %xmm8
7957 ; SSE2-NEXT: por %xmm12, %xmm8
7958 ; SSE2-NEXT: movdqa %xmm1, %xmm0
7959 ; SSE2-NEXT: movdqa %xmm11, %xmm1
7960 ; SSE2-NEXT: movdqa %xmm10, %xmm2
7961 ; SSE2-NEXT: movdqa %xmm8, %xmm3
7964 ; SSE4-LABEL: test156:
7965 ; SSE4: # BB#0: # %entry
7966 ; SSE4-NEXT: movdqa %xmm0, %xmm8
7967 ; SSE4-NEXT: movdqa %xmm7, %xmm9
7968 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm9
7969 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
7970 ; SSE4-NEXT: pxor %xmm0, %xmm9
7971 ; SSE4-NEXT: movdqa %xmm6, %xmm10
7972 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm10
7973 ; SSE4-NEXT: pxor %xmm0, %xmm10
7974 ; SSE4-NEXT: movdqa %xmm5, %xmm11
7975 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm11
7976 ; SSE4-NEXT: pxor %xmm0, %xmm11
7977 ; SSE4-NEXT: movdqa %xmm4, %xmm12
7978 ; SSE4-NEXT: pcmpgtq %xmm8, %xmm12
7979 ; SSE4-NEXT: pxor %xmm12, %xmm0
7980 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm8
7981 ; SSE4-NEXT: movdqa %xmm11, %xmm0
7982 ; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm1
7983 ; SSE4-NEXT: movdqa %xmm10, %xmm0
7984 ; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm2
7985 ; SSE4-NEXT: movdqa %xmm9, %xmm0
7986 ; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm3
7987 ; SSE4-NEXT: movapd %xmm8, %xmm0
7990 ; AVX1-LABEL: test156:
7991 ; AVX1: # BB#0: # %entry
7992 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
7993 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm5
7994 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm5, %xmm4
7995 ; AVX1-NEXT: vpcmpeqd %xmm5, %xmm5, %xmm5
7996 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
7997 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm3, %xmm6
7998 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
7999 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
8000 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
8001 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
8002 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8003 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8004 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm2, %xmm7
8005 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm5
8006 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
8007 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8008 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8011 ; AVX2-LABEL: test156:
8012 ; AVX2: # BB#0: # %entry
8013 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm3, %ymm4
8014 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm5, %ymm5
8015 ; AVX2-NEXT: vpxor %ymm5, %ymm4, %ymm4
8016 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm2, %ymm6
8017 ; AVX2-NEXT: vpxor %ymm5, %ymm6, %ymm5
8018 ; AVX2-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8019 ; AVX2-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8022 ; AVX512F-LABEL: test156:
8023 ; AVX512F: # BB#0: # %entry
8024 ; AVX512F-NEXT: vpminsq %zmm1, %zmm0, %zmm0
8025 ; AVX512F-NEXT: retq
8027 %cmp = icmp sge <8 x i64> %a, %b
8028 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8032 define <8 x i64> @test157(<8 x i64> %a, <8 x i64> %b) {
8033 ; SSE2-LABEL: test157:
8034 ; SSE2: # BB#0: # %entry
8035 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
8036 ; SSE2-NEXT: movdqa %xmm3, %xmm8
8037 ; SSE2-NEXT: pxor %xmm11, %xmm8
8038 ; SSE2-NEXT: movdqa %xmm7, %xmm9
8039 ; SSE2-NEXT: pxor %xmm11, %xmm9
8040 ; SSE2-NEXT: movdqa %xmm9, %xmm10
8041 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10
8042 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
8043 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9
8044 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
8045 ; SSE2-NEXT: pand %xmm12, %xmm9
8046 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
8047 ; SSE2-NEXT: por %xmm9, %xmm8
8048 ; SSE2-NEXT: movdqa %xmm2, %xmm9
8049 ; SSE2-NEXT: pxor %xmm11, %xmm9
8050 ; SSE2-NEXT: movdqa %xmm6, %xmm10
8051 ; SSE2-NEXT: pxor %xmm11, %xmm10
8052 ; SSE2-NEXT: movdqa %xmm10, %xmm12
8053 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12
8054 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
8055 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
8056 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
8057 ; SSE2-NEXT: pand %xmm13, %xmm10
8058 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
8059 ; SSE2-NEXT: por %xmm10, %xmm9
8060 ; SSE2-NEXT: movdqa %xmm1, %xmm10
8061 ; SSE2-NEXT: pxor %xmm11, %xmm10
8062 ; SSE2-NEXT: movdqa %xmm5, %xmm12
8063 ; SSE2-NEXT: pxor %xmm11, %xmm12
8064 ; SSE2-NEXT: movdqa %xmm12, %xmm13
8065 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13
8066 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
8067 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12
8068 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
8069 ; SSE2-NEXT: pand %xmm14, %xmm12
8070 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
8071 ; SSE2-NEXT: por %xmm12, %xmm10
8072 ; SSE2-NEXT: movdqa %xmm0, %xmm12
8073 ; SSE2-NEXT: pxor %xmm11, %xmm12
8074 ; SSE2-NEXT: pxor %xmm4, %xmm11
8075 ; SSE2-NEXT: movdqa %xmm11, %xmm13
8076 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13
8077 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
8078 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11
8079 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
8080 ; SSE2-NEXT: pand %xmm14, %xmm12
8081 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
8082 ; SSE2-NEXT: por %xmm12, %xmm11
8083 ; SSE2-NEXT: pand %xmm11, %xmm4
8084 ; SSE2-NEXT: pandn %xmm0, %xmm11
8085 ; SSE2-NEXT: por %xmm4, %xmm11
8086 ; SSE2-NEXT: pand %xmm10, %xmm5
8087 ; SSE2-NEXT: pandn %xmm1, %xmm10
8088 ; SSE2-NEXT: por %xmm5, %xmm10
8089 ; SSE2-NEXT: pand %xmm9, %xmm6
8090 ; SSE2-NEXT: pandn %xmm2, %xmm9
8091 ; SSE2-NEXT: por %xmm6, %xmm9
8092 ; SSE2-NEXT: pand %xmm8, %xmm7
8093 ; SSE2-NEXT: pandn %xmm3, %xmm8
8094 ; SSE2-NEXT: por %xmm7, %xmm8
8095 ; SSE2-NEXT: movdqa %xmm11, %xmm0
8096 ; SSE2-NEXT: movdqa %xmm10, %xmm1
8097 ; SSE2-NEXT: movdqa %xmm9, %xmm2
8098 ; SSE2-NEXT: movdqa %xmm8, %xmm3
8101 ; SSE4-LABEL: test157:
8102 ; SSE4: # BB#0: # %entry
8103 ; SSE4-NEXT: movdqa %xmm0, %xmm8
8104 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
8105 ; SSE4-NEXT: movdqa %xmm3, %xmm10
8106 ; SSE4-NEXT: pxor %xmm0, %xmm10
8107 ; SSE4-NEXT: movdqa %xmm7, %xmm9
8108 ; SSE4-NEXT: pxor %xmm0, %xmm9
8109 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9
8110 ; SSE4-NEXT: movdqa %xmm2, %xmm11
8111 ; SSE4-NEXT: pxor %xmm0, %xmm11
8112 ; SSE4-NEXT: movdqa %xmm6, %xmm10
8113 ; SSE4-NEXT: pxor %xmm0, %xmm10
8114 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10
8115 ; SSE4-NEXT: movdqa %xmm1, %xmm12
8116 ; SSE4-NEXT: pxor %xmm0, %xmm12
8117 ; SSE4-NEXT: movdqa %xmm5, %xmm11
8118 ; SSE4-NEXT: pxor %xmm0, %xmm11
8119 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11
8120 ; SSE4-NEXT: movdqa %xmm8, %xmm12
8121 ; SSE4-NEXT: pxor %xmm0, %xmm12
8122 ; SSE4-NEXT: pxor %xmm4, %xmm0
8123 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0
8124 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm8
8125 ; SSE4-NEXT: movdqa %xmm11, %xmm0
8126 ; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm1
8127 ; SSE4-NEXT: movdqa %xmm10, %xmm0
8128 ; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm2
8129 ; SSE4-NEXT: movdqa %xmm9, %xmm0
8130 ; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm3
8131 ; SSE4-NEXT: movapd %xmm8, %xmm0
8134 ; AVX1-LABEL: test157:
8135 ; AVX1: # BB#0: # %entry
8136 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
8137 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8138 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
8139 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
8140 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8141 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
8142 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm6
8143 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm7
8144 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8145 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
8146 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
8147 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8148 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
8149 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
8150 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8151 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
8152 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm5
8153 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
8154 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
8155 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8156 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8159 ; AVX2-LABEL: test157:
8160 ; AVX2: # BB#0: # %entry
8161 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4
8162 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5
8163 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6
8164 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
8165 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm6
8166 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4
8167 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4
8168 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
8169 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
8172 ; AVX512F-LABEL: test157:
8173 ; AVX512F: # BB#0: # %entry
8174 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
8175 ; AVX512F-NEXT: retq
8177 %cmp = icmp ult <8 x i64> %a, %b
8178 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8182 define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) {
8183 ; SSE2-LABEL: test158:
8184 ; SSE2: # BB#0: # %entry
8185 ; SSE2-NEXT: movdqa %xmm7, %xmm8
8186 ; SSE2-NEXT: movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
8187 ; SSE2-NEXT: movdqa %xmm3, %xmm7
8188 ; SSE2-NEXT: movdqa %xmm2, %xmm3
8189 ; SSE2-NEXT: movdqa %xmm1, %xmm2
8190 ; SSE2-NEXT: movdqa %xmm0, %xmm9
8191 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
8192 ; SSE2-NEXT: pxor %xmm10, %xmm8
8193 ; SSE2-NEXT: movdqa %xmm7, %xmm0
8194 ; SSE2-NEXT: pxor %xmm10, %xmm0
8195 ; SSE2-NEXT: movdqa %xmm0, %xmm11
8196 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
8197 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
8198 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
8199 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
8200 ; SSE2-NEXT: pand %xmm12, %xmm0
8201 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
8202 ; SSE2-NEXT: por %xmm0, %xmm12
8203 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
8204 ; SSE2-NEXT: movdqa %xmm12, %xmm8
8205 ; SSE2-NEXT: pxor %xmm1, %xmm8
8206 ; SSE2-NEXT: movdqa %xmm6, %xmm11
8207 ; SSE2-NEXT: pxor %xmm10, %xmm11
8208 ; SSE2-NEXT: movdqa %xmm3, %xmm13
8209 ; SSE2-NEXT: pxor %xmm10, %xmm13
8210 ; SSE2-NEXT: movdqa %xmm13, %xmm14
8211 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
8212 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
8213 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13
8214 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
8215 ; SSE2-NEXT: pand %xmm15, %xmm11
8216 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
8217 ; SSE2-NEXT: por %xmm11, %xmm13
8218 ; SSE2-NEXT: movdqa %xmm5, %xmm11
8219 ; SSE2-NEXT: pxor %xmm10, %xmm11
8220 ; SSE2-NEXT: movdqa %xmm2, %xmm14
8221 ; SSE2-NEXT: pxor %xmm10, %xmm14
8222 ; SSE2-NEXT: movdqa %xmm14, %xmm15
8223 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
8224 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14
8225 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
8226 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
8227 ; SSE2-NEXT: pand %xmm11, %xmm14
8228 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
8229 ; SSE2-NEXT: por %xmm14, %xmm15
8230 ; SSE2-NEXT: movdqa %xmm4, %xmm11
8231 ; SSE2-NEXT: pxor %xmm10, %xmm11
8232 ; SSE2-NEXT: pxor %xmm9, %xmm10
8233 ; SSE2-NEXT: movdqa %xmm10, %xmm14
8234 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
8235 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10
8236 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
8237 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
8238 ; SSE2-NEXT: pand %xmm11, %xmm0
8239 ; SSE2-NEXT: movdqa %xmm13, %xmm10
8240 ; SSE2-NEXT: pxor %xmm1, %xmm10
8241 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
8242 ; SSE2-NEXT: por %xmm0, %xmm14
8243 ; SSE2-NEXT: movdqa %xmm15, %xmm11
8244 ; SSE2-NEXT: pxor %xmm1, %xmm11
8245 ; SSE2-NEXT: pxor %xmm14, %xmm1
8246 ; SSE2-NEXT: pandn %xmm4, %xmm14
8247 ; SSE2-NEXT: pandn %xmm9, %xmm1
8248 ; SSE2-NEXT: por %xmm14, %xmm1
8249 ; SSE2-NEXT: pandn %xmm5, %xmm15
8250 ; SSE2-NEXT: pandn %xmm2, %xmm11
8251 ; SSE2-NEXT: por %xmm15, %xmm11
8252 ; SSE2-NEXT: pandn %xmm6, %xmm13
8253 ; SSE2-NEXT: pandn %xmm3, %xmm10
8254 ; SSE2-NEXT: por %xmm13, %xmm10
8255 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
8256 ; SSE2-NEXT: pandn %xmm7, %xmm8
8257 ; SSE2-NEXT: por %xmm12, %xmm8
8258 ; SSE2-NEXT: movdqa %xmm1, %xmm0
8259 ; SSE2-NEXT: movdqa %xmm11, %xmm1
8260 ; SSE2-NEXT: movdqa %xmm10, %xmm2
8261 ; SSE2-NEXT: movdqa %xmm8, %xmm3
8264 ; SSE4-LABEL: test158:
8265 ; SSE4: # BB#0: # %entry
8266 ; SSE4-NEXT: movdqa %xmm0, %xmm8
8267 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
8268 ; SSE4-NEXT: movdqa %xmm7, %xmm10
8269 ; SSE4-NEXT: pxor %xmm0, %xmm10
8270 ; SSE4-NEXT: movdqa %xmm3, %xmm9
8271 ; SSE4-NEXT: pxor %xmm0, %xmm9
8272 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9
8273 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12
8274 ; SSE4-NEXT: pxor %xmm12, %xmm9
8275 ; SSE4-NEXT: movdqa %xmm6, %xmm11
8276 ; SSE4-NEXT: pxor %xmm0, %xmm11
8277 ; SSE4-NEXT: movdqa %xmm2, %xmm10
8278 ; SSE4-NEXT: pxor %xmm0, %xmm10
8279 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10
8280 ; SSE4-NEXT: pxor %xmm12, %xmm10
8281 ; SSE4-NEXT: movdqa %xmm5, %xmm13
8282 ; SSE4-NEXT: pxor %xmm0, %xmm13
8283 ; SSE4-NEXT: movdqa %xmm1, %xmm11
8284 ; SSE4-NEXT: pxor %xmm0, %xmm11
8285 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11
8286 ; SSE4-NEXT: pxor %xmm12, %xmm11
8287 ; SSE4-NEXT: movdqa %xmm4, %xmm13
8288 ; SSE4-NEXT: pxor %xmm0, %xmm13
8289 ; SSE4-NEXT: pxor %xmm8, %xmm0
8290 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0
8291 ; SSE4-NEXT: pxor %xmm12, %xmm0
8292 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm8
8293 ; SSE4-NEXT: movdqa %xmm11, %xmm0
8294 ; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm1
8295 ; SSE4-NEXT: movdqa %xmm10, %xmm0
8296 ; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm2
8297 ; SSE4-NEXT: movdqa %xmm9, %xmm0
8298 ; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm3
8299 ; SSE4-NEXT: movapd %xmm8, %xmm0
8302 ; AVX1-LABEL: test158:
8303 ; AVX1: # BB#0: # %entry
8304 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
8305 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8306 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
8307 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
8308 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8309 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
8310 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8
8311 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4
8312 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm7
8313 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm6
8314 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
8315 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
8316 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
8317 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
8318 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8319 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
8320 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
8321 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8322 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
8323 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
8324 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
8325 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
8326 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5
8327 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
8328 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8329 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8332 ; AVX2-LABEL: test158:
8333 ; AVX2: # BB#0: # %entry
8334 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4
8335 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5
8336 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6
8337 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
8338 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6
8339 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5
8340 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm7
8341 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4
8342 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4
8343 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4
8344 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
8345 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
8348 ; AVX512F-LABEL: test158:
8349 ; AVX512F: # BB#0: # %entry
8350 ; AVX512F-NEXT: vpmaxuq %zmm1, %zmm0, %zmm0
8351 ; AVX512F-NEXT: retq
8353 %cmp = icmp ule <8 x i64> %a, %b
8354 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8358 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
8359 ; SSE2-LABEL: test159:
8360 ; SSE2: # BB#0: # %entry
8361 ; SSE2-NEXT: movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
8362 ; SSE2-NEXT: movdqa %xmm7, %xmm8
8363 ; SSE2-NEXT: pxor %xmm11, %xmm8
8364 ; SSE2-NEXT: movdqa %xmm3, %xmm9
8365 ; SSE2-NEXT: pxor %xmm11, %xmm9
8366 ; SSE2-NEXT: movdqa %xmm9, %xmm10
8367 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm10
8368 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
8369 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm9
8370 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
8371 ; SSE2-NEXT: pand %xmm12, %xmm9
8372 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
8373 ; SSE2-NEXT: por %xmm9, %xmm8
8374 ; SSE2-NEXT: movdqa %xmm6, %xmm9
8375 ; SSE2-NEXT: pxor %xmm11, %xmm9
8376 ; SSE2-NEXT: movdqa %xmm2, %xmm10
8377 ; SSE2-NEXT: pxor %xmm11, %xmm10
8378 ; SSE2-NEXT: movdqa %xmm10, %xmm12
8379 ; SSE2-NEXT: pcmpgtd %xmm9, %xmm12
8380 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
8381 ; SSE2-NEXT: pcmpeqd %xmm9, %xmm10
8382 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
8383 ; SSE2-NEXT: pand %xmm13, %xmm10
8384 ; SSE2-NEXT: pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
8385 ; SSE2-NEXT: por %xmm10, %xmm9
8386 ; SSE2-NEXT: movdqa %xmm5, %xmm10
8387 ; SSE2-NEXT: pxor %xmm11, %xmm10
8388 ; SSE2-NEXT: movdqa %xmm1, %xmm12
8389 ; SSE2-NEXT: pxor %xmm11, %xmm12
8390 ; SSE2-NEXT: movdqa %xmm12, %xmm13
8391 ; SSE2-NEXT: pcmpgtd %xmm10, %xmm13
8392 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
8393 ; SSE2-NEXT: pcmpeqd %xmm10, %xmm12
8394 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
8395 ; SSE2-NEXT: pand %xmm14, %xmm12
8396 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
8397 ; SSE2-NEXT: por %xmm12, %xmm10
8398 ; SSE2-NEXT: movdqa %xmm4, %xmm12
8399 ; SSE2-NEXT: pxor %xmm11, %xmm12
8400 ; SSE2-NEXT: pxor %xmm0, %xmm11
8401 ; SSE2-NEXT: movdqa %xmm11, %xmm13
8402 ; SSE2-NEXT: pcmpgtd %xmm12, %xmm13
8403 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
8404 ; SSE2-NEXT: pcmpeqd %xmm12, %xmm11
8405 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
8406 ; SSE2-NEXT: pand %xmm14, %xmm12
8407 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
8408 ; SSE2-NEXT: por %xmm12, %xmm11
8409 ; SSE2-NEXT: pand %xmm11, %xmm4
8410 ; SSE2-NEXT: pandn %xmm0, %xmm11
8411 ; SSE2-NEXT: por %xmm4, %xmm11
8412 ; SSE2-NEXT: pand %xmm10, %xmm5
8413 ; SSE2-NEXT: pandn %xmm1, %xmm10
8414 ; SSE2-NEXT: por %xmm5, %xmm10
8415 ; SSE2-NEXT: pand %xmm9, %xmm6
8416 ; SSE2-NEXT: pandn %xmm2, %xmm9
8417 ; SSE2-NEXT: por %xmm6, %xmm9
8418 ; SSE2-NEXT: pand %xmm8, %xmm7
8419 ; SSE2-NEXT: pandn %xmm3, %xmm8
8420 ; SSE2-NEXT: por %xmm7, %xmm8
8421 ; SSE2-NEXT: movdqa %xmm11, %xmm0
8422 ; SSE2-NEXT: movdqa %xmm10, %xmm1
8423 ; SSE2-NEXT: movdqa %xmm9, %xmm2
8424 ; SSE2-NEXT: movdqa %xmm8, %xmm3
8427 ; SSE4-LABEL: test159:
8428 ; SSE4: # BB#0: # %entry
8429 ; SSE4-NEXT: movdqa %xmm0, %xmm8
8430 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
8431 ; SSE4-NEXT: movdqa %xmm7, %xmm10
8432 ; SSE4-NEXT: pxor %xmm0, %xmm10
8433 ; SSE4-NEXT: movdqa %xmm3, %xmm9
8434 ; SSE4-NEXT: pxor %xmm0, %xmm9
8435 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9
8436 ; SSE4-NEXT: movdqa %xmm6, %xmm11
8437 ; SSE4-NEXT: pxor %xmm0, %xmm11
8438 ; SSE4-NEXT: movdqa %xmm2, %xmm10
8439 ; SSE4-NEXT: pxor %xmm0, %xmm10
8440 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10
8441 ; SSE4-NEXT: movdqa %xmm5, %xmm12
8442 ; SSE4-NEXT: pxor %xmm0, %xmm12
8443 ; SSE4-NEXT: movdqa %xmm1, %xmm11
8444 ; SSE4-NEXT: pxor %xmm0, %xmm11
8445 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm11
8446 ; SSE4-NEXT: movdqa %xmm4, %xmm12
8447 ; SSE4-NEXT: pxor %xmm0, %xmm12
8448 ; SSE4-NEXT: pxor %xmm8, %xmm0
8449 ; SSE4-NEXT: pcmpgtq %xmm12, %xmm0
8450 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm8
8451 ; SSE4-NEXT: movdqa %xmm11, %xmm0
8452 ; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm1
8453 ; SSE4-NEXT: movdqa %xmm10, %xmm0
8454 ; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm2
8455 ; SSE4-NEXT: movdqa %xmm9, %xmm0
8456 ; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm3
8457 ; SSE4-NEXT: movapd %xmm8, %xmm0
8460 ; AVX1-LABEL: test159:
8461 ; AVX1: # BB#0: # %entry
8462 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm4
8463 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8464 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
8465 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm6
8466 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8467 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
8468 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
8469 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm7
8470 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8471 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
8472 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm6
8473 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8474 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm7
8475 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
8476 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8477 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm7
8478 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm5
8479 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
8480 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
8481 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8482 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8485 ; AVX2-LABEL: test159:
8486 ; AVX2: # BB#0: # %entry
8487 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4
8488 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm5
8489 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm6
8490 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
8491 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm6
8492 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm4
8493 ; AVX2-NEXT: vpcmpgtq %ymm6, %ymm4, %ymm4
8494 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
8495 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
8498 ; AVX512F-LABEL: test159:
8499 ; AVX512F: # BB#0: # %entry
8500 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0
8501 ; AVX512F-NEXT: retq
8503 %cmp = icmp ugt <8 x i64> %a, %b
8504 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8508 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
8509 ; SSE2-LABEL: test160:
8510 ; SSE2: # BB#0: # %entry
8511 ; SSE2-NEXT: movdqa %xmm7, %xmm11
8512 ; SSE2-NEXT: movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
8513 ; SSE2-NEXT: movdqa %xmm3, %xmm7
8514 ; SSE2-NEXT: movdqa %xmm2, %xmm3
8515 ; SSE2-NEXT: movdqa %xmm1, %xmm2
8516 ; SSE2-NEXT: movdqa %xmm0, %xmm9
8517 ; SSE2-NEXT: movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
8518 ; SSE2-NEXT: movdqa %xmm7, %xmm8
8519 ; SSE2-NEXT: pxor %xmm10, %xmm8
8520 ; SSE2-NEXT: movdqa %xmm11, %xmm0
8521 ; SSE2-NEXT: pxor %xmm10, %xmm0
8522 ; SSE2-NEXT: movdqa %xmm0, %xmm11
8523 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm11
8524 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
8525 ; SSE2-NEXT: pcmpeqd %xmm8, %xmm0
8526 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
8527 ; SSE2-NEXT: pand %xmm12, %xmm0
8528 ; SSE2-NEXT: pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
8529 ; SSE2-NEXT: por %xmm0, %xmm12
8530 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm1
8531 ; SSE2-NEXT: movdqa %xmm12, %xmm8
8532 ; SSE2-NEXT: pxor %xmm1, %xmm8
8533 ; SSE2-NEXT: movdqa %xmm3, %xmm11
8534 ; SSE2-NEXT: pxor %xmm10, %xmm11
8535 ; SSE2-NEXT: movdqa %xmm6, %xmm13
8536 ; SSE2-NEXT: pxor %xmm10, %xmm13
8537 ; SSE2-NEXT: movdqa %xmm13, %xmm14
8538 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
8539 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
8540 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm13
8541 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
8542 ; SSE2-NEXT: pand %xmm15, %xmm11
8543 ; SSE2-NEXT: pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
8544 ; SSE2-NEXT: por %xmm11, %xmm13
8545 ; SSE2-NEXT: movdqa %xmm2, %xmm11
8546 ; SSE2-NEXT: pxor %xmm10, %xmm11
8547 ; SSE2-NEXT: movdqa %xmm5, %xmm14
8548 ; SSE2-NEXT: pxor %xmm10, %xmm14
8549 ; SSE2-NEXT: movdqa %xmm14, %xmm15
8550 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm15
8551 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm14
8552 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
8553 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
8554 ; SSE2-NEXT: pand %xmm11, %xmm14
8555 ; SSE2-NEXT: pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
8556 ; SSE2-NEXT: por %xmm14, %xmm15
8557 ; SSE2-NEXT: movdqa %xmm9, %xmm11
8558 ; SSE2-NEXT: pxor %xmm10, %xmm11
8559 ; SSE2-NEXT: pxor %xmm4, %xmm10
8560 ; SSE2-NEXT: movdqa %xmm10, %xmm14
8561 ; SSE2-NEXT: pcmpgtd %xmm11, %xmm14
8562 ; SSE2-NEXT: pcmpeqd %xmm11, %xmm10
8563 ; SSE2-NEXT: pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
8564 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
8565 ; SSE2-NEXT: pand %xmm11, %xmm0
8566 ; SSE2-NEXT: movdqa %xmm13, %xmm10
8567 ; SSE2-NEXT: pxor %xmm1, %xmm10
8568 ; SSE2-NEXT: pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
8569 ; SSE2-NEXT: por %xmm0, %xmm14
8570 ; SSE2-NEXT: movdqa %xmm15, %xmm11
8571 ; SSE2-NEXT: pxor %xmm1, %xmm11
8572 ; SSE2-NEXT: pxor %xmm14, %xmm1
8573 ; SSE2-NEXT: pandn %xmm4, %xmm14
8574 ; SSE2-NEXT: pandn %xmm9, %xmm1
8575 ; SSE2-NEXT: por %xmm14, %xmm1
8576 ; SSE2-NEXT: pandn %xmm5, %xmm15
8577 ; SSE2-NEXT: pandn %xmm2, %xmm11
8578 ; SSE2-NEXT: por %xmm15, %xmm11
8579 ; SSE2-NEXT: pandn %xmm6, %xmm13
8580 ; SSE2-NEXT: pandn %xmm3, %xmm10
8581 ; SSE2-NEXT: por %xmm13, %xmm10
8582 ; SSE2-NEXT: pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
8583 ; SSE2-NEXT: pandn %xmm7, %xmm8
8584 ; SSE2-NEXT: por %xmm12, %xmm8
8585 ; SSE2-NEXT: movdqa %xmm1, %xmm0
8586 ; SSE2-NEXT: movdqa %xmm11, %xmm1
8587 ; SSE2-NEXT: movdqa %xmm10, %xmm2
8588 ; SSE2-NEXT: movdqa %xmm8, %xmm3
8591 ; SSE4-LABEL: test160:
8592 ; SSE4: # BB#0: # %entry
8593 ; SSE4-NEXT: movdqa %xmm0, %xmm8
8594 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
8595 ; SSE4-NEXT: movdqa %xmm3, %xmm10
8596 ; SSE4-NEXT: pxor %xmm0, %xmm10
8597 ; SSE4-NEXT: movdqa %xmm7, %xmm9
8598 ; SSE4-NEXT: pxor %xmm0, %xmm9
8599 ; SSE4-NEXT: pcmpgtq %xmm10, %xmm9
8600 ; SSE4-NEXT: pcmpeqd %xmm12, %xmm12
8601 ; SSE4-NEXT: pxor %xmm12, %xmm9
8602 ; SSE4-NEXT: movdqa %xmm2, %xmm11
8603 ; SSE4-NEXT: pxor %xmm0, %xmm11
8604 ; SSE4-NEXT: movdqa %xmm6, %xmm10
8605 ; SSE4-NEXT: pxor %xmm0, %xmm10
8606 ; SSE4-NEXT: pcmpgtq %xmm11, %xmm10
8607 ; SSE4-NEXT: pxor %xmm12, %xmm10
8608 ; SSE4-NEXT: movdqa %xmm1, %xmm13
8609 ; SSE4-NEXT: pxor %xmm0, %xmm13
8610 ; SSE4-NEXT: movdqa %xmm5, %xmm11
8611 ; SSE4-NEXT: pxor %xmm0, %xmm11
8612 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm11
8613 ; SSE4-NEXT: pxor %xmm12, %xmm11
8614 ; SSE4-NEXT: movdqa %xmm8, %xmm13
8615 ; SSE4-NEXT: pxor %xmm0, %xmm13
8616 ; SSE4-NEXT: pxor %xmm4, %xmm0
8617 ; SSE4-NEXT: pcmpgtq %xmm13, %xmm0
8618 ; SSE4-NEXT: pxor %xmm12, %xmm0
8619 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm8
8620 ; SSE4-NEXT: movdqa %xmm11, %xmm0
8621 ; SSE4-NEXT: blendvpd %xmm0, %xmm5, %xmm1
8622 ; SSE4-NEXT: movdqa %xmm10, %xmm0
8623 ; SSE4-NEXT: blendvpd %xmm0, %xmm6, %xmm2
8624 ; SSE4-NEXT: movdqa %xmm9, %xmm0
8625 ; SSE4-NEXT: blendvpd %xmm0, %xmm7, %xmm3
8626 ; SSE4-NEXT: movapd %xmm8, %xmm0
8629 ; AVX1-LABEL: test160:
8630 ; AVX1: # BB#0: # %entry
8631 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
8632 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8633 ; AVX1-NEXT: vpxor %xmm5, %xmm4, %xmm4
8634 ; AVX1-NEXT: vextractf128 $1, %ymm3, %xmm6
8635 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8636 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm6, %xmm4
8637 ; AVX1-NEXT: vpcmpeqd %xmm8, %xmm8, %xmm8
8638 ; AVX1-NEXT: vpxor %xmm8, %xmm4, %xmm4
8639 ; AVX1-NEXT: vpxor %xmm5, %xmm1, %xmm7
8640 ; AVX1-NEXT: vpxor %xmm5, %xmm3, %xmm6
8641 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm6, %xmm6
8642 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
8643 ; AVX1-NEXT: vinsertf128 $1, %xmm4, %ymm6, %ymm4
8644 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm6
8645 ; AVX1-NEXT: vpxor %xmm5, %xmm6, %xmm6
8646 ; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm7
8647 ; AVX1-NEXT: vpxor %xmm5, %xmm7, %xmm7
8648 ; AVX1-NEXT: vpcmpgtq %xmm6, %xmm7, %xmm6
8649 ; AVX1-NEXT: vpxor %xmm8, %xmm6, %xmm6
8650 ; AVX1-NEXT: vpxor %xmm5, %xmm0, %xmm7
8651 ; AVX1-NEXT: vpxor %xmm5, %xmm2, %xmm5
8652 ; AVX1-NEXT: vpcmpgtq %xmm7, %xmm5, %xmm5
8653 ; AVX1-NEXT: vpxor %xmm8, %xmm5, %xmm5
8654 ; AVX1-NEXT: vinsertf128 $1, %xmm6, %ymm5, %ymm5
8655 ; AVX1-NEXT: vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8656 ; AVX1-NEXT: vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8659 ; AVX2-LABEL: test160:
8660 ; AVX2: # BB#0: # %entry
8661 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm4
8662 ; AVX2-NEXT: vpxor %ymm4, %ymm1, %ymm5
8663 ; AVX2-NEXT: vpxor %ymm4, %ymm3, %ymm6
8664 ; AVX2-NEXT: vpcmpgtq %ymm5, %ymm6, %ymm5
8665 ; AVX2-NEXT: vpcmpeqd %ymm6, %ymm6, %ymm6
8666 ; AVX2-NEXT: vpxor %ymm6, %ymm5, %ymm5
8667 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm7
8668 ; AVX2-NEXT: vpxor %ymm4, %ymm2, %ymm4
8669 ; AVX2-NEXT: vpcmpgtq %ymm7, %ymm4, %ymm4
8670 ; AVX2-NEXT: vpxor %ymm6, %ymm4, %ymm4
8671 ; AVX2-NEXT: vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
8672 ; AVX2-NEXT: vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
8675 ; AVX512F-LABEL: test160:
8676 ; AVX512F: # BB#0: # %entry
8677 ; AVX512F-NEXT: vpminuq %zmm1, %zmm0, %zmm0
8678 ; AVX512F-NEXT: retq
8680 %cmp = icmp uge <8 x i64> %a, %b
8681 %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8685 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
8686 ; SSE2-LABEL: test161:
8687 ; SSE2: # BB#0: # %entry
8688 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8689 ; SSE2-NEXT: movdqa %xmm1, %xmm5
8690 ; SSE2-NEXT: pxor %xmm4, %xmm5
8691 ; SSE2-NEXT: movdqa %xmm3, %xmm6
8692 ; SSE2-NEXT: pxor %xmm4, %xmm6
8693 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8694 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8695 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8696 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8697 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8698 ; SSE2-NEXT: pand %xmm8, %xmm5
8699 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8700 ; SSE2-NEXT: por %xmm5, %xmm6
8701 ; SSE2-NEXT: movdqa %xmm0, %xmm5
8702 ; SSE2-NEXT: pxor %xmm4, %xmm5
8703 ; SSE2-NEXT: pxor %xmm2, %xmm4
8704 ; SSE2-NEXT: movdqa %xmm4, %xmm7
8705 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8706 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8707 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4
8708 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
8709 ; SSE2-NEXT: pand %xmm8, %xmm4
8710 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
8711 ; SSE2-NEXT: por %xmm4, %xmm5
8712 ; SSE2-NEXT: pand %xmm5, %xmm0
8713 ; SSE2-NEXT: pandn %xmm2, %xmm5
8714 ; SSE2-NEXT: por %xmm5, %xmm0
8715 ; SSE2-NEXT: pand %xmm6, %xmm1
8716 ; SSE2-NEXT: pandn %xmm3, %xmm6
8717 ; SSE2-NEXT: por %xmm6, %xmm1
8720 ; SSE4-LABEL: test161:
8721 ; SSE4: # BB#0: # %entry
8722 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8723 ; SSE4-NEXT: movdqa %xmm3, %xmm5
8724 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5
8725 ; SSE4-NEXT: movdqa %xmm2, %xmm0
8726 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
8727 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8728 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8729 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8730 ; SSE4-NEXT: movapd %xmm2, %xmm0
8731 ; SSE4-NEXT: movapd %xmm3, %xmm1
8734 ; AVX1-LABEL: test161:
8735 ; AVX1: # BB#0: # %entry
8736 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
8737 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
8738 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
8739 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
8740 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8741 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8744 ; AVX2-LABEL: test161:
8745 ; AVX2: # BB#0: # %entry
8746 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
8747 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8750 ; AVX512BW-LABEL: test161:
8751 ; AVX512BW: # BB#0: # %entry
8752 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0
8753 ; AVX512BW-NEXT: retq
8755 %cmp = icmp slt <4 x i64> %a, %b
8756 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8760 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
8761 ; SSE2-LABEL: test162:
8762 ; SSE2: # BB#0: # %entry
8763 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
8764 ; SSE2-NEXT: movdqa %xmm3, %xmm4
8765 ; SSE2-NEXT: pxor %xmm7, %xmm4
8766 ; SSE2-NEXT: movdqa %xmm1, %xmm5
8767 ; SSE2-NEXT: pxor %xmm7, %xmm5
8768 ; SSE2-NEXT: movdqa %xmm5, %xmm6
8769 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
8770 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
8771 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
8772 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8773 ; SSE2-NEXT: pand %xmm8, %xmm4
8774 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
8775 ; SSE2-NEXT: por %xmm4, %xmm8
8776 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
8777 ; SSE2-NEXT: movdqa %xmm8, %xmm9
8778 ; SSE2-NEXT: pxor %xmm4, %xmm9
8779 ; SSE2-NEXT: movdqa %xmm2, %xmm6
8780 ; SSE2-NEXT: pxor %xmm7, %xmm6
8781 ; SSE2-NEXT: pxor %xmm0, %xmm7
8782 ; SSE2-NEXT: movdqa %xmm7, %xmm5
8783 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
8784 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
8785 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
8786 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8787 ; SSE2-NEXT: pand %xmm10, %xmm6
8788 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
8789 ; SSE2-NEXT: por %xmm6, %xmm5
8790 ; SSE2-NEXT: pxor %xmm5, %xmm4
8791 ; SSE2-NEXT: pandn %xmm0, %xmm5
8792 ; SSE2-NEXT: pandn %xmm2, %xmm4
8793 ; SSE2-NEXT: por %xmm5, %xmm4
8794 ; SSE2-NEXT: pandn %xmm1, %xmm8
8795 ; SSE2-NEXT: pandn %xmm3, %xmm9
8796 ; SSE2-NEXT: por %xmm8, %xmm9
8797 ; SSE2-NEXT: movdqa %xmm4, %xmm0
8798 ; SSE2-NEXT: movdqa %xmm9, %xmm1
8801 ; SSE4-LABEL: test162:
8802 ; SSE4: # BB#0: # %entry
8803 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8804 ; SSE4-NEXT: movdqa %xmm1, %xmm5
8805 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5
8806 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6
8807 ; SSE4-NEXT: pxor %xmm6, %xmm5
8808 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
8809 ; SSE4-NEXT: pxor %xmm6, %xmm0
8810 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8811 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8812 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8813 ; SSE4-NEXT: movapd %xmm2, %xmm0
8814 ; SSE4-NEXT: movapd %xmm3, %xmm1
8817 ; AVX1-LABEL: test162:
8818 ; AVX1: # BB#0: # %entry
8819 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
8820 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
8821 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
8822 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
8823 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8824 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4
8825 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3
8826 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8827 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8830 ; AVX2-LABEL: test162:
8831 ; AVX2: # BB#0: # %entry
8832 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2
8833 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
8834 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
8835 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8838 ; AVX512BW-LABEL: test162:
8839 ; AVX512BW: # BB#0: # %entry
8840 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0
8841 ; AVX512BW-NEXT: retq
8843 %cmp = icmp sle <4 x i64> %a, %b
8844 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8848 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
8849 ; SSE2-LABEL: test163:
8850 ; SSE2: # BB#0: # %entry
8851 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8852 ; SSE2-NEXT: movdqa %xmm3, %xmm5
8853 ; SSE2-NEXT: pxor %xmm4, %xmm5
8854 ; SSE2-NEXT: movdqa %xmm1, %xmm6
8855 ; SSE2-NEXT: pxor %xmm4, %xmm6
8856 ; SSE2-NEXT: movdqa %xmm6, %xmm7
8857 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8858 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8859 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
8860 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8861 ; SSE2-NEXT: pand %xmm8, %xmm5
8862 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8863 ; SSE2-NEXT: por %xmm5, %xmm6
8864 ; SSE2-NEXT: movdqa %xmm2, %xmm5
8865 ; SSE2-NEXT: pxor %xmm4, %xmm5
8866 ; SSE2-NEXT: pxor %xmm0, %xmm4
8867 ; SSE2-NEXT: movdqa %xmm4, %xmm7
8868 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
8869 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8870 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4
8871 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
8872 ; SSE2-NEXT: pand %xmm8, %xmm4
8873 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
8874 ; SSE2-NEXT: por %xmm4, %xmm5
8875 ; SSE2-NEXT: pand %xmm5, %xmm0
8876 ; SSE2-NEXT: pandn %xmm2, %xmm5
8877 ; SSE2-NEXT: por %xmm5, %xmm0
8878 ; SSE2-NEXT: pand %xmm6, %xmm1
8879 ; SSE2-NEXT: pandn %xmm3, %xmm6
8880 ; SSE2-NEXT: por %xmm6, %xmm1
8883 ; SSE4-LABEL: test163:
8884 ; SSE4: # BB#0: # %entry
8885 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8886 ; SSE4-NEXT: movdqa %xmm1, %xmm5
8887 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5
8888 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
8889 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8890 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8891 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8892 ; SSE4-NEXT: movapd %xmm2, %xmm0
8893 ; SSE4-NEXT: movapd %xmm3, %xmm1
8896 ; AVX1-LABEL: test163:
8897 ; AVX1: # BB#0: # %entry
8898 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
8899 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
8900 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
8901 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
8902 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8903 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8906 ; AVX2-LABEL: test163:
8907 ; AVX2: # BB#0: # %entry
8908 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2
8909 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8912 ; AVX512BW-LABEL: test163:
8913 ; AVX512BW: # BB#0: # %entry
8914 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
8915 ; AVX512BW-NEXT: retq
8917 %cmp = icmp sgt <4 x i64> %a, %b
8918 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8922 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
8923 ; SSE2-LABEL: test164:
8924 ; SSE2: # BB#0: # %entry
8925 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
8926 ; SSE2-NEXT: movdqa %xmm1, %xmm4
8927 ; SSE2-NEXT: pxor %xmm7, %xmm4
8928 ; SSE2-NEXT: movdqa %xmm3, %xmm5
8929 ; SSE2-NEXT: pxor %xmm7, %xmm5
8930 ; SSE2-NEXT: movdqa %xmm5, %xmm6
8931 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
8932 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
8933 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
8934 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8935 ; SSE2-NEXT: pand %xmm8, %xmm4
8936 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
8937 ; SSE2-NEXT: por %xmm4, %xmm8
8938 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
8939 ; SSE2-NEXT: movdqa %xmm8, %xmm9
8940 ; SSE2-NEXT: pxor %xmm4, %xmm9
8941 ; SSE2-NEXT: movdqa %xmm0, %xmm6
8942 ; SSE2-NEXT: pxor %xmm7, %xmm6
8943 ; SSE2-NEXT: pxor %xmm2, %xmm7
8944 ; SSE2-NEXT: movdqa %xmm7, %xmm5
8945 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
8946 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
8947 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
8948 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8949 ; SSE2-NEXT: pand %xmm10, %xmm6
8950 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
8951 ; SSE2-NEXT: por %xmm6, %xmm5
8952 ; SSE2-NEXT: pxor %xmm5, %xmm4
8953 ; SSE2-NEXT: pandn %xmm0, %xmm5
8954 ; SSE2-NEXT: pandn %xmm2, %xmm4
8955 ; SSE2-NEXT: por %xmm5, %xmm4
8956 ; SSE2-NEXT: pandn %xmm1, %xmm8
8957 ; SSE2-NEXT: pandn %xmm3, %xmm9
8958 ; SSE2-NEXT: por %xmm8, %xmm9
8959 ; SSE2-NEXT: movdqa %xmm4, %xmm0
8960 ; SSE2-NEXT: movdqa %xmm9, %xmm1
8963 ; SSE4-LABEL: test164:
8964 ; SSE4: # BB#0: # %entry
8965 ; SSE4-NEXT: movdqa %xmm0, %xmm4
8966 ; SSE4-NEXT: movdqa %xmm3, %xmm5
8967 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5
8968 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
8969 ; SSE4-NEXT: pxor %xmm0, %xmm5
8970 ; SSE4-NEXT: movdqa %xmm2, %xmm6
8971 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm6
8972 ; SSE4-NEXT: pxor %xmm6, %xmm0
8973 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
8974 ; SSE4-NEXT: movdqa %xmm5, %xmm0
8975 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
8976 ; SSE4-NEXT: movapd %xmm2, %xmm0
8977 ; SSE4-NEXT: movapd %xmm3, %xmm1
8980 ; AVX1-LABEL: test164:
8981 ; AVX1: # BB#0: # %entry
8982 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
8983 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
8984 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
8985 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
8986 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
8987 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm4
8988 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3
8989 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
8990 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8993 ; AVX2-LABEL: test164:
8994 ; AVX2: # BB#0: # %entry
8995 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
8996 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
8997 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
8998 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9001 ; AVX512BW-LABEL: test164:
9002 ; AVX512BW: # BB#0: # %entry
9003 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
9004 ; AVX512BW-NEXT: retq
9006 %cmp = icmp sge <4 x i64> %a, %b
9007 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9011 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
9012 ; SSE2-LABEL: test165:
9013 ; SSE2: # BB#0: # %entry
9014 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
9015 ; SSE2-NEXT: movdqa %xmm1, %xmm5
9016 ; SSE2-NEXT: pxor %xmm4, %xmm5
9017 ; SSE2-NEXT: movdqa %xmm3, %xmm6
9018 ; SSE2-NEXT: pxor %xmm4, %xmm6
9019 ; SSE2-NEXT: movdqa %xmm6, %xmm7
9020 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
9021 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9022 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
9023 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9024 ; SSE2-NEXT: pand %xmm8, %xmm5
9025 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9026 ; SSE2-NEXT: por %xmm5, %xmm6
9027 ; SSE2-NEXT: movdqa %xmm0, %xmm5
9028 ; SSE2-NEXT: pxor %xmm4, %xmm5
9029 ; SSE2-NEXT: pxor %xmm2, %xmm4
9030 ; SSE2-NEXT: movdqa %xmm4, %xmm7
9031 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
9032 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9033 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4
9034 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
9035 ; SSE2-NEXT: pand %xmm8, %xmm4
9036 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9037 ; SSE2-NEXT: por %xmm4, %xmm5
9038 ; SSE2-NEXT: pand %xmm5, %xmm0
9039 ; SSE2-NEXT: pandn %xmm2, %xmm5
9040 ; SSE2-NEXT: por %xmm5, %xmm0
9041 ; SSE2-NEXT: pand %xmm6, %xmm1
9042 ; SSE2-NEXT: pandn %xmm3, %xmm6
9043 ; SSE2-NEXT: por %xmm6, %xmm1
9046 ; SSE4-LABEL: test165:
9047 ; SSE4: # BB#0: # %entry
9048 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9049 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9050 ; SSE4-NEXT: movdqa %xmm1, %xmm6
9051 ; SSE4-NEXT: pxor %xmm0, %xmm6
9052 ; SSE4-NEXT: movdqa %xmm3, %xmm5
9053 ; SSE4-NEXT: pxor %xmm0, %xmm5
9054 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5
9055 ; SSE4-NEXT: movdqa %xmm4, %xmm6
9056 ; SSE4-NEXT: pxor %xmm0, %xmm6
9057 ; SSE4-NEXT: pxor %xmm2, %xmm0
9058 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
9059 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
9060 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9061 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
9062 ; SSE4-NEXT: movapd %xmm2, %xmm0
9063 ; SSE4-NEXT: movapd %xmm3, %xmm1
9066 ; AVX1-LABEL: test165:
9067 ; AVX1: # BB#0: # %entry
9068 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
9069 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9070 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9071 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
9072 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
9073 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9074 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
9075 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
9076 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
9077 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9078 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9081 ; AVX2-LABEL: test165:
9082 ; AVX2: # BB#0: # %entry
9083 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
9084 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
9085 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
9086 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
9087 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9090 ; AVX512BW-LABEL: test165:
9091 ; AVX512BW: # BB#0: # %entry
9092 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0
9093 ; AVX512BW-NEXT: retq
9095 %cmp = icmp ult <4 x i64> %a, %b
9096 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9100 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
9101 ; SSE2-LABEL: test166:
9102 ; SSE2: # BB#0: # %entry
9103 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
9104 ; SSE2-NEXT: movdqa %xmm3, %xmm4
9105 ; SSE2-NEXT: pxor %xmm7, %xmm4
9106 ; SSE2-NEXT: movdqa %xmm1, %xmm5
9107 ; SSE2-NEXT: pxor %xmm7, %xmm5
9108 ; SSE2-NEXT: movdqa %xmm5, %xmm6
9109 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
9110 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9111 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
9112 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9113 ; SSE2-NEXT: pand %xmm8, %xmm4
9114 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9115 ; SSE2-NEXT: por %xmm4, %xmm8
9116 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
9117 ; SSE2-NEXT: movdqa %xmm8, %xmm9
9118 ; SSE2-NEXT: pxor %xmm4, %xmm9
9119 ; SSE2-NEXT: movdqa %xmm2, %xmm6
9120 ; SSE2-NEXT: pxor %xmm7, %xmm6
9121 ; SSE2-NEXT: pxor %xmm0, %xmm7
9122 ; SSE2-NEXT: movdqa %xmm7, %xmm5
9123 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
9124 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9125 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
9126 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9127 ; SSE2-NEXT: pand %xmm10, %xmm6
9128 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9129 ; SSE2-NEXT: por %xmm6, %xmm5
9130 ; SSE2-NEXT: pxor %xmm5, %xmm4
9131 ; SSE2-NEXT: pandn %xmm0, %xmm5
9132 ; SSE2-NEXT: pandn %xmm2, %xmm4
9133 ; SSE2-NEXT: por %xmm5, %xmm4
9134 ; SSE2-NEXT: pandn %xmm1, %xmm8
9135 ; SSE2-NEXT: pandn %xmm3, %xmm9
9136 ; SSE2-NEXT: por %xmm8, %xmm9
9137 ; SSE2-NEXT: movdqa %xmm4, %xmm0
9138 ; SSE2-NEXT: movdqa %xmm9, %xmm1
9141 ; SSE4-LABEL: test166:
9142 ; SSE4: # BB#0: # %entry
9143 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9144 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9145 ; SSE4-NEXT: movdqa %xmm3, %xmm6
9146 ; SSE4-NEXT: pxor %xmm0, %xmm6
9147 ; SSE4-NEXT: movdqa %xmm1, %xmm5
9148 ; SSE4-NEXT: pxor %xmm0, %xmm5
9149 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5
9150 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6
9151 ; SSE4-NEXT: pxor %xmm6, %xmm5
9152 ; SSE4-NEXT: movdqa %xmm2, %xmm7
9153 ; SSE4-NEXT: pxor %xmm0, %xmm7
9154 ; SSE4-NEXT: pxor %xmm4, %xmm0
9155 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0
9156 ; SSE4-NEXT: pxor %xmm6, %xmm0
9157 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
9158 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9159 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
9160 ; SSE4-NEXT: movapd %xmm2, %xmm0
9161 ; SSE4-NEXT: movapd %xmm3, %xmm1
9164 ; AVX1-LABEL: test166:
9165 ; AVX1: # BB#0: # %entry
9166 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9167 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9168 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9169 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
9170 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
9171 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9172 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
9173 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
9174 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm5
9175 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
9176 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
9177 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
9178 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9179 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9182 ; AVX2-LABEL: test166:
9183 ; AVX2: # BB#0: # %entry
9184 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
9185 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
9186 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
9187 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
9188 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
9189 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
9190 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9193 ; AVX512BW-LABEL: test166:
9194 ; AVX512BW: # BB#0: # %entry
9195 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0
9196 ; AVX512BW-NEXT: retq
9198 %cmp = icmp ule <4 x i64> %a, %b
9199 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9203 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
9204 ; SSE2-LABEL: test167:
9205 ; SSE2: # BB#0: # %entry
9206 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
9207 ; SSE2-NEXT: movdqa %xmm3, %xmm5
9208 ; SSE2-NEXT: pxor %xmm4, %xmm5
9209 ; SSE2-NEXT: movdqa %xmm1, %xmm6
9210 ; SSE2-NEXT: pxor %xmm4, %xmm6
9211 ; SSE2-NEXT: movdqa %xmm6, %xmm7
9212 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
9213 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9214 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
9215 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9216 ; SSE2-NEXT: pand %xmm8, %xmm5
9217 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9218 ; SSE2-NEXT: por %xmm5, %xmm6
9219 ; SSE2-NEXT: movdqa %xmm2, %xmm5
9220 ; SSE2-NEXT: pxor %xmm4, %xmm5
9221 ; SSE2-NEXT: pxor %xmm0, %xmm4
9222 ; SSE2-NEXT: movdqa %xmm4, %xmm7
9223 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
9224 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9225 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4
9226 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
9227 ; SSE2-NEXT: pand %xmm8, %xmm4
9228 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9229 ; SSE2-NEXT: por %xmm4, %xmm5
9230 ; SSE2-NEXT: pand %xmm5, %xmm0
9231 ; SSE2-NEXT: pandn %xmm2, %xmm5
9232 ; SSE2-NEXT: por %xmm5, %xmm0
9233 ; SSE2-NEXT: pand %xmm6, %xmm1
9234 ; SSE2-NEXT: pandn %xmm3, %xmm6
9235 ; SSE2-NEXT: por %xmm6, %xmm1
9238 ; SSE4-LABEL: test167:
9239 ; SSE4: # BB#0: # %entry
9240 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9241 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9242 ; SSE4-NEXT: movdqa %xmm3, %xmm6
9243 ; SSE4-NEXT: pxor %xmm0, %xmm6
9244 ; SSE4-NEXT: movdqa %xmm1, %xmm5
9245 ; SSE4-NEXT: pxor %xmm0, %xmm5
9246 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5
9247 ; SSE4-NEXT: movdqa %xmm2, %xmm6
9248 ; SSE4-NEXT: pxor %xmm0, %xmm6
9249 ; SSE4-NEXT: pxor %xmm4, %xmm0
9250 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
9251 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
9252 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9253 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
9254 ; SSE4-NEXT: movapd %xmm2, %xmm0
9255 ; SSE4-NEXT: movapd %xmm3, %xmm1
9258 ; AVX1-LABEL: test167:
9259 ; AVX1: # BB#0: # %entry
9260 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9261 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9262 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9263 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
9264 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
9265 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9266 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
9267 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
9268 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
9269 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9270 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9273 ; AVX2-LABEL: test167:
9274 ; AVX2: # BB#0: # %entry
9275 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
9276 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
9277 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
9278 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
9279 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9282 ; AVX512BW-LABEL: test167:
9283 ; AVX512BW: # BB#0: # %entry
9284 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
9285 ; AVX512BW-NEXT: retq
9287 %cmp = icmp ugt <4 x i64> %a, %b
9288 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9292 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
9293 ; SSE2-LABEL: test168:
9294 ; SSE2: # BB#0: # %entry
9295 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
9296 ; SSE2-NEXT: movdqa %xmm1, %xmm4
9297 ; SSE2-NEXT: pxor %xmm7, %xmm4
9298 ; SSE2-NEXT: movdqa %xmm3, %xmm5
9299 ; SSE2-NEXT: pxor %xmm7, %xmm5
9300 ; SSE2-NEXT: movdqa %xmm5, %xmm6
9301 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
9302 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9303 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
9304 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9305 ; SSE2-NEXT: pand %xmm8, %xmm4
9306 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9307 ; SSE2-NEXT: por %xmm4, %xmm8
9308 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
9309 ; SSE2-NEXT: movdqa %xmm8, %xmm9
9310 ; SSE2-NEXT: pxor %xmm4, %xmm9
9311 ; SSE2-NEXT: movdqa %xmm0, %xmm6
9312 ; SSE2-NEXT: pxor %xmm7, %xmm6
9313 ; SSE2-NEXT: pxor %xmm2, %xmm7
9314 ; SSE2-NEXT: movdqa %xmm7, %xmm5
9315 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
9316 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9317 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
9318 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9319 ; SSE2-NEXT: pand %xmm10, %xmm6
9320 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9321 ; SSE2-NEXT: por %xmm6, %xmm5
9322 ; SSE2-NEXT: pxor %xmm5, %xmm4
9323 ; SSE2-NEXT: pandn %xmm0, %xmm5
9324 ; SSE2-NEXT: pandn %xmm2, %xmm4
9325 ; SSE2-NEXT: por %xmm5, %xmm4
9326 ; SSE2-NEXT: pandn %xmm1, %xmm8
9327 ; SSE2-NEXT: pandn %xmm3, %xmm9
9328 ; SSE2-NEXT: por %xmm8, %xmm9
9329 ; SSE2-NEXT: movdqa %xmm4, %xmm0
9330 ; SSE2-NEXT: movdqa %xmm9, %xmm1
9333 ; SSE4-LABEL: test168:
9334 ; SSE4: # BB#0: # %entry
9335 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9336 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9337 ; SSE4-NEXT: movdqa %xmm1, %xmm6
9338 ; SSE4-NEXT: pxor %xmm0, %xmm6
9339 ; SSE4-NEXT: movdqa %xmm3, %xmm5
9340 ; SSE4-NEXT: pxor %xmm0, %xmm5
9341 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5
9342 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6
9343 ; SSE4-NEXT: pxor %xmm6, %xmm5
9344 ; SSE4-NEXT: movdqa %xmm4, %xmm7
9345 ; SSE4-NEXT: pxor %xmm0, %xmm7
9346 ; SSE4-NEXT: pxor %xmm2, %xmm0
9347 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0
9348 ; SSE4-NEXT: pxor %xmm6, %xmm0
9349 ; SSE4-NEXT: blendvpd %xmm0, %xmm4, %xmm2
9350 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9351 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm3
9352 ; SSE4-NEXT: movapd %xmm2, %xmm0
9353 ; SSE4-NEXT: movapd %xmm3, %xmm1
9356 ; AVX1-LABEL: test168:
9357 ; AVX1: # BB#0: # %entry
9358 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
9359 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9360 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9361 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
9362 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
9363 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9364 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
9365 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
9366 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
9367 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
9368 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
9369 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
9370 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9371 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9374 ; AVX2-LABEL: test168:
9375 ; AVX2: # BB#0: # %entry
9376 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
9377 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
9378 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
9379 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
9380 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
9381 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
9382 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9385 ; AVX512BW-LABEL: test168:
9386 ; AVX512BW: # BB#0: # %entry
9387 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
9388 ; AVX512BW-NEXT: retq
9390 %cmp = icmp uge <4 x i64> %a, %b
9391 %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9395 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
9396 ; SSE2-LABEL: test169:
9397 ; SSE2: # BB#0: # %entry
9398 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0]
9399 ; SSE2-NEXT: movdqa %xmm1, %xmm4
9400 ; SSE2-NEXT: pxor %xmm5, %xmm4
9401 ; SSE2-NEXT: movdqa %xmm3, %xmm6
9402 ; SSE2-NEXT: pxor %xmm5, %xmm6
9403 ; SSE2-NEXT: movdqa %xmm6, %xmm7
9404 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
9405 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9406 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6
9407 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9408 ; SSE2-NEXT: pand %xmm8, %xmm6
9409 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9410 ; SSE2-NEXT: por %xmm6, %xmm4
9411 ; SSE2-NEXT: movdqa %xmm0, %xmm6
9412 ; SSE2-NEXT: pxor %xmm5, %xmm6
9413 ; SSE2-NEXT: pxor %xmm2, %xmm5
9414 ; SSE2-NEXT: movdqa %xmm5, %xmm7
9415 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
9416 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9417 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5
9418 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
9419 ; SSE2-NEXT: pand %xmm8, %xmm6
9420 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9421 ; SSE2-NEXT: por %xmm6, %xmm5
9422 ; SSE2-NEXT: pand %xmm5, %xmm2
9423 ; SSE2-NEXT: pandn %xmm0, %xmm5
9424 ; SSE2-NEXT: por %xmm2, %xmm5
9425 ; SSE2-NEXT: pand %xmm4, %xmm3
9426 ; SSE2-NEXT: pandn %xmm1, %xmm4
9427 ; SSE2-NEXT: por %xmm3, %xmm4
9428 ; SSE2-NEXT: movdqa %xmm5, %xmm0
9429 ; SSE2-NEXT: movdqa %xmm4, %xmm1
9432 ; SSE4-LABEL: test169:
9433 ; SSE4: # BB#0: # %entry
9434 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9435 ; SSE4-NEXT: movdqa %xmm3, %xmm5
9436 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5
9437 ; SSE4-NEXT: movdqa %xmm2, %xmm0
9438 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm0
9439 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm4
9440 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9441 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm1
9442 ; SSE4-NEXT: movapd %xmm4, %xmm0
9445 ; AVX1-LABEL: test169:
9446 ; AVX1: # BB#0: # %entry
9447 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
9448 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
9449 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
9450 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm3
9451 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9452 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9455 ; AVX2-LABEL: test169:
9456 ; AVX2: # BB#0: # %entry
9457 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
9458 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9461 ; AVX512BW-LABEL: test169:
9462 ; AVX512BW: # BB#0: # %entry
9463 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
9464 ; AVX512BW-NEXT: retq
9466 %cmp = icmp slt <4 x i64> %a, %b
9467 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9471 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
9472 ; SSE2-LABEL: test170:
9473 ; SSE2: # BB#0: # %entry
9474 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
9475 ; SSE2-NEXT: movdqa %xmm3, %xmm4
9476 ; SSE2-NEXT: pxor %xmm7, %xmm4
9477 ; SSE2-NEXT: movdqa %xmm1, %xmm5
9478 ; SSE2-NEXT: pxor %xmm7, %xmm5
9479 ; SSE2-NEXT: movdqa %xmm5, %xmm6
9480 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
9481 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9482 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
9483 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9484 ; SSE2-NEXT: pand %xmm8, %xmm4
9485 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9486 ; SSE2-NEXT: por %xmm4, %xmm8
9487 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
9488 ; SSE2-NEXT: movdqa %xmm8, %xmm9
9489 ; SSE2-NEXT: pxor %xmm4, %xmm9
9490 ; SSE2-NEXT: movdqa %xmm2, %xmm6
9491 ; SSE2-NEXT: pxor %xmm7, %xmm6
9492 ; SSE2-NEXT: pxor %xmm0, %xmm7
9493 ; SSE2-NEXT: movdqa %xmm7, %xmm5
9494 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
9495 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9496 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
9497 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9498 ; SSE2-NEXT: pand %xmm10, %xmm6
9499 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9500 ; SSE2-NEXT: por %xmm6, %xmm5
9501 ; SSE2-NEXT: pxor %xmm5, %xmm4
9502 ; SSE2-NEXT: pandn %xmm2, %xmm5
9503 ; SSE2-NEXT: pandn %xmm0, %xmm4
9504 ; SSE2-NEXT: por %xmm5, %xmm4
9505 ; SSE2-NEXT: pandn %xmm3, %xmm8
9506 ; SSE2-NEXT: pandn %xmm1, %xmm9
9507 ; SSE2-NEXT: por %xmm8, %xmm9
9508 ; SSE2-NEXT: movdqa %xmm4, %xmm0
9509 ; SSE2-NEXT: movdqa %xmm9, %xmm1
9512 ; SSE4-LABEL: test170:
9513 ; SSE4: # BB#0: # %entry
9514 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9515 ; SSE4-NEXT: movdqa %xmm1, %xmm5
9516 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5
9517 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6
9518 ; SSE4-NEXT: pxor %xmm6, %xmm5
9519 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
9520 ; SSE4-NEXT: pxor %xmm6, %xmm0
9521 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm4
9522 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9523 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm1
9524 ; SSE4-NEXT: movapd %xmm4, %xmm0
9527 ; AVX1-LABEL: test170:
9528 ; AVX1: # BB#0: # %entry
9529 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9530 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
9531 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
9532 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
9533 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9534 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm4
9535 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3
9536 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9537 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9540 ; AVX2-LABEL: test170:
9541 ; AVX2: # BB#0: # %entry
9542 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2
9543 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
9544 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
9545 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9548 ; AVX512BW-LABEL: test170:
9549 ; AVX512BW: # BB#0: # %entry
9550 ; AVX512BW-NEXT: vpmaxsq %ymm1, %ymm0, %ymm0
9551 ; AVX512BW-NEXT: retq
9553 %cmp = icmp sle <4 x i64> %a, %b
9554 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9558 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
9559 ; SSE2-LABEL: test171:
9560 ; SSE2: # BB#0: # %entry
9561 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0]
9562 ; SSE2-NEXT: movdqa %xmm3, %xmm4
9563 ; SSE2-NEXT: pxor %xmm5, %xmm4
9564 ; SSE2-NEXT: movdqa %xmm1, %xmm6
9565 ; SSE2-NEXT: pxor %xmm5, %xmm6
9566 ; SSE2-NEXT: movdqa %xmm6, %xmm7
9567 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
9568 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9569 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6
9570 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9571 ; SSE2-NEXT: pand %xmm8, %xmm6
9572 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9573 ; SSE2-NEXT: por %xmm6, %xmm4
9574 ; SSE2-NEXT: movdqa %xmm2, %xmm6
9575 ; SSE2-NEXT: pxor %xmm5, %xmm6
9576 ; SSE2-NEXT: pxor %xmm0, %xmm5
9577 ; SSE2-NEXT: movdqa %xmm5, %xmm7
9578 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
9579 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9580 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5
9581 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
9582 ; SSE2-NEXT: pand %xmm8, %xmm6
9583 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9584 ; SSE2-NEXT: por %xmm6, %xmm5
9585 ; SSE2-NEXT: pand %xmm5, %xmm2
9586 ; SSE2-NEXT: pandn %xmm0, %xmm5
9587 ; SSE2-NEXT: por %xmm2, %xmm5
9588 ; SSE2-NEXT: pand %xmm4, %xmm3
9589 ; SSE2-NEXT: pandn %xmm1, %xmm4
9590 ; SSE2-NEXT: por %xmm3, %xmm4
9591 ; SSE2-NEXT: movdqa %xmm5, %xmm0
9592 ; SSE2-NEXT: movdqa %xmm4, %xmm1
9595 ; SSE4-LABEL: test171:
9596 ; SSE4: # BB#0: # %entry
9597 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9598 ; SSE4-NEXT: movdqa %xmm1, %xmm5
9599 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm5
9600 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
9601 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm4
9602 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9603 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm1
9604 ; SSE4-NEXT: movapd %xmm4, %xmm0
9607 ; AVX1-LABEL: test171:
9608 ; AVX1: # BB#0: # %entry
9609 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9610 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
9611 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
9612 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm3
9613 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9614 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9617 ; AVX2-LABEL: test171:
9618 ; AVX2: # BB#0: # %entry
9619 ; AVX2-NEXT: vpcmpgtq %ymm1, %ymm0, %ymm2
9620 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9623 ; AVX512BW-LABEL: test171:
9624 ; AVX512BW: # BB#0: # %entry
9625 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0
9626 ; AVX512BW-NEXT: retq
9628 %cmp = icmp sgt <4 x i64> %a, %b
9629 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9633 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
9634 ; SSE2-LABEL: test172:
9635 ; SSE2: # BB#0: # %entry
9636 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
9637 ; SSE2-NEXT: movdqa %xmm1, %xmm4
9638 ; SSE2-NEXT: pxor %xmm7, %xmm4
9639 ; SSE2-NEXT: movdqa %xmm3, %xmm5
9640 ; SSE2-NEXT: pxor %xmm7, %xmm5
9641 ; SSE2-NEXT: movdqa %xmm5, %xmm6
9642 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
9643 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9644 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
9645 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9646 ; SSE2-NEXT: pand %xmm8, %xmm4
9647 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9648 ; SSE2-NEXT: por %xmm4, %xmm8
9649 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
9650 ; SSE2-NEXT: movdqa %xmm8, %xmm9
9651 ; SSE2-NEXT: pxor %xmm4, %xmm9
9652 ; SSE2-NEXT: movdqa %xmm0, %xmm6
9653 ; SSE2-NEXT: pxor %xmm7, %xmm6
9654 ; SSE2-NEXT: pxor %xmm2, %xmm7
9655 ; SSE2-NEXT: movdqa %xmm7, %xmm5
9656 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
9657 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9658 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
9659 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9660 ; SSE2-NEXT: pand %xmm10, %xmm6
9661 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9662 ; SSE2-NEXT: por %xmm6, %xmm5
9663 ; SSE2-NEXT: pxor %xmm5, %xmm4
9664 ; SSE2-NEXT: pandn %xmm2, %xmm5
9665 ; SSE2-NEXT: pandn %xmm0, %xmm4
9666 ; SSE2-NEXT: por %xmm5, %xmm4
9667 ; SSE2-NEXT: pandn %xmm3, %xmm8
9668 ; SSE2-NEXT: pandn %xmm1, %xmm9
9669 ; SSE2-NEXT: por %xmm8, %xmm9
9670 ; SSE2-NEXT: movdqa %xmm4, %xmm0
9671 ; SSE2-NEXT: movdqa %xmm9, %xmm1
9674 ; SSE4-LABEL: test172:
9675 ; SSE4: # BB#0: # %entry
9676 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9677 ; SSE4-NEXT: movdqa %xmm3, %xmm5
9678 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm5
9679 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
9680 ; SSE4-NEXT: pxor %xmm0, %xmm5
9681 ; SSE4-NEXT: movdqa %xmm2, %xmm6
9682 ; SSE4-NEXT: pcmpgtq %xmm4, %xmm6
9683 ; SSE4-NEXT: pxor %xmm6, %xmm0
9684 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm4
9685 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9686 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm1
9687 ; SSE4-NEXT: movapd %xmm4, %xmm0
9690 ; AVX1-LABEL: test172:
9691 ; AVX1: # BB#0: # %entry
9692 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
9693 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm3
9694 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm3, %xmm2
9695 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
9696 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9697 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm4
9698 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm3
9699 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9700 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9703 ; AVX2-LABEL: test172:
9704 ; AVX2: # BB#0: # %entry
9705 ; AVX2-NEXT: vpcmpgtq %ymm0, %ymm1, %ymm2
9706 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
9707 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
9708 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9711 ; AVX512BW-LABEL: test172:
9712 ; AVX512BW: # BB#0: # %entry
9713 ; AVX512BW-NEXT: vpminsq %ymm1, %ymm0, %ymm0
9714 ; AVX512BW-NEXT: retq
9716 %cmp = icmp sge <4 x i64> %a, %b
9717 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9721 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
9722 ; SSE2-LABEL: test173:
9723 ; SSE2: # BB#0: # %entry
9724 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
9725 ; SSE2-NEXT: movdqa %xmm1, %xmm4
9726 ; SSE2-NEXT: pxor %xmm5, %xmm4
9727 ; SSE2-NEXT: movdqa %xmm3, %xmm6
9728 ; SSE2-NEXT: pxor %xmm5, %xmm6
9729 ; SSE2-NEXT: movdqa %xmm6, %xmm7
9730 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
9731 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9732 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6
9733 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9734 ; SSE2-NEXT: pand %xmm8, %xmm6
9735 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9736 ; SSE2-NEXT: por %xmm6, %xmm4
9737 ; SSE2-NEXT: movdqa %xmm0, %xmm6
9738 ; SSE2-NEXT: pxor %xmm5, %xmm6
9739 ; SSE2-NEXT: pxor %xmm2, %xmm5
9740 ; SSE2-NEXT: movdqa %xmm5, %xmm7
9741 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
9742 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9743 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5
9744 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
9745 ; SSE2-NEXT: pand %xmm8, %xmm6
9746 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9747 ; SSE2-NEXT: por %xmm6, %xmm5
9748 ; SSE2-NEXT: pand %xmm5, %xmm2
9749 ; SSE2-NEXT: pandn %xmm0, %xmm5
9750 ; SSE2-NEXT: por %xmm2, %xmm5
9751 ; SSE2-NEXT: pand %xmm4, %xmm3
9752 ; SSE2-NEXT: pandn %xmm1, %xmm4
9753 ; SSE2-NEXT: por %xmm3, %xmm4
9754 ; SSE2-NEXT: movdqa %xmm5, %xmm0
9755 ; SSE2-NEXT: movdqa %xmm4, %xmm1
9758 ; SSE4-LABEL: test173:
9759 ; SSE4: # BB#0: # %entry
9760 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9761 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9762 ; SSE4-NEXT: movdqa %xmm1, %xmm6
9763 ; SSE4-NEXT: pxor %xmm0, %xmm6
9764 ; SSE4-NEXT: movdqa %xmm3, %xmm5
9765 ; SSE4-NEXT: pxor %xmm0, %xmm5
9766 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5
9767 ; SSE4-NEXT: movdqa %xmm4, %xmm6
9768 ; SSE4-NEXT: pxor %xmm0, %xmm6
9769 ; SSE4-NEXT: pxor %xmm2, %xmm0
9770 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
9771 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm4
9772 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9773 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm1
9774 ; SSE4-NEXT: movapd %xmm4, %xmm0
9777 ; AVX1-LABEL: test173:
9778 ; AVX1: # BB#0: # %entry
9779 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
9780 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9781 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9782 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
9783 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
9784 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9785 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm4
9786 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
9787 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
9788 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9789 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9792 ; AVX2-LABEL: test173:
9793 ; AVX2: # BB#0: # %entry
9794 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
9795 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
9796 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
9797 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
9798 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9801 ; AVX512BW-LABEL: test173:
9802 ; AVX512BW: # BB#0: # %entry
9803 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
9804 ; AVX512BW-NEXT: retq
9806 %cmp = icmp ult <4 x i64> %a, %b
9807 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9811 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
9812 ; SSE2-LABEL: test174:
9813 ; SSE2: # BB#0: # %entry
9814 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
9815 ; SSE2-NEXT: movdqa %xmm3, %xmm4
9816 ; SSE2-NEXT: pxor %xmm7, %xmm4
9817 ; SSE2-NEXT: movdqa %xmm1, %xmm5
9818 ; SSE2-NEXT: pxor %xmm7, %xmm5
9819 ; SSE2-NEXT: movdqa %xmm5, %xmm6
9820 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
9821 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9822 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
9823 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9824 ; SSE2-NEXT: pand %xmm8, %xmm4
9825 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9826 ; SSE2-NEXT: por %xmm4, %xmm8
9827 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
9828 ; SSE2-NEXT: movdqa %xmm8, %xmm9
9829 ; SSE2-NEXT: pxor %xmm4, %xmm9
9830 ; SSE2-NEXT: movdqa %xmm2, %xmm6
9831 ; SSE2-NEXT: pxor %xmm7, %xmm6
9832 ; SSE2-NEXT: pxor %xmm0, %xmm7
9833 ; SSE2-NEXT: movdqa %xmm7, %xmm5
9834 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
9835 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9836 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
9837 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9838 ; SSE2-NEXT: pand %xmm10, %xmm6
9839 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9840 ; SSE2-NEXT: por %xmm6, %xmm5
9841 ; SSE2-NEXT: pxor %xmm5, %xmm4
9842 ; SSE2-NEXT: pandn %xmm2, %xmm5
9843 ; SSE2-NEXT: pandn %xmm0, %xmm4
9844 ; SSE2-NEXT: por %xmm5, %xmm4
9845 ; SSE2-NEXT: pandn %xmm3, %xmm8
9846 ; SSE2-NEXT: pandn %xmm1, %xmm9
9847 ; SSE2-NEXT: por %xmm8, %xmm9
9848 ; SSE2-NEXT: movdqa %xmm4, %xmm0
9849 ; SSE2-NEXT: movdqa %xmm9, %xmm1
9852 ; SSE4-LABEL: test174:
9853 ; SSE4: # BB#0: # %entry
9854 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9855 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9856 ; SSE4-NEXT: movdqa %xmm3, %xmm6
9857 ; SSE4-NEXT: pxor %xmm0, %xmm6
9858 ; SSE4-NEXT: movdqa %xmm1, %xmm5
9859 ; SSE4-NEXT: pxor %xmm0, %xmm5
9860 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5
9861 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6
9862 ; SSE4-NEXT: pxor %xmm6, %xmm5
9863 ; SSE4-NEXT: movdqa %xmm2, %xmm7
9864 ; SSE4-NEXT: pxor %xmm0, %xmm7
9865 ; SSE4-NEXT: pxor %xmm4, %xmm0
9866 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0
9867 ; SSE4-NEXT: pxor %xmm6, %xmm0
9868 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm4
9869 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9870 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm1
9871 ; SSE4-NEXT: movapd %xmm4, %xmm0
9874 ; AVX1-LABEL: test174:
9875 ; AVX1: # BB#0: # %entry
9876 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9877 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9878 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9879 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
9880 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
9881 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9882 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
9883 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
9884 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm5
9885 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
9886 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
9887 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
9888 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9889 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9892 ; AVX2-LABEL: test174:
9893 ; AVX2: # BB#0: # %entry
9894 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
9895 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
9896 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
9897 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
9898 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
9899 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
9900 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9903 ; AVX512BW-LABEL: test174:
9904 ; AVX512BW: # BB#0: # %entry
9905 ; AVX512BW-NEXT: vpmaxuq %ymm1, %ymm0, %ymm0
9906 ; AVX512BW-NEXT: retq
9908 %cmp = icmp ule <4 x i64> %a, %b
9909 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9913 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
9914 ; SSE2-LABEL: test175:
9915 ; SSE2: # BB#0: # %entry
9916 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
9917 ; SSE2-NEXT: movdqa %xmm3, %xmm4
9918 ; SSE2-NEXT: pxor %xmm5, %xmm4
9919 ; SSE2-NEXT: movdqa %xmm1, %xmm6
9920 ; SSE2-NEXT: pxor %xmm5, %xmm6
9921 ; SSE2-NEXT: movdqa %xmm6, %xmm7
9922 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
9923 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9924 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm6
9925 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9926 ; SSE2-NEXT: pand %xmm8, %xmm6
9927 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9928 ; SSE2-NEXT: por %xmm6, %xmm4
9929 ; SSE2-NEXT: movdqa %xmm2, %xmm6
9930 ; SSE2-NEXT: pxor %xmm5, %xmm6
9931 ; SSE2-NEXT: pxor %xmm0, %xmm5
9932 ; SSE2-NEXT: movdqa %xmm5, %xmm7
9933 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm7
9934 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9935 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm5
9936 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
9937 ; SSE2-NEXT: pand %xmm8, %xmm6
9938 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9939 ; SSE2-NEXT: por %xmm6, %xmm5
9940 ; SSE2-NEXT: pand %xmm5, %xmm2
9941 ; SSE2-NEXT: pandn %xmm0, %xmm5
9942 ; SSE2-NEXT: por %xmm2, %xmm5
9943 ; SSE2-NEXT: pand %xmm4, %xmm3
9944 ; SSE2-NEXT: pandn %xmm1, %xmm4
9945 ; SSE2-NEXT: por %xmm3, %xmm4
9946 ; SSE2-NEXT: movdqa %xmm5, %xmm0
9947 ; SSE2-NEXT: movdqa %xmm4, %xmm1
9950 ; SSE4-LABEL: test175:
9951 ; SSE4: # BB#0: # %entry
9952 ; SSE4-NEXT: movdqa %xmm0, %xmm4
9953 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9954 ; SSE4-NEXT: movdqa %xmm3, %xmm6
9955 ; SSE4-NEXT: pxor %xmm0, %xmm6
9956 ; SSE4-NEXT: movdqa %xmm1, %xmm5
9957 ; SSE4-NEXT: pxor %xmm0, %xmm5
9958 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5
9959 ; SSE4-NEXT: movdqa %xmm2, %xmm6
9960 ; SSE4-NEXT: pxor %xmm0, %xmm6
9961 ; SSE4-NEXT: pxor %xmm4, %xmm0
9962 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm0
9963 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm4
9964 ; SSE4-NEXT: movdqa %xmm5, %xmm0
9965 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm1
9966 ; SSE4-NEXT: movapd %xmm4, %xmm0
9969 ; AVX1-LABEL: test175:
9970 ; AVX1: # BB#0: # %entry
9971 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
9972 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9973 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
9974 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
9975 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
9976 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
9977 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm4
9978 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm3
9979 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
9980 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
9981 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9984 ; AVX2-LABEL: test175:
9985 ; AVX2: # BB#0: # %entry
9986 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
9987 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
9988 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
9989 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
9990 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9993 ; AVX512BW-LABEL: test175:
9994 ; AVX512BW: # BB#0: # %entry
9995 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0
9996 ; AVX512BW-NEXT: retq
9998 %cmp = icmp ugt <4 x i64> %a, %b
9999 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
10003 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
10004 ; SSE2-LABEL: test176:
10005 ; SSE2: # BB#0: # %entry
10006 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
10007 ; SSE2-NEXT: movdqa %xmm1, %xmm4
10008 ; SSE2-NEXT: pxor %xmm7, %xmm4
10009 ; SSE2-NEXT: movdqa %xmm3, %xmm5
10010 ; SSE2-NEXT: pxor %xmm7, %xmm5
10011 ; SSE2-NEXT: movdqa %xmm5, %xmm6
10012 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
10013 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
10014 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
10015 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
10016 ; SSE2-NEXT: pand %xmm8, %xmm4
10017 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
10018 ; SSE2-NEXT: por %xmm4, %xmm8
10019 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
10020 ; SSE2-NEXT: movdqa %xmm8, %xmm9
10021 ; SSE2-NEXT: pxor %xmm4, %xmm9
10022 ; SSE2-NEXT: movdqa %xmm0, %xmm6
10023 ; SSE2-NEXT: pxor %xmm7, %xmm6
10024 ; SSE2-NEXT: pxor %xmm2, %xmm7
10025 ; SSE2-NEXT: movdqa %xmm7, %xmm5
10026 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
10027 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
10028 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
10029 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
10030 ; SSE2-NEXT: pand %xmm10, %xmm6
10031 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
10032 ; SSE2-NEXT: por %xmm6, %xmm5
10033 ; SSE2-NEXT: pxor %xmm5, %xmm4
10034 ; SSE2-NEXT: pandn %xmm2, %xmm5
10035 ; SSE2-NEXT: pandn %xmm0, %xmm4
10036 ; SSE2-NEXT: por %xmm5, %xmm4
10037 ; SSE2-NEXT: pandn %xmm3, %xmm8
10038 ; SSE2-NEXT: pandn %xmm1, %xmm9
10039 ; SSE2-NEXT: por %xmm8, %xmm9
10040 ; SSE2-NEXT: movdqa %xmm4, %xmm0
10041 ; SSE2-NEXT: movdqa %xmm9, %xmm1
10044 ; SSE4-LABEL: test176:
10045 ; SSE4: # BB#0: # %entry
10046 ; SSE4-NEXT: movdqa %xmm0, %xmm4
10047 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10048 ; SSE4-NEXT: movdqa %xmm1, %xmm6
10049 ; SSE4-NEXT: pxor %xmm0, %xmm6
10050 ; SSE4-NEXT: movdqa %xmm3, %xmm5
10051 ; SSE4-NEXT: pxor %xmm0, %xmm5
10052 ; SSE4-NEXT: pcmpgtq %xmm6, %xmm5
10053 ; SSE4-NEXT: pcmpeqd %xmm6, %xmm6
10054 ; SSE4-NEXT: pxor %xmm6, %xmm5
10055 ; SSE4-NEXT: movdqa %xmm4, %xmm7
10056 ; SSE4-NEXT: pxor %xmm0, %xmm7
10057 ; SSE4-NEXT: pxor %xmm2, %xmm0
10058 ; SSE4-NEXT: pcmpgtq %xmm7, %xmm0
10059 ; SSE4-NEXT: pxor %xmm6, %xmm0
10060 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm4
10061 ; SSE4-NEXT: movdqa %xmm5, %xmm0
10062 ; SSE4-NEXT: blendvpd %xmm0, %xmm3, %xmm1
10063 ; SSE4-NEXT: movapd %xmm4, %xmm0
10066 ; AVX1-LABEL: test176:
10067 ; AVX1: # BB#0: # %entry
10068 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
10069 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10070 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10071 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
10072 ; AVX1-NEXT: vpxor %xmm3, %xmm4, %xmm4
10073 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
10074 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
10075 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
10076 ; AVX1-NEXT: vpxor %xmm3, %xmm0, %xmm5
10077 ; AVX1-NEXT: vpxor %xmm3, %xmm1, %xmm3
10078 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
10079 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
10080 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
10081 ; AVX1-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
10084 ; AVX2-LABEL: test176:
10085 ; AVX2: # BB#0: # %entry
10086 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
10087 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
10088 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
10089 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
10090 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
10091 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
10092 ; AVX2-NEXT: vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
10095 ; AVX512BW-LABEL: test176:
10096 ; AVX512BW: # BB#0: # %entry
10097 ; AVX512BW-NEXT: vpminuq %ymm1, %ymm0, %ymm0
10098 ; AVX512BW-NEXT: retq
10100 %cmp = icmp uge <4 x i64> %a, %b
10101 %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
10105 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
10106 ; SSE2-LABEL: test177:
10107 ; SSE2: # BB#0: # %entry
10108 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10109 ; SSE2-NEXT: movdqa %xmm0, %xmm3
10110 ; SSE2-NEXT: pxor %xmm2, %xmm3
10111 ; SSE2-NEXT: pxor %xmm1, %xmm2
10112 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10113 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10114 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10115 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10116 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10117 ; SSE2-NEXT: pand %xmm5, %xmm2
10118 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10119 ; SSE2-NEXT: por %xmm2, %xmm3
10120 ; SSE2-NEXT: pand %xmm3, %xmm0
10121 ; SSE2-NEXT: pandn %xmm1, %xmm3
10122 ; SSE2-NEXT: por %xmm3, %xmm0
10125 ; SSE4-LABEL: test177:
10126 ; SSE4: # BB#0: # %entry
10127 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10128 ; SSE4-NEXT: movdqa %xmm1, %xmm0
10129 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
10130 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
10131 ; SSE4-NEXT: movapd %xmm1, %xmm0
10134 ; AVX1-LABEL: test177:
10135 ; AVX1: # BB#0: # %entry
10136 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
10137 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10140 ; AVX2-LABEL: test177:
10141 ; AVX2: # BB#0: # %entry
10142 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
10143 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10146 ; AVX512BW-LABEL: test177:
10147 ; AVX512BW: # BB#0: # %entry
10148 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0
10149 ; AVX512BW-NEXT: retq
10151 %cmp = icmp slt <2 x i64> %a, %b
10152 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10156 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
10157 ; SSE2-LABEL: test178:
10158 ; SSE2: # BB#0: # %entry
10159 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10160 ; SSE2-NEXT: movdqa %xmm1, %xmm3
10161 ; SSE2-NEXT: pxor %xmm2, %xmm3
10162 ; SSE2-NEXT: pxor %xmm0, %xmm2
10163 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10164 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10165 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10166 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10167 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10168 ; SSE2-NEXT: pand %xmm5, %xmm2
10169 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10170 ; SSE2-NEXT: por %xmm2, %xmm3
10171 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
10172 ; SSE2-NEXT: pxor %xmm3, %xmm2
10173 ; SSE2-NEXT: pandn %xmm0, %xmm3
10174 ; SSE2-NEXT: pandn %xmm1, %xmm2
10175 ; SSE2-NEXT: por %xmm3, %xmm2
10176 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10179 ; SSE4-LABEL: test178:
10180 ; SSE4: # BB#0: # %entry
10181 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10182 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
10183 ; SSE4-NEXT: pcmpeqd %xmm3, %xmm3
10184 ; SSE4-NEXT: pxor %xmm3, %xmm0
10185 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
10186 ; SSE4-NEXT: movapd %xmm1, %xmm0
10189 ; AVX1-LABEL: test178:
10190 ; AVX1: # BB#0: # %entry
10191 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
10192 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10193 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10194 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10197 ; AVX2-LABEL: test178:
10198 ; AVX2: # BB#0: # %entry
10199 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
10200 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10201 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2
10202 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10205 ; AVX512BW-LABEL: test178:
10206 ; AVX512BW: # BB#0: # %entry
10207 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0
10208 ; AVX512BW-NEXT: retq
10210 %cmp = icmp sle <2 x i64> %a, %b
10211 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10215 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
10216 ; SSE2-LABEL: test179:
10217 ; SSE2: # BB#0: # %entry
10218 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10219 ; SSE2-NEXT: movdqa %xmm1, %xmm3
10220 ; SSE2-NEXT: pxor %xmm2, %xmm3
10221 ; SSE2-NEXT: pxor %xmm0, %xmm2
10222 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10223 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10224 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10225 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10226 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10227 ; SSE2-NEXT: pand %xmm5, %xmm2
10228 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10229 ; SSE2-NEXT: por %xmm2, %xmm3
10230 ; SSE2-NEXT: pand %xmm3, %xmm0
10231 ; SSE2-NEXT: pandn %xmm1, %xmm3
10232 ; SSE2-NEXT: por %xmm3, %xmm0
10235 ; SSE4-LABEL: test179:
10236 ; SSE4: # BB#0: # %entry
10237 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10238 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
10239 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
10240 ; SSE4-NEXT: movapd %xmm1, %xmm0
10243 ; AVX1-LABEL: test179:
10244 ; AVX1: # BB#0: # %entry
10245 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
10246 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10249 ; AVX2-LABEL: test179:
10250 ; AVX2: # BB#0: # %entry
10251 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
10252 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10255 ; AVX512BW-LABEL: test179:
10256 ; AVX512BW: # BB#0: # %entry
10257 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
10258 ; AVX512BW-NEXT: retq
10260 %cmp = icmp sgt <2 x i64> %a, %b
10261 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10265 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
10266 ; SSE2-LABEL: test180:
10267 ; SSE2: # BB#0: # %entry
10268 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10269 ; SSE2-NEXT: movdqa %xmm0, %xmm3
10270 ; SSE2-NEXT: pxor %xmm2, %xmm3
10271 ; SSE2-NEXT: pxor %xmm1, %xmm2
10272 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10273 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10274 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10275 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10276 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10277 ; SSE2-NEXT: pand %xmm5, %xmm2
10278 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10279 ; SSE2-NEXT: por %xmm2, %xmm3
10280 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
10281 ; SSE2-NEXT: pxor %xmm3, %xmm2
10282 ; SSE2-NEXT: pandn %xmm0, %xmm3
10283 ; SSE2-NEXT: pandn %xmm1, %xmm2
10284 ; SSE2-NEXT: por %xmm3, %xmm2
10285 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10288 ; SSE4-LABEL: test180:
10289 ; SSE4: # BB#0: # %entry
10290 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10291 ; SSE4-NEXT: movdqa %xmm1, %xmm3
10292 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm3
10293 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
10294 ; SSE4-NEXT: pxor %xmm3, %xmm0
10295 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
10296 ; SSE4-NEXT: movapd %xmm1, %xmm0
10299 ; AVX1-LABEL: test180:
10300 ; AVX1: # BB#0: # %entry
10301 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
10302 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10303 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10304 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10307 ; AVX2-LABEL: test180:
10308 ; AVX2: # BB#0: # %entry
10309 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
10310 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10311 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2
10312 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10315 ; AVX512BW-LABEL: test180:
10316 ; AVX512BW: # BB#0: # %entry
10317 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
10318 ; AVX512BW-NEXT: retq
10320 %cmp = icmp sge <2 x i64> %a, %b
10321 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10325 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
10326 ; SSE2-LABEL: test181:
10327 ; SSE2: # BB#0: # %entry
10328 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10329 ; SSE2-NEXT: movdqa %xmm0, %xmm3
10330 ; SSE2-NEXT: pxor %xmm2, %xmm3
10331 ; SSE2-NEXT: pxor %xmm1, %xmm2
10332 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10333 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10334 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10335 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10336 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10337 ; SSE2-NEXT: pand %xmm5, %xmm2
10338 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10339 ; SSE2-NEXT: por %xmm2, %xmm3
10340 ; SSE2-NEXT: pand %xmm3, %xmm0
10341 ; SSE2-NEXT: pandn %xmm1, %xmm3
10342 ; SSE2-NEXT: por %xmm3, %xmm0
10345 ; SSE4-LABEL: test181:
10346 ; SSE4: # BB#0: # %entry
10347 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10348 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10349 ; SSE4-NEXT: movdqa %xmm2, %xmm3
10350 ; SSE4-NEXT: pxor %xmm0, %xmm3
10351 ; SSE4-NEXT: pxor %xmm1, %xmm0
10352 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
10353 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
10354 ; SSE4-NEXT: movapd %xmm1, %xmm0
10357 ; AVX1-LABEL: test181:
10358 ; AVX1: # BB#0: # %entry
10359 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10360 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
10361 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2
10362 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10363 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10366 ; AVX2-LABEL: test181:
10367 ; AVX2: # BB#0: # %entry
10368 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10369 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3
10370 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2
10371 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10372 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10375 ; AVX512BW-LABEL: test181:
10376 ; AVX512BW: # BB#0: # %entry
10377 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0
10378 ; AVX512BW-NEXT: retq
10380 %cmp = icmp ult <2 x i64> %a, %b
10381 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10385 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
10386 ; SSE2-LABEL: test182:
10387 ; SSE2: # BB#0: # %entry
10388 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10389 ; SSE2-NEXT: movdqa %xmm1, %xmm3
10390 ; SSE2-NEXT: pxor %xmm2, %xmm3
10391 ; SSE2-NEXT: pxor %xmm0, %xmm2
10392 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10393 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10394 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10395 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10396 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10397 ; SSE2-NEXT: pand %xmm5, %xmm2
10398 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10399 ; SSE2-NEXT: por %xmm2, %xmm3
10400 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
10401 ; SSE2-NEXT: pxor %xmm3, %xmm2
10402 ; SSE2-NEXT: pandn %xmm0, %xmm3
10403 ; SSE2-NEXT: pandn %xmm1, %xmm2
10404 ; SSE2-NEXT: por %xmm3, %xmm2
10405 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10408 ; SSE4-LABEL: test182:
10409 ; SSE4: # BB#0: # %entry
10410 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10411 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10412 ; SSE4-NEXT: movdqa %xmm1, %xmm0
10413 ; SSE4-NEXT: pxor %xmm3, %xmm0
10414 ; SSE4-NEXT: pxor %xmm2, %xmm3
10415 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3
10416 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
10417 ; SSE4-NEXT: pxor %xmm3, %xmm0
10418 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
10419 ; SSE4-NEXT: movapd %xmm1, %xmm0
10422 ; AVX1-LABEL: test182:
10423 ; AVX1: # BB#0: # %entry
10424 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10425 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
10426 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
10427 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10428 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10429 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10430 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10433 ; AVX2-LABEL: test182:
10434 ; AVX2: # BB#0: # %entry
10435 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10436 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3
10437 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2
10438 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10439 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10440 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2
10441 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10444 ; AVX512BW-LABEL: test182:
10445 ; AVX512BW: # BB#0: # %entry
10446 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0
10447 ; AVX512BW-NEXT: retq
10449 %cmp = icmp ule <2 x i64> %a, %b
10450 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10454 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
10455 ; SSE2-LABEL: test183:
10456 ; SSE2: # BB#0: # %entry
10457 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10458 ; SSE2-NEXT: movdqa %xmm1, %xmm3
10459 ; SSE2-NEXT: pxor %xmm2, %xmm3
10460 ; SSE2-NEXT: pxor %xmm0, %xmm2
10461 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10462 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10463 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10464 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10465 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10466 ; SSE2-NEXT: pand %xmm5, %xmm2
10467 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10468 ; SSE2-NEXT: por %xmm2, %xmm3
10469 ; SSE2-NEXT: pand %xmm3, %xmm0
10470 ; SSE2-NEXT: pandn %xmm1, %xmm3
10471 ; SSE2-NEXT: por %xmm3, %xmm0
10474 ; SSE4-LABEL: test183:
10475 ; SSE4: # BB#0: # %entry
10476 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10477 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10478 ; SSE4-NEXT: movdqa %xmm1, %xmm3
10479 ; SSE4-NEXT: pxor %xmm0, %xmm3
10480 ; SSE4-NEXT: pxor %xmm2, %xmm0
10481 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
10482 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
10483 ; SSE4-NEXT: movapd %xmm1, %xmm0
10486 ; AVX1-LABEL: test183:
10487 ; AVX1: # BB#0: # %entry
10488 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10489 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
10490 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
10491 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10492 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10495 ; AVX2-LABEL: test183:
10496 ; AVX2: # BB#0: # %entry
10497 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10498 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3
10499 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2
10500 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10501 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10504 ; AVX512BW-LABEL: test183:
10505 ; AVX512BW: # BB#0: # %entry
10506 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
10507 ; AVX512BW-NEXT: retq
10509 %cmp = icmp ugt <2 x i64> %a, %b
10510 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10514 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
10515 ; SSE2-LABEL: test184:
10516 ; SSE2: # BB#0: # %entry
10517 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10518 ; SSE2-NEXT: movdqa %xmm0, %xmm3
10519 ; SSE2-NEXT: pxor %xmm2, %xmm3
10520 ; SSE2-NEXT: pxor %xmm1, %xmm2
10521 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10522 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10523 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10524 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10525 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10526 ; SSE2-NEXT: pand %xmm5, %xmm2
10527 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10528 ; SSE2-NEXT: por %xmm2, %xmm3
10529 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
10530 ; SSE2-NEXT: pxor %xmm3, %xmm2
10531 ; SSE2-NEXT: pandn %xmm0, %xmm3
10532 ; SSE2-NEXT: pandn %xmm1, %xmm2
10533 ; SSE2-NEXT: por %xmm3, %xmm2
10534 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10537 ; SSE4-LABEL: test184:
10538 ; SSE4: # BB#0: # %entry
10539 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10540 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10541 ; SSE4-NEXT: pxor %xmm3, %xmm0
10542 ; SSE4-NEXT: pxor %xmm1, %xmm3
10543 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3
10544 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
10545 ; SSE4-NEXT: pxor %xmm3, %xmm0
10546 ; SSE4-NEXT: blendvpd %xmm0, %xmm2, %xmm1
10547 ; SSE4-NEXT: movapd %xmm1, %xmm0
10550 ; AVX1-LABEL: test184:
10551 ; AVX1: # BB#0: # %entry
10552 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10553 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
10554 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2
10555 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10556 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10557 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10558 ; AVX1-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10561 ; AVX2-LABEL: test184:
10562 ; AVX2: # BB#0: # %entry
10563 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10564 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3
10565 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2
10566 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10567 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10568 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2
10569 ; AVX2-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10572 ; AVX512BW-LABEL: test184:
10573 ; AVX512BW: # BB#0: # %entry
10574 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
10575 ; AVX512BW-NEXT: retq
10577 %cmp = icmp uge <2 x i64> %a, %b
10578 %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10582 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
10583 ; SSE2-LABEL: test185:
10584 ; SSE2: # BB#0: # %entry
10585 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10586 ; SSE2-NEXT: movdqa %xmm0, %xmm3
10587 ; SSE2-NEXT: pxor %xmm2, %xmm3
10588 ; SSE2-NEXT: pxor %xmm1, %xmm2
10589 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10590 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10591 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10592 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10593 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
10594 ; SSE2-NEXT: pand %xmm5, %xmm3
10595 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
10596 ; SSE2-NEXT: por %xmm3, %xmm2
10597 ; SSE2-NEXT: pand %xmm2, %xmm1
10598 ; SSE2-NEXT: pandn %xmm0, %xmm2
10599 ; SSE2-NEXT: por %xmm1, %xmm2
10600 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10603 ; SSE4-LABEL: test185:
10604 ; SSE4: # BB#0: # %entry
10605 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10606 ; SSE4-NEXT: movdqa %xmm1, %xmm0
10607 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm0
10608 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm2
10609 ; SSE4-NEXT: movapd %xmm2, %xmm0
10612 ; AVX1-LABEL: test185:
10613 ; AVX1: # BB#0: # %entry
10614 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
10615 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10618 ; AVX2-LABEL: test185:
10619 ; AVX2: # BB#0: # %entry
10620 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
10621 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10624 ; AVX512BW-LABEL: test185:
10625 ; AVX512BW: # BB#0: # %entry
10626 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
10627 ; AVX512BW-NEXT: retq
10629 %cmp = icmp slt <2 x i64> %a, %b
10630 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10634 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
10635 ; SSE2-LABEL: test186:
10636 ; SSE2: # BB#0: # %entry
10637 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10638 ; SSE2-NEXT: movdqa %xmm1, %xmm3
10639 ; SSE2-NEXT: pxor %xmm2, %xmm3
10640 ; SSE2-NEXT: pxor %xmm0, %xmm2
10641 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10642 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10643 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10644 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10645 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10646 ; SSE2-NEXT: pand %xmm5, %xmm2
10647 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10648 ; SSE2-NEXT: por %xmm2, %xmm3
10649 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
10650 ; SSE2-NEXT: pxor %xmm3, %xmm2
10651 ; SSE2-NEXT: pandn %xmm1, %xmm3
10652 ; SSE2-NEXT: pandn %xmm0, %xmm2
10653 ; SSE2-NEXT: por %xmm3, %xmm2
10654 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10657 ; SSE4-LABEL: test186:
10658 ; SSE4: # BB#0: # %entry
10659 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10660 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
10661 ; SSE4-NEXT: pcmpeqd %xmm3, %xmm3
10662 ; SSE4-NEXT: pxor %xmm3, %xmm0
10663 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm2
10664 ; SSE4-NEXT: movapd %xmm2, %xmm0
10667 ; AVX1-LABEL: test186:
10668 ; AVX1: # BB#0: # %entry
10669 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
10670 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10671 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10672 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10675 ; AVX2-LABEL: test186:
10676 ; AVX2: # BB#0: # %entry
10677 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
10678 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10679 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2
10680 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10683 ; AVX512BW-LABEL: test186:
10684 ; AVX512BW: # BB#0: # %entry
10685 ; AVX512BW-NEXT: vpmaxsq %xmm1, %xmm0, %xmm0
10686 ; AVX512BW-NEXT: retq
10688 %cmp = icmp sle <2 x i64> %a, %b
10689 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10693 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
10694 ; SSE2-LABEL: test187:
10695 ; SSE2: # BB#0: # %entry
10696 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10697 ; SSE2-NEXT: movdqa %xmm1, %xmm3
10698 ; SSE2-NEXT: pxor %xmm2, %xmm3
10699 ; SSE2-NEXT: pxor %xmm0, %xmm2
10700 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10701 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10702 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10703 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10704 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
10705 ; SSE2-NEXT: pand %xmm5, %xmm3
10706 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
10707 ; SSE2-NEXT: por %xmm3, %xmm2
10708 ; SSE2-NEXT: pand %xmm2, %xmm1
10709 ; SSE2-NEXT: pandn %xmm0, %xmm2
10710 ; SSE2-NEXT: por %xmm1, %xmm2
10711 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10714 ; SSE4-LABEL: test187:
10715 ; SSE4: # BB#0: # %entry
10716 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10717 ; SSE4-NEXT: pcmpgtq %xmm1, %xmm0
10718 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm2
10719 ; SSE4-NEXT: movapd %xmm2, %xmm0
10722 ; AVX1-LABEL: test187:
10723 ; AVX1: # BB#0: # %entry
10724 ; AVX1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
10725 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10728 ; AVX2-LABEL: test187:
10729 ; AVX2: # BB#0: # %entry
10730 ; AVX2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm2
10731 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10734 ; AVX512BW-LABEL: test187:
10735 ; AVX512BW: # BB#0: # %entry
10736 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0
10737 ; AVX512BW-NEXT: retq
10739 %cmp = icmp sgt <2 x i64> %a, %b
10740 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10744 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
10745 ; SSE2-LABEL: test188:
10746 ; SSE2: # BB#0: # %entry
10747 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10748 ; SSE2-NEXT: movdqa %xmm0, %xmm3
10749 ; SSE2-NEXT: pxor %xmm2, %xmm3
10750 ; SSE2-NEXT: pxor %xmm1, %xmm2
10751 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10752 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10753 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10754 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10755 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10756 ; SSE2-NEXT: pand %xmm5, %xmm2
10757 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10758 ; SSE2-NEXT: por %xmm2, %xmm3
10759 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
10760 ; SSE2-NEXT: pxor %xmm3, %xmm2
10761 ; SSE2-NEXT: pandn %xmm1, %xmm3
10762 ; SSE2-NEXT: pandn %xmm0, %xmm2
10763 ; SSE2-NEXT: por %xmm3, %xmm2
10764 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10767 ; SSE4-LABEL: test188:
10768 ; SSE4: # BB#0: # %entry
10769 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10770 ; SSE4-NEXT: movdqa %xmm1, %xmm3
10771 ; SSE4-NEXT: pcmpgtq %xmm2, %xmm3
10772 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
10773 ; SSE4-NEXT: pxor %xmm3, %xmm0
10774 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm2
10775 ; SSE4-NEXT: movapd %xmm2, %xmm0
10778 ; AVX1-LABEL: test188:
10779 ; AVX1: # BB#0: # %entry
10780 ; AVX1-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
10781 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10782 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10783 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10786 ; AVX2-LABEL: test188:
10787 ; AVX2: # BB#0: # %entry
10788 ; AVX2-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm2
10789 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10790 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2
10791 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10794 ; AVX512BW-LABEL: test188:
10795 ; AVX512BW: # BB#0: # %entry
10796 ; AVX512BW-NEXT: vpminsq %xmm1, %xmm0, %xmm0
10797 ; AVX512BW-NEXT: retq
10799 %cmp = icmp sge <2 x i64> %a, %b
10800 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10804 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
10805 ; SSE2-LABEL: test189:
10806 ; SSE2: # BB#0: # %entry
10807 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10808 ; SSE2-NEXT: movdqa %xmm0, %xmm3
10809 ; SSE2-NEXT: pxor %xmm2, %xmm3
10810 ; SSE2-NEXT: pxor %xmm1, %xmm2
10811 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10812 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10813 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10814 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10815 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
10816 ; SSE2-NEXT: pand %xmm5, %xmm3
10817 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
10818 ; SSE2-NEXT: por %xmm3, %xmm2
10819 ; SSE2-NEXT: pand %xmm2, %xmm1
10820 ; SSE2-NEXT: pandn %xmm0, %xmm2
10821 ; SSE2-NEXT: por %xmm1, %xmm2
10822 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10825 ; SSE4-LABEL: test189:
10826 ; SSE4: # BB#0: # %entry
10827 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10828 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10829 ; SSE4-NEXT: movdqa %xmm2, %xmm3
10830 ; SSE4-NEXT: pxor %xmm0, %xmm3
10831 ; SSE4-NEXT: pxor %xmm1, %xmm0
10832 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
10833 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm2
10834 ; SSE4-NEXT: movapd %xmm2, %xmm0
10837 ; AVX1-LABEL: test189:
10838 ; AVX1: # BB#0: # %entry
10839 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10840 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
10841 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2
10842 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10843 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10846 ; AVX2-LABEL: test189:
10847 ; AVX2: # BB#0: # %entry
10848 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10849 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3
10850 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2
10851 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10852 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10855 ; AVX512BW-LABEL: test189:
10856 ; AVX512BW: # BB#0: # %entry
10857 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
10858 ; AVX512BW-NEXT: retq
10860 %cmp = icmp ult <2 x i64> %a, %b
10861 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10865 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
10866 ; SSE2-LABEL: test190:
10867 ; SSE2: # BB#0: # %entry
10868 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10869 ; SSE2-NEXT: movdqa %xmm1, %xmm3
10870 ; SSE2-NEXT: pxor %xmm2, %xmm3
10871 ; SSE2-NEXT: pxor %xmm0, %xmm2
10872 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10873 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10874 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10875 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10876 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10877 ; SSE2-NEXT: pand %xmm5, %xmm2
10878 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10879 ; SSE2-NEXT: por %xmm2, %xmm3
10880 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
10881 ; SSE2-NEXT: pxor %xmm3, %xmm2
10882 ; SSE2-NEXT: pandn %xmm1, %xmm3
10883 ; SSE2-NEXT: pandn %xmm0, %xmm2
10884 ; SSE2-NEXT: por %xmm3, %xmm2
10885 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10888 ; SSE4-LABEL: test190:
10889 ; SSE4: # BB#0: # %entry
10890 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10891 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10892 ; SSE4-NEXT: movdqa %xmm1, %xmm0
10893 ; SSE4-NEXT: pxor %xmm3, %xmm0
10894 ; SSE4-NEXT: pxor %xmm2, %xmm3
10895 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3
10896 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
10897 ; SSE4-NEXT: pxor %xmm3, %xmm0
10898 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm2
10899 ; SSE4-NEXT: movapd %xmm2, %xmm0
10902 ; AVX1-LABEL: test190:
10903 ; AVX1: # BB#0: # %entry
10904 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10905 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
10906 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
10907 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10908 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10909 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
10910 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10913 ; AVX2-LABEL: test190:
10914 ; AVX2: # BB#0: # %entry
10915 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10916 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3
10917 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2
10918 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10919 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
10920 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2
10921 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10924 ; AVX512BW-LABEL: test190:
10925 ; AVX512BW: # BB#0: # %entry
10926 ; AVX512BW-NEXT: vpmaxuq %xmm1, %xmm0, %xmm0
10927 ; AVX512BW-NEXT: retq
10929 %cmp = icmp ule <2 x i64> %a, %b
10930 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10934 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
10935 ; SSE2-LABEL: test191:
10936 ; SSE2: # BB#0: # %entry
10937 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10938 ; SSE2-NEXT: movdqa %xmm1, %xmm3
10939 ; SSE2-NEXT: pxor %xmm2, %xmm3
10940 ; SSE2-NEXT: pxor %xmm0, %xmm2
10941 ; SSE2-NEXT: movdqa %xmm2, %xmm4
10942 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
10943 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10944 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
10945 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
10946 ; SSE2-NEXT: pand %xmm5, %xmm3
10947 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
10948 ; SSE2-NEXT: por %xmm3, %xmm2
10949 ; SSE2-NEXT: pand %xmm2, %xmm1
10950 ; SSE2-NEXT: pandn %xmm0, %xmm2
10951 ; SSE2-NEXT: por %xmm1, %xmm2
10952 ; SSE2-NEXT: movdqa %xmm2, %xmm0
10955 ; SSE4-LABEL: test191:
10956 ; SSE4: # BB#0: # %entry
10957 ; SSE4-NEXT: movdqa %xmm0, %xmm2
10958 ; SSE4-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10959 ; SSE4-NEXT: movdqa %xmm1, %xmm3
10960 ; SSE4-NEXT: pxor %xmm0, %xmm3
10961 ; SSE4-NEXT: pxor %xmm2, %xmm0
10962 ; SSE4-NEXT: pcmpgtq %xmm3, %xmm0
10963 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm2
10964 ; SSE4-NEXT: movapd %xmm2, %xmm0
10967 ; AVX1-LABEL: test191:
10968 ; AVX1: # BB#0: # %entry
10969 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10970 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm3
10971 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm2
10972 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10973 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10976 ; AVX2-LABEL: test191:
10977 ; AVX2: # BB#0: # %entry
10978 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10979 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm3
10980 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm2
10981 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
10982 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10985 ; AVX512BW-LABEL: test191:
10986 ; AVX512BW: # BB#0: # %entry
10987 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0
10988 ; AVX512BW-NEXT: retq
10990 %cmp = icmp ugt <2 x i64> %a, %b
10991 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10995 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
10996 ; SSE2-LABEL: test192:
10997 ; SSE2: # BB#0: # %entry
10998 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10999 ; SSE2-NEXT: movdqa %xmm0, %xmm3
11000 ; SSE2-NEXT: pxor %xmm2, %xmm3
11001 ; SSE2-NEXT: pxor %xmm1, %xmm2
11002 ; SSE2-NEXT: movdqa %xmm2, %xmm4
11003 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
11004 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
11005 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
11006 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
11007 ; SSE2-NEXT: pand %xmm5, %xmm2
11008 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
11009 ; SSE2-NEXT: por %xmm2, %xmm3
11010 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
11011 ; SSE2-NEXT: pxor %xmm3, %xmm2
11012 ; SSE2-NEXT: pandn %xmm1, %xmm3
11013 ; SSE2-NEXT: pandn %xmm0, %xmm2
11014 ; SSE2-NEXT: por %xmm3, %xmm2
11015 ; SSE2-NEXT: movdqa %xmm2, %xmm0
11018 ; SSE4-LABEL: test192:
11019 ; SSE4: # BB#0: # %entry
11020 ; SSE4-NEXT: movdqa %xmm0, %xmm2
11021 ; SSE4-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
11022 ; SSE4-NEXT: pxor %xmm3, %xmm0
11023 ; SSE4-NEXT: pxor %xmm1, %xmm3
11024 ; SSE4-NEXT: pcmpgtq %xmm0, %xmm3
11025 ; SSE4-NEXT: pcmpeqd %xmm0, %xmm0
11026 ; SSE4-NEXT: pxor %xmm3, %xmm0
11027 ; SSE4-NEXT: blendvpd %xmm0, %xmm1, %xmm2
11028 ; SSE4-NEXT: movapd %xmm2, %xmm0
11031 ; AVX1-LABEL: test192:
11032 ; AVX1: # BB#0: # %entry
11033 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
11034 ; AVX1-NEXT: vpxor %xmm2, %xmm0, %xmm3
11035 ; AVX1-NEXT: vpxor %xmm2, %xmm1, %xmm2
11036 ; AVX1-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
11037 ; AVX1-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
11038 ; AVX1-NEXT: vpxor %xmm3, %xmm2, %xmm2
11039 ; AVX1-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
11042 ; AVX2-LABEL: test192:
11043 ; AVX2: # BB#0: # %entry
11044 ; AVX2-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
11045 ; AVX2-NEXT: vpxor %xmm2, %xmm0, %xmm3
11046 ; AVX2-NEXT: vpxor %xmm2, %xmm1, %xmm2
11047 ; AVX2-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
11048 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
11049 ; AVX2-NEXT: vpxor %xmm3, %xmm2, %xmm2
11050 ; AVX2-NEXT: vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
11053 ; AVX512BW-LABEL: test192:
11054 ; AVX512BW: # BB#0: # %entry
11055 ; AVX512BW-NEXT: vpminuq %xmm1, %xmm0, %xmm0
11056 ; AVX512BW-NEXT: retq
11058 %cmp = icmp uge <2 x i64> %a, %b
11059 %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a