4bbe9349bb64dffb5422125b8a4d77da636a7dad
[oota-llvm.git] / test / CodeGen / X86 / vselect-minmax.ll
1 ; RUN: llc -march=x86-64 -mcpu=core2 < %s | FileCheck %s -check-prefix=SSE2
2 ; RUN: llc -march=x86-64 -mcpu=corei7 < %s | FileCheck %s -check-prefix=SSE4
3 ; RUN: llc -march=x86-64 -mcpu=corei7-avx < %s | FileCheck %s -check-prefix=AVX1
4 ; RUN: llc -march=x86-64 -mcpu=core-avx2 -mattr=+avx2 < %s | FileCheck %s -check-prefix=AVX2
5 ; RUN: llc -march=x86-64 -mcpu=knl < %s | FileCheck %s  -check-prefix=AVX2 -check-prefix=AVX512F
6 ; RUN: llc -march=x86-64 -mcpu=skx < %s | FileCheck %s  -check-prefix=AVX512BW -check-prefix=AVX512VL -check-prefix=AVX512F
7
8 define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) {
9 entry:
10   %cmp = icmp slt <16 x i8> %a, %b
11   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
12   ret <16 x i8> %sel
13
14 ; SSE4-LABEL: test1:
15 ; SSE4: pminsb
16
17 ; AVX1-LABEL: test1:
18 ; AVX1: vpminsb
19
20 ; AVX2-LABEL: test1:
21 ; AVX2: vpminsb
22
23 ; AVX512VL-LABEL: test1:
24 ; AVX512VL: vpminsb
25 }
26
27 define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
28 entry:
29   %cmp = icmp sle <16 x i8> %a, %b
30   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
31   ret <16 x i8> %sel
32
33 ; SSE4-LABEL: test2:
34 ; SSE4: pminsb
35
36 ; AVX1-LABEL: test2:
37 ; AVX1: vpminsb
38
39 ; AVX2-LABEL: test2:
40 ; AVX2: vpminsb
41
42 ; AVX512VL-LABEL: test2:
43 ; AVX512VL: vpminsb
44 }
45
46 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
47 entry:
48   %cmp = icmp sgt <16 x i8> %a, %b
49   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
50   ret <16 x i8> %sel
51
52 ; SSE4-LABEL: test3:
53 ; SSE4: pmaxsb
54
55 ; AVX1-LABEL: test3:
56 ; AVX1: vpmaxsb
57
58 ; AVX2-LABEL: test3:
59 ; AVX2: vpmaxsb
60
61 ; AVX512VL-LABEL: test3:
62 ; AVX512VL: vpmaxsb
63 }
64
65 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
66 entry:
67   %cmp = icmp sge <16 x i8> %a, %b
68   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
69   ret <16 x i8> %sel
70
71 ; SSE4-LABEL: test4:
72 ; SSE4: pmaxsb
73
74 ; AVX1-LABEL: test4:
75 ; AVX1: vpmaxsb
76
77 ; AVX2-LABEL: test4:
78 ; AVX2: vpmaxsb
79
80 ; AVX512VL-LABEL: test4:
81 ; AVX512VL: vpmaxsb
82 }
83
84 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
85 entry:
86   %cmp = icmp ult <16 x i8> %a, %b
87   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
88   ret <16 x i8> %sel
89
90 ; SSE2-LABEL: test5:
91 ; SSE2: pminub
92
93 ; AVX1-LABEL: test5:
94 ; AVX1: vpminub
95
96 ; AVX2-LABEL: test5:
97 ; AVX2: vpminub
98
99 ; AVX512VL-LABEL: test5:
100 ; AVX512VL: vpminub 
101 }
102
103 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
104 entry:
105   %cmp = icmp ule <16 x i8> %a, %b
106   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
107   ret <16 x i8> %sel
108
109 ; SSE2-LABEL: test6:
110 ; SSE2: pminub
111
112 ; AVX1-LABEL: test6:
113 ; AVX1: vpminub
114
115 ; AVX2-LABEL: test6:
116 ; AVX2: vpminub
117
118 ; AVX512VL-LABEL: test6:
119 ; AVX512VL: vpminub
120 }
121
122 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
123 entry:
124   %cmp = icmp ugt <16 x i8> %a, %b
125   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
126   ret <16 x i8> %sel
127
128 ; SSE2-LABEL: test7:
129 ; SSE2: pmaxub
130
131 ; AVX1-LABEL: test7:
132 ; AVX1: vpmaxub
133
134 ; AVX2-LABEL: test7:
135 ; AVX2: vpmaxub
136
137 ; AVX512VL-LABEL: test7:
138 ; AVX512VL: vpmaxub
139 }
140
141 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
142 entry:
143   %cmp = icmp uge <16 x i8> %a, %b
144   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
145   ret <16 x i8> %sel
146
147 ; SSE2-LABEL: test8:
148 ; SSE2: pmaxub
149
150 ; AVX1-LABEL: test8:
151 ; AVX1: vpmaxub
152
153 ; AVX2-LABEL: test8:
154 ; AVX2: vpmaxub
155
156 ; AVX512VL-LABEL: test8:
157 ; AVX512VL: vpmaxub
158 }
159
160 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
161 entry:
162   %cmp = icmp slt <8 x i16> %a, %b
163   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
164   ret <8 x i16> %sel
165
166 ; SSE2-LABEL: test9:
167 ; SSE2: pminsw
168
169 ; AVX1-LABEL: test9:
170 ; AVX1: vpminsw
171
172 ; AVX2-LABEL: test9:
173 ; AVX2: vpminsw
174
175 ; AVX512VL-LABEL: test9:
176 ; AVX512VL: vpminsw 
177 }
178
179 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
180 entry:
181   %cmp = icmp sle <8 x i16> %a, %b
182   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
183   ret <8 x i16> %sel
184
185 ; SSE2-LABEL: test10:
186 ; SSE2: pminsw
187
188 ; AVX1-LABEL: test10:
189 ; AVX1: vpminsw
190
191 ; AVX2-LABEL: test10:
192 ; AVX2: vpminsw
193
194 ; AVX512VL-LABEL: test10:
195 ; AVX512VL: vpminsw
196 }
197
198 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
199 entry:
200   %cmp = icmp sgt <8 x i16> %a, %b
201   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
202   ret <8 x i16> %sel
203
204 ; SSE2-LABEL: test11:
205 ; SSE2: pmaxsw
206
207 ; AVX1-LABEL: test11:
208 ; AVX1: vpmaxsw
209
210 ; AVX2-LABEL: test11:
211 ; AVX2: vpmaxsw
212
213 ; AVX512VL-LABEL: test11:
214 ; AVX512VL: vpmaxsw
215 }
216
217 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
218 entry:
219   %cmp = icmp sge <8 x i16> %a, %b
220   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
221   ret <8 x i16> %sel
222
223 ; SSE2-LABEL: test12:
224 ; SSE2: pmaxsw
225
226 ; AVX1-LABEL: test12:
227 ; AVX1: vpmaxsw
228
229 ; AVX2-LABEL: test12:
230 ; AVX2: vpmaxsw
231
232 ; AVX512VL-LABEL: test12:
233 ; AVX512VL: vpmaxsw
234 }
235
236 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
237 entry:
238   %cmp = icmp ult <8 x i16> %a, %b
239   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
240   ret <8 x i16> %sel
241
242 ; SSE4-LABEL: test13:
243 ; SSE4: pminuw
244
245 ; AVX1-LABEL: test13:
246 ; AVX1: vpminuw
247
248 ; AVX2-LABEL: test13:
249 ; AVX2: vpminuw
250
251 ; AVX512VL-LABEL: test13:
252 ; AVX512VL: vpminuw
253 }
254
255 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
256 entry:
257   %cmp = icmp ule <8 x i16> %a, %b
258   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
259   ret <8 x i16> %sel
260
261 ; SSE4-LABEL: test14:
262 ; SSE4: pminuw
263
264 ; AVX1-LABEL: test14:
265 ; AVX1: vpminuw
266
267 ; AVX2-LABEL: test14:
268 ; AVX2: vpminuw
269
270 ; AVX512VL-LABEL: test14:
271 ; AVX512VL: vpminuw 
272 }
273
274 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
275 entry:
276   %cmp = icmp ugt <8 x i16> %a, %b
277   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
278   ret <8 x i16> %sel
279
280 ; SSE4-LABEL: test15:
281 ; SSE4: pmaxuw
282
283 ; AVX1-LABEL: test15:
284 ; AVX1: vpmaxuw
285
286 ; AVX2-LABEL: test15:
287 ; AVX2: vpmaxuw
288
289 ; AVX512VL-LABEL: test15:
290 ; AVX512VL: vpmaxuw
291 }
292
293 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
294 entry:
295   %cmp = icmp uge <8 x i16> %a, %b
296   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
297   ret <8 x i16> %sel
298
299 ; SSE4-LABEL: test16:
300 ; SSE4: pmaxuw
301
302 ; AVX1-LABEL: test16:
303 ; AVX1: vpmaxuw
304
305 ; AVX2-LABEL: test16:
306 ; AVX2: vpmaxuw
307
308 ; AVX512VL-LABEL: test16:
309 ; AVX512VL: vpmaxuw
310 }
311
312 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
313 entry:
314   %cmp = icmp slt <4 x i32> %a, %b
315   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
316   ret <4 x i32> %sel
317
318 ; SSE4-LABEL: test17:
319 ; SSE4: pminsd
320
321 ; AVX1-LABEL: test17:
322 ; AVX1: vpminsd
323
324 ; AVX2-LABEL: test17:
325 ; AVX2: vpminsd
326
327 ; AVX512VL-LABEL: test17:
328 ; AVX512VL: vpminsd
329 }
330
331 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
332 entry:
333   %cmp = icmp sle <4 x i32> %a, %b
334   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
335   ret <4 x i32> %sel
336
337 ; SSE4-LABEL: test18:
338 ; SSE4: pminsd
339
340 ; AVX1-LABEL: test18:
341 ; AVX1: vpminsd
342
343 ; AVX2-LABEL: test18:
344 ; AVX2: vpminsd
345
346 ; AVX512VL-LABEL: test18:
347 ; AVX512VL: vpminsd
348 }
349
350 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
351 entry:
352   %cmp = icmp sgt <4 x i32> %a, %b
353   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
354   ret <4 x i32> %sel
355
356 ; SSE4-LABEL: test19:
357 ; SSE4: pmaxsd
358
359 ; AVX1-LABEL: test19:
360 ; AVX1: vpmaxsd
361
362 ; AVX2-LABEL: test19:
363 ; AVX2: vpmaxsd
364
365 ; AVX512VL-LABEL: test19:
366 ; AVX512VL: vpmaxsd
367 }
368
369 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
370 entry:
371   %cmp = icmp sge <4 x i32> %a, %b
372   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
373   ret <4 x i32> %sel
374
375 ; SSE4-LABEL: test20:
376 ; SSE4: pmaxsd
377
378 ; AVX1-LABEL: test20:
379 ; AVX1: vpmaxsd
380
381 ; AVX2-LABEL: test20:
382 ; AVX2: vpmaxsd
383
384 ; AVX512VL-LABEL: test20:
385 ; AVX512VL: vpmaxsd
386 }
387
388 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
389 entry:
390   %cmp = icmp ult <4 x i32> %a, %b
391   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
392   ret <4 x i32> %sel
393
394 ; SSE4-LABEL: test21:
395 ; SSE4: pminud
396
397 ; AVX1-LABEL: test21:
398 ; AVX1: vpminud
399
400 ; AVX2-LABEL: test21:
401 ; AVX2: vpminud
402
403 ; AVX512VL-LABEL: test21:
404 ; AVX512VL: vpminud
405 }
406
407 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
408 entry:
409   %cmp = icmp ule <4 x i32> %a, %b
410   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
411   ret <4 x i32> %sel
412
413 ; SSE4-LABEL: test22:
414 ; SSE4: pminud
415
416 ; AVX1-LABEL: test22:
417 ; AVX1: vpminud
418
419 ; AVX2-LABEL: test22:
420 ; AVX2: vpminud
421
422 ; AVX512VL-LABEL: test22:
423 ; AVX512VL: vpminud
424 }
425
426 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
427 entry:
428   %cmp = icmp ugt <4 x i32> %a, %b
429   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
430   ret <4 x i32> %sel
431
432 ; SSE4-LABEL: test23:
433 ; SSE4: pmaxud
434
435 ; AVX1-LABEL: test23:
436 ; AVX1: vpmaxud
437
438 ; AVX2-LABEL: test23:
439 ; AVX2: vpmaxud
440
441 ; AVX512VL-LABEL: test23:
442 ; AVX512VL: vpmaxud
443 }
444
445 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
446 entry:
447   %cmp = icmp uge <4 x i32> %a, %b
448   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
449   ret <4 x i32> %sel
450
451 ; SSE4-LABEL: test24:
452 ; SSE4: pmaxud
453
454 ; AVX1-LABEL: test24:
455 ; AVX1: vpmaxud
456
457 ; AVX2-LABEL: test24:
458 ; AVX2: vpmaxud
459
460 ; AVX512VL-LABEL: test24:
461 ; AVX512VL: vpmaxud
462 }
463
464 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
465 entry:
466   %cmp = icmp slt <32 x i8> %a, %b
467   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
468   ret <32 x i8> %sel
469
470 ; AVX2-LABEL: test25:
471 ; AVX2: vpminsb
472
473 ; AVX512VL-LABEL: test25:
474 ; AVX512VL: vpminsb
475 }
476
477 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
478 entry:
479   %cmp = icmp sle <32 x i8> %a, %b
480   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
481   ret <32 x i8> %sel
482
483 ; AVX2-LABEL: test26:
484 ; AVX2: vpminsb
485
486 ; AVX512VL-LABEL: test26:
487 ; AVX512VL: vpminsb
488 }
489
490 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
491 entry:
492   %cmp = icmp sgt <32 x i8> %a, %b
493   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
494   ret <32 x i8> %sel
495
496 ; AVX2-LABEL: test27:
497 ; AVX2: vpmaxsb
498
499 ; AVX512VL-LABEL: test27:
500 ; AVX512VL: vpmaxsb
501 }
502
503 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
504 entry:
505   %cmp = icmp sge <32 x i8> %a, %b
506   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
507   ret <32 x i8> %sel
508
509 ; AVX2-LABEL: test28:
510 ; AVX2: vpmaxsb
511
512 ; AVX512VL-LABEL: test28:
513 ; AVX512VL: vpmaxsb
514 }
515
516 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
517 entry:
518   %cmp = icmp ult <32 x i8> %a, %b
519   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
520   ret <32 x i8> %sel
521
522 ; AVX2-LABEL: test29:
523 ; AVX2: vpminub
524
525 ; AVX512VL-LABEL: test29:
526 ; AVX512VL: vpminub
527 }
528
529 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
530 entry:
531   %cmp = icmp ule <32 x i8> %a, %b
532   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
533   ret <32 x i8> %sel
534
535 ; AVX2-LABEL: test30:
536 ; AVX2: vpminub
537
538 ; AVX512VL-LABEL: test30:
539 ; AVX512VL: vpminub
540 }
541
542 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
543 entry:
544   %cmp = icmp ugt <32 x i8> %a, %b
545   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
546   ret <32 x i8> %sel
547
548 ; AVX2-LABEL: test31:
549 ; AVX2: vpmaxub
550
551 ; AVX512VL-LABEL: test31:
552 ; AVX512VL: vpmaxub
553 }
554
555 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
556 entry:
557   %cmp = icmp uge <32 x i8> %a, %b
558   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
559   ret <32 x i8> %sel
560
561 ; AVX2-LABEL: test32:
562 ; AVX2: vpmaxub
563
564 ; AVX512VL-LABEL: test32:
565 ; AVX512VL: vpmaxub
566 }
567
568 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
569 entry:
570   %cmp = icmp slt <16 x i16> %a, %b
571   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
572   ret <16 x i16> %sel
573
574 ; AVX2-LABEL: test33:
575 ; AVX2: vpminsw
576
577 ; AVX512VL-LABEL: test33:
578 ; AVX512VL: vpminsw 
579 }
580
581 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
582 entry:
583   %cmp = icmp sle <16 x i16> %a, %b
584   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
585   ret <16 x i16> %sel
586
587 ; AVX2-LABEL: test34:
588 ; AVX2: vpminsw
589
590 ; AVX512VL-LABEL: test34:
591 ; AVX512VL: vpminsw
592 }
593
594 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
595 entry:
596   %cmp = icmp sgt <16 x i16> %a, %b
597   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
598   ret <16 x i16> %sel
599
600 ; AVX2-LABEL: test35:
601 ; AVX2: vpmaxsw
602
603 ; AVX512VL-LABEL: test35:
604 ; AVX512VL: vpmaxsw
605 }
606
607 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
608 entry:
609   %cmp = icmp sge <16 x i16> %a, %b
610   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
611   ret <16 x i16> %sel
612
613 ; AVX2-LABEL: test36:
614 ; AVX2: vpmaxsw
615
616 ; AVX512VL-LABEL: test36:
617 ; AVX512VL: vpmaxsw
618 }
619
620 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
621 entry:
622   %cmp = icmp ult <16 x i16> %a, %b
623   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
624   ret <16 x i16> %sel
625
626 ; AVX2-LABEL: test37:
627 ; AVX2: vpminuw
628
629 ; AVX512VL-LABEL: test37:
630 ; AVX512VL: vpminuw
631 }
632
633 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
634 entry:
635   %cmp = icmp ule <16 x i16> %a, %b
636   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
637   ret <16 x i16> %sel
638
639 ; AVX2-LABEL: test38:
640 ; AVX2: vpminuw
641
642 ; AVX512VL-LABEL: test38:
643 ; AVX512VL: vpminuw
644 }
645
646 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
647 entry:
648   %cmp = icmp ugt <16 x i16> %a, %b
649   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
650   ret <16 x i16> %sel
651
652 ; AVX2-LABEL: test39:
653 ; AVX2: vpmaxuw
654
655 ; AVX512VL-LABEL: test39:
656 ; AVX512VL: vpmaxuw
657 }
658
659 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
660 entry:
661   %cmp = icmp uge <16 x i16> %a, %b
662   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
663   ret <16 x i16> %sel
664
665 ; AVX2-LABEL: test40:
666 ; AVX2: vpmaxuw
667
668 ; AVX512VL-LABEL: test40:
669 ; AVX512VL: vpmaxuw
670 }
671
672 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
673 entry:
674   %cmp = icmp slt <8 x i32> %a, %b
675   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
676   ret <8 x i32> %sel
677
678 ; AVX2-LABEL: test41:
679 ; AVX2: vpminsd
680
681 ; AVX512VL-LABEL: test41:
682 ; AVX512VL: vpminsd
683 }
684
685 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
686 entry:
687   %cmp = icmp sle <8 x i32> %a, %b
688   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
689   ret <8 x i32> %sel
690
691 ; AVX2-LABEL: test42:
692 ; AVX2: vpminsd
693
694 ; AVX512VL-LABEL: test42:
695 ; AVX512VL: vpminsd
696 }
697
698 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
699 entry:
700   %cmp = icmp sgt <8 x i32> %a, %b
701   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
702   ret <8 x i32> %sel
703
704 ; AVX2-LABEL: test43:
705 ; AVX2: vpmaxsd
706
707 ; AVX512VL-LABEL: test43:
708 ; AVX512VL: vpmaxsd
709 }
710
711 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
712 entry:
713   %cmp = icmp sge <8 x i32> %a, %b
714   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
715   ret <8 x i32> %sel
716
717 ; AVX2-LABEL: test44:
718 ; AVX2: vpmaxsd
719
720 ; AVX512VL-LABEL: test44:
721 ; AVX512VL: vpmaxsd
722 }
723
724 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
725 entry:
726   %cmp = icmp ult <8 x i32> %a, %b
727   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
728   ret <8 x i32> %sel
729
730 ; AVX2-LABEL: test45:
731 ; AVX2: vpminud
732
733 ; AVX512VL-LABEL: test45:
734 ; AVX512VL: vpminud
735 }
736
737 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
738 entry:
739   %cmp = icmp ule <8 x i32> %a, %b
740   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
741   ret <8 x i32> %sel
742
743 ; AVX2-LABEL: test46:
744 ; AVX2: vpminud
745
746 ; AVX512VL-LABEL: test46:
747 ; AVX512VL: vpminud
748 }
749
750 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
751 entry:
752   %cmp = icmp ugt <8 x i32> %a, %b
753   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
754   ret <8 x i32> %sel
755
756 ; AVX2-LABEL: test47:
757 ; AVX2: vpmaxud
758
759 ; AVX512VL-LABEL: test47:
760 ; AVX512VL: vpmaxud
761 }
762
763 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
764 entry:
765   %cmp = icmp uge <8 x i32> %a, %b
766   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
767   ret <8 x i32> %sel
768
769 ; AVX2-LABEL: test48:
770 ; AVX2: vpmaxud
771
772 ; AVX512VL-LABEL: test48:
773 ; AVX512VL: vpmaxud
774 }
775
776 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
777 entry:
778   %cmp = icmp slt <16 x i8> %a, %b
779   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
780   ret <16 x i8> %sel
781
782 ; SSE4-LABEL: test49:
783 ; SSE4: pmaxsb
784
785 ; AVX1-LABEL: test49:
786 ; AVX1: vpmaxsb
787
788 ; AVX2-LABEL: test49:
789 ; AVX2: vpmaxsb
790
791 ; AVX512VL-LABEL: test49:
792 ; AVX512VL: vpmaxsb
793 }
794
795 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
796 entry:
797   %cmp = icmp sle <16 x i8> %a, %b
798   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
799   ret <16 x i8> %sel
800
801 ; SSE4-LABEL: test50:
802 ; SSE4: pmaxsb
803
804 ; AVX1-LABEL: test50:
805 ; AVX1: vpmaxsb
806
807 ; AVX2-LABEL: test50:
808 ; AVX2: vpmaxsb
809
810 ; AVX512VL-LABEL: test50:
811 ; AVX512VL: vpmaxsb
812 }
813
814 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
815 entry:
816   %cmp = icmp sgt <16 x i8> %a, %b
817   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
818   ret <16 x i8> %sel
819
820 ; SSE4-LABEL: test51:
821 ; SSE4: pminsb
822
823 ; AVX1-LABEL: test51:
824 ; AVX1: vpminsb
825
826 ; AVX2-LABEL: test51:
827 ; AVX2: vpminsb
828
829 ; AVX512VL-LABEL: test51:
830 ; AVX512VL: vpminsb
831 }
832
833 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
834 entry:
835   %cmp = icmp sge <16 x i8> %a, %b
836   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
837   ret <16 x i8> %sel
838
839 ; SSE4-LABEL: test52:
840 ; SSE4: pminsb
841
842 ; AVX1-LABEL: test52:
843 ; AVX1: vpminsb
844
845 ; AVX2-LABEL: test52:
846 ; AVX2: vpminsb
847
848 ; AVX512VL-LABEL: test52:
849 ; AVX512VL: vpminsb
850 }
851
852 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
853 entry:
854   %cmp = icmp ult <16 x i8> %a, %b
855   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
856   ret <16 x i8> %sel
857
858 ; SSE2-LABEL: test53:
859 ; SSE2: pmaxub
860
861 ; AVX1-LABEL: test53:
862 ; AVX1: vpmaxub
863
864 ; AVX2-LABEL: test53:
865 ; AVX2: vpmaxub
866
867 ; AVX512VL-LABEL: test53:
868 ; AVX512VL: vpmaxub
869 }
870
871 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
872 entry:
873   %cmp = icmp ule <16 x i8> %a, %b
874   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
875   ret <16 x i8> %sel
876
877 ; SSE2-LABEL: test54:
878 ; SSE2: pmaxub
879
880 ; AVX1-LABEL: test54:
881 ; AVX1: vpmaxub
882
883 ; AVX2-LABEL: test54:
884 ; AVX2: vpmaxub
885
886 ; AVX512VL-LABEL: test54:
887 ; AVX512VL: vpmaxub
888 }
889
890 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
891 entry:
892   %cmp = icmp ugt <16 x i8> %a, %b
893   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
894   ret <16 x i8> %sel
895
896 ; SSE2-LABEL: test55:
897 ; SSE2: pminub
898
899 ; AVX1-LABEL: test55:
900 ; AVX1: vpminub
901
902 ; AVX2-LABEL: test55:
903 ; AVX2: vpminub
904
905 ; AVX512VL-LABEL: test55:
906 ; AVX512VL: vpminub
907 }
908
909 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
910 entry:
911   %cmp = icmp uge <16 x i8> %a, %b
912   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
913   ret <16 x i8> %sel
914
915 ; SSE2-LABEL: test56:
916 ; SSE2: pminub
917
918 ; AVX1-LABEL: test56:
919 ; AVX1: vpminub
920
921 ; AVX2-LABEL: test56:
922 ; AVX2: vpminub
923
924 ; AVX512VL-LABEL: test56:
925 ; AVX512VL: vpminub
926 }
927
928 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
929 entry:
930   %cmp = icmp slt <8 x i16> %a, %b
931   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
932   ret <8 x i16> %sel
933
934 ; SSE2-LABEL: test57:
935 ; SSE2: pmaxsw
936
937 ; AVX1-LABEL: test57:
938 ; AVX1: vpmaxsw
939
940 ; AVX2-LABEL: test57:
941 ; AVX2: vpmaxsw
942
943 ; AVX512VL-LABEL: test57:
944 ; AVX512VL: vpmaxsw
945 }
946
947 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
948 entry:
949   %cmp = icmp sle <8 x i16> %a, %b
950   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
951   ret <8 x i16> %sel
952
953 ; SSE2-LABEL: test58:
954 ; SSE2: pmaxsw
955
956 ; AVX1-LABEL: test58:
957 ; AVX1: vpmaxsw
958
959 ; AVX2-LABEL: test58:
960 ; AVX2: vpmaxsw
961
962 ; AVX512VL-LABEL: test58:
963 ; AVX512VL: vpmaxsw
964 }
965
966 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
967 entry:
968   %cmp = icmp sgt <8 x i16> %a, %b
969   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
970   ret <8 x i16> %sel
971
972 ; SSE2-LABEL: test59:
973 ; SSE2: pminsw
974
975 ; AVX1-LABEL: test59:
976 ; AVX1: vpminsw
977
978 ; AVX2-LABEL: test59:
979 ; AVX2: vpminsw
980
981 ; AVX512VL-LABEL: test59:
982 ; AVX512VL: vpminsw
983 }
984
985 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
986 entry:
987   %cmp = icmp sge <8 x i16> %a, %b
988   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
989   ret <8 x i16> %sel
990
991 ; SSE2-LABEL: test60:
992 ; SSE2: pminsw
993
994 ; AVX1-LABEL: test60:
995 ; AVX1: vpminsw
996
997 ; AVX2-LABEL: test60:
998 ; AVX2: vpminsw
999
1000 ; AVX512VL-LABEL: test60:
1001 ; AVX512VL: vpminsw
1002 }
1003
1004 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1005 entry:
1006   %cmp = icmp ult <8 x i16> %a, %b
1007   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1008   ret <8 x i16> %sel
1009
1010 ; SSE4-LABEL: test61:
1011 ; SSE4: pmaxuw
1012
1013 ; AVX1-LABEL: test61:
1014 ; AVX1: vpmaxuw
1015
1016 ; AVX2-LABEL: test61:
1017 ; AVX2: vpmaxuw
1018
1019 ; AVX512VL-LABEL: test61:
1020 ; AVX512VL: vpmaxuw
1021 }
1022
1023 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1024 entry:
1025   %cmp = icmp ule <8 x i16> %a, %b
1026   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1027   ret <8 x i16> %sel
1028
1029 ; SSE4-LABEL: test62:
1030 ; SSE4: pmaxuw
1031
1032 ; AVX1-LABEL: test62:
1033 ; AVX1: vpmaxuw
1034
1035 ; AVX2-LABEL: test62:
1036 ; AVX2: vpmaxuw
1037
1038 ; AVX512VL-LABEL: test62:
1039 ; AVX512VL: vpmaxuw
1040 }
1041
1042 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1043 entry:
1044   %cmp = icmp ugt <8 x i16> %a, %b
1045   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1046   ret <8 x i16> %sel
1047
1048 ; SSE4-LABEL: test63:
1049 ; SSE4: pminuw
1050
1051 ; AVX1-LABEL: test63:
1052 ; AVX1: vpminuw
1053
1054 ; AVX2-LABEL: test63:
1055 ; AVX2: vpminuw
1056
1057 ; AVX512VL-LABEL: test63:
1058 ; AVX512VL: vpminuw
1059 }
1060
1061 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1062 entry:
1063   %cmp = icmp uge <8 x i16> %a, %b
1064   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1065   ret <8 x i16> %sel
1066
1067 ; SSE4-LABEL: test64:
1068 ; SSE4: pminuw
1069
1070 ; AVX1-LABEL: test64:
1071 ; AVX1: vpminuw
1072
1073 ; AVX2-LABEL: test64:
1074 ; AVX2: vpminuw
1075
1076 ; AVX512VL-LABEL: test64:
1077 ; AVX512VL: vpminuw
1078 }
1079
1080 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1081 entry:
1082   %cmp = icmp slt <4 x i32> %a, %b
1083   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1084   ret <4 x i32> %sel
1085
1086 ; SSE4-LABEL: test65:
1087 ; SSE4: pmaxsd
1088
1089 ; AVX1-LABEL: test65:
1090 ; AVX1: vpmaxsd
1091
1092 ; AVX2-LABEL: test65:
1093 ; AVX2: vpmaxsd
1094
1095 ; AVX512VL-LABEL: test65:
1096 ; AVX512VL: vpmaxsd
1097 }
1098
1099 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
1100 entry:
1101   %cmp = icmp sle <4 x i32> %a, %b
1102   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1103   ret <4 x i32> %sel
1104
1105 ; SSE4-LABEL: test66:
1106 ; SSE4: pmaxsd
1107
1108 ; AVX1-LABEL: test66:
1109 ; AVX1: vpmaxsd
1110
1111 ; AVX2-LABEL: test66:
1112 ; AVX2: vpmaxsd
1113
1114 ; AVX512VL-LABEL: test66:
1115 ; AVX512VL: vpmaxsd
1116 }
1117
1118 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
1119 entry:
1120   %cmp = icmp sgt <4 x i32> %a, %b
1121   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1122   ret <4 x i32> %sel
1123
1124 ; SSE4-LABEL: test67:
1125 ; SSE4: pminsd
1126
1127 ; AVX1-LABEL: test67:
1128 ; AVX1: vpminsd
1129
1130 ; AVX2-LABEL: test67:
1131 ; AVX2: vpminsd
1132
1133 ; AVX512VL-LABEL: test67:
1134 ; AVX512VL: vpminsd
1135 }
1136
1137 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
1138 entry:
1139   %cmp = icmp sge <4 x i32> %a, %b
1140   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1141   ret <4 x i32> %sel
1142
1143 ; SSE4-LABEL: test68:
1144 ; SSE4: pminsd
1145
1146 ; AVX1-LABEL: test68:
1147 ; AVX1: vpminsd
1148
1149 ; AVX2-LABEL: test68:
1150 ; AVX2: vpminsd
1151
1152 ; AVX512VL-LABEL: test68:
1153 ; AVX512VL: vpminsd
1154 }
1155
1156 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
1157 entry:
1158   %cmp = icmp ult <4 x i32> %a, %b
1159   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1160   ret <4 x i32> %sel
1161
1162 ; SSE4-LABEL: test69:
1163 ; SSE4: pmaxud
1164
1165 ; AVX1-LABEL: test69:
1166 ; AVX1: vpmaxud
1167
1168 ; AVX2-LABEL: test69:
1169 ; AVX2: vpmaxud
1170
1171 ; AVX512VL-LABEL: test69:
1172 ; AVX512VL: vpmaxud
1173 }
1174
1175 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
1176 entry:
1177   %cmp = icmp ule <4 x i32> %a, %b
1178   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1179   ret <4 x i32> %sel
1180
1181 ; SSE4-LABEL: test70:
1182 ; SSE4: pmaxud
1183
1184 ; AVX1-LABEL: test70:
1185 ; AVX1: vpmaxud
1186
1187 ; AVX2-LABEL: test70:
1188 ; AVX2: vpmaxud
1189
1190 ; AVX512VL-LABEL: test70:
1191 ; AVX512VL: vpmaxud
1192 }
1193
1194 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
1195 entry:
1196   %cmp = icmp ugt <4 x i32> %a, %b
1197   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1198   ret <4 x i32> %sel
1199
1200 ; SSE4-LABEL: test71:
1201 ; SSE4: pminud
1202
1203 ; AVX1-LABEL: test71:
1204 ; AVX1: vpminud
1205
1206 ; AVX2-LABEL: test71:
1207 ; AVX2: vpminud
1208
1209 ; AVX512VL-LABEL: test71:
1210 ; AVX512VL: vpminud
1211 }
1212
1213 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
1214 entry:
1215   %cmp = icmp uge <4 x i32> %a, %b
1216   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1217   ret <4 x i32> %sel
1218
1219 ; SSE4-LABEL: test72:
1220 ; SSE4: pminud
1221
1222 ; AVX1-LABEL: test72:
1223 ; AVX1: vpminud
1224
1225 ; AVX2-LABEL: test72:
1226 ; AVX2: vpminud
1227
1228 ; AVX512VL-LABEL: test72:
1229 ; AVX512VL: vpminud
1230 }
1231
1232 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
1233 entry:
1234   %cmp = icmp slt <32 x i8> %a, %b
1235   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
1236   ret <32 x i8> %sel
1237
1238 ; AVX2-LABEL: test73:
1239 ; AVX2: vpmaxsb
1240
1241 ; AVX512VL-LABEL: test73:
1242 ; AVX512VL: vpmaxsb
1243 }
1244
1245 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
1246 entry:
1247   %cmp = icmp sle <32 x i8> %a, %b
1248   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
1249   ret <32 x i8> %sel
1250
1251 ; AVX2-LABEL: test74:
1252 ; AVX2: vpmaxsb
1253
1254 ; AVX512VL-LABEL: test74:
1255 ; AVX512VL: vpmaxsb 
1256 }
1257
1258 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
1259 entry:
1260   %cmp = icmp sgt <32 x i8> %a, %b
1261   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
1262   ret <32 x i8> %sel
1263
1264 ; AVX2-LABEL: test75:
1265 ; AVX2: vpminsb
1266
1267 ; AVX512VL-LABEL: test75:
1268 ; AVX512VL: vpminsb
1269 }
1270
1271 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
1272 entry:
1273   %cmp = icmp sge <32 x i8> %a, %b
1274   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
1275   ret <32 x i8> %sel
1276
1277 ; AVX2-LABEL: test76:
1278 ; AVX2: vpminsb
1279
1280 ; AVX512VL-LABEL: test76:
1281 ; AVX512VL: vpminsb
1282 }
1283
1284 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
1285 entry:
1286   %cmp = icmp ult <32 x i8> %a, %b
1287   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
1288   ret <32 x i8> %sel
1289
1290 ; AVX2-LABEL: test77:
1291 ; AVX2: vpmaxub
1292
1293 ; AVX512VL-LABEL: test77:
1294 ; AVX512VL: vpmaxub
1295 }
1296
1297 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
1298 entry:
1299   %cmp = icmp ule <32 x i8> %a, %b
1300   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
1301   ret <32 x i8> %sel
1302
1303 ; AVX2-LABEL: test78:
1304 ; AVX2: vpmaxub
1305
1306 ; AVX512VL-LABEL: test78:
1307 ; AVX512VL: vpmaxub
1308 }
1309
1310 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
1311 entry:
1312   %cmp = icmp ugt <32 x i8> %a, %b
1313   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
1314   ret <32 x i8> %sel
1315
1316 ; AVX2-LABEL: test79:
1317 ; AVX2: vpminub
1318
1319 ; AVX512VL-LABEL: test79:
1320 ; AVX512VL: vpminub
1321 }
1322
1323 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
1324 entry:
1325   %cmp = icmp uge <32 x i8> %a, %b
1326   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
1327   ret <32 x i8> %sel
1328
1329 ; AVX2-LABEL: test80:
1330 ; AVX2: vpminub
1331
1332 ; AVX512VL-LABEL: test80:
1333 ; AVX512VL: vpminub
1334 }
1335
1336 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
1337 entry:
1338   %cmp = icmp slt <16 x i16> %a, %b
1339   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
1340   ret <16 x i16> %sel
1341
1342 ; AVX2-LABEL: test81:
1343 ; AVX2: vpmaxsw
1344
1345 ; AVX512VL-LABEL: test81:
1346 ; AVX512VL: vpmaxsw
1347 }
1348
1349 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
1350 entry:
1351   %cmp = icmp sle <16 x i16> %a, %b
1352   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
1353   ret <16 x i16> %sel
1354
1355 ; AVX2-LABEL: test82:
1356 ; AVX2: vpmaxsw
1357
1358 ; AVX512VL-LABEL: test82:
1359 ; AVX512VL: vpmaxsw
1360 }
1361
1362 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
1363 entry:
1364   %cmp = icmp sgt <16 x i16> %a, %b
1365   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
1366   ret <16 x i16> %sel
1367
1368 ; AVX2-LABEL: test83:
1369 ; AVX2: vpminsw
1370
1371 ; AVX512VL-LABEL: test83:
1372 ; AVX512VL: vpminsw
1373 }
1374
1375 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
1376 entry:
1377   %cmp = icmp sge <16 x i16> %a, %b
1378   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
1379   ret <16 x i16> %sel
1380
1381 ; AVX2-LABEL: test84:
1382 ; AVX2: vpminsw
1383
1384 ; AVX512VL-LABEL: test84:
1385 ; AVX512VL: vpminsw
1386 }
1387
1388 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
1389 entry:
1390   %cmp = icmp ult <16 x i16> %a, %b
1391   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
1392   ret <16 x i16> %sel
1393
1394 ; AVX2-LABEL: test85:
1395 ; AVX2: vpmaxuw
1396
1397 ; AVX512VL-LABEL: test85:
1398 ; AVX512VL: vpmaxuw
1399 }
1400
1401 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
1402 entry:
1403   %cmp = icmp ule <16 x i16> %a, %b
1404   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
1405   ret <16 x i16> %sel
1406
1407 ; AVX2-LABEL: test86:
1408 ; AVX2: vpmaxuw
1409
1410 ; AVX512VL-LABEL: test86:
1411 ; AVX512VL: vpmaxuw
1412 }
1413
1414 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
1415 entry:
1416   %cmp = icmp ugt <16 x i16> %a, %b
1417   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
1418   ret <16 x i16> %sel
1419
1420 ; AVX2-LABEL: test87:
1421 ; AVX2: vpminuw
1422
1423 ; AVX512VL-LABEL: test87:
1424 ; AVX512VL: vpminuw
1425 }
1426
1427 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
1428 entry:
1429   %cmp = icmp uge <16 x i16> %a, %b
1430   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
1431   ret <16 x i16> %sel
1432
1433 ; AVX2-LABEL: test88:
1434 ; AVX2: vpminuw
1435
1436 ; AVX512VL-LABEL: test88:
1437 ; AVX512VL: vpminuw
1438 }
1439
1440 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
1441 entry:
1442   %cmp = icmp slt <8 x i32> %a, %b
1443   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
1444   ret <8 x i32> %sel
1445
1446 ; AVX2-LABEL: test89:
1447 ; AVX2: vpmaxsd
1448
1449 ; AVX512VL-LABEL: test89:
1450 ; AVX512VL: vpmaxsd
1451 }
1452
1453 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
1454 entry:
1455   %cmp = icmp sle <8 x i32> %a, %b
1456   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
1457   ret <8 x i32> %sel
1458
1459 ; AVX2-LABEL: test90:
1460 ; AVX2: vpmaxsd
1461
1462 ; AVX512VL-LABEL: test90:
1463 ; AVX512VL: vpmaxsd
1464 }
1465
1466 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
1467 entry:
1468   %cmp = icmp sgt <8 x i32> %a, %b
1469   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
1470   ret <8 x i32> %sel
1471
1472 ; AVX2-LABEL: test91:
1473 ; AVX2: vpminsd
1474
1475 ; AVX512VL-LABEL: test91:
1476 ; AVX512VL: vpminsd
1477 }
1478
1479 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
1480 entry:
1481   %cmp = icmp sge <8 x i32> %a, %b
1482   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
1483   ret <8 x i32> %sel
1484
1485 ; AVX2-LABEL: test92:
1486 ; AVX2: vpminsd
1487
1488 ; AVX512VL-LABEL: test92:
1489 ; AVX512VL: vpminsd
1490 }
1491
1492 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
1493 entry:
1494   %cmp = icmp ult <8 x i32> %a, %b
1495   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
1496   ret <8 x i32> %sel
1497
1498 ; AVX2-LABEL: test93:
1499 ; AVX2: vpmaxud
1500
1501 ; AVX512VL-LABEL: test93:
1502 ; AVX512VL: vpmaxud
1503 }
1504
1505 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
1506 entry:
1507   %cmp = icmp ule <8 x i32> %a, %b
1508   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
1509   ret <8 x i32> %sel
1510
1511 ; AVX2-LABEL: test94:
1512 ; AVX2: vpmaxud
1513
1514 ; AVX512VL-LABEL: test94:
1515 ; AVX512VL: vpmaxud
1516 }
1517
1518 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
1519 entry:
1520   %cmp = icmp ugt <8 x i32> %a, %b
1521   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
1522   ret <8 x i32> %sel
1523
1524 ; AVX2-LABEL: test95:
1525 ; AVX2: vpminud
1526
1527 ; AVX512VL-LABEL: test95:
1528 ; AVX512VL: vpminud
1529 }
1530
1531 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
1532 entry:
1533   %cmp = icmp uge <8 x i32> %a, %b
1534   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
1535   ret <8 x i32> %sel
1536
1537 ; AVX2-LABEL: test96:
1538 ; AVX2: vpminud
1539
1540 ; AVX512VL-LABEL: test96:
1541 ; AVX512VL: vpminud
1542 }
1543
1544 ; ----------------------------
1545
1546 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
1547 entry:
1548   %cmp = icmp slt <64 x i8> %a, %b
1549   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
1550   ret <64 x i8> %sel
1551
1552 ; AVX512BW-LABEL: test97:
1553 ; AVX512BW: vpminsb {{.*}}
1554 }
1555
1556 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
1557 entry:
1558   %cmp = icmp sle <64 x i8> %a, %b
1559   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
1560   ret <64 x i8> %sel
1561
1562 ; AVX512BW-LABEL: test98:
1563 ; AVX512BW: vpminsb {{.*}}
1564 }
1565
1566 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
1567 entry:
1568   %cmp = icmp sgt <64 x i8> %a, %b
1569   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
1570   ret <64 x i8> %sel
1571
1572 ; AVX512BW-LABEL: test99:
1573 ; AVX512BW: vpmaxsb {{.*}}
1574 }
1575
1576 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
1577 entry:
1578   %cmp = icmp sge <64 x i8> %a, %b
1579   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
1580   ret <64 x i8> %sel
1581
1582 ; AVX512BW-LABEL: test100:
1583 ; AVX512BW: vpmaxsb {{.*}}
1584 }
1585
1586 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
1587 entry:
1588   %cmp = icmp ult <64 x i8> %a, %b
1589   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
1590   ret <64 x i8> %sel
1591
1592 ; AVX512BW-LABEL: test101:
1593 ; AVX512BW: vpminub {{.*}}
1594 }
1595
1596 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
1597 entry:
1598   %cmp = icmp ule <64 x i8> %a, %b
1599   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
1600   ret <64 x i8> %sel
1601
1602 ; AVX512BW-LABEL: test102:
1603 ; AVX512BW: vpminub {{.*}}
1604 }
1605
1606 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
1607 entry:
1608   %cmp = icmp ugt <64 x i8> %a, %b
1609   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
1610   ret <64 x i8> %sel
1611
1612 ; AVX512BW-LABEL: test103:
1613 ; AVX512BW: vpmaxub {{.*}}
1614 }
1615
1616 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
1617 entry:
1618   %cmp = icmp uge <64 x i8> %a, %b
1619   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
1620   ret <64 x i8> %sel
1621
1622 ; AVX512BW-LABEL: test104:
1623 ; AVX512BW: vpmaxub {{.*}}
1624 }
1625
1626 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
1627 entry:
1628   %cmp = icmp slt <32 x i16> %a, %b
1629   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
1630   ret <32 x i16> %sel
1631
1632 ; AVX512BW-LABEL: test105:
1633 ; AVX512BW: vpminsw {{.*}}
1634 }
1635
1636 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
1637 entry:
1638   %cmp = icmp sle <32 x i16> %a, %b
1639   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
1640   ret <32 x i16> %sel
1641
1642 ; AVX512BW-LABEL: test106:
1643 ; AVX512BW: vpminsw {{.*}}
1644 }
1645
1646 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
1647 entry:
1648   %cmp = icmp sgt <32 x i16> %a, %b
1649   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
1650   ret <32 x i16> %sel
1651
1652 ; AVX512BW-LABEL: test107:
1653 ; AVX512BW: vpmaxsw {{.*}}
1654 }
1655
1656 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
1657 entry:
1658   %cmp = icmp sge <32 x i16> %a, %b
1659   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
1660   ret <32 x i16> %sel
1661
1662 ; AVX512BW-LABEL: test108:
1663 ; AVX512BW: vpmaxsw {{.*}}
1664 }
1665
1666 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
1667 entry:
1668   %cmp = icmp ult <32 x i16> %a, %b
1669   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
1670   ret <32 x i16> %sel
1671
1672 ; AVX512BW-LABEL: test109:
1673 ; AVX512BW: vpminuw {{.*}}
1674 }
1675
1676 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
1677 entry:
1678   %cmp = icmp ule <32 x i16> %a, %b
1679   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
1680   ret <32 x i16> %sel
1681
1682 ; AVX512BW-LABEL: test110:
1683 ; AVX512BW: vpminuw {{.*}}
1684 }
1685
1686 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
1687 entry:
1688   %cmp = icmp ugt <32 x i16> %a, %b
1689   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
1690   ret <32 x i16> %sel
1691
1692 ; AVX512BW-LABEL: test111:
1693 ; AVX512BW: vpmaxuw {{.*}}
1694 }
1695
1696 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
1697 entry:
1698   %cmp = icmp uge <32 x i16> %a, %b
1699   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
1700   ret <32 x i16> %sel
1701
1702 ; AVX512BW-LABEL: test112:
1703 ; AVX512BW: vpmaxuw {{.*}}
1704 }
1705
1706 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
1707 entry:
1708   %cmp = icmp slt <16 x i32> %a, %b
1709   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
1710   ret <16 x i32> %sel
1711
1712 ; AVX512F-LABEL: test113:
1713 ; AVX512F: vpminsd {{.*}}
1714 }
1715
1716 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
1717 entry:
1718   %cmp = icmp sle <16 x i32> %a, %b
1719   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
1720   ret <16 x i32> %sel
1721
1722 ; AVX512F-LABEL: test114:
1723 ; AVX512F: vpminsd {{.*}}
1724 }
1725
1726 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
1727 entry:
1728   %cmp = icmp sgt <16 x i32> %a, %b
1729   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
1730   ret <16 x i32> %sel
1731
1732 ; AVX512F-LABEL: test115:
1733 ; AVX512F: vpmaxsd {{.*}}
1734 }
1735
1736 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
1737 entry:
1738   %cmp = icmp sge <16 x i32> %a, %b
1739   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
1740   ret <16 x i32> %sel
1741
1742 ; AVX512F-LABEL: test116:
1743 ; AVX512F: vpmaxsd {{.*}}
1744 }
1745
1746 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
1747 entry:
1748   %cmp = icmp ult <16 x i32> %a, %b
1749   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
1750   ret <16 x i32> %sel
1751
1752 ; AVX512F-LABEL: test117:
1753 ; AVX512F: vpminud {{.*}}
1754 }
1755
1756 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
1757 entry:
1758   %cmp = icmp ule <16 x i32> %a, %b
1759   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
1760   ret <16 x i32> %sel
1761
1762 ; AVX512F-LABEL: test118:
1763 ; AVX512F: vpminud {{.*}}
1764 }
1765
1766 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
1767 entry:
1768   %cmp = icmp ugt <16 x i32> %a, %b
1769   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
1770   ret <16 x i32> %sel
1771
1772 ; AVX512F-LABEL: test119:
1773 ; AVX512F: vpmaxud {{.*}}
1774 }
1775
1776 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
1777 entry:
1778   %cmp = icmp uge <16 x i32> %a, %b
1779   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
1780   ret <16 x i32> %sel
1781
1782 ; AVX512F-LABEL: test120:
1783 ; AVX512F: vpmaxud {{.*}}
1784 }
1785
1786 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
1787 entry:
1788   %cmp = icmp slt <8 x i64> %a, %b
1789   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
1790   ret <8 x i64> %sel
1791
1792 ; AVX512F-LABEL: test121:
1793 ; AVX512F: vpminsq {{.*}}
1794 }
1795
1796 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
1797 entry:
1798   %cmp = icmp sle <8 x i64> %a, %b
1799   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
1800   ret <8 x i64> %sel
1801
1802 ; AVX512F-LABEL: test122:
1803 ; AVX512F: vpminsq {{.*}}
1804 }
1805
1806 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
1807 entry:
1808   %cmp = icmp sgt <8 x i64> %a, %b
1809   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
1810   ret <8 x i64> %sel
1811
1812 ; AVX512F-LABEL: test123:
1813 ; AVX512F: vpmaxsq {{.*}}
1814 }
1815
1816 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
1817 entry:
1818   %cmp = icmp sge <8 x i64> %a, %b
1819   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
1820   ret <8 x i64> %sel
1821
1822 ; AVX512F-LABEL: test124:
1823 ; AVX512F: vpmaxsq {{.*}}
1824 }
1825
1826 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
1827 entry:
1828   %cmp = icmp ult <8 x i64> %a, %b
1829   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
1830   ret <8 x i64> %sel
1831
1832 ; AVX512F-LABEL: test125:
1833 ; AVX512F: vpminuq {{.*}}
1834 }
1835
1836 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
1837 entry:
1838   %cmp = icmp ule <8 x i64> %a, %b
1839   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
1840   ret <8 x i64> %sel
1841
1842 ; AVX512F-LABEL: test126:
1843 ; AVX512F: vpminuq {{.*}}
1844 }
1845
1846 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
1847 entry:
1848   %cmp = icmp ugt <8 x i64> %a, %b
1849   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
1850   ret <8 x i64> %sel
1851
1852 ; AVX512F-LABEL: test127:
1853 ; AVX512F: vpmaxuq {{.*}}
1854 }
1855
1856 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
1857 entry:
1858   %cmp = icmp uge <8 x i64> %a, %b
1859   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
1860   ret <8 x i64> %sel
1861
1862 ; AVX512F-LABEL: test128:
1863 ; AVX512F: vpmaxuq {{.*}}
1864 }
1865
1866 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
1867 entry:
1868   %cmp = icmp slt <64 x i8> %a, %b
1869   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
1870   ret <64 x i8> %sel
1871
1872 ; AVX512BW-LABEL: test129:
1873 ; AVX512BW: vpmaxsb
1874 }
1875
1876 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
1877 entry:
1878   %cmp = icmp sle <64 x i8> %a, %b
1879   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
1880   ret <64 x i8> %sel
1881
1882 ; AVX512BW-LABEL: test130:
1883 ; AVX512BW: vpmaxsb
1884 }
1885
1886 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
1887 entry:
1888   %cmp = icmp sgt <64 x i8> %a, %b
1889   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
1890   ret <64 x i8> %sel
1891
1892 ; AVX512BW-LABEL: test131:
1893 ; AVX512BW: vpminsb
1894 }
1895
1896 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
1897 entry:
1898   %cmp = icmp sge <64 x i8> %a, %b
1899   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
1900   ret <64 x i8> %sel
1901
1902 ; AVX512BW-LABEL: test132:
1903 ; AVX512BW: vpminsb
1904 }
1905
1906 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
1907 entry:
1908   %cmp = icmp ult <64 x i8> %a, %b
1909   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
1910   ret <64 x i8> %sel
1911
1912 ; AVX512BW-LABEL: test133:
1913 ; AVX512BW: vpmaxub
1914 }
1915
1916 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
1917 entry:
1918   %cmp = icmp ule <64 x i8> %a, %b
1919   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
1920   ret <64 x i8> %sel
1921
1922 ; AVX512BW-LABEL: test134:
1923 ; AVX512BW: vpmaxub
1924 }
1925
1926 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
1927 entry:
1928   %cmp = icmp ugt <64 x i8> %a, %b
1929   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
1930   ret <64 x i8> %sel
1931
1932 ; AVX512BW-LABEL: test135:
1933 ; AVX512BW: vpminub
1934 }
1935
1936 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
1937 entry:
1938   %cmp = icmp uge <64 x i8> %a, %b
1939   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
1940   ret <64 x i8> %sel
1941
1942 ; AVX512BW-LABEL: test136:
1943 ; AVX512BW: vpminub
1944 }
1945
1946 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
1947 entry:
1948   %cmp = icmp slt <32 x i16> %a, %b
1949   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
1950   ret <32 x i16> %sel
1951
1952 ; AVX512BW-LABEL: test137:
1953 ; AVX512BW: vpmaxsw
1954 }
1955
1956 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
1957 entry:
1958   %cmp = icmp sle <32 x i16> %a, %b
1959   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
1960   ret <32 x i16> %sel
1961
1962 ; AVX512BW-LABEL: test138:
1963 ; AVX512BW: vpmaxsw
1964 }
1965
1966 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
1967 entry:
1968   %cmp = icmp sgt <32 x i16> %a, %b
1969   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
1970   ret <32 x i16> %sel
1971
1972 ; AVX512BW-LABEL: test139:
1973 ; AVX512BW: vpminsw
1974 }
1975
1976 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
1977 entry:
1978   %cmp = icmp sge <32 x i16> %a, %b
1979   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
1980   ret <32 x i16> %sel
1981
1982 ; AVX512BW-LABEL: test140:
1983 ; AVX512BW: vpminsw
1984 }
1985
1986 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
1987 entry:
1988   %cmp = icmp ult <32 x i16> %a, %b
1989   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
1990   ret <32 x i16> %sel
1991
1992 ; AVX512BW-LABEL: test141:
1993 ; AVX512BW: vpmaxuw
1994 }
1995
1996 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
1997 entry:
1998   %cmp = icmp ule <32 x i16> %a, %b
1999   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
2000   ret <32 x i16> %sel
2001
2002 ; AVX512BW-LABEL: test142:
2003 ; AVX512BW: vpmaxuw
2004 }
2005
2006 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
2007 entry:
2008   %cmp = icmp ugt <32 x i16> %a, %b
2009   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
2010   ret <32 x i16> %sel
2011
2012 ; AVX512BW-LABEL: test143:
2013 ; AVX512BW: vpminuw
2014 }
2015
2016 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
2017 entry:
2018   %cmp = icmp uge <32 x i16> %a, %b
2019   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
2020   ret <32 x i16> %sel
2021
2022 ; AVX512BW-LABEL: test144:
2023 ; AVX512BW: vpminuw
2024 }
2025
2026 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
2027 entry:
2028   %cmp = icmp slt <16 x i32> %a, %b
2029   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
2030   ret <16 x i32> %sel
2031
2032 ; AVX512F-LABEL: test145:
2033 ; AVX512F: vpmaxsd
2034 }
2035
2036 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
2037 entry:
2038   %cmp = icmp sle <16 x i32> %a, %b
2039   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
2040   ret <16 x i32> %sel
2041
2042 ; AVX512F-LABEL: test146:
2043 ; AVX512F: vpmaxsd
2044 }
2045
2046 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
2047 entry:
2048   %cmp = icmp sgt <16 x i32> %a, %b
2049   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
2050   ret <16 x i32> %sel
2051
2052 ; AVX512F-LABEL: test147:
2053 ; AVX512F: vpminsd
2054 }
2055
2056 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
2057 entry:
2058   %cmp = icmp sge <16 x i32> %a, %b
2059   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
2060   ret <16 x i32> %sel
2061
2062 ; AVX512F-LABEL: test148:
2063 ; AVX512F: vpminsd
2064 }
2065
2066 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
2067 entry:
2068   %cmp = icmp ult <16 x i32> %a, %b
2069   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
2070   ret <16 x i32> %sel
2071
2072 ; AVX512F-LABEL: test149:
2073 ; AVX512F: vpmaxud
2074 }
2075
2076 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
2077 entry:
2078   %cmp = icmp ule <16 x i32> %a, %b
2079   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
2080   ret <16 x i32> %sel
2081
2082 ; AVX512F-LABEL: test150:
2083 ; AVX512F: vpmaxud
2084 }
2085
2086 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
2087 entry:
2088   %cmp = icmp ugt <16 x i32> %a, %b
2089   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
2090   ret <16 x i32> %sel
2091
2092 ; AVX512F-LABEL: test151:
2093 ; AVX512F: vpminud
2094 }
2095
2096 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
2097 entry:
2098   %cmp = icmp uge <16 x i32> %a, %b
2099   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
2100   ret <16 x i32> %sel
2101
2102 ; AVX512F-LABEL: test152:
2103 ; AVX512F: vpminud
2104 }
2105
2106 ; -----------------------
2107
2108 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
2109 entry:
2110   %cmp = icmp slt <8 x i64> %a, %b
2111   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
2112   ret <8 x i64> %sel
2113
2114 ; AVX512F-LABEL: test153:
2115 ; AVX512F: vpmaxsq
2116 }
2117
2118 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
2119 entry:
2120   %cmp = icmp sle <8 x i64> %a, %b
2121   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
2122   ret <8 x i64> %sel
2123
2124 ; AVX512F-LABEL: test154:
2125 ; AVX512F: vpmaxsq
2126 }
2127
2128 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
2129 entry:
2130   %cmp = icmp sgt <8 x i64> %a, %b
2131   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
2132   ret <8 x i64> %sel
2133
2134 ; AVX512F-LABEL: test155:
2135 ; AVX512F: vpminsq
2136 }
2137
2138 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
2139 entry:
2140   %cmp = icmp sge <8 x i64> %a, %b
2141   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
2142   ret <8 x i64> %sel
2143
2144 ; AVX512F-LABEL: test156:
2145 ; AVX512F: vpminsq
2146 }
2147
2148 define <8 x i64> @test157(<8 x i64> %a, <8 x i64> %b) {
2149 entry:
2150   %cmp = icmp ult <8 x i64> %a, %b
2151   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
2152   ret <8 x i64> %sel
2153
2154 ; AVX512F-LABEL: test157:
2155 ; AVX512F: vpmaxuq
2156 }
2157
2158 define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) {
2159 entry:
2160   %cmp = icmp ule <8 x i64> %a, %b
2161   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
2162   ret <8 x i64> %sel
2163
2164 ; AVX512F-LABEL: test158:
2165 ; AVX512F: vpmaxuq
2166 }
2167
2168 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
2169 entry:
2170   %cmp = icmp ugt <8 x i64> %a, %b
2171   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
2172   ret <8 x i64> %sel
2173
2174 ; AVX512F-LABEL: test159:
2175 ; AVX512F: vpminuq
2176 }
2177
2178 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
2179 entry:
2180   %cmp = icmp uge <8 x i64> %a, %b
2181   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
2182   ret <8 x i64> %sel
2183
2184 ; AVX512F-LABEL: test160:
2185 ; AVX512F: vpminuq
2186 }
2187
2188 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
2189 entry:
2190   %cmp = icmp slt <4 x i64> %a, %b
2191   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
2192   ret <4 x i64> %sel
2193
2194 ; AVX512VL-LABEL: test161:
2195 ; AVX512VL: vpminsq
2196 }
2197
2198 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
2199 entry:
2200   %cmp = icmp sle <4 x i64> %a, %b
2201   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
2202   ret <4 x i64> %sel
2203
2204 ; AVX512VL-LABEL: test162:
2205 ; AVX512VL: vpminsq
2206 }
2207
2208 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
2209 entry:
2210   %cmp = icmp sgt <4 x i64> %a, %b
2211   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
2212   ret <4 x i64> %sel
2213
2214 ; AVX512VL-LABEL: test163:
2215 ; AVX512VL: vpmaxsq 
2216 }
2217
2218 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
2219 entry:
2220   %cmp = icmp sge <4 x i64> %a, %b
2221   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
2222   ret <4 x i64> %sel
2223
2224 ; AVX512VL-LABEL: test164:
2225 ; AVX512VL: vpmaxsq
2226 }
2227
2228 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
2229 entry:
2230   %cmp = icmp ult <4 x i64> %a, %b
2231   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
2232   ret <4 x i64> %sel
2233
2234 ; AVX512VL-LABEL: test165:
2235 ; AVX512VL: vpminuq 
2236 }
2237
2238 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
2239 entry:
2240   %cmp = icmp ule <4 x i64> %a, %b
2241   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
2242   ret <4 x i64> %sel
2243
2244 ; AVX512VL-LABEL: test166:
2245 ; AVX512VL: vpminuq
2246 }
2247
2248 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
2249 entry:
2250   %cmp = icmp ugt <4 x i64> %a, %b
2251   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
2252   ret <4 x i64> %sel
2253
2254 ; AVX512VL-LABEL: test167:
2255 ; AVX512VL: vpmaxuq
2256 }
2257
2258 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
2259 entry:
2260   %cmp = icmp uge <4 x i64> %a, %b
2261   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
2262   ret <4 x i64> %sel
2263
2264 ; AVX512VL-LABEL: test168:
2265 ; AVX512VL: vpmaxuq
2266 }
2267
2268 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
2269 entry:
2270   %cmp = icmp slt <4 x i64> %a, %b
2271   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
2272   ret <4 x i64> %sel
2273
2274 ; AVX512VL-LABEL: test169:
2275 ; AVX512VL: vpmaxsq
2276 }
2277
2278 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
2279 entry:
2280   %cmp = icmp sle <4 x i64> %a, %b
2281   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
2282   ret <4 x i64> %sel
2283
2284 ; AVX512VL-LABEL: test170:
2285 ; AVX512VL: vpmaxsq
2286 }
2287
2288 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
2289 entry:
2290   %cmp = icmp sgt <4 x i64> %a, %b
2291   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
2292   ret <4 x i64> %sel
2293
2294 ; AVX512VL-LABEL: test171:
2295 ; AVX512VL: vpminsq
2296 }
2297
2298 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
2299 entry:
2300   %cmp = icmp sge <4 x i64> %a, %b
2301   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
2302   ret <4 x i64> %sel
2303
2304 ; AVX512VL-LABEL: test172:
2305 ; AVX512VL: vpminsq
2306 }
2307
2308 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
2309 entry:
2310   %cmp = icmp ult <4 x i64> %a, %b
2311   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
2312   ret <4 x i64> %sel
2313
2314 ; AVX512VL-LABEL: test173:
2315 ; AVX512VL: vpmaxuq
2316 }
2317
2318 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
2319 entry:
2320   %cmp = icmp ule <4 x i64> %a, %b
2321   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
2322   ret <4 x i64> %sel
2323
2324 ; AVX512VL-LABEL: test174:
2325 ; AVX512VL: vpmaxuq
2326 }
2327
2328 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
2329 entry:
2330   %cmp = icmp ugt <4 x i64> %a, %b
2331   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
2332   ret <4 x i64> %sel
2333
2334 ; AVX512VL-LABEL: test175:
2335 ; AVX512VL: vpminuq
2336 }
2337
2338 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
2339 entry:
2340   %cmp = icmp uge <4 x i64> %a, %b
2341   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
2342   ret <4 x i64> %sel
2343
2344 ; AVX512VL-LABEL: test176:
2345 ; AVX512VL: vpminuq
2346 }
2347
2348 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
2349 entry:
2350   %cmp = icmp slt <2 x i64> %a, %b
2351   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
2352   ret <2 x i64> %sel
2353
2354 ; AVX512VL-LABEL: test177:
2355 ; AVX512VL: vpminsq
2356 }
2357
2358 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
2359 entry:
2360   %cmp = icmp sle <2 x i64> %a, %b
2361   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
2362   ret <2 x i64> %sel
2363
2364 ; AVX512VL-LABEL: test178:
2365 ; AVX512VL: vpminsq
2366 }
2367
2368 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
2369 entry:
2370   %cmp = icmp sgt <2 x i64> %a, %b
2371   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
2372   ret <2 x i64> %sel
2373
2374 ; AVX512VL-LABEL: test179:
2375 ; AVX512VL: vpmaxsq
2376 }
2377
2378 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
2379 entry:
2380   %cmp = icmp sge <2 x i64> %a, %b
2381   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
2382   ret <2 x i64> %sel
2383
2384 ; AVX512VL-LABEL: test180:
2385 ; AVX512VL: vpmaxsq
2386 }
2387
2388 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
2389 entry:
2390   %cmp = icmp ult <2 x i64> %a, %b
2391   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
2392   ret <2 x i64> %sel
2393
2394 ; AVX512VL-LABEL: test181:
2395 ; AVX512VL: vpminuq
2396 }
2397
2398 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
2399 entry:
2400   %cmp = icmp ule <2 x i64> %a, %b
2401   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
2402   ret <2 x i64> %sel
2403
2404 ; AVX512VL-LABEL: test182:
2405 ; AVX512VL: vpminuq
2406 }
2407
2408 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
2409 entry:
2410   %cmp = icmp ugt <2 x i64> %a, %b
2411   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
2412   ret <2 x i64> %sel
2413
2414 ; AVX512VL-LABEL: test183:
2415 ; AVX512VL: vpmaxuq
2416 }
2417
2418 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
2419 entry:
2420   %cmp = icmp uge <2 x i64> %a, %b
2421   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
2422   ret <2 x i64> %sel
2423
2424 ; AVX512VL-LABEL: test184:
2425 ; AVX512VL: vpmaxuq
2426 }
2427
2428 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
2429 entry:
2430   %cmp = icmp slt <2 x i64> %a, %b
2431   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
2432   ret <2 x i64> %sel
2433
2434 ; AVX512VL-LABEL: test185:
2435 ; AVX512VL: vpmaxsq
2436 }
2437
2438 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
2439 entry:
2440   %cmp = icmp sle <2 x i64> %a, %b
2441   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
2442   ret <2 x i64> %sel
2443
2444 ; AVX512VL-LABEL: test186:
2445 ; AVX512VL: vpmaxsq
2446 }
2447
2448 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
2449 entry:
2450   %cmp = icmp sgt <2 x i64> %a, %b
2451   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
2452   ret <2 x i64> %sel
2453
2454 ; AVX512VL-LABEL: test187:
2455 ; AVX512VL: vpminsq
2456 }
2457
2458 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
2459 entry:
2460   %cmp = icmp sge <2 x i64> %a, %b
2461   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
2462   ret <2 x i64> %sel
2463
2464 ; AVX512VL-LABEL: test188:
2465 ; AVX512VL: vpminsq
2466 }
2467
2468 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
2469 entry:
2470   %cmp = icmp ult <2 x i64> %a, %b
2471   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
2472   ret <2 x i64> %sel
2473
2474 ; AVX512VL-LABEL: test189:
2475 ; AVX512VL: vpmaxuq
2476 }
2477
2478 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
2479 entry:
2480   %cmp = icmp ule <2 x i64> %a, %b
2481   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
2482   ret <2 x i64> %sel
2483
2484 ; AVX512VL-LABEL: test190:
2485 ; AVX512VL: vpmaxuq
2486 }
2487
2488 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
2489 entry:
2490   %cmp = icmp ugt <2 x i64> %a, %b
2491   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
2492   ret <2 x i64> %sel
2493
2494 ; AVX512VL-LABEL: test191:
2495 ; AVX512VL: vpminuq
2496 }
2497
2498 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
2499 entry:
2500   %cmp = icmp uge <2 x i64> %a, %b
2501   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
2502   ret <2 x i64> %sel
2503
2504 ; AVX512VL-LABEL: test192:
2505 ; AVX512VL: vpminuq
2506 }