[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / vselect-minmax.ll
blobcb0542ca7cea8b82c0a09f9197385ea7f7d5670b
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-prefixes=SSE,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE4
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW
9 define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) {
10 ; SSE2-LABEL: test1:
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
17 ; SSE2-NEXT:    retq
19 ; SSE4-LABEL: test1:
20 ; SSE4:       # %bb.0: # %entry
21 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
22 ; SSE4-NEXT:    retq
24 ; AVX-LABEL: test1:
25 ; AVX:       # %bb.0: # %entry
26 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
27 ; AVX-NEXT:    retq
28 entry:
29   %cmp = icmp slt <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
34 define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
35 ; SSE2-LABEL: test2:
36 ; SSE2:       # %bb.0: # %entry
37 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
38 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
39 ; SSE2-NEXT:    pand %xmm2, %xmm0
40 ; SSE2-NEXT:    pandn %xmm1, %xmm2
41 ; SSE2-NEXT:    por %xmm2, %xmm0
42 ; SSE2-NEXT:    retq
44 ; SSE4-LABEL: test2:
45 ; SSE4:       # %bb.0: # %entry
46 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
47 ; SSE4-NEXT:    retq
49 ; AVX-LABEL: test2:
50 ; AVX:       # %bb.0: # %entry
51 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
52 ; AVX-NEXT:    retq
53 entry:
54   %cmp = icmp sle <16 x i8> %a, %b
55   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
56   ret <16 x i8> %sel
59 define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
60 ; SSE2-LABEL: test3:
61 ; SSE2:       # %bb.0: # %entry
62 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
63 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
64 ; SSE2-NEXT:    pand %xmm2, %xmm0
65 ; SSE2-NEXT:    pandn %xmm1, %xmm2
66 ; SSE2-NEXT:    por %xmm2, %xmm0
67 ; SSE2-NEXT:    retq
69 ; SSE4-LABEL: test3:
70 ; SSE4:       # %bb.0: # %entry
71 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
72 ; SSE4-NEXT:    retq
74 ; AVX-LABEL: test3:
75 ; AVX:       # %bb.0: # %entry
76 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
77 ; AVX-NEXT:    retq
78 entry:
79   %cmp = icmp sgt <16 x i8> %a, %b
80   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
81   ret <16 x i8> %sel
84 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
85 ; SSE2-LABEL: test4:
86 ; SSE2:       # %bb.0: # %entry
87 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
88 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
89 ; SSE2-NEXT:    pand %xmm2, %xmm0
90 ; SSE2-NEXT:    pandn %xmm1, %xmm2
91 ; SSE2-NEXT:    por %xmm2, %xmm0
92 ; SSE2-NEXT:    retq
94 ; SSE4-LABEL: test4:
95 ; SSE4:       # %bb.0: # %entry
96 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
97 ; SSE4-NEXT:    retq
99 ; AVX-LABEL: test4:
100 ; AVX:       # %bb.0: # %entry
101 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
102 ; AVX-NEXT:    retq
103 entry:
104   %cmp = icmp sge <16 x i8> %a, %b
105   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
106   ret <16 x i8> %sel
109 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
110 ; SSE-LABEL: test5:
111 ; SSE:       # %bb.0: # %entry
112 ; SSE-NEXT:    pminub %xmm1, %xmm0
113 ; SSE-NEXT:    retq
115 ; AVX-LABEL: test5:
116 ; AVX:       # %bb.0: # %entry
117 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
118 ; AVX-NEXT:    retq
119 entry:
120   %cmp = icmp ult <16 x i8> %a, %b
121   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
122   ret <16 x i8> %sel
125 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
126 ; SSE-LABEL: test6:
127 ; SSE:       # %bb.0: # %entry
128 ; SSE-NEXT:    pminub %xmm1, %xmm0
129 ; SSE-NEXT:    retq
131 ; AVX-LABEL: test6:
132 ; AVX:       # %bb.0: # %entry
133 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
134 ; AVX-NEXT:    retq
135 entry:
136   %cmp = icmp ule <16 x i8> %a, %b
137   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
138   ret <16 x i8> %sel
141 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
142 ; SSE-LABEL: test7:
143 ; SSE:       # %bb.0: # %entry
144 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
145 ; SSE-NEXT:    retq
147 ; AVX-LABEL: test7:
148 ; AVX:       # %bb.0: # %entry
149 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
150 ; AVX-NEXT:    retq
151 entry:
152   %cmp = icmp ugt <16 x i8> %a, %b
153   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
154   ret <16 x i8> %sel
157 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
158 ; SSE-LABEL: test8:
159 ; SSE:       # %bb.0: # %entry
160 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
161 ; SSE-NEXT:    retq
163 ; AVX-LABEL: test8:
164 ; AVX:       # %bb.0: # %entry
165 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
166 ; AVX-NEXT:    retq
167 entry:
168   %cmp = icmp uge <16 x i8> %a, %b
169   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
170   ret <16 x i8> %sel
173 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
174 ; SSE-LABEL: test9:
175 ; SSE:       # %bb.0: # %entry
176 ; SSE-NEXT:    pminsw %xmm1, %xmm0
177 ; SSE-NEXT:    retq
179 ; AVX-LABEL: test9:
180 ; AVX:       # %bb.0: # %entry
181 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
182 ; AVX-NEXT:    retq
183 entry:
184   %cmp = icmp slt <8 x i16> %a, %b
185   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
186   ret <8 x i16> %sel
189 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
190 ; SSE-LABEL: test10:
191 ; SSE:       # %bb.0: # %entry
192 ; SSE-NEXT:    pminsw %xmm1, %xmm0
193 ; SSE-NEXT:    retq
195 ; AVX-LABEL: test10:
196 ; AVX:       # %bb.0: # %entry
197 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
198 ; AVX-NEXT:    retq
199 entry:
200   %cmp = icmp sle <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
205 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
206 ; SSE-LABEL: test11:
207 ; SSE:       # %bb.0: # %entry
208 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
209 ; SSE-NEXT:    retq
211 ; AVX-LABEL: test11:
212 ; AVX:       # %bb.0: # %entry
213 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
214 ; AVX-NEXT:    retq
215 entry:
216   %cmp = icmp sgt <8 x i16> %a, %b
217   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
218   ret <8 x i16> %sel
221 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
222 ; SSE-LABEL: test12:
223 ; SSE:       # %bb.0: # %entry
224 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
225 ; SSE-NEXT:    retq
227 ; AVX-LABEL: test12:
228 ; AVX:       # %bb.0: # %entry
229 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
230 ; AVX-NEXT:    retq
231 entry:
232   %cmp = icmp sge <8 x i16> %a, %b
233   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
234   ret <8 x i16> %sel
237 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
238 ; SSE2-LABEL: test13:
239 ; SSE2:       # %bb.0: # %entry
240 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
241 ; SSE2-NEXT:    psubusw %xmm1, %xmm2
242 ; SSE2-NEXT:    psubw %xmm2, %xmm0
243 ; SSE2-NEXT:    retq
245 ; SSE4-LABEL: test13:
246 ; SSE4:       # %bb.0: # %entry
247 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
248 ; SSE4-NEXT:    retq
250 ; AVX-LABEL: test13:
251 ; AVX:       # %bb.0: # %entry
252 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
253 ; AVX-NEXT:    retq
254 entry:
255   %cmp = icmp ult <8 x i16> %a, %b
256   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
257   ret <8 x i16> %sel
260 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
261 ; SSE2-LABEL: test14:
262 ; SSE2:       # %bb.0: # %entry
263 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
264 ; SSE2-NEXT:    psubusw %xmm1, %xmm2
265 ; SSE2-NEXT:    psubw %xmm2, %xmm0
266 ; SSE2-NEXT:    retq
268 ; SSE4-LABEL: test14:
269 ; SSE4:       # %bb.0: # %entry
270 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
271 ; SSE4-NEXT:    retq
273 ; AVX-LABEL: test14:
274 ; AVX:       # %bb.0: # %entry
275 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
276 ; AVX-NEXT:    retq
277 entry:
278   %cmp = icmp ule <8 x i16> %a, %b
279   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
280   ret <8 x i16> %sel
283 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
284 ; SSE2-LABEL: test15:
285 ; SSE2:       # %bb.0: # %entry
286 ; SSE2-NEXT:    psubusw %xmm0, %xmm1
287 ; SSE2-NEXT:    paddw %xmm1, %xmm0
288 ; SSE2-NEXT:    retq
290 ; SSE4-LABEL: test15:
291 ; SSE4:       # %bb.0: # %entry
292 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
293 ; SSE4-NEXT:    retq
295 ; AVX-LABEL: test15:
296 ; AVX:       # %bb.0: # %entry
297 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
298 ; AVX-NEXT:    retq
299 entry:
300   %cmp = icmp ugt <8 x i16> %a, %b
301   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
302   ret <8 x i16> %sel
305 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
306 ; SSE2-LABEL: test16:
307 ; SSE2:       # %bb.0: # %entry
308 ; SSE2-NEXT:    psubusw %xmm0, %xmm1
309 ; SSE2-NEXT:    paddw %xmm1, %xmm0
310 ; SSE2-NEXT:    retq
312 ; SSE4-LABEL: test16:
313 ; SSE4:       # %bb.0: # %entry
314 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
315 ; SSE4-NEXT:    retq
317 ; AVX-LABEL: test16:
318 ; AVX:       # %bb.0: # %entry
319 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
320 ; AVX-NEXT:    retq
321 entry:
322   %cmp = icmp uge <8 x i16> %a, %b
323   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
324   ret <8 x i16> %sel
327 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
328 ; SSE2-LABEL: test17:
329 ; SSE2:       # %bb.0: # %entry
330 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
331 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
332 ; SSE2-NEXT:    pand %xmm2, %xmm0
333 ; SSE2-NEXT:    pandn %xmm1, %xmm2
334 ; SSE2-NEXT:    por %xmm2, %xmm0
335 ; SSE2-NEXT:    retq
337 ; SSE4-LABEL: test17:
338 ; SSE4:       # %bb.0: # %entry
339 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
340 ; SSE4-NEXT:    retq
342 ; AVX-LABEL: test17:
343 ; AVX:       # %bb.0: # %entry
344 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
345 ; AVX-NEXT:    retq
346 entry:
347   %cmp = icmp slt <4 x i32> %a, %b
348   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
349   ret <4 x i32> %sel
352 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
353 ; SSE2-LABEL: test18:
354 ; SSE2:       # %bb.0: # %entry
355 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
356 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
357 ; SSE2-NEXT:    pand %xmm2, %xmm0
358 ; SSE2-NEXT:    pandn %xmm1, %xmm2
359 ; SSE2-NEXT:    por %xmm2, %xmm0
360 ; SSE2-NEXT:    retq
362 ; SSE4-LABEL: test18:
363 ; SSE4:       # %bb.0: # %entry
364 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
365 ; SSE4-NEXT:    retq
367 ; AVX-LABEL: test18:
368 ; AVX:       # %bb.0: # %entry
369 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
370 ; AVX-NEXT:    retq
371 entry:
372   %cmp = icmp sle <4 x i32> %a, %b
373   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
374   ret <4 x i32> %sel
377 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
378 ; SSE2-LABEL: test19:
379 ; SSE2:       # %bb.0: # %entry
380 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
381 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
382 ; SSE2-NEXT:    pand %xmm2, %xmm0
383 ; SSE2-NEXT:    pandn %xmm1, %xmm2
384 ; SSE2-NEXT:    por %xmm2, %xmm0
385 ; SSE2-NEXT:    retq
387 ; SSE4-LABEL: test19:
388 ; SSE4:       # %bb.0: # %entry
389 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
390 ; SSE4-NEXT:    retq
392 ; AVX-LABEL: test19:
393 ; AVX:       # %bb.0: # %entry
394 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
395 ; AVX-NEXT:    retq
396 entry:
397   %cmp = icmp sgt <4 x i32> %a, %b
398   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
399   ret <4 x i32> %sel
402 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
403 ; SSE2-LABEL: test20:
404 ; SSE2:       # %bb.0: # %entry
405 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
406 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
407 ; SSE2-NEXT:    pand %xmm2, %xmm0
408 ; SSE2-NEXT:    pandn %xmm1, %xmm2
409 ; SSE2-NEXT:    por %xmm2, %xmm0
410 ; SSE2-NEXT:    retq
412 ; SSE4-LABEL: test20:
413 ; SSE4:       # %bb.0: # %entry
414 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
415 ; SSE4-NEXT:    retq
417 ; AVX-LABEL: test20:
418 ; AVX:       # %bb.0: # %entry
419 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
420 ; AVX-NEXT:    retq
421 entry:
422   %cmp = icmp sge <4 x i32> %a, %b
423   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
424   ret <4 x i32> %sel
427 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
428 ; SSE2-LABEL: test21:
429 ; SSE2:       # %bb.0: # %entry
430 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
431 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
432 ; SSE2-NEXT:    pxor %xmm2, %xmm3
433 ; SSE2-NEXT:    pxor %xmm1, %xmm2
434 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
435 ; SSE2-NEXT:    pand %xmm2, %xmm0
436 ; SSE2-NEXT:    pandn %xmm1, %xmm2
437 ; SSE2-NEXT:    por %xmm2, %xmm0
438 ; SSE2-NEXT:    retq
440 ; SSE4-LABEL: test21:
441 ; SSE4:       # %bb.0: # %entry
442 ; SSE4-NEXT:    pminud %xmm1, %xmm0
443 ; SSE4-NEXT:    retq
445 ; AVX-LABEL: test21:
446 ; AVX:       # %bb.0: # %entry
447 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
448 ; AVX-NEXT:    retq
449 entry:
450   %cmp = icmp ult <4 x i32> %a, %b
451   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
452   ret <4 x i32> %sel
455 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
456 ; SSE2-LABEL: test22:
457 ; SSE2:       # %bb.0: # %entry
458 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
459 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
460 ; SSE2-NEXT:    pxor %xmm2, %xmm3
461 ; SSE2-NEXT:    pxor %xmm1, %xmm2
462 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
463 ; SSE2-NEXT:    pand %xmm2, %xmm0
464 ; SSE2-NEXT:    pandn %xmm1, %xmm2
465 ; SSE2-NEXT:    por %xmm2, %xmm0
466 ; SSE2-NEXT:    retq
468 ; SSE4-LABEL: test22:
469 ; SSE4:       # %bb.0: # %entry
470 ; SSE4-NEXT:    pminud %xmm1, %xmm0
471 ; SSE4-NEXT:    retq
473 ; AVX-LABEL: test22:
474 ; AVX:       # %bb.0: # %entry
475 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
476 ; AVX-NEXT:    retq
477 entry:
478   %cmp = icmp ule <4 x i32> %a, %b
479   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
480   ret <4 x i32> %sel
483 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
484 ; SSE2-LABEL: test23:
485 ; SSE2:       # %bb.0: # %entry
486 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
487 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
488 ; SSE2-NEXT:    pxor %xmm2, %xmm3
489 ; SSE2-NEXT:    pxor %xmm0, %xmm2
490 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
491 ; SSE2-NEXT:    pand %xmm2, %xmm0
492 ; SSE2-NEXT:    pandn %xmm1, %xmm2
493 ; SSE2-NEXT:    por %xmm2, %xmm0
494 ; SSE2-NEXT:    retq
496 ; SSE4-LABEL: test23:
497 ; SSE4:       # %bb.0: # %entry
498 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
499 ; SSE4-NEXT:    retq
501 ; AVX-LABEL: test23:
502 ; AVX:       # %bb.0: # %entry
503 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
504 ; AVX-NEXT:    retq
505 entry:
506   %cmp = icmp ugt <4 x i32> %a, %b
507   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
508   ret <4 x i32> %sel
511 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
512 ; SSE2-LABEL: test24:
513 ; SSE2:       # %bb.0: # %entry
514 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
515 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
516 ; SSE2-NEXT:    pxor %xmm2, %xmm3
517 ; SSE2-NEXT:    pxor %xmm0, %xmm2
518 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
519 ; SSE2-NEXT:    pand %xmm2, %xmm0
520 ; SSE2-NEXT:    pandn %xmm1, %xmm2
521 ; SSE2-NEXT:    por %xmm2, %xmm0
522 ; SSE2-NEXT:    retq
524 ; SSE4-LABEL: test24:
525 ; SSE4:       # %bb.0: # %entry
526 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
527 ; SSE4-NEXT:    retq
529 ; AVX-LABEL: test24:
530 ; AVX:       # %bb.0: # %entry
531 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
532 ; AVX-NEXT:    retq
533 entry:
534   %cmp = icmp uge <4 x i32> %a, %b
535   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
536   ret <4 x i32> %sel
539 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
540 ; SSE2-LABEL: test25:
541 ; SSE2:       # %bb.0: # %entry
542 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
543 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
544 ; SSE2-NEXT:    pand %xmm4, %xmm0
545 ; SSE2-NEXT:    pandn %xmm2, %xmm4
546 ; SSE2-NEXT:    por %xmm4, %xmm0
547 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
548 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
549 ; SSE2-NEXT:    pand %xmm2, %xmm1
550 ; SSE2-NEXT:    pandn %xmm3, %xmm2
551 ; SSE2-NEXT:    por %xmm2, %xmm1
552 ; SSE2-NEXT:    retq
554 ; SSE4-LABEL: test25:
555 ; SSE4:       # %bb.0: # %entry
556 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
557 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
558 ; SSE4-NEXT:    retq
560 ; AVX1-LABEL: test25:
561 ; AVX1:       # %bb.0: # %entry
562 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
563 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
564 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
565 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
566 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
567 ; AVX1-NEXT:    retq
569 ; AVX2-LABEL: test25:
570 ; AVX2:       # %bb.0: # %entry
571 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
572 ; AVX2-NEXT:    retq
574 ; AVX512-LABEL: test25:
575 ; AVX512:       # %bb.0: # %entry
576 ; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
577 ; AVX512-NEXT:    retq
578 entry:
579   %cmp = icmp slt <32 x i8> %a, %b
580   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
581   ret <32 x i8> %sel
584 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
585 ; SSE2-LABEL: test26:
586 ; SSE2:       # %bb.0: # %entry
587 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
588 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
589 ; SSE2-NEXT:    pand %xmm4, %xmm0
590 ; SSE2-NEXT:    pandn %xmm2, %xmm4
591 ; SSE2-NEXT:    por %xmm4, %xmm0
592 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
593 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
594 ; SSE2-NEXT:    pand %xmm2, %xmm1
595 ; SSE2-NEXT:    pandn %xmm3, %xmm2
596 ; SSE2-NEXT:    por %xmm2, %xmm1
597 ; SSE2-NEXT:    retq
599 ; SSE4-LABEL: test26:
600 ; SSE4:       # %bb.0: # %entry
601 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
602 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
603 ; SSE4-NEXT:    retq
605 ; AVX1-LABEL: test26:
606 ; AVX1:       # %bb.0: # %entry
607 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
608 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
609 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
610 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
611 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
612 ; AVX1-NEXT:    retq
614 ; AVX2-LABEL: test26:
615 ; AVX2:       # %bb.0: # %entry
616 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
617 ; AVX2-NEXT:    retq
619 ; AVX512-LABEL: test26:
620 ; AVX512:       # %bb.0: # %entry
621 ; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
622 ; AVX512-NEXT:    retq
623 entry:
624   %cmp = icmp sle <32 x i8> %a, %b
625   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
626   ret <32 x i8> %sel
629 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
630 ; SSE2-LABEL: test27:
631 ; SSE2:       # %bb.0: # %entry
632 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
633 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
634 ; SSE2-NEXT:    pand %xmm4, %xmm0
635 ; SSE2-NEXT:    pandn %xmm2, %xmm4
636 ; SSE2-NEXT:    por %xmm4, %xmm0
637 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
638 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
639 ; SSE2-NEXT:    pand %xmm2, %xmm1
640 ; SSE2-NEXT:    pandn %xmm3, %xmm2
641 ; SSE2-NEXT:    por %xmm2, %xmm1
642 ; SSE2-NEXT:    retq
644 ; SSE4-LABEL: test27:
645 ; SSE4:       # %bb.0: # %entry
646 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
647 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
648 ; SSE4-NEXT:    retq
650 ; AVX1-LABEL: test27:
651 ; AVX1:       # %bb.0: # %entry
652 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
653 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
654 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
655 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
656 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
657 ; AVX1-NEXT:    retq
659 ; AVX2-LABEL: test27:
660 ; AVX2:       # %bb.0: # %entry
661 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
662 ; AVX2-NEXT:    retq
664 ; AVX512-LABEL: test27:
665 ; AVX512:       # %bb.0: # %entry
666 ; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
667 ; AVX512-NEXT:    retq
668 entry:
669   %cmp = icmp sgt <32 x i8> %a, %b
670   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
671   ret <32 x i8> %sel
674 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
675 ; SSE2-LABEL: test28:
676 ; SSE2:       # %bb.0: # %entry
677 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
678 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
679 ; SSE2-NEXT:    pand %xmm4, %xmm0
680 ; SSE2-NEXT:    pandn %xmm2, %xmm4
681 ; SSE2-NEXT:    por %xmm4, %xmm0
682 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
683 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
684 ; SSE2-NEXT:    pand %xmm2, %xmm1
685 ; SSE2-NEXT:    pandn %xmm3, %xmm2
686 ; SSE2-NEXT:    por %xmm2, %xmm1
687 ; SSE2-NEXT:    retq
689 ; SSE4-LABEL: test28:
690 ; SSE4:       # %bb.0: # %entry
691 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
692 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
693 ; SSE4-NEXT:    retq
695 ; AVX1-LABEL: test28:
696 ; AVX1:       # %bb.0: # %entry
697 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
698 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
699 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
700 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
701 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
702 ; AVX1-NEXT:    retq
704 ; AVX2-LABEL: test28:
705 ; AVX2:       # %bb.0: # %entry
706 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
707 ; AVX2-NEXT:    retq
709 ; AVX512-LABEL: test28:
710 ; AVX512:       # %bb.0: # %entry
711 ; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
712 ; AVX512-NEXT:    retq
713 entry:
714   %cmp = icmp sge <32 x i8> %a, %b
715   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
716   ret <32 x i8> %sel
719 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
720 ; SSE-LABEL: test29:
721 ; SSE:       # %bb.0: # %entry
722 ; SSE-NEXT:    pminub %xmm2, %xmm0
723 ; SSE-NEXT:    pminub %xmm3, %xmm1
724 ; SSE-NEXT:    retq
726 ; AVX1-LABEL: test29:
727 ; AVX1:       # %bb.0: # %entry
728 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
729 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
730 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
731 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
732 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
733 ; AVX1-NEXT:    retq
735 ; AVX2-LABEL: test29:
736 ; AVX2:       # %bb.0: # %entry
737 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
738 ; AVX2-NEXT:    retq
740 ; AVX512-LABEL: test29:
741 ; AVX512:       # %bb.0: # %entry
742 ; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
743 ; AVX512-NEXT:    retq
744 entry:
745   %cmp = icmp ult <32 x i8> %a, %b
746   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
747   ret <32 x i8> %sel
750 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
751 ; SSE-LABEL: test30:
752 ; SSE:       # %bb.0: # %entry
753 ; SSE-NEXT:    pminub %xmm2, %xmm0
754 ; SSE-NEXT:    pminub %xmm3, %xmm1
755 ; SSE-NEXT:    retq
757 ; AVX1-LABEL: test30:
758 ; AVX1:       # %bb.0: # %entry
759 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
760 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
761 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
762 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
763 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
764 ; AVX1-NEXT:    retq
766 ; AVX2-LABEL: test30:
767 ; AVX2:       # %bb.0: # %entry
768 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
769 ; AVX2-NEXT:    retq
771 ; AVX512-LABEL: test30:
772 ; AVX512:       # %bb.0: # %entry
773 ; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
774 ; AVX512-NEXT:    retq
775 entry:
776   %cmp = icmp ule <32 x i8> %a, %b
777   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
778   ret <32 x i8> %sel
781 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
782 ; SSE-LABEL: test31:
783 ; SSE:       # %bb.0: # %entry
784 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
785 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
786 ; SSE-NEXT:    retq
788 ; AVX1-LABEL: test31:
789 ; AVX1:       # %bb.0: # %entry
790 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
791 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
792 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
793 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
794 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
795 ; AVX1-NEXT:    retq
797 ; AVX2-LABEL: test31:
798 ; AVX2:       # %bb.0: # %entry
799 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
800 ; AVX2-NEXT:    retq
802 ; AVX512-LABEL: test31:
803 ; AVX512:       # %bb.0: # %entry
804 ; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
805 ; AVX512-NEXT:    retq
806 entry:
807   %cmp = icmp ugt <32 x i8> %a, %b
808   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
809   ret <32 x i8> %sel
812 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
813 ; SSE-LABEL: test32:
814 ; SSE:       # %bb.0: # %entry
815 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
816 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
817 ; SSE-NEXT:    retq
819 ; AVX1-LABEL: test32:
820 ; AVX1:       # %bb.0: # %entry
821 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
822 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
823 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
824 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
825 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
826 ; AVX1-NEXT:    retq
828 ; AVX2-LABEL: test32:
829 ; AVX2:       # %bb.0: # %entry
830 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
831 ; AVX2-NEXT:    retq
833 ; AVX512-LABEL: test32:
834 ; AVX512:       # %bb.0: # %entry
835 ; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
836 ; AVX512-NEXT:    retq
837 entry:
838   %cmp = icmp uge <32 x i8> %a, %b
839   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
840   ret <32 x i8> %sel
843 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
844 ; SSE-LABEL: test33:
845 ; SSE:       # %bb.0: # %entry
846 ; SSE-NEXT:    pminsw %xmm2, %xmm0
847 ; SSE-NEXT:    pminsw %xmm3, %xmm1
848 ; SSE-NEXT:    retq
850 ; AVX1-LABEL: test33:
851 ; AVX1:       # %bb.0: # %entry
852 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
853 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
854 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
855 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
856 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
857 ; AVX1-NEXT:    retq
859 ; AVX2-LABEL: test33:
860 ; AVX2:       # %bb.0: # %entry
861 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
862 ; AVX2-NEXT:    retq
864 ; AVX512-LABEL: test33:
865 ; AVX512:       # %bb.0: # %entry
866 ; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
867 ; AVX512-NEXT:    retq
868 entry:
869   %cmp = icmp slt <16 x i16> %a, %b
870   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
871   ret <16 x i16> %sel
874 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
875 ; SSE-LABEL: test34:
876 ; SSE:       # %bb.0: # %entry
877 ; SSE-NEXT:    pminsw %xmm2, %xmm0
878 ; SSE-NEXT:    pminsw %xmm3, %xmm1
879 ; SSE-NEXT:    retq
881 ; AVX1-LABEL: test34:
882 ; AVX1:       # %bb.0: # %entry
883 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
884 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
885 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
886 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
887 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
888 ; AVX1-NEXT:    retq
890 ; AVX2-LABEL: test34:
891 ; AVX2:       # %bb.0: # %entry
892 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
893 ; AVX2-NEXT:    retq
895 ; AVX512-LABEL: test34:
896 ; AVX512:       # %bb.0: # %entry
897 ; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
898 ; AVX512-NEXT:    retq
899 entry:
900   %cmp = icmp sle <16 x i16> %a, %b
901   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
902   ret <16 x i16> %sel
905 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
906 ; SSE-LABEL: test35:
907 ; SSE:       # %bb.0: # %entry
908 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
909 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
910 ; SSE-NEXT:    retq
912 ; AVX1-LABEL: test35:
913 ; AVX1:       # %bb.0: # %entry
914 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
915 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
916 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
917 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
918 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
919 ; AVX1-NEXT:    retq
921 ; AVX2-LABEL: test35:
922 ; AVX2:       # %bb.0: # %entry
923 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
924 ; AVX2-NEXT:    retq
926 ; AVX512-LABEL: test35:
927 ; AVX512:       # %bb.0: # %entry
928 ; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
929 ; AVX512-NEXT:    retq
930 entry:
931   %cmp = icmp sgt <16 x i16> %a, %b
932   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
933   ret <16 x i16> %sel
936 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
937 ; SSE-LABEL: test36:
938 ; SSE:       # %bb.0: # %entry
939 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
940 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
941 ; SSE-NEXT:    retq
943 ; AVX1-LABEL: test36:
944 ; AVX1:       # %bb.0: # %entry
945 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
946 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
947 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
948 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
949 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
950 ; AVX1-NEXT:    retq
952 ; AVX2-LABEL: test36:
953 ; AVX2:       # %bb.0: # %entry
954 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
955 ; AVX2-NEXT:    retq
957 ; AVX512-LABEL: test36:
958 ; AVX512:       # %bb.0: # %entry
959 ; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
960 ; AVX512-NEXT:    retq
961 entry:
962   %cmp = icmp sge <16 x i16> %a, %b
963   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
964   ret <16 x i16> %sel
967 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
968 ; SSE2-LABEL: test37:
969 ; SSE2:       # %bb.0: # %entry
970 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
971 ; SSE2-NEXT:    psubusw %xmm2, %xmm4
972 ; SSE2-NEXT:    psubw %xmm4, %xmm0
973 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
974 ; SSE2-NEXT:    psubusw %xmm3, %xmm2
975 ; SSE2-NEXT:    psubw %xmm2, %xmm1
976 ; SSE2-NEXT:    retq
978 ; SSE4-LABEL: test37:
979 ; SSE4:       # %bb.0: # %entry
980 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
981 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
982 ; SSE4-NEXT:    retq
984 ; AVX1-LABEL: test37:
985 ; AVX1:       # %bb.0: # %entry
986 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
987 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
988 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
989 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
990 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
991 ; AVX1-NEXT:    retq
993 ; AVX2-LABEL: test37:
994 ; AVX2:       # %bb.0: # %entry
995 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
996 ; AVX2-NEXT:    retq
998 ; AVX512-LABEL: test37:
999 ; AVX512:       # %bb.0: # %entry
1000 ; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1001 ; AVX512-NEXT:    retq
1002 entry:
1003   %cmp = icmp ult <16 x i16> %a, %b
1004   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1005   ret <16 x i16> %sel
1008 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1009 ; SSE2-LABEL: test38:
1010 ; SSE2:       # %bb.0: # %entry
1011 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1012 ; SSE2-NEXT:    psubusw %xmm2, %xmm4
1013 ; SSE2-NEXT:    psubw %xmm4, %xmm0
1014 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1015 ; SSE2-NEXT:    psubusw %xmm3, %xmm2
1016 ; SSE2-NEXT:    psubw %xmm2, %xmm1
1017 ; SSE2-NEXT:    retq
1019 ; SSE4-LABEL: test38:
1020 ; SSE4:       # %bb.0: # %entry
1021 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
1022 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
1023 ; SSE4-NEXT:    retq
1025 ; AVX1-LABEL: test38:
1026 ; AVX1:       # %bb.0: # %entry
1027 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1028 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1029 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1030 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1031 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1032 ; AVX1-NEXT:    retq
1034 ; AVX2-LABEL: test38:
1035 ; AVX2:       # %bb.0: # %entry
1036 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1037 ; AVX2-NEXT:    retq
1039 ; AVX512-LABEL: test38:
1040 ; AVX512:       # %bb.0: # %entry
1041 ; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1042 ; AVX512-NEXT:    retq
1043 entry:
1044   %cmp = icmp ule <16 x i16> %a, %b
1045   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1046   ret <16 x i16> %sel
1049 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1050 ; SSE2-LABEL: test39:
1051 ; SSE2:       # %bb.0: # %entry
1052 ; SSE2-NEXT:    psubusw %xmm0, %xmm2
1053 ; SSE2-NEXT:    paddw %xmm2, %xmm0
1054 ; SSE2-NEXT:    psubusw %xmm1, %xmm3
1055 ; SSE2-NEXT:    paddw %xmm3, %xmm1
1056 ; SSE2-NEXT:    retq
1058 ; SSE4-LABEL: test39:
1059 ; SSE4:       # %bb.0: # %entry
1060 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1061 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1062 ; SSE4-NEXT:    retq
1064 ; AVX1-LABEL: test39:
1065 ; AVX1:       # %bb.0: # %entry
1066 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1067 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1068 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1069 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1070 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1071 ; AVX1-NEXT:    retq
1073 ; AVX2-LABEL: test39:
1074 ; AVX2:       # %bb.0: # %entry
1075 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1076 ; AVX2-NEXT:    retq
1078 ; AVX512-LABEL: test39:
1079 ; AVX512:       # %bb.0: # %entry
1080 ; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1081 ; AVX512-NEXT:    retq
1082 entry:
1083   %cmp = icmp ugt <16 x i16> %a, %b
1084   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1085   ret <16 x i16> %sel
1088 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1089 ; SSE2-LABEL: test40:
1090 ; SSE2:       # %bb.0: # %entry
1091 ; SSE2-NEXT:    psubusw %xmm0, %xmm2
1092 ; SSE2-NEXT:    paddw %xmm2, %xmm0
1093 ; SSE2-NEXT:    psubusw %xmm1, %xmm3
1094 ; SSE2-NEXT:    paddw %xmm3, %xmm1
1095 ; SSE2-NEXT:    retq
1097 ; SSE4-LABEL: test40:
1098 ; SSE4:       # %bb.0: # %entry
1099 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1100 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1101 ; SSE4-NEXT:    retq
1103 ; AVX1-LABEL: test40:
1104 ; AVX1:       # %bb.0: # %entry
1105 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1106 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1107 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1108 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1109 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1110 ; AVX1-NEXT:    retq
1112 ; AVX2-LABEL: test40:
1113 ; AVX2:       # %bb.0: # %entry
1114 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1115 ; AVX2-NEXT:    retq
1117 ; AVX512-LABEL: test40:
1118 ; AVX512:       # %bb.0: # %entry
1119 ; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1120 ; AVX512-NEXT:    retq
1121 entry:
1122   %cmp = icmp uge <16 x i16> %a, %b
1123   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1124   ret <16 x i16> %sel
1127 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1128 ; SSE2-LABEL: test41:
1129 ; SSE2:       # %bb.0: # %entry
1130 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
1131 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1132 ; SSE2-NEXT:    pand %xmm4, %xmm0
1133 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1134 ; SSE2-NEXT:    por %xmm4, %xmm0
1135 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1136 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1137 ; SSE2-NEXT:    pand %xmm2, %xmm1
1138 ; SSE2-NEXT:    pandn %xmm3, %xmm2
1139 ; SSE2-NEXT:    por %xmm2, %xmm1
1140 ; SSE2-NEXT:    retq
1142 ; SSE4-LABEL: test41:
1143 ; SSE4:       # %bb.0: # %entry
1144 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
1145 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
1146 ; SSE4-NEXT:    retq
1148 ; AVX1-LABEL: test41:
1149 ; AVX1:       # %bb.0: # %entry
1150 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1151 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1152 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1153 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1154 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1155 ; AVX1-NEXT:    retq
1157 ; AVX2-LABEL: test41:
1158 ; AVX2:       # %bb.0: # %entry
1159 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1160 ; AVX2-NEXT:    retq
1162 ; AVX512-LABEL: test41:
1163 ; AVX512:       # %bb.0: # %entry
1164 ; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1165 ; AVX512-NEXT:    retq
1166 entry:
1167   %cmp = icmp slt <8 x i32> %a, %b
1168   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1169   ret <8 x i32> %sel
1172 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1173 ; SSE2-LABEL: test42:
1174 ; SSE2:       # %bb.0: # %entry
1175 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
1176 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1177 ; SSE2-NEXT:    pand %xmm4, %xmm0
1178 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1179 ; SSE2-NEXT:    por %xmm4, %xmm0
1180 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1181 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1182 ; SSE2-NEXT:    pand %xmm2, %xmm1
1183 ; SSE2-NEXT:    pandn %xmm3, %xmm2
1184 ; SSE2-NEXT:    por %xmm2, %xmm1
1185 ; SSE2-NEXT:    retq
1187 ; SSE4-LABEL: test42:
1188 ; SSE4:       # %bb.0: # %entry
1189 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
1190 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
1191 ; SSE4-NEXT:    retq
1193 ; AVX1-LABEL: test42:
1194 ; AVX1:       # %bb.0: # %entry
1195 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1196 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1197 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1198 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1199 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1200 ; AVX1-NEXT:    retq
1202 ; AVX2-LABEL: test42:
1203 ; AVX2:       # %bb.0: # %entry
1204 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1205 ; AVX2-NEXT:    retq
1207 ; AVX512-LABEL: test42:
1208 ; AVX512:       # %bb.0: # %entry
1209 ; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1210 ; AVX512-NEXT:    retq
1211 entry:
1212   %cmp = icmp sle <8 x i32> %a, %b
1213   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1214   ret <8 x i32> %sel
1217 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1218 ; SSE2-LABEL: test43:
1219 ; SSE2:       # %bb.0: # %entry
1220 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1221 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1222 ; SSE2-NEXT:    pand %xmm4, %xmm0
1223 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1224 ; SSE2-NEXT:    por %xmm4, %xmm0
1225 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1226 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1227 ; SSE2-NEXT:    pand %xmm2, %xmm1
1228 ; SSE2-NEXT:    pandn %xmm3, %xmm2
1229 ; SSE2-NEXT:    por %xmm2, %xmm1
1230 ; SSE2-NEXT:    retq
1232 ; SSE4-LABEL: test43:
1233 ; SSE4:       # %bb.0: # %entry
1234 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1235 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1236 ; SSE4-NEXT:    retq
1238 ; AVX1-LABEL: test43:
1239 ; AVX1:       # %bb.0: # %entry
1240 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1241 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1242 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1243 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1244 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1245 ; AVX1-NEXT:    retq
1247 ; AVX2-LABEL: test43:
1248 ; AVX2:       # %bb.0: # %entry
1249 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1250 ; AVX2-NEXT:    retq
1252 ; AVX512-LABEL: test43:
1253 ; AVX512:       # %bb.0: # %entry
1254 ; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1255 ; AVX512-NEXT:    retq
1256 entry:
1257   %cmp = icmp sgt <8 x i32> %a, %b
1258   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1259   ret <8 x i32> %sel
1262 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1263 ; SSE2-LABEL: test44:
1264 ; SSE2:       # %bb.0: # %entry
1265 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1266 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1267 ; SSE2-NEXT:    pand %xmm4, %xmm0
1268 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1269 ; SSE2-NEXT:    por %xmm4, %xmm0
1270 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1271 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1272 ; SSE2-NEXT:    pand %xmm2, %xmm1
1273 ; SSE2-NEXT:    pandn %xmm3, %xmm2
1274 ; SSE2-NEXT:    por %xmm2, %xmm1
1275 ; SSE2-NEXT:    retq
1277 ; SSE4-LABEL: test44:
1278 ; SSE4:       # %bb.0: # %entry
1279 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1280 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1281 ; SSE4-NEXT:    retq
1283 ; AVX1-LABEL: test44:
1284 ; AVX1:       # %bb.0: # %entry
1285 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1286 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1287 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1288 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1289 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1290 ; AVX1-NEXT:    retq
1292 ; AVX2-LABEL: test44:
1293 ; AVX2:       # %bb.0: # %entry
1294 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1295 ; AVX2-NEXT:    retq
1297 ; AVX512-LABEL: test44:
1298 ; AVX512:       # %bb.0: # %entry
1299 ; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1300 ; AVX512-NEXT:    retq
1301 entry:
1302   %cmp = icmp sge <8 x i32> %a, %b
1303   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1304   ret <8 x i32> %sel
1307 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1308 ; SSE2-LABEL: test45:
1309 ; SSE2:       # %bb.0: # %entry
1310 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1311 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1312 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1313 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1314 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1315 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1316 ; SSE2-NEXT:    pand %xmm6, %xmm0
1317 ; SSE2-NEXT:    pandn %xmm2, %xmm6
1318 ; SSE2-NEXT:    por %xmm6, %xmm0
1319 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1320 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1321 ; SSE2-NEXT:    pxor %xmm3, %xmm4
1322 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1323 ; SSE2-NEXT:    pand %xmm4, %xmm1
1324 ; SSE2-NEXT:    pandn %xmm3, %xmm4
1325 ; SSE2-NEXT:    por %xmm4, %xmm1
1326 ; SSE2-NEXT:    retq
1328 ; SSE4-LABEL: test45:
1329 ; SSE4:       # %bb.0: # %entry
1330 ; SSE4-NEXT:    pminud %xmm2, %xmm0
1331 ; SSE4-NEXT:    pminud %xmm3, %xmm1
1332 ; SSE4-NEXT:    retq
1334 ; AVX1-LABEL: test45:
1335 ; AVX1:       # %bb.0: # %entry
1336 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1337 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1338 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1339 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1340 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1341 ; AVX1-NEXT:    retq
1343 ; AVX2-LABEL: test45:
1344 ; AVX2:       # %bb.0: # %entry
1345 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1346 ; AVX2-NEXT:    retq
1348 ; AVX512-LABEL: test45:
1349 ; AVX512:       # %bb.0: # %entry
1350 ; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1351 ; AVX512-NEXT:    retq
1352 entry:
1353   %cmp = icmp ult <8 x i32> %a, %b
1354   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1355   ret <8 x i32> %sel
1358 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1359 ; SSE2-LABEL: test46:
1360 ; SSE2:       # %bb.0: # %entry
1361 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1362 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1363 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1364 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1365 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1366 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1367 ; SSE2-NEXT:    pand %xmm6, %xmm0
1368 ; SSE2-NEXT:    pandn %xmm2, %xmm6
1369 ; SSE2-NEXT:    por %xmm6, %xmm0
1370 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1371 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1372 ; SSE2-NEXT:    pxor %xmm3, %xmm4
1373 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1374 ; SSE2-NEXT:    pand %xmm4, %xmm1
1375 ; SSE2-NEXT:    pandn %xmm3, %xmm4
1376 ; SSE2-NEXT:    por %xmm4, %xmm1
1377 ; SSE2-NEXT:    retq
1379 ; SSE4-LABEL: test46:
1380 ; SSE4:       # %bb.0: # %entry
1381 ; SSE4-NEXT:    pminud %xmm2, %xmm0
1382 ; SSE4-NEXT:    pminud %xmm3, %xmm1
1383 ; SSE4-NEXT:    retq
1385 ; AVX1-LABEL: test46:
1386 ; AVX1:       # %bb.0: # %entry
1387 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1388 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1389 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1390 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1391 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1392 ; AVX1-NEXT:    retq
1394 ; AVX2-LABEL: test46:
1395 ; AVX2:       # %bb.0: # %entry
1396 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1397 ; AVX2-NEXT:    retq
1399 ; AVX512-LABEL: test46:
1400 ; AVX512:       # %bb.0: # %entry
1401 ; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1402 ; AVX512-NEXT:    retq
1403 entry:
1404   %cmp = icmp ule <8 x i32> %a, %b
1405   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1406   ret <8 x i32> %sel
1409 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1410 ; SSE2-LABEL: test47:
1411 ; SSE2:       # %bb.0: # %entry
1412 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1413 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
1414 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1415 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
1416 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1417 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1418 ; SSE2-NEXT:    pand %xmm6, %xmm0
1419 ; SSE2-NEXT:    pandn %xmm2, %xmm6
1420 ; SSE2-NEXT:    por %xmm6, %xmm0
1421 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1422 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1423 ; SSE2-NEXT:    pxor %xmm1, %xmm4
1424 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1425 ; SSE2-NEXT:    pand %xmm4, %xmm1
1426 ; SSE2-NEXT:    pandn %xmm3, %xmm4
1427 ; SSE2-NEXT:    por %xmm4, %xmm1
1428 ; SSE2-NEXT:    retq
1430 ; SSE4-LABEL: test47:
1431 ; SSE4:       # %bb.0: # %entry
1432 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1433 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1434 ; SSE4-NEXT:    retq
1436 ; AVX1-LABEL: test47:
1437 ; AVX1:       # %bb.0: # %entry
1438 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1439 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1440 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1441 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1442 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1443 ; AVX1-NEXT:    retq
1445 ; AVX2-LABEL: test47:
1446 ; AVX2:       # %bb.0: # %entry
1447 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1448 ; AVX2-NEXT:    retq
1450 ; AVX512-LABEL: test47:
1451 ; AVX512:       # %bb.0: # %entry
1452 ; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1453 ; AVX512-NEXT:    retq
1454 entry:
1455   %cmp = icmp ugt <8 x i32> %a, %b
1456   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1457   ret <8 x i32> %sel
1460 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1461 ; SSE2-LABEL: test48:
1462 ; SSE2:       # %bb.0: # %entry
1463 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1464 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
1465 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1466 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
1467 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1468 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1469 ; SSE2-NEXT:    pand %xmm6, %xmm0
1470 ; SSE2-NEXT:    pandn %xmm2, %xmm6
1471 ; SSE2-NEXT:    por %xmm6, %xmm0
1472 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1473 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1474 ; SSE2-NEXT:    pxor %xmm1, %xmm4
1475 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1476 ; SSE2-NEXT:    pand %xmm4, %xmm1
1477 ; SSE2-NEXT:    pandn %xmm3, %xmm4
1478 ; SSE2-NEXT:    por %xmm4, %xmm1
1479 ; SSE2-NEXT:    retq
1481 ; SSE4-LABEL: test48:
1482 ; SSE4:       # %bb.0: # %entry
1483 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1484 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1485 ; SSE4-NEXT:    retq
1487 ; AVX1-LABEL: test48:
1488 ; AVX1:       # %bb.0: # %entry
1489 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1490 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1491 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1492 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1493 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1494 ; AVX1-NEXT:    retq
1496 ; AVX2-LABEL: test48:
1497 ; AVX2:       # %bb.0: # %entry
1498 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1499 ; AVX2-NEXT:    retq
1501 ; AVX512-LABEL: test48:
1502 ; AVX512:       # %bb.0: # %entry
1503 ; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1504 ; AVX512-NEXT:    retq
1505 entry:
1506   %cmp = icmp uge <8 x i32> %a, %b
1507   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1508   ret <8 x i32> %sel
1511 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1512 ; SSE2-LABEL: test49:
1513 ; SSE2:       # %bb.0: # %entry
1514 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1515 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1516 ; SSE2-NEXT:    pand %xmm2, %xmm0
1517 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1518 ; SSE2-NEXT:    por %xmm2, %xmm0
1519 ; SSE2-NEXT:    retq
1521 ; SSE4-LABEL: test49:
1522 ; SSE4:       # %bb.0: # %entry
1523 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1524 ; SSE4-NEXT:    retq
1526 ; AVX-LABEL: test49:
1527 ; AVX:       # %bb.0: # %entry
1528 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1529 ; AVX-NEXT:    retq
1530 entry:
1531   %cmp = icmp slt <16 x i8> %a, %b
1532   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1533   ret <16 x i8> %sel
1536 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1537 ; SSE2-LABEL: test50:
1538 ; SSE2:       # %bb.0: # %entry
1539 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1540 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1541 ; SSE2-NEXT:    pand %xmm2, %xmm0
1542 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1543 ; SSE2-NEXT:    por %xmm2, %xmm0
1544 ; SSE2-NEXT:    retq
1546 ; SSE4-LABEL: test50:
1547 ; SSE4:       # %bb.0: # %entry
1548 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1549 ; SSE4-NEXT:    retq
1551 ; AVX-LABEL: test50:
1552 ; AVX:       # %bb.0: # %entry
1553 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1554 ; AVX-NEXT:    retq
1555 entry:
1556   %cmp = icmp sle <16 x i8> %a, %b
1557   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1558   ret <16 x i8> %sel
1561 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1562 ; SSE2-LABEL: test51:
1563 ; SSE2:       # %bb.0: # %entry
1564 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1565 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1566 ; SSE2-NEXT:    pand %xmm2, %xmm0
1567 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1568 ; SSE2-NEXT:    por %xmm2, %xmm0
1569 ; SSE2-NEXT:    retq
1571 ; SSE4-LABEL: test51:
1572 ; SSE4:       # %bb.0: # %entry
1573 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
1574 ; SSE4-NEXT:    retq
1576 ; AVX-LABEL: test51:
1577 ; AVX:       # %bb.0: # %entry
1578 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1579 ; AVX-NEXT:    retq
1580 entry:
1581   %cmp = icmp sgt <16 x i8> %a, %b
1582   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1583   ret <16 x i8> %sel
1586 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1587 ; SSE2-LABEL: test52:
1588 ; SSE2:       # %bb.0: # %entry
1589 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1590 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1591 ; SSE2-NEXT:    pand %xmm2, %xmm0
1592 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1593 ; SSE2-NEXT:    por %xmm2, %xmm0
1594 ; SSE2-NEXT:    retq
1596 ; SSE4-LABEL: test52:
1597 ; SSE4:       # %bb.0: # %entry
1598 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
1599 ; SSE4-NEXT:    retq
1601 ; AVX-LABEL: test52:
1602 ; AVX:       # %bb.0: # %entry
1603 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1604 ; AVX-NEXT:    retq
1605 entry:
1606   %cmp = icmp sge <16 x i8> %a, %b
1607   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1608   ret <16 x i8> %sel
1611 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
1612 ; SSE-LABEL: test53:
1613 ; SSE:       # %bb.0: # %entry
1614 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
1615 ; SSE-NEXT:    retq
1617 ; AVX-LABEL: test53:
1618 ; AVX:       # %bb.0: # %entry
1619 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1620 ; AVX-NEXT:    retq
1621 entry:
1622   %cmp = icmp ult <16 x i8> %a, %b
1623   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1624   ret <16 x i8> %sel
1627 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
1628 ; SSE-LABEL: test54:
1629 ; SSE:       # %bb.0: # %entry
1630 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
1631 ; SSE-NEXT:    retq
1633 ; AVX-LABEL: test54:
1634 ; AVX:       # %bb.0: # %entry
1635 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1636 ; AVX-NEXT:    retq
1637 entry:
1638   %cmp = icmp ule <16 x i8> %a, %b
1639   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1640   ret <16 x i8> %sel
1643 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
1644 ; SSE-LABEL: test55:
1645 ; SSE:       # %bb.0: # %entry
1646 ; SSE-NEXT:    pminub %xmm1, %xmm0
1647 ; SSE-NEXT:    retq
1649 ; AVX-LABEL: test55:
1650 ; AVX:       # %bb.0: # %entry
1651 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1652 ; AVX-NEXT:    retq
1653 entry:
1654   %cmp = icmp ugt <16 x i8> %a, %b
1655   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1656   ret <16 x i8> %sel
1659 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1660 ; SSE-LABEL: test56:
1661 ; SSE:       # %bb.0: # %entry
1662 ; SSE-NEXT:    pminub %xmm1, %xmm0
1663 ; SSE-NEXT:    retq
1665 ; AVX-LABEL: test56:
1666 ; AVX:       # %bb.0: # %entry
1667 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1668 ; AVX-NEXT:    retq
1669 entry:
1670   %cmp = icmp uge <16 x i8> %a, %b
1671   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1672   ret <16 x i8> %sel
1675 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1676 ; SSE-LABEL: test57:
1677 ; SSE:       # %bb.0: # %entry
1678 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1679 ; SSE-NEXT:    retq
1681 ; AVX-LABEL: test57:
1682 ; AVX:       # %bb.0: # %entry
1683 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1684 ; AVX-NEXT:    retq
1685 entry:
1686   %cmp = icmp slt <8 x i16> %a, %b
1687   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1688   ret <8 x i16> %sel
1691 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
1692 ; SSE-LABEL: test58:
1693 ; SSE:       # %bb.0: # %entry
1694 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1695 ; SSE-NEXT:    retq
1697 ; AVX-LABEL: test58:
1698 ; AVX:       # %bb.0: # %entry
1699 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1700 ; AVX-NEXT:    retq
1701 entry:
1702   %cmp = icmp sle <8 x i16> %a, %b
1703   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1704   ret <8 x i16> %sel
1707 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
1708 ; SSE-LABEL: test59:
1709 ; SSE:       # %bb.0: # %entry
1710 ; SSE-NEXT:    pminsw %xmm1, %xmm0
1711 ; SSE-NEXT:    retq
1713 ; AVX-LABEL: test59:
1714 ; AVX:       # %bb.0: # %entry
1715 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1716 ; AVX-NEXT:    retq
1717 entry:
1718   %cmp = icmp sgt <8 x i16> %a, %b
1719   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1720   ret <8 x i16> %sel
1723 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
1724 ; SSE-LABEL: test60:
1725 ; SSE:       # %bb.0: # %entry
1726 ; SSE-NEXT:    pminsw %xmm1, %xmm0
1727 ; SSE-NEXT:    retq
1729 ; AVX-LABEL: test60:
1730 ; AVX:       # %bb.0: # %entry
1731 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1732 ; AVX-NEXT:    retq
1733 entry:
1734   %cmp = icmp sge <8 x i16> %a, %b
1735   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1736   ret <8 x i16> %sel
1739 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1740 ; SSE2-LABEL: test61:
1741 ; SSE2:       # %bb.0: # %entry
1742 ; SSE2-NEXT:    psubusw %xmm0, %xmm1
1743 ; SSE2-NEXT:    paddw %xmm1, %xmm0
1744 ; SSE2-NEXT:    retq
1746 ; SSE4-LABEL: test61:
1747 ; SSE4:       # %bb.0: # %entry
1748 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1749 ; SSE4-NEXT:    retq
1751 ; AVX-LABEL: test61:
1752 ; AVX:       # %bb.0: # %entry
1753 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1754 ; AVX-NEXT:    retq
1755 entry:
1756   %cmp = icmp ult <8 x i16> %a, %b
1757   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1758   ret <8 x i16> %sel
1761 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1762 ; SSE2-LABEL: test62:
1763 ; SSE2:       # %bb.0: # %entry
1764 ; SSE2-NEXT:    psubusw %xmm0, %xmm1
1765 ; SSE2-NEXT:    paddw %xmm1, %xmm0
1766 ; SSE2-NEXT:    retq
1768 ; SSE4-LABEL: test62:
1769 ; SSE4:       # %bb.0: # %entry
1770 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1771 ; SSE4-NEXT:    retq
1773 ; AVX-LABEL: test62:
1774 ; AVX:       # %bb.0: # %entry
1775 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1776 ; AVX-NEXT:    retq
1777 entry:
1778   %cmp = icmp ule <8 x i16> %a, %b
1779   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1780   ret <8 x i16> %sel
1783 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1784 ; SSE2-LABEL: test63:
1785 ; SSE2:       # %bb.0: # %entry
1786 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1787 ; SSE2-NEXT:    psubusw %xmm1, %xmm2
1788 ; SSE2-NEXT:    psubw %xmm2, %xmm0
1789 ; SSE2-NEXT:    retq
1791 ; SSE4-LABEL: test63:
1792 ; SSE4:       # %bb.0: # %entry
1793 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
1794 ; SSE4-NEXT:    retq
1796 ; AVX-LABEL: test63:
1797 ; AVX:       # %bb.0: # %entry
1798 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1799 ; AVX-NEXT:    retq
1800 entry:
1801   %cmp = icmp ugt <8 x i16> %a, %b
1802   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1803   ret <8 x i16> %sel
1806 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1807 ; SSE2-LABEL: test64:
1808 ; SSE2:       # %bb.0: # %entry
1809 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1810 ; SSE2-NEXT:    psubusw %xmm1, %xmm2
1811 ; SSE2-NEXT:    psubw %xmm2, %xmm0
1812 ; SSE2-NEXT:    retq
1814 ; SSE4-LABEL: test64:
1815 ; SSE4:       # %bb.0: # %entry
1816 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
1817 ; SSE4-NEXT:    retq
1819 ; AVX-LABEL: test64:
1820 ; AVX:       # %bb.0: # %entry
1821 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1822 ; AVX-NEXT:    retq
1823 entry:
1824   %cmp = icmp uge <8 x i16> %a, %b
1825   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1826   ret <8 x i16> %sel
1829 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1830 ; SSE2-LABEL: test65:
1831 ; SSE2:       # %bb.0: # %entry
1832 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1833 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1834 ; SSE2-NEXT:    pand %xmm2, %xmm0
1835 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1836 ; SSE2-NEXT:    por %xmm2, %xmm0
1837 ; SSE2-NEXT:    retq
1839 ; SSE4-LABEL: test65:
1840 ; SSE4:       # %bb.0: # %entry
1841 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1842 ; SSE4-NEXT:    retq
1844 ; AVX-LABEL: test65:
1845 ; AVX:       # %bb.0: # %entry
1846 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1847 ; AVX-NEXT:    retq
1848 entry:
1849   %cmp = icmp slt <4 x i32> %a, %b
1850   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1851   ret <4 x i32> %sel
1854 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
1855 ; SSE2-LABEL: test66:
1856 ; SSE2:       # %bb.0: # %entry
1857 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1858 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1859 ; SSE2-NEXT:    pand %xmm2, %xmm0
1860 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1861 ; SSE2-NEXT:    por %xmm2, %xmm0
1862 ; SSE2-NEXT:    retq
1864 ; SSE4-LABEL: test66:
1865 ; SSE4:       # %bb.0: # %entry
1866 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1867 ; SSE4-NEXT:    retq
1869 ; AVX-LABEL: test66:
1870 ; AVX:       # %bb.0: # %entry
1871 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1872 ; AVX-NEXT:    retq
1873 entry:
1874   %cmp = icmp sle <4 x i32> %a, %b
1875   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1876   ret <4 x i32> %sel
1879 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
1880 ; SSE2-LABEL: test67:
1881 ; SSE2:       # %bb.0: # %entry
1882 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1883 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1884 ; SSE2-NEXT:    pand %xmm2, %xmm0
1885 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1886 ; SSE2-NEXT:    por %xmm2, %xmm0
1887 ; SSE2-NEXT:    retq
1889 ; SSE4-LABEL: test67:
1890 ; SSE4:       # %bb.0: # %entry
1891 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
1892 ; SSE4-NEXT:    retq
1894 ; AVX-LABEL: test67:
1895 ; AVX:       # %bb.0: # %entry
1896 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1897 ; AVX-NEXT:    retq
1898 entry:
1899   %cmp = icmp sgt <4 x i32> %a, %b
1900   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1901   ret <4 x i32> %sel
1904 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
1905 ; SSE2-LABEL: test68:
1906 ; SSE2:       # %bb.0: # %entry
1907 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1908 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1909 ; SSE2-NEXT:    pand %xmm2, %xmm0
1910 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1911 ; SSE2-NEXT:    por %xmm2, %xmm0
1912 ; SSE2-NEXT:    retq
1914 ; SSE4-LABEL: test68:
1915 ; SSE4:       # %bb.0: # %entry
1916 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
1917 ; SSE4-NEXT:    retq
1919 ; AVX-LABEL: test68:
1920 ; AVX:       # %bb.0: # %entry
1921 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1922 ; AVX-NEXT:    retq
1923 entry:
1924   %cmp = icmp sge <4 x i32> %a, %b
1925   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1926   ret <4 x i32> %sel
1929 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
1930 ; SSE2-LABEL: test69:
1931 ; SSE2:       # %bb.0: # %entry
1932 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1933 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
1934 ; SSE2-NEXT:    pxor %xmm2, %xmm3
1935 ; SSE2-NEXT:    pxor %xmm0, %xmm2
1936 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1937 ; SSE2-NEXT:    pand %xmm2, %xmm0
1938 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1939 ; SSE2-NEXT:    por %xmm2, %xmm0
1940 ; SSE2-NEXT:    retq
1942 ; SSE4-LABEL: test69:
1943 ; SSE4:       # %bb.0: # %entry
1944 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1945 ; SSE4-NEXT:    retq
1947 ; AVX-LABEL: test69:
1948 ; AVX:       # %bb.0: # %entry
1949 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1950 ; AVX-NEXT:    retq
1951 entry:
1952   %cmp = icmp ult <4 x i32> %a, %b
1953   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1954   ret <4 x i32> %sel
1957 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
1958 ; SSE2-LABEL: test70:
1959 ; SSE2:       # %bb.0: # %entry
1960 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1961 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
1962 ; SSE2-NEXT:    pxor %xmm2, %xmm3
1963 ; SSE2-NEXT:    pxor %xmm0, %xmm2
1964 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1965 ; SSE2-NEXT:    pand %xmm2, %xmm0
1966 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1967 ; SSE2-NEXT:    por %xmm2, %xmm0
1968 ; SSE2-NEXT:    retq
1970 ; SSE4-LABEL: test70:
1971 ; SSE4:       # %bb.0: # %entry
1972 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1973 ; SSE4-NEXT:    retq
1975 ; AVX-LABEL: test70:
1976 ; AVX:       # %bb.0: # %entry
1977 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1978 ; AVX-NEXT:    retq
1979 entry:
1980   %cmp = icmp ule <4 x i32> %a, %b
1981   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1982   ret <4 x i32> %sel
1985 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
1986 ; SSE2-LABEL: test71:
1987 ; SSE2:       # %bb.0: # %entry
1988 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1989 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
1990 ; SSE2-NEXT:    pxor %xmm2, %xmm3
1991 ; SSE2-NEXT:    pxor %xmm1, %xmm2
1992 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1993 ; SSE2-NEXT:    pand %xmm2, %xmm0
1994 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1995 ; SSE2-NEXT:    por %xmm2, %xmm0
1996 ; SSE2-NEXT:    retq
1998 ; SSE4-LABEL: test71:
1999 ; SSE4:       # %bb.0: # %entry
2000 ; SSE4-NEXT:    pminud %xmm1, %xmm0
2001 ; SSE4-NEXT:    retq
2003 ; AVX-LABEL: test71:
2004 ; AVX:       # %bb.0: # %entry
2005 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2006 ; AVX-NEXT:    retq
2007 entry:
2008   %cmp = icmp ugt <4 x i32> %a, %b
2009   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2010   ret <4 x i32> %sel
2013 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2014 ; SSE2-LABEL: test72:
2015 ; SSE2:       # %bb.0: # %entry
2016 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2017 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
2018 ; SSE2-NEXT:    pxor %xmm2, %xmm3
2019 ; SSE2-NEXT:    pxor %xmm1, %xmm2
2020 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2021 ; SSE2-NEXT:    pand %xmm2, %xmm0
2022 ; SSE2-NEXT:    pandn %xmm1, %xmm2
2023 ; SSE2-NEXT:    por %xmm2, %xmm0
2024 ; SSE2-NEXT:    retq
2026 ; SSE4-LABEL: test72:
2027 ; SSE4:       # %bb.0: # %entry
2028 ; SSE4-NEXT:    pminud %xmm1, %xmm0
2029 ; SSE4-NEXT:    retq
2031 ; AVX-LABEL: test72:
2032 ; AVX:       # %bb.0: # %entry
2033 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2034 ; AVX-NEXT:    retq
2035 entry:
2036   %cmp = icmp uge <4 x i32> %a, %b
2037   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2038   ret <4 x i32> %sel
2041 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2042 ; SSE2-LABEL: test73:
2043 ; SSE2:       # %bb.0: # %entry
2044 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2045 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2046 ; SSE2-NEXT:    pand %xmm4, %xmm0
2047 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2048 ; SSE2-NEXT:    por %xmm4, %xmm0
2049 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2050 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2051 ; SSE2-NEXT:    pand %xmm2, %xmm1
2052 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2053 ; SSE2-NEXT:    por %xmm2, %xmm1
2054 ; SSE2-NEXT:    retq
2056 ; SSE4-LABEL: test73:
2057 ; SSE4:       # %bb.0: # %entry
2058 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2059 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2060 ; SSE4-NEXT:    retq
2062 ; AVX1-LABEL: test73:
2063 ; AVX1:       # %bb.0: # %entry
2064 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2065 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2066 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2067 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2068 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2069 ; AVX1-NEXT:    retq
2071 ; AVX2-LABEL: test73:
2072 ; AVX2:       # %bb.0: # %entry
2073 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2074 ; AVX2-NEXT:    retq
2076 ; AVX512-LABEL: test73:
2077 ; AVX512:       # %bb.0: # %entry
2078 ; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2079 ; AVX512-NEXT:    retq
2080 entry:
2081   %cmp = icmp slt <32 x i8> %a, %b
2082   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2083   ret <32 x i8> %sel
2086 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2087 ; SSE2-LABEL: test74:
2088 ; SSE2:       # %bb.0: # %entry
2089 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2090 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2091 ; SSE2-NEXT:    pand %xmm4, %xmm0
2092 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2093 ; SSE2-NEXT:    por %xmm4, %xmm0
2094 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2095 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2096 ; SSE2-NEXT:    pand %xmm2, %xmm1
2097 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2098 ; SSE2-NEXT:    por %xmm2, %xmm1
2099 ; SSE2-NEXT:    retq
2101 ; SSE4-LABEL: test74:
2102 ; SSE4:       # %bb.0: # %entry
2103 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2104 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2105 ; SSE4-NEXT:    retq
2107 ; AVX1-LABEL: test74:
2108 ; AVX1:       # %bb.0: # %entry
2109 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2110 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2111 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2112 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2113 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2114 ; AVX1-NEXT:    retq
2116 ; AVX2-LABEL: test74:
2117 ; AVX2:       # %bb.0: # %entry
2118 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2119 ; AVX2-NEXT:    retq
2121 ; AVX512-LABEL: test74:
2122 ; AVX512:       # %bb.0: # %entry
2123 ; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2124 ; AVX512-NEXT:    retq
2125 entry:
2126   %cmp = icmp sle <32 x i8> %a, %b
2127   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2128   ret <32 x i8> %sel
2131 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2132 ; SSE2-LABEL: test75:
2133 ; SSE2:       # %bb.0: # %entry
2134 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2135 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2136 ; SSE2-NEXT:    pand %xmm4, %xmm0
2137 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2138 ; SSE2-NEXT:    por %xmm4, %xmm0
2139 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2140 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2141 ; SSE2-NEXT:    pand %xmm2, %xmm1
2142 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2143 ; SSE2-NEXT:    por %xmm2, %xmm1
2144 ; SSE2-NEXT:    retq
2146 ; SSE4-LABEL: test75:
2147 ; SSE4:       # %bb.0: # %entry
2148 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
2149 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
2150 ; SSE4-NEXT:    retq
2152 ; AVX1-LABEL: test75:
2153 ; AVX1:       # %bb.0: # %entry
2154 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2155 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2156 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2157 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2158 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2159 ; AVX1-NEXT:    retq
2161 ; AVX2-LABEL: test75:
2162 ; AVX2:       # %bb.0: # %entry
2163 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2164 ; AVX2-NEXT:    retq
2166 ; AVX512-LABEL: test75:
2167 ; AVX512:       # %bb.0: # %entry
2168 ; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2169 ; AVX512-NEXT:    retq
2170 entry:
2171   %cmp = icmp sgt <32 x i8> %a, %b
2172   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2173   ret <32 x i8> %sel
2176 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2177 ; SSE2-LABEL: test76:
2178 ; SSE2:       # %bb.0: # %entry
2179 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2180 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2181 ; SSE2-NEXT:    pand %xmm4, %xmm0
2182 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2183 ; SSE2-NEXT:    por %xmm4, %xmm0
2184 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2185 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2186 ; SSE2-NEXT:    pand %xmm2, %xmm1
2187 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2188 ; SSE2-NEXT:    por %xmm2, %xmm1
2189 ; SSE2-NEXT:    retq
2191 ; SSE4-LABEL: test76:
2192 ; SSE4:       # %bb.0: # %entry
2193 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
2194 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
2195 ; SSE4-NEXT:    retq
2197 ; AVX1-LABEL: test76:
2198 ; AVX1:       # %bb.0: # %entry
2199 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2200 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2201 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2202 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2203 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2204 ; AVX1-NEXT:    retq
2206 ; AVX2-LABEL: test76:
2207 ; AVX2:       # %bb.0: # %entry
2208 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2209 ; AVX2-NEXT:    retq
2211 ; AVX512-LABEL: test76:
2212 ; AVX512:       # %bb.0: # %entry
2213 ; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2214 ; AVX512-NEXT:    retq
2215 entry:
2216   %cmp = icmp sge <32 x i8> %a, %b
2217   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2218   ret <32 x i8> %sel
2221 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2222 ; SSE-LABEL: test77:
2223 ; SSE:       # %bb.0: # %entry
2224 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
2225 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
2226 ; SSE-NEXT:    retq
2228 ; AVX1-LABEL: test77:
2229 ; AVX1:       # %bb.0: # %entry
2230 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2231 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2232 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2233 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2234 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2235 ; AVX1-NEXT:    retq
2237 ; AVX2-LABEL: test77:
2238 ; AVX2:       # %bb.0: # %entry
2239 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2240 ; AVX2-NEXT:    retq
2242 ; AVX512-LABEL: test77:
2243 ; AVX512:       # %bb.0: # %entry
2244 ; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2245 ; AVX512-NEXT:    retq
2246 entry:
2247   %cmp = icmp ult <32 x i8> %a, %b
2248   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2249   ret <32 x i8> %sel
2252 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2253 ; SSE-LABEL: test78:
2254 ; SSE:       # %bb.0: # %entry
2255 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
2256 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
2257 ; SSE-NEXT:    retq
2259 ; AVX1-LABEL: test78:
2260 ; AVX1:       # %bb.0: # %entry
2261 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2262 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2263 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2264 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2265 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2266 ; AVX1-NEXT:    retq
2268 ; AVX2-LABEL: test78:
2269 ; AVX2:       # %bb.0: # %entry
2270 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2271 ; AVX2-NEXT:    retq
2273 ; AVX512-LABEL: test78:
2274 ; AVX512:       # %bb.0: # %entry
2275 ; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2276 ; AVX512-NEXT:    retq
2277 entry:
2278   %cmp = icmp ule <32 x i8> %a, %b
2279   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2280   ret <32 x i8> %sel
2283 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2284 ; SSE-LABEL: test79:
2285 ; SSE:       # %bb.0: # %entry
2286 ; SSE-NEXT:    pminub %xmm2, %xmm0
2287 ; SSE-NEXT:    pminub %xmm3, %xmm1
2288 ; SSE-NEXT:    retq
2290 ; AVX1-LABEL: test79:
2291 ; AVX1:       # %bb.0: # %entry
2292 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2293 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2294 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2295 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2296 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2297 ; AVX1-NEXT:    retq
2299 ; AVX2-LABEL: test79:
2300 ; AVX2:       # %bb.0: # %entry
2301 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2302 ; AVX2-NEXT:    retq
2304 ; AVX512-LABEL: test79:
2305 ; AVX512:       # %bb.0: # %entry
2306 ; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2307 ; AVX512-NEXT:    retq
2308 entry:
2309   %cmp = icmp ugt <32 x i8> %a, %b
2310   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2311   ret <32 x i8> %sel
2314 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2315 ; SSE-LABEL: test80:
2316 ; SSE:       # %bb.0: # %entry
2317 ; SSE-NEXT:    pminub %xmm2, %xmm0
2318 ; SSE-NEXT:    pminub %xmm3, %xmm1
2319 ; SSE-NEXT:    retq
2321 ; AVX1-LABEL: test80:
2322 ; AVX1:       # %bb.0: # %entry
2323 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2324 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2325 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2326 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2327 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2328 ; AVX1-NEXT:    retq
2330 ; AVX2-LABEL: test80:
2331 ; AVX2:       # %bb.0: # %entry
2332 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2333 ; AVX2-NEXT:    retq
2335 ; AVX512-LABEL: test80:
2336 ; AVX512:       # %bb.0: # %entry
2337 ; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2338 ; AVX512-NEXT:    retq
2339 entry:
2340   %cmp = icmp uge <32 x i8> %a, %b
2341   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2342   ret <32 x i8> %sel
2345 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2346 ; SSE-LABEL: test81:
2347 ; SSE:       # %bb.0: # %entry
2348 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2349 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2350 ; SSE-NEXT:    retq
2352 ; AVX1-LABEL: test81:
2353 ; AVX1:       # %bb.0: # %entry
2354 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2355 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2356 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2357 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2358 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2359 ; AVX1-NEXT:    retq
2361 ; AVX2-LABEL: test81:
2362 ; AVX2:       # %bb.0: # %entry
2363 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2364 ; AVX2-NEXT:    retq
2366 ; AVX512-LABEL: test81:
2367 ; AVX512:       # %bb.0: # %entry
2368 ; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2369 ; AVX512-NEXT:    retq
2370 entry:
2371   %cmp = icmp slt <16 x i16> %a, %b
2372   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2373   ret <16 x i16> %sel
2376 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2377 ; SSE-LABEL: test82:
2378 ; SSE:       # %bb.0: # %entry
2379 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2380 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2381 ; SSE-NEXT:    retq
2383 ; AVX1-LABEL: test82:
2384 ; AVX1:       # %bb.0: # %entry
2385 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2386 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2387 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2388 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2389 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2390 ; AVX1-NEXT:    retq
2392 ; AVX2-LABEL: test82:
2393 ; AVX2:       # %bb.0: # %entry
2394 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2395 ; AVX2-NEXT:    retq
2397 ; AVX512-LABEL: test82:
2398 ; AVX512:       # %bb.0: # %entry
2399 ; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2400 ; AVX512-NEXT:    retq
2401 entry:
2402   %cmp = icmp sle <16 x i16> %a, %b
2403   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2404   ret <16 x i16> %sel
2407 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2408 ; SSE-LABEL: test83:
2409 ; SSE:       # %bb.0: # %entry
2410 ; SSE-NEXT:    pminsw %xmm2, %xmm0
2411 ; SSE-NEXT:    pminsw %xmm3, %xmm1
2412 ; SSE-NEXT:    retq
2414 ; AVX1-LABEL: test83:
2415 ; AVX1:       # %bb.0: # %entry
2416 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2417 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2418 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2419 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2420 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2421 ; AVX1-NEXT:    retq
2423 ; AVX2-LABEL: test83:
2424 ; AVX2:       # %bb.0: # %entry
2425 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2426 ; AVX2-NEXT:    retq
2428 ; AVX512-LABEL: test83:
2429 ; AVX512:       # %bb.0: # %entry
2430 ; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2431 ; AVX512-NEXT:    retq
2432 entry:
2433   %cmp = icmp sgt <16 x i16> %a, %b
2434   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2435   ret <16 x i16> %sel
2438 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2439 ; SSE-LABEL: test84:
2440 ; SSE:       # %bb.0: # %entry
2441 ; SSE-NEXT:    pminsw %xmm2, %xmm0
2442 ; SSE-NEXT:    pminsw %xmm3, %xmm1
2443 ; SSE-NEXT:    retq
2445 ; AVX1-LABEL: test84:
2446 ; AVX1:       # %bb.0: # %entry
2447 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2448 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2449 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2450 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2451 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2452 ; AVX1-NEXT:    retq
2454 ; AVX2-LABEL: test84:
2455 ; AVX2:       # %bb.0: # %entry
2456 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2457 ; AVX2-NEXT:    retq
2459 ; AVX512-LABEL: test84:
2460 ; AVX512:       # %bb.0: # %entry
2461 ; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2462 ; AVX512-NEXT:    retq
2463 entry:
2464   %cmp = icmp sge <16 x i16> %a, %b
2465   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2466   ret <16 x i16> %sel
2469 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2470 ; SSE2-LABEL: test85:
2471 ; SSE2:       # %bb.0: # %entry
2472 ; SSE2-NEXT:    psubusw %xmm0, %xmm2
2473 ; SSE2-NEXT:    paddw %xmm2, %xmm0
2474 ; SSE2-NEXT:    psubusw %xmm1, %xmm3
2475 ; SSE2-NEXT:    paddw %xmm3, %xmm1
2476 ; SSE2-NEXT:    retq
2478 ; SSE4-LABEL: test85:
2479 ; SSE4:       # %bb.0: # %entry
2480 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2481 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2482 ; SSE4-NEXT:    retq
2484 ; AVX1-LABEL: test85:
2485 ; AVX1:       # %bb.0: # %entry
2486 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2487 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2488 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2489 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2490 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2491 ; AVX1-NEXT:    retq
2493 ; AVX2-LABEL: test85:
2494 ; AVX2:       # %bb.0: # %entry
2495 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2496 ; AVX2-NEXT:    retq
2498 ; AVX512-LABEL: test85:
2499 ; AVX512:       # %bb.0: # %entry
2500 ; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2501 ; AVX512-NEXT:    retq
2502 entry:
2503   %cmp = icmp ult <16 x i16> %a, %b
2504   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2505   ret <16 x i16> %sel
2508 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2509 ; SSE2-LABEL: test86:
2510 ; SSE2:       # %bb.0: # %entry
2511 ; SSE2-NEXT:    psubusw %xmm0, %xmm2
2512 ; SSE2-NEXT:    paddw %xmm2, %xmm0
2513 ; SSE2-NEXT:    psubusw %xmm1, %xmm3
2514 ; SSE2-NEXT:    paddw %xmm3, %xmm1
2515 ; SSE2-NEXT:    retq
2517 ; SSE4-LABEL: test86:
2518 ; SSE4:       # %bb.0: # %entry
2519 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2520 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2521 ; SSE4-NEXT:    retq
2523 ; AVX1-LABEL: test86:
2524 ; AVX1:       # %bb.0: # %entry
2525 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2526 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2527 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2528 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2529 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2530 ; AVX1-NEXT:    retq
2532 ; AVX2-LABEL: test86:
2533 ; AVX2:       # %bb.0: # %entry
2534 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2535 ; AVX2-NEXT:    retq
2537 ; AVX512-LABEL: test86:
2538 ; AVX512:       # %bb.0: # %entry
2539 ; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2540 ; AVX512-NEXT:    retq
2541 entry:
2542   %cmp = icmp ule <16 x i16> %a, %b
2543   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2544   ret <16 x i16> %sel
2547 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2548 ; SSE2-LABEL: test87:
2549 ; SSE2:       # %bb.0: # %entry
2550 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2551 ; SSE2-NEXT:    psubusw %xmm2, %xmm4
2552 ; SSE2-NEXT:    psubw %xmm4, %xmm0
2553 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2554 ; SSE2-NEXT:    psubusw %xmm3, %xmm2
2555 ; SSE2-NEXT:    psubw %xmm2, %xmm1
2556 ; SSE2-NEXT:    retq
2558 ; SSE4-LABEL: test87:
2559 ; SSE4:       # %bb.0: # %entry
2560 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
2561 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
2562 ; SSE4-NEXT:    retq
2564 ; AVX1-LABEL: test87:
2565 ; AVX1:       # %bb.0: # %entry
2566 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2567 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2568 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2569 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2570 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2571 ; AVX1-NEXT:    retq
2573 ; AVX2-LABEL: test87:
2574 ; AVX2:       # %bb.0: # %entry
2575 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2576 ; AVX2-NEXT:    retq
2578 ; AVX512-LABEL: test87:
2579 ; AVX512:       # %bb.0: # %entry
2580 ; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2581 ; AVX512-NEXT:    retq
2582 entry:
2583   %cmp = icmp ugt <16 x i16> %a, %b
2584   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2585   ret <16 x i16> %sel
2588 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2589 ; SSE2-LABEL: test88:
2590 ; SSE2:       # %bb.0: # %entry
2591 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2592 ; SSE2-NEXT:    psubusw %xmm2, %xmm4
2593 ; SSE2-NEXT:    psubw %xmm4, %xmm0
2594 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2595 ; SSE2-NEXT:    psubusw %xmm3, %xmm2
2596 ; SSE2-NEXT:    psubw %xmm2, %xmm1
2597 ; SSE2-NEXT:    retq
2599 ; SSE4-LABEL: test88:
2600 ; SSE4:       # %bb.0: # %entry
2601 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
2602 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
2603 ; SSE4-NEXT:    retq
2605 ; AVX1-LABEL: test88:
2606 ; AVX1:       # %bb.0: # %entry
2607 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2608 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2609 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2610 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2611 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2612 ; AVX1-NEXT:    retq
2614 ; AVX2-LABEL: test88:
2615 ; AVX2:       # %bb.0: # %entry
2616 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2617 ; AVX2-NEXT:    retq
2619 ; AVX512-LABEL: test88:
2620 ; AVX512:       # %bb.0: # %entry
2621 ; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2622 ; AVX512-NEXT:    retq
2623 entry:
2624   %cmp = icmp uge <16 x i16> %a, %b
2625   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2626   ret <16 x i16> %sel
2629 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2630 ; SSE2-LABEL: test89:
2631 ; SSE2:       # %bb.0: # %entry
2632 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2633 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2634 ; SSE2-NEXT:    pand %xmm4, %xmm0
2635 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2636 ; SSE2-NEXT:    por %xmm4, %xmm0
2637 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2638 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2639 ; SSE2-NEXT:    pand %xmm2, %xmm1
2640 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2641 ; SSE2-NEXT:    por %xmm2, %xmm1
2642 ; SSE2-NEXT:    retq
2644 ; SSE4-LABEL: test89:
2645 ; SSE4:       # %bb.0: # %entry
2646 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2647 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2648 ; SSE4-NEXT:    retq
2650 ; AVX1-LABEL: test89:
2651 ; AVX1:       # %bb.0: # %entry
2652 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2653 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2654 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2655 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2656 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2657 ; AVX1-NEXT:    retq
2659 ; AVX2-LABEL: test89:
2660 ; AVX2:       # %bb.0: # %entry
2661 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2662 ; AVX2-NEXT:    retq
2664 ; AVX512-LABEL: test89:
2665 ; AVX512:       # %bb.0: # %entry
2666 ; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2667 ; AVX512-NEXT:    retq
2668 entry:
2669   %cmp = icmp slt <8 x i32> %a, %b
2670   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2671   ret <8 x i32> %sel
2674 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2675 ; SSE2-LABEL: test90:
2676 ; SSE2:       # %bb.0: # %entry
2677 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2678 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2679 ; SSE2-NEXT:    pand %xmm4, %xmm0
2680 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2681 ; SSE2-NEXT:    por %xmm4, %xmm0
2682 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2683 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2684 ; SSE2-NEXT:    pand %xmm2, %xmm1
2685 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2686 ; SSE2-NEXT:    por %xmm2, %xmm1
2687 ; SSE2-NEXT:    retq
2689 ; SSE4-LABEL: test90:
2690 ; SSE4:       # %bb.0: # %entry
2691 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2692 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2693 ; SSE4-NEXT:    retq
2695 ; AVX1-LABEL: test90:
2696 ; AVX1:       # %bb.0: # %entry
2697 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2698 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2699 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2700 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2701 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2702 ; AVX1-NEXT:    retq
2704 ; AVX2-LABEL: test90:
2705 ; AVX2:       # %bb.0: # %entry
2706 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2707 ; AVX2-NEXT:    retq
2709 ; AVX512-LABEL: test90:
2710 ; AVX512:       # %bb.0: # %entry
2711 ; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2712 ; AVX512-NEXT:    retq
2713 entry:
2714   %cmp = icmp sle <8 x i32> %a, %b
2715   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2716   ret <8 x i32> %sel
2719 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2720 ; SSE2-LABEL: test91:
2721 ; SSE2:       # %bb.0: # %entry
2722 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2723 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2724 ; SSE2-NEXT:    pand %xmm4, %xmm0
2725 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2726 ; SSE2-NEXT:    por %xmm4, %xmm0
2727 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2728 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2729 ; SSE2-NEXT:    pand %xmm2, %xmm1
2730 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2731 ; SSE2-NEXT:    por %xmm2, %xmm1
2732 ; SSE2-NEXT:    retq
2734 ; SSE4-LABEL: test91:
2735 ; SSE4:       # %bb.0: # %entry
2736 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
2737 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
2738 ; SSE4-NEXT:    retq
2740 ; AVX1-LABEL: test91:
2741 ; AVX1:       # %bb.0: # %entry
2742 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2743 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2744 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2745 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2746 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2747 ; AVX1-NEXT:    retq
2749 ; AVX2-LABEL: test91:
2750 ; AVX2:       # %bb.0: # %entry
2751 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2752 ; AVX2-NEXT:    retq
2754 ; AVX512-LABEL: test91:
2755 ; AVX512:       # %bb.0: # %entry
2756 ; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2757 ; AVX512-NEXT:    retq
2758 entry:
2759   %cmp = icmp sgt <8 x i32> %a, %b
2760   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2761   ret <8 x i32> %sel
2764 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
2765 ; SSE2-LABEL: test92:
2766 ; SSE2:       # %bb.0: # %entry
2767 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2768 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2769 ; SSE2-NEXT:    pand %xmm4, %xmm0
2770 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2771 ; SSE2-NEXT:    por %xmm4, %xmm0
2772 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2773 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2774 ; SSE2-NEXT:    pand %xmm2, %xmm1
2775 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2776 ; SSE2-NEXT:    por %xmm2, %xmm1
2777 ; SSE2-NEXT:    retq
2779 ; SSE4-LABEL: test92:
2780 ; SSE4:       # %bb.0: # %entry
2781 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
2782 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
2783 ; SSE4-NEXT:    retq
2785 ; AVX1-LABEL: test92:
2786 ; AVX1:       # %bb.0: # %entry
2787 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2788 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2789 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2790 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2791 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2792 ; AVX1-NEXT:    retq
2794 ; AVX2-LABEL: test92:
2795 ; AVX2:       # %bb.0: # %entry
2796 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2797 ; AVX2-NEXT:    retq
2799 ; AVX512-LABEL: test92:
2800 ; AVX512:       # %bb.0: # %entry
2801 ; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2802 ; AVX512-NEXT:    retq
2803 entry:
2804   %cmp = icmp sge <8 x i32> %a, %b
2805   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2806   ret <8 x i32> %sel
2809 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
2810 ; SSE2-LABEL: test93:
2811 ; SSE2:       # %bb.0: # %entry
2812 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2813 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
2814 ; SSE2-NEXT:    pxor %xmm4, %xmm5
2815 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
2816 ; SSE2-NEXT:    pxor %xmm4, %xmm6
2817 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2818 ; SSE2-NEXT:    pand %xmm6, %xmm0
2819 ; SSE2-NEXT:    pandn %xmm2, %xmm6
2820 ; SSE2-NEXT:    por %xmm6, %xmm0
2821 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2822 ; SSE2-NEXT:    pxor %xmm4, %xmm2
2823 ; SSE2-NEXT:    pxor %xmm1, %xmm4
2824 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2825 ; SSE2-NEXT:    pand %xmm4, %xmm1
2826 ; SSE2-NEXT:    pandn %xmm3, %xmm4
2827 ; SSE2-NEXT:    por %xmm4, %xmm1
2828 ; SSE2-NEXT:    retq
2830 ; SSE4-LABEL: test93:
2831 ; SSE4:       # %bb.0: # %entry
2832 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2833 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2834 ; SSE4-NEXT:    retq
2836 ; AVX1-LABEL: test93:
2837 ; AVX1:       # %bb.0: # %entry
2838 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2839 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2840 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2841 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2842 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2843 ; AVX1-NEXT:    retq
2845 ; AVX2-LABEL: test93:
2846 ; AVX2:       # %bb.0: # %entry
2847 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2848 ; AVX2-NEXT:    retq
2850 ; AVX512-LABEL: test93:
2851 ; AVX512:       # %bb.0: # %entry
2852 ; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2853 ; AVX512-NEXT:    retq
2854 entry:
2855   %cmp = icmp ult <8 x i32> %a, %b
2856   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2857   ret <8 x i32> %sel
2860 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
2861 ; SSE2-LABEL: test94:
2862 ; SSE2:       # %bb.0: # %entry
2863 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2864 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
2865 ; SSE2-NEXT:    pxor %xmm4, %xmm5
2866 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
2867 ; SSE2-NEXT:    pxor %xmm4, %xmm6
2868 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2869 ; SSE2-NEXT:    pand %xmm6, %xmm0
2870 ; SSE2-NEXT:    pandn %xmm2, %xmm6
2871 ; SSE2-NEXT:    por %xmm6, %xmm0
2872 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2873 ; SSE2-NEXT:    pxor %xmm4, %xmm2
2874 ; SSE2-NEXT:    pxor %xmm1, %xmm4
2875 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2876 ; SSE2-NEXT:    pand %xmm4, %xmm1
2877 ; SSE2-NEXT:    pandn %xmm3, %xmm4
2878 ; SSE2-NEXT:    por %xmm4, %xmm1
2879 ; SSE2-NEXT:    retq
2881 ; SSE4-LABEL: test94:
2882 ; SSE4:       # %bb.0: # %entry
2883 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2884 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2885 ; SSE4-NEXT:    retq
2887 ; AVX1-LABEL: test94:
2888 ; AVX1:       # %bb.0: # %entry
2889 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2890 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2891 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2892 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2893 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2894 ; AVX1-NEXT:    retq
2896 ; AVX2-LABEL: test94:
2897 ; AVX2:       # %bb.0: # %entry
2898 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2899 ; AVX2-NEXT:    retq
2901 ; AVX512-LABEL: test94:
2902 ; AVX512:       # %bb.0: # %entry
2903 ; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2904 ; AVX512-NEXT:    retq
2905 entry:
2906   %cmp = icmp ule <8 x i32> %a, %b
2907   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2908   ret <8 x i32> %sel
2911 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
2912 ; SSE2-LABEL: test95:
2913 ; SSE2:       # %bb.0: # %entry
2914 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2915 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
2916 ; SSE2-NEXT:    pxor %xmm4, %xmm5
2917 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
2918 ; SSE2-NEXT:    pxor %xmm4, %xmm6
2919 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2920 ; SSE2-NEXT:    pand %xmm6, %xmm0
2921 ; SSE2-NEXT:    pandn %xmm2, %xmm6
2922 ; SSE2-NEXT:    por %xmm6, %xmm0
2923 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2924 ; SSE2-NEXT:    pxor %xmm4, %xmm2
2925 ; SSE2-NEXT:    pxor %xmm3, %xmm4
2926 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2927 ; SSE2-NEXT:    pand %xmm4, %xmm1
2928 ; SSE2-NEXT:    pandn %xmm3, %xmm4
2929 ; SSE2-NEXT:    por %xmm4, %xmm1
2930 ; SSE2-NEXT:    retq
2932 ; SSE4-LABEL: test95:
2933 ; SSE4:       # %bb.0: # %entry
2934 ; SSE4-NEXT:    pminud %xmm2, %xmm0
2935 ; SSE4-NEXT:    pminud %xmm3, %xmm1
2936 ; SSE4-NEXT:    retq
2938 ; AVX1-LABEL: test95:
2939 ; AVX1:       # %bb.0: # %entry
2940 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2941 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2942 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
2943 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2944 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2945 ; AVX1-NEXT:    retq
2947 ; AVX2-LABEL: test95:
2948 ; AVX2:       # %bb.0: # %entry
2949 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
2950 ; AVX2-NEXT:    retq
2952 ; AVX512-LABEL: test95:
2953 ; AVX512:       # %bb.0: # %entry
2954 ; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
2955 ; AVX512-NEXT:    retq
2956 entry:
2957   %cmp = icmp ugt <8 x i32> %a, %b
2958   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2959   ret <8 x i32> %sel
2962 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
2963 ; SSE2-LABEL: test96:
2964 ; SSE2:       # %bb.0: # %entry
2965 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2966 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
2967 ; SSE2-NEXT:    pxor %xmm4, %xmm5
2968 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
2969 ; SSE2-NEXT:    pxor %xmm4, %xmm6
2970 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2971 ; SSE2-NEXT:    pand %xmm6, %xmm0
2972 ; SSE2-NEXT:    pandn %xmm2, %xmm6
2973 ; SSE2-NEXT:    por %xmm6, %xmm0
2974 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2975 ; SSE2-NEXT:    pxor %xmm4, %xmm2
2976 ; SSE2-NEXT:    pxor %xmm3, %xmm4
2977 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2978 ; SSE2-NEXT:    pand %xmm4, %xmm1
2979 ; SSE2-NEXT:    pandn %xmm3, %xmm4
2980 ; SSE2-NEXT:    por %xmm4, %xmm1
2981 ; SSE2-NEXT:    retq
2983 ; SSE4-LABEL: test96:
2984 ; SSE4:       # %bb.0: # %entry
2985 ; SSE4-NEXT:    pminud %xmm2, %xmm0
2986 ; SSE4-NEXT:    pminud %xmm3, %xmm1
2987 ; SSE4-NEXT:    retq
2989 ; AVX1-LABEL: test96:
2990 ; AVX1:       # %bb.0: # %entry
2991 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2992 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2993 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
2994 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2995 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2996 ; AVX1-NEXT:    retq
2998 ; AVX2-LABEL: test96:
2999 ; AVX2:       # %bb.0: # %entry
3000 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3001 ; AVX2-NEXT:    retq
3003 ; AVX512-LABEL: test96:
3004 ; AVX512:       # %bb.0: # %entry
3005 ; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3006 ; AVX512-NEXT:    retq
3007 entry:
3008   %cmp = icmp uge <8 x i32> %a, %b
3009   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3010   ret <8 x i32> %sel
3013 ; ----------------------------
3015 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3016 ; SSE2-LABEL: test97:
3017 ; SSE2:       # %bb.0: # %entry
3018 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
3019 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3020 ; SSE2-NEXT:    pand %xmm8, %xmm0
3021 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3022 ; SSE2-NEXT:    por %xmm8, %xmm0
3023 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
3024 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3025 ; SSE2-NEXT:    pand %xmm4, %xmm1
3026 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3027 ; SSE2-NEXT:    por %xmm4, %xmm1
3028 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
3029 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3030 ; SSE2-NEXT:    pand %xmm4, %xmm2
3031 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3032 ; SSE2-NEXT:    por %xmm4, %xmm2
3033 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
3034 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3035 ; SSE2-NEXT:    pand %xmm4, %xmm3
3036 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3037 ; SSE2-NEXT:    por %xmm4, %xmm3
3038 ; SSE2-NEXT:    retq
3040 ; SSE4-LABEL: test97:
3041 ; SSE4:       # %bb.0: # %entry
3042 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
3043 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
3044 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
3045 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
3046 ; SSE4-NEXT:    retq
3048 ; AVX1-LABEL: test97:
3049 ; AVX1:       # %bb.0: # %entry
3050 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3051 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3052 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3053 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3054 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3055 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3056 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3057 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3058 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3059 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3060 ; AVX1-NEXT:    retq
3062 ; AVX2-LABEL: test97:
3063 ; AVX2:       # %bb.0: # %entry
3064 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3065 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3066 ; AVX2-NEXT:    retq
3068 ; AVX512F-LABEL: test97:
3069 ; AVX512F:       # %bb.0: # %entry
3070 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3071 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3072 ; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
3073 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
3074 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3075 ; AVX512F-NEXT:    retq
3077 ; AVX512BW-LABEL: test97:
3078 ; AVX512BW:       # %bb.0: # %entry
3079 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3080 ; AVX512BW-NEXT:    retq
3081 entry:
3082   %cmp = icmp slt <64 x i8> %a, %b
3083   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3084   ret <64 x i8> %sel
3087 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3088 ; SSE2-LABEL: test98:
3089 ; SSE2:       # %bb.0: # %entry
3090 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
3091 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3092 ; SSE2-NEXT:    pand %xmm8, %xmm0
3093 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3094 ; SSE2-NEXT:    por %xmm8, %xmm0
3095 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
3096 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3097 ; SSE2-NEXT:    pand %xmm4, %xmm1
3098 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3099 ; SSE2-NEXT:    por %xmm4, %xmm1
3100 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
3101 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3102 ; SSE2-NEXT:    pand %xmm4, %xmm2
3103 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3104 ; SSE2-NEXT:    por %xmm4, %xmm2
3105 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
3106 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3107 ; SSE2-NEXT:    pand %xmm4, %xmm3
3108 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3109 ; SSE2-NEXT:    por %xmm4, %xmm3
3110 ; SSE2-NEXT:    retq
3112 ; SSE4-LABEL: test98:
3113 ; SSE4:       # %bb.0: # %entry
3114 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
3115 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
3116 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
3117 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
3118 ; SSE4-NEXT:    retq
3120 ; AVX1-LABEL: test98:
3121 ; AVX1:       # %bb.0: # %entry
3122 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3123 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3124 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3125 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3126 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3127 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3128 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3129 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3130 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3131 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3132 ; AVX1-NEXT:    retq
3134 ; AVX2-LABEL: test98:
3135 ; AVX2:       # %bb.0: # %entry
3136 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3137 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3138 ; AVX2-NEXT:    retq
3140 ; AVX512F-LABEL: test98:
3141 ; AVX512F:       # %bb.0: # %entry
3142 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3143 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3144 ; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
3145 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
3146 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3147 ; AVX512F-NEXT:    retq
3149 ; AVX512BW-LABEL: test98:
3150 ; AVX512BW:       # %bb.0: # %entry
3151 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3152 ; AVX512BW-NEXT:    retq
3153 entry:
3154   %cmp = icmp sle <64 x i8> %a, %b
3155   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3156   ret <64 x i8> %sel
3159 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3160 ; SSE2-LABEL: test99:
3161 ; SSE2:       # %bb.0: # %entry
3162 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
3163 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3164 ; SSE2-NEXT:    pand %xmm8, %xmm0
3165 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3166 ; SSE2-NEXT:    por %xmm8, %xmm0
3167 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
3168 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3169 ; SSE2-NEXT:    pand %xmm4, %xmm1
3170 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3171 ; SSE2-NEXT:    por %xmm4, %xmm1
3172 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
3173 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
3174 ; SSE2-NEXT:    pand %xmm4, %xmm2
3175 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3176 ; SSE2-NEXT:    por %xmm4, %xmm2
3177 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
3178 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
3179 ; SSE2-NEXT:    pand %xmm4, %xmm3
3180 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3181 ; SSE2-NEXT:    por %xmm4, %xmm3
3182 ; SSE2-NEXT:    retq
3184 ; SSE4-LABEL: test99:
3185 ; SSE4:       # %bb.0: # %entry
3186 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3187 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3188 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3189 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3190 ; SSE4-NEXT:    retq
3192 ; AVX1-LABEL: test99:
3193 ; AVX1:       # %bb.0: # %entry
3194 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3195 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3196 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3197 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3198 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3199 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3200 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3201 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3202 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3203 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3204 ; AVX1-NEXT:    retq
3206 ; AVX2-LABEL: test99:
3207 ; AVX2:       # %bb.0: # %entry
3208 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3209 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3210 ; AVX2-NEXT:    retq
3212 ; AVX512F-LABEL: test99:
3213 ; AVX512F:       # %bb.0: # %entry
3214 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3215 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3216 ; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
3217 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
3218 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3219 ; AVX512F-NEXT:    retq
3221 ; AVX512BW-LABEL: test99:
3222 ; AVX512BW:       # %bb.0: # %entry
3223 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3224 ; AVX512BW-NEXT:    retq
3225 entry:
3226   %cmp = icmp sgt <64 x i8> %a, %b
3227   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3228   ret <64 x i8> %sel
3231 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3232 ; SSE2-LABEL: test100:
3233 ; SSE2:       # %bb.0: # %entry
3234 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
3235 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3236 ; SSE2-NEXT:    pand %xmm8, %xmm0
3237 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3238 ; SSE2-NEXT:    por %xmm8, %xmm0
3239 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
3240 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3241 ; SSE2-NEXT:    pand %xmm4, %xmm1
3242 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3243 ; SSE2-NEXT:    por %xmm4, %xmm1
3244 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
3245 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
3246 ; SSE2-NEXT:    pand %xmm4, %xmm2
3247 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3248 ; SSE2-NEXT:    por %xmm4, %xmm2
3249 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
3250 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
3251 ; SSE2-NEXT:    pand %xmm4, %xmm3
3252 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3253 ; SSE2-NEXT:    por %xmm4, %xmm3
3254 ; SSE2-NEXT:    retq
3256 ; SSE4-LABEL: test100:
3257 ; SSE4:       # %bb.0: # %entry
3258 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3259 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3260 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3261 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3262 ; SSE4-NEXT:    retq
3264 ; AVX1-LABEL: test100:
3265 ; AVX1:       # %bb.0: # %entry
3266 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3267 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3268 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3269 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3270 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3271 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3272 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3273 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3274 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3275 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3276 ; AVX1-NEXT:    retq
3278 ; AVX2-LABEL: test100:
3279 ; AVX2:       # %bb.0: # %entry
3280 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3281 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3282 ; AVX2-NEXT:    retq
3284 ; AVX512F-LABEL: test100:
3285 ; AVX512F:       # %bb.0: # %entry
3286 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3287 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3288 ; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
3289 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
3290 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3291 ; AVX512F-NEXT:    retq
3293 ; AVX512BW-LABEL: test100:
3294 ; AVX512BW:       # %bb.0: # %entry
3295 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3296 ; AVX512BW-NEXT:    retq
3297 entry:
3298   %cmp = icmp sge <64 x i8> %a, %b
3299   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3300   ret <64 x i8> %sel
3303 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3304 ; SSE-LABEL: test101:
3305 ; SSE:       # %bb.0: # %entry
3306 ; SSE-NEXT:    pminub %xmm4, %xmm0
3307 ; SSE-NEXT:    pminub %xmm5, %xmm1
3308 ; SSE-NEXT:    pminub %xmm6, %xmm2
3309 ; SSE-NEXT:    pminub %xmm7, %xmm3
3310 ; SSE-NEXT:    retq
3312 ; AVX1-LABEL: test101:
3313 ; AVX1:       # %bb.0: # %entry
3314 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3315 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3316 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3317 ; AVX1-NEXT:    vpminub %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:    vpminub %xmm2, %xmm4, %xmm2
3322 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3323 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3324 ; AVX1-NEXT:    retq
3326 ; AVX2-LABEL: test101:
3327 ; AVX2:       # %bb.0: # %entry
3328 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3329 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3330 ; AVX2-NEXT:    retq
3332 ; AVX512F-LABEL: test101:
3333 ; AVX512F:       # %bb.0: # %entry
3334 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3335 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3336 ; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
3337 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
3338 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3339 ; AVX512F-NEXT:    retq
3341 ; AVX512BW-LABEL: test101:
3342 ; AVX512BW:       # %bb.0: # %entry
3343 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3344 ; AVX512BW-NEXT:    retq
3345 entry:
3346   %cmp = icmp ult <64 x i8> %a, %b
3347   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3348   ret <64 x i8> %sel
3351 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3352 ; SSE-LABEL: test102:
3353 ; SSE:       # %bb.0: # %entry
3354 ; SSE-NEXT:    pminub %xmm4, %xmm0
3355 ; SSE-NEXT:    pminub %xmm5, %xmm1
3356 ; SSE-NEXT:    pminub %xmm6, %xmm2
3357 ; SSE-NEXT:    pminub %xmm7, %xmm3
3358 ; SSE-NEXT:    retq
3360 ; AVX1-LABEL: test102:
3361 ; AVX1:       # %bb.0: # %entry
3362 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3363 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3364 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3365 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3366 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3367 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3368 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3369 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3370 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3371 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3372 ; AVX1-NEXT:    retq
3374 ; AVX2-LABEL: test102:
3375 ; AVX2:       # %bb.0: # %entry
3376 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3377 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3378 ; AVX2-NEXT:    retq
3380 ; AVX512F-LABEL: test102:
3381 ; AVX512F:       # %bb.0: # %entry
3382 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3383 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3384 ; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
3385 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
3386 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3387 ; AVX512F-NEXT:    retq
3389 ; AVX512BW-LABEL: test102:
3390 ; AVX512BW:       # %bb.0: # %entry
3391 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3392 ; AVX512BW-NEXT:    retq
3393 entry:
3394   %cmp = icmp ule <64 x i8> %a, %b
3395   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3396   ret <64 x i8> %sel
3399 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3400 ; SSE-LABEL: test103:
3401 ; SSE:       # %bb.0: # %entry
3402 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
3403 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
3404 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
3405 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
3406 ; SSE-NEXT:    retq
3408 ; AVX1-LABEL: test103:
3409 ; AVX1:       # %bb.0: # %entry
3410 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3411 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3412 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3413 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3414 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3415 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3416 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3417 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3418 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3419 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3420 ; AVX1-NEXT:    retq
3422 ; AVX2-LABEL: test103:
3423 ; AVX2:       # %bb.0: # %entry
3424 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3425 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3426 ; AVX2-NEXT:    retq
3428 ; AVX512F-LABEL: test103:
3429 ; AVX512F:       # %bb.0: # %entry
3430 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3431 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3432 ; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
3433 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
3434 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3435 ; AVX512F-NEXT:    retq
3437 ; AVX512BW-LABEL: test103:
3438 ; AVX512BW:       # %bb.0: # %entry
3439 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3440 ; AVX512BW-NEXT:    retq
3441 entry:
3442   %cmp = icmp ugt <64 x i8> %a, %b
3443   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3444   ret <64 x i8> %sel
3447 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3448 ; SSE-LABEL: test104:
3449 ; SSE:       # %bb.0: # %entry
3450 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
3451 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
3452 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
3453 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
3454 ; SSE-NEXT:    retq
3456 ; AVX1-LABEL: test104:
3457 ; AVX1:       # %bb.0: # %entry
3458 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3459 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3460 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3461 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3462 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3463 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3464 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3465 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3466 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3467 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3468 ; AVX1-NEXT:    retq
3470 ; AVX2-LABEL: test104:
3471 ; AVX2:       # %bb.0: # %entry
3472 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3473 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3474 ; AVX2-NEXT:    retq
3476 ; AVX512F-LABEL: test104:
3477 ; AVX512F:       # %bb.0: # %entry
3478 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3479 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3480 ; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
3481 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
3482 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3483 ; AVX512F-NEXT:    retq
3485 ; AVX512BW-LABEL: test104:
3486 ; AVX512BW:       # %bb.0: # %entry
3487 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3488 ; AVX512BW-NEXT:    retq
3489 entry:
3490   %cmp = icmp uge <64 x i8> %a, %b
3491   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3492   ret <64 x i8> %sel
3495 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3496 ; SSE-LABEL: test105:
3497 ; SSE:       # %bb.0: # %entry
3498 ; SSE-NEXT:    pminsw %xmm4, %xmm0
3499 ; SSE-NEXT:    pminsw %xmm5, %xmm1
3500 ; SSE-NEXT:    pminsw %xmm6, %xmm2
3501 ; SSE-NEXT:    pminsw %xmm7, %xmm3
3502 ; SSE-NEXT:    retq
3504 ; AVX1-LABEL: test105:
3505 ; AVX1:       # %bb.0: # %entry
3506 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3507 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3508 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3509 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3510 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3511 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3512 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3513 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3514 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3515 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3516 ; AVX1-NEXT:    retq
3518 ; AVX2-LABEL: test105:
3519 ; AVX2:       # %bb.0: # %entry
3520 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3521 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3522 ; AVX2-NEXT:    retq
3524 ; AVX512F-LABEL: test105:
3525 ; AVX512F:       # %bb.0: # %entry
3526 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3527 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3528 ; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
3529 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
3530 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3531 ; AVX512F-NEXT:    retq
3533 ; AVX512BW-LABEL: test105:
3534 ; AVX512BW:       # %bb.0: # %entry
3535 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3536 ; AVX512BW-NEXT:    retq
3537 entry:
3538   %cmp = icmp slt <32 x i16> %a, %b
3539   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3540   ret <32 x i16> %sel
3543 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3544 ; SSE-LABEL: test106:
3545 ; SSE:       # %bb.0: # %entry
3546 ; SSE-NEXT:    pminsw %xmm4, %xmm0
3547 ; SSE-NEXT:    pminsw %xmm5, %xmm1
3548 ; SSE-NEXT:    pminsw %xmm6, %xmm2
3549 ; SSE-NEXT:    pminsw %xmm7, %xmm3
3550 ; SSE-NEXT:    retq
3552 ; AVX1-LABEL: test106:
3553 ; AVX1:       # %bb.0: # %entry
3554 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3555 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3556 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3557 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3558 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3559 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3560 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3561 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3562 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3563 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3564 ; AVX1-NEXT:    retq
3566 ; AVX2-LABEL: test106:
3567 ; AVX2:       # %bb.0: # %entry
3568 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3569 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3570 ; AVX2-NEXT:    retq
3572 ; AVX512F-LABEL: test106:
3573 ; AVX512F:       # %bb.0: # %entry
3574 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3575 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3576 ; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
3577 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
3578 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3579 ; AVX512F-NEXT:    retq
3581 ; AVX512BW-LABEL: test106:
3582 ; AVX512BW:       # %bb.0: # %entry
3583 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3584 ; AVX512BW-NEXT:    retq
3585 entry:
3586   %cmp = icmp sle <32 x i16> %a, %b
3587   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3588   ret <32 x i16> %sel
3591 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3592 ; SSE-LABEL: test107:
3593 ; SSE:       # %bb.0: # %entry
3594 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3595 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3596 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3597 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3598 ; SSE-NEXT:    retq
3600 ; AVX1-LABEL: test107:
3601 ; AVX1:       # %bb.0: # %entry
3602 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3603 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3604 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3605 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3606 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3607 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3608 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3609 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3610 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3611 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3612 ; AVX1-NEXT:    retq
3614 ; AVX2-LABEL: test107:
3615 ; AVX2:       # %bb.0: # %entry
3616 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3617 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3618 ; AVX2-NEXT:    retq
3620 ; AVX512F-LABEL: test107:
3621 ; AVX512F:       # %bb.0: # %entry
3622 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3623 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3624 ; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
3625 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3626 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3627 ; AVX512F-NEXT:    retq
3629 ; AVX512BW-LABEL: test107:
3630 ; AVX512BW:       # %bb.0: # %entry
3631 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3632 ; AVX512BW-NEXT:    retq
3633 entry:
3634   %cmp = icmp sgt <32 x i16> %a, %b
3635   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3636   ret <32 x i16> %sel
3639 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3640 ; SSE-LABEL: test108:
3641 ; SSE:       # %bb.0: # %entry
3642 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3643 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3644 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3645 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3646 ; SSE-NEXT:    retq
3648 ; AVX1-LABEL: test108:
3649 ; AVX1:       # %bb.0: # %entry
3650 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3651 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3652 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3653 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3654 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3655 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3656 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3657 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3658 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3659 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3660 ; AVX1-NEXT:    retq
3662 ; AVX2-LABEL: test108:
3663 ; AVX2:       # %bb.0: # %entry
3664 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3665 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3666 ; AVX2-NEXT:    retq
3668 ; AVX512F-LABEL: test108:
3669 ; AVX512F:       # %bb.0: # %entry
3670 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3671 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3672 ; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
3673 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3674 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3675 ; AVX512F-NEXT:    retq
3677 ; AVX512BW-LABEL: test108:
3678 ; AVX512BW:       # %bb.0: # %entry
3679 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3680 ; AVX512BW-NEXT:    retq
3681 entry:
3682   %cmp = icmp sge <32 x i16> %a, %b
3683   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3684   ret <32 x i16> %sel
3687 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3688 ; SSE2-LABEL: test109:
3689 ; SSE2:       # %bb.0: # %entry
3690 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
3691 ; SSE2-NEXT:    psubusw %xmm4, %xmm8
3692 ; SSE2-NEXT:    psubw %xmm8, %xmm0
3693 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
3694 ; SSE2-NEXT:    psubusw %xmm5, %xmm4
3695 ; SSE2-NEXT:    psubw %xmm4, %xmm1
3696 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
3697 ; SSE2-NEXT:    psubusw %xmm6, %xmm4
3698 ; SSE2-NEXT:    psubw %xmm4, %xmm2
3699 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
3700 ; SSE2-NEXT:    psubusw %xmm7, %xmm4
3701 ; SSE2-NEXT:    psubw %xmm4, %xmm3
3702 ; SSE2-NEXT:    retq
3704 ; SSE4-LABEL: test109:
3705 ; SSE4:       # %bb.0: # %entry
3706 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
3707 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
3708 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
3709 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
3710 ; SSE4-NEXT:    retq
3712 ; AVX1-LABEL: test109:
3713 ; AVX1:       # %bb.0: # %entry
3714 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3715 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3716 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3717 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3718 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3719 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3720 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3721 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3722 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3723 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3724 ; AVX1-NEXT:    retq
3726 ; AVX2-LABEL: test109:
3727 ; AVX2:       # %bb.0: # %entry
3728 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3729 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3730 ; AVX2-NEXT:    retq
3732 ; AVX512F-LABEL: test109:
3733 ; AVX512F:       # %bb.0: # %entry
3734 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3735 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3736 ; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
3737 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
3738 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3739 ; AVX512F-NEXT:    retq
3741 ; AVX512BW-LABEL: test109:
3742 ; AVX512BW:       # %bb.0: # %entry
3743 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3744 ; AVX512BW-NEXT:    retq
3745 entry:
3746   %cmp = icmp ult <32 x i16> %a, %b
3747   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3748   ret <32 x i16> %sel
3751 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3752 ; SSE2-LABEL: test110:
3753 ; SSE2:       # %bb.0: # %entry
3754 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
3755 ; SSE2-NEXT:    psubusw %xmm4, %xmm8
3756 ; SSE2-NEXT:    psubw %xmm8, %xmm0
3757 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
3758 ; SSE2-NEXT:    psubusw %xmm5, %xmm4
3759 ; SSE2-NEXT:    psubw %xmm4, %xmm1
3760 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
3761 ; SSE2-NEXT:    psubusw %xmm6, %xmm4
3762 ; SSE2-NEXT:    psubw %xmm4, %xmm2
3763 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
3764 ; SSE2-NEXT:    psubusw %xmm7, %xmm4
3765 ; SSE2-NEXT:    psubw %xmm4, %xmm3
3766 ; SSE2-NEXT:    retq
3768 ; SSE4-LABEL: test110:
3769 ; SSE4:       # %bb.0: # %entry
3770 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
3771 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
3772 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
3773 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
3774 ; SSE4-NEXT:    retq
3776 ; AVX1-LABEL: test110:
3777 ; AVX1:       # %bb.0: # %entry
3778 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3779 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3780 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3781 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3782 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3783 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3784 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3785 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3786 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3787 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3788 ; AVX1-NEXT:    retq
3790 ; AVX2-LABEL: test110:
3791 ; AVX2:       # %bb.0: # %entry
3792 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3793 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3794 ; AVX2-NEXT:    retq
3796 ; AVX512F-LABEL: test110:
3797 ; AVX512F:       # %bb.0: # %entry
3798 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3799 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3800 ; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
3801 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
3802 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3803 ; AVX512F-NEXT:    retq
3805 ; AVX512BW-LABEL: test110:
3806 ; AVX512BW:       # %bb.0: # %entry
3807 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3808 ; AVX512BW-NEXT:    retq
3809 entry:
3810   %cmp = icmp ule <32 x i16> %a, %b
3811   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3812   ret <32 x i16> %sel
3815 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
3816 ; SSE2-LABEL: test111:
3817 ; SSE2:       # %bb.0: # %entry
3818 ; SSE2-NEXT:    psubusw %xmm0, %xmm4
3819 ; SSE2-NEXT:    paddw %xmm4, %xmm0
3820 ; SSE2-NEXT:    psubusw %xmm1, %xmm5
3821 ; SSE2-NEXT:    paddw %xmm5, %xmm1
3822 ; SSE2-NEXT:    psubusw %xmm2, %xmm6
3823 ; SSE2-NEXT:    paddw %xmm6, %xmm2
3824 ; SSE2-NEXT:    psubusw %xmm3, %xmm7
3825 ; SSE2-NEXT:    paddw %xmm7, %xmm3
3826 ; SSE2-NEXT:    retq
3828 ; SSE4-LABEL: test111:
3829 ; SSE4:       # %bb.0: # %entry
3830 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3831 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3832 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3833 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3834 ; SSE4-NEXT:    retq
3836 ; AVX1-LABEL: test111:
3837 ; AVX1:       # %bb.0: # %entry
3838 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3839 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3840 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3841 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3842 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3843 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3844 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3845 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3846 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3847 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3848 ; AVX1-NEXT:    retq
3850 ; AVX2-LABEL: test111:
3851 ; AVX2:       # %bb.0: # %entry
3852 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3853 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3854 ; AVX2-NEXT:    retq
3856 ; AVX512F-LABEL: test111:
3857 ; AVX512F:       # %bb.0: # %entry
3858 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3859 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3860 ; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
3861 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
3862 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3863 ; AVX512F-NEXT:    retq
3865 ; AVX512BW-LABEL: test111:
3866 ; AVX512BW:       # %bb.0: # %entry
3867 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3868 ; AVX512BW-NEXT:    retq
3869 entry:
3870   %cmp = icmp ugt <32 x i16> %a, %b
3871   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3872   ret <32 x i16> %sel
3875 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
3876 ; SSE2-LABEL: test112:
3877 ; SSE2:       # %bb.0: # %entry
3878 ; SSE2-NEXT:    psubusw %xmm0, %xmm4
3879 ; SSE2-NEXT:    paddw %xmm4, %xmm0
3880 ; SSE2-NEXT:    psubusw %xmm1, %xmm5
3881 ; SSE2-NEXT:    paddw %xmm5, %xmm1
3882 ; SSE2-NEXT:    psubusw %xmm2, %xmm6
3883 ; SSE2-NEXT:    paddw %xmm6, %xmm2
3884 ; SSE2-NEXT:    psubusw %xmm3, %xmm7
3885 ; SSE2-NEXT:    paddw %xmm7, %xmm3
3886 ; SSE2-NEXT:    retq
3888 ; SSE4-LABEL: test112:
3889 ; SSE4:       # %bb.0: # %entry
3890 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3891 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3892 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3893 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3894 ; SSE4-NEXT:    retq
3896 ; AVX1-LABEL: test112:
3897 ; AVX1:       # %bb.0: # %entry
3898 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3899 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3900 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3901 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3902 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3903 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3904 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3905 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3906 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3907 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3908 ; AVX1-NEXT:    retq
3910 ; AVX2-LABEL: test112:
3911 ; AVX2:       # %bb.0: # %entry
3912 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3913 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3914 ; AVX2-NEXT:    retq
3916 ; AVX512F-LABEL: test112:
3917 ; AVX512F:       # %bb.0: # %entry
3918 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3919 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3920 ; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
3921 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
3922 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3923 ; AVX512F-NEXT:    retq
3925 ; AVX512BW-LABEL: test112:
3926 ; AVX512BW:       # %bb.0: # %entry
3927 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3928 ; AVX512BW-NEXT:    retq
3929 entry:
3930   %cmp = icmp uge <32 x i16> %a, %b
3931   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3932   ret <32 x i16> %sel
3935 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
3936 ; SSE2-LABEL: test113:
3937 ; SSE2:       # %bb.0: # %entry
3938 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
3939 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
3940 ; SSE2-NEXT:    pand %xmm8, %xmm0
3941 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3942 ; SSE2-NEXT:    por %xmm8, %xmm0
3943 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
3944 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
3945 ; SSE2-NEXT:    pand %xmm4, %xmm1
3946 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3947 ; SSE2-NEXT:    por %xmm4, %xmm1
3948 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
3949 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3950 ; SSE2-NEXT:    pand %xmm4, %xmm2
3951 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3952 ; SSE2-NEXT:    por %xmm4, %xmm2
3953 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
3954 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
3955 ; SSE2-NEXT:    pand %xmm4, %xmm3
3956 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3957 ; SSE2-NEXT:    por %xmm4, %xmm3
3958 ; SSE2-NEXT:    retq
3960 ; SSE4-LABEL: test113:
3961 ; SSE4:       # %bb.0: # %entry
3962 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
3963 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
3964 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
3965 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
3966 ; SSE4-NEXT:    retq
3968 ; AVX1-LABEL: test113:
3969 ; AVX1:       # %bb.0: # %entry
3970 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3971 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3972 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
3973 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
3974 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3975 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3976 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3977 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
3978 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
3979 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3980 ; AVX1-NEXT:    retq
3982 ; AVX2-LABEL: test113:
3983 ; AVX2:       # %bb.0: # %entry
3984 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
3985 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
3986 ; AVX2-NEXT:    retq
3988 ; AVX512-LABEL: test113:
3989 ; AVX512:       # %bb.0: # %entry
3990 ; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
3991 ; AVX512-NEXT:    retq
3992 entry:
3993   %cmp = icmp slt <16 x i32> %a, %b
3994   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
3995   ret <16 x i32> %sel
3998 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
3999 ; SSE2-LABEL: test114:
4000 ; SSE2:       # %bb.0: # %entry
4001 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
4002 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
4003 ; SSE2-NEXT:    pand %xmm8, %xmm0
4004 ; SSE2-NEXT:    pandn %xmm4, %xmm8
4005 ; SSE2-NEXT:    por %xmm8, %xmm0
4006 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4007 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
4008 ; SSE2-NEXT:    pand %xmm4, %xmm1
4009 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4010 ; SSE2-NEXT:    por %xmm4, %xmm1
4011 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
4012 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
4013 ; SSE2-NEXT:    pand %xmm4, %xmm2
4014 ; SSE2-NEXT:    pandn %xmm6, %xmm4
4015 ; SSE2-NEXT:    por %xmm4, %xmm2
4016 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
4017 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
4018 ; SSE2-NEXT:    pand %xmm4, %xmm3
4019 ; SSE2-NEXT:    pandn %xmm7, %xmm4
4020 ; SSE2-NEXT:    por %xmm4, %xmm3
4021 ; SSE2-NEXT:    retq
4023 ; SSE4-LABEL: test114:
4024 ; SSE4:       # %bb.0: # %entry
4025 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
4026 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
4027 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
4028 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
4029 ; SSE4-NEXT:    retq
4031 ; AVX1-LABEL: test114:
4032 ; AVX1:       # %bb.0: # %entry
4033 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4034 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4035 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4036 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4037 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4038 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4039 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4040 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4041 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4042 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4043 ; AVX1-NEXT:    retq
4045 ; AVX2-LABEL: test114:
4046 ; AVX2:       # %bb.0: # %entry
4047 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4048 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4049 ; AVX2-NEXT:    retq
4051 ; AVX512-LABEL: test114:
4052 ; AVX512:       # %bb.0: # %entry
4053 ; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4054 ; AVX512-NEXT:    retq
4055 entry:
4056   %cmp = icmp sle <16 x i32> %a, %b
4057   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4058   ret <16 x i32> %sel
4061 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4062 ; SSE2-LABEL: test115:
4063 ; SSE2:       # %bb.0: # %entry
4064 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
4065 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4066 ; SSE2-NEXT:    pand %xmm8, %xmm0
4067 ; SSE2-NEXT:    pandn %xmm4, %xmm8
4068 ; SSE2-NEXT:    por %xmm8, %xmm0
4069 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4070 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4071 ; SSE2-NEXT:    pand %xmm4, %xmm1
4072 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4073 ; SSE2-NEXT:    por %xmm4, %xmm1
4074 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4075 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
4076 ; SSE2-NEXT:    pand %xmm4, %xmm2
4077 ; SSE2-NEXT:    pandn %xmm6, %xmm4
4078 ; SSE2-NEXT:    por %xmm4, %xmm2
4079 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4080 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
4081 ; SSE2-NEXT:    pand %xmm4, %xmm3
4082 ; SSE2-NEXT:    pandn %xmm7, %xmm4
4083 ; SSE2-NEXT:    por %xmm4, %xmm3
4084 ; SSE2-NEXT:    retq
4086 ; SSE4-LABEL: test115:
4087 ; SSE4:       # %bb.0: # %entry
4088 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4089 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4090 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4091 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4092 ; SSE4-NEXT:    retq
4094 ; AVX1-LABEL: test115:
4095 ; AVX1:       # %bb.0: # %entry
4096 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4097 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4098 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4099 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4100 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4101 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4102 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4103 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4104 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4105 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4106 ; AVX1-NEXT:    retq
4108 ; AVX2-LABEL: test115:
4109 ; AVX2:       # %bb.0: # %entry
4110 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4111 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4112 ; AVX2-NEXT:    retq
4114 ; AVX512-LABEL: test115:
4115 ; AVX512:       # %bb.0: # %entry
4116 ; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4117 ; AVX512-NEXT:    retq
4118 entry:
4119   %cmp = icmp sgt <16 x i32> %a, %b
4120   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4121   ret <16 x i32> %sel
4124 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4125 ; SSE2-LABEL: test116:
4126 ; SSE2:       # %bb.0: # %entry
4127 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
4128 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4129 ; SSE2-NEXT:    pand %xmm8, %xmm0
4130 ; SSE2-NEXT:    pandn %xmm4, %xmm8
4131 ; SSE2-NEXT:    por %xmm8, %xmm0
4132 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4133 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4134 ; SSE2-NEXT:    pand %xmm4, %xmm1
4135 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4136 ; SSE2-NEXT:    por %xmm4, %xmm1
4137 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4138 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
4139 ; SSE2-NEXT:    pand %xmm4, %xmm2
4140 ; SSE2-NEXT:    pandn %xmm6, %xmm4
4141 ; SSE2-NEXT:    por %xmm4, %xmm2
4142 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4143 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
4144 ; SSE2-NEXT:    pand %xmm4, %xmm3
4145 ; SSE2-NEXT:    pandn %xmm7, %xmm4
4146 ; SSE2-NEXT:    por %xmm4, %xmm3
4147 ; SSE2-NEXT:    retq
4149 ; SSE4-LABEL: test116:
4150 ; SSE4:       # %bb.0: # %entry
4151 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4152 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4153 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4154 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4155 ; SSE4-NEXT:    retq
4157 ; AVX1-LABEL: test116:
4158 ; AVX1:       # %bb.0: # %entry
4159 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4160 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4161 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4162 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4163 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4164 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4165 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4166 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4167 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4168 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4169 ; AVX1-NEXT:    retq
4171 ; AVX2-LABEL: test116:
4172 ; AVX2:       # %bb.0: # %entry
4173 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4174 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4175 ; AVX2-NEXT:    retq
4177 ; AVX512-LABEL: test116:
4178 ; AVX512:       # %bb.0: # %entry
4179 ; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4180 ; AVX512-NEXT:    retq
4181 entry:
4182   %cmp = icmp sge <16 x i32> %a, %b
4183   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4184   ret <16 x i32> %sel
4187 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4188 ; SSE2-LABEL: test117:
4189 ; SSE2:       # %bb.0: # %entry
4190 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4191 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4192 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4193 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4194 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4195 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4196 ; SSE2-NEXT:    pand %xmm10, %xmm0
4197 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4198 ; SSE2-NEXT:    por %xmm10, %xmm0
4199 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4200 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4201 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4202 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4203 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4204 ; SSE2-NEXT:    pand %xmm9, %xmm1
4205 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4206 ; SSE2-NEXT:    por %xmm9, %xmm1
4207 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4208 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4209 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4210 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4211 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4212 ; SSE2-NEXT:    pand %xmm5, %xmm2
4213 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4214 ; SSE2-NEXT:    por %xmm5, %xmm2
4215 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4216 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4217 ; SSE2-NEXT:    pxor %xmm7, %xmm8
4218 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4219 ; SSE2-NEXT:    pand %xmm8, %xmm3
4220 ; SSE2-NEXT:    pandn %xmm7, %xmm8
4221 ; SSE2-NEXT:    por %xmm8, %xmm3
4222 ; SSE2-NEXT:    retq
4224 ; SSE4-LABEL: test117:
4225 ; SSE4:       # %bb.0: # %entry
4226 ; SSE4-NEXT:    pminud %xmm4, %xmm0
4227 ; SSE4-NEXT:    pminud %xmm5, %xmm1
4228 ; SSE4-NEXT:    pminud %xmm6, %xmm2
4229 ; SSE4-NEXT:    pminud %xmm7, %xmm3
4230 ; SSE4-NEXT:    retq
4232 ; AVX1-LABEL: test117:
4233 ; AVX1:       # %bb.0: # %entry
4234 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4235 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4236 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4237 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4238 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4239 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4240 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4241 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4242 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4243 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4244 ; AVX1-NEXT:    retq
4246 ; AVX2-LABEL: test117:
4247 ; AVX2:       # %bb.0: # %entry
4248 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4249 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4250 ; AVX2-NEXT:    retq
4252 ; AVX512-LABEL: test117:
4253 ; AVX512:       # %bb.0: # %entry
4254 ; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4255 ; AVX512-NEXT:    retq
4256 entry:
4257   %cmp = icmp ult <16 x i32> %a, %b
4258   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4259   ret <16 x i32> %sel
4262 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4263 ; SSE2-LABEL: test118:
4264 ; SSE2:       # %bb.0: # %entry
4265 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4266 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4267 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4268 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4269 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4270 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4271 ; SSE2-NEXT:    pand %xmm10, %xmm0
4272 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4273 ; SSE2-NEXT:    por %xmm10, %xmm0
4274 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4275 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4276 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4277 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4278 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4279 ; SSE2-NEXT:    pand %xmm9, %xmm1
4280 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4281 ; SSE2-NEXT:    por %xmm9, %xmm1
4282 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4283 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4284 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4285 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4286 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4287 ; SSE2-NEXT:    pand %xmm5, %xmm2
4288 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4289 ; SSE2-NEXT:    por %xmm5, %xmm2
4290 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4291 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4292 ; SSE2-NEXT:    pxor %xmm7, %xmm8
4293 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4294 ; SSE2-NEXT:    pand %xmm8, %xmm3
4295 ; SSE2-NEXT:    pandn %xmm7, %xmm8
4296 ; SSE2-NEXT:    por %xmm8, %xmm3
4297 ; SSE2-NEXT:    retq
4299 ; SSE4-LABEL: test118:
4300 ; SSE4:       # %bb.0: # %entry
4301 ; SSE4-NEXT:    pminud %xmm4, %xmm0
4302 ; SSE4-NEXT:    pminud %xmm5, %xmm1
4303 ; SSE4-NEXT:    pminud %xmm6, %xmm2
4304 ; SSE4-NEXT:    pminud %xmm7, %xmm3
4305 ; SSE4-NEXT:    retq
4307 ; AVX1-LABEL: test118:
4308 ; AVX1:       # %bb.0: # %entry
4309 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4310 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4311 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4312 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4313 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4314 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4315 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4316 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4317 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4318 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4319 ; AVX1-NEXT:    retq
4321 ; AVX2-LABEL: test118:
4322 ; AVX2:       # %bb.0: # %entry
4323 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4324 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4325 ; AVX2-NEXT:    retq
4327 ; AVX512-LABEL: test118:
4328 ; AVX512:       # %bb.0: # %entry
4329 ; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4330 ; AVX512-NEXT:    retq
4331 entry:
4332   %cmp = icmp ule <16 x i32> %a, %b
4333   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4334   ret <16 x i32> %sel
4337 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4338 ; SSE2-LABEL: test119:
4339 ; SSE2:       # %bb.0: # %entry
4340 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4341 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
4342 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4343 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
4344 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4345 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4346 ; SSE2-NEXT:    pand %xmm10, %xmm0
4347 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4348 ; SSE2-NEXT:    por %xmm10, %xmm0
4349 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4350 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4351 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4352 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4353 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4354 ; SSE2-NEXT:    pand %xmm9, %xmm1
4355 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4356 ; SSE2-NEXT:    por %xmm9, %xmm1
4357 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
4358 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4359 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
4360 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4361 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4362 ; SSE2-NEXT:    pand %xmm5, %xmm2
4363 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4364 ; SSE2-NEXT:    por %xmm5, %xmm2
4365 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
4366 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4367 ; SSE2-NEXT:    pxor %xmm3, %xmm8
4368 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4369 ; SSE2-NEXT:    pand %xmm8, %xmm3
4370 ; SSE2-NEXT:    pandn %xmm7, %xmm8
4371 ; SSE2-NEXT:    por %xmm8, %xmm3
4372 ; SSE2-NEXT:    retq
4374 ; SSE4-LABEL: test119:
4375 ; SSE4:       # %bb.0: # %entry
4376 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4377 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4378 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4379 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4380 ; SSE4-NEXT:    retq
4382 ; AVX1-LABEL: test119:
4383 ; AVX1:       # %bb.0: # %entry
4384 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4385 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4386 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4387 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4388 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4389 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4390 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4391 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4392 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4393 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4394 ; AVX1-NEXT:    retq
4396 ; AVX2-LABEL: test119:
4397 ; AVX2:       # %bb.0: # %entry
4398 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4399 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4400 ; AVX2-NEXT:    retq
4402 ; AVX512-LABEL: test119:
4403 ; AVX512:       # %bb.0: # %entry
4404 ; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4405 ; AVX512-NEXT:    retq
4406 entry:
4407   %cmp = icmp ugt <16 x i32> %a, %b
4408   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4409   ret <16 x i32> %sel
4412 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4413 ; SSE2-LABEL: test120:
4414 ; SSE2:       # %bb.0: # %entry
4415 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4416 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
4417 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4418 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
4419 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4420 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4421 ; SSE2-NEXT:    pand %xmm10, %xmm0
4422 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4423 ; SSE2-NEXT:    por %xmm10, %xmm0
4424 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4425 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4426 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4427 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4428 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4429 ; SSE2-NEXT:    pand %xmm9, %xmm1
4430 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4431 ; SSE2-NEXT:    por %xmm9, %xmm1
4432 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
4433 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4434 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
4435 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4436 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4437 ; SSE2-NEXT:    pand %xmm5, %xmm2
4438 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4439 ; SSE2-NEXT:    por %xmm5, %xmm2
4440 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
4441 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4442 ; SSE2-NEXT:    pxor %xmm3, %xmm8
4443 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4444 ; SSE2-NEXT:    pand %xmm8, %xmm3
4445 ; SSE2-NEXT:    pandn %xmm7, %xmm8
4446 ; SSE2-NEXT:    por %xmm8, %xmm3
4447 ; SSE2-NEXT:    retq
4449 ; SSE4-LABEL: test120:
4450 ; SSE4:       # %bb.0: # %entry
4451 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4452 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4453 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4454 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4455 ; SSE4-NEXT:    retq
4457 ; AVX1-LABEL: test120:
4458 ; AVX1:       # %bb.0: # %entry
4459 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4460 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4461 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4462 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4463 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4464 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4465 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4466 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4467 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4468 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4469 ; AVX1-NEXT:    retq
4471 ; AVX2-LABEL: test120:
4472 ; AVX2:       # %bb.0: # %entry
4473 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4474 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4475 ; AVX2-NEXT:    retq
4477 ; AVX512-LABEL: test120:
4478 ; AVX512:       # %bb.0: # %entry
4479 ; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4480 ; AVX512-NEXT:    retq
4481 entry:
4482   %cmp = icmp uge <16 x i32> %a, %b
4483   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4484   ret <16 x i32> %sel
4487 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4488 ; SSE2-LABEL: test121:
4489 ; SSE2:       # %bb.0: # %entry
4490 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4491 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4492 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4493 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4494 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4495 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4496 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4497 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4498 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4499 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4500 ; SSE2-NEXT:    pand %xmm12, %xmm9
4501 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4502 ; SSE2-NEXT:    por %xmm9, %xmm10
4503 ; SSE2-NEXT:    pand %xmm10, %xmm0
4504 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4505 ; SSE2-NEXT:    por %xmm10, %xmm0
4506 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4507 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4508 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4509 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4510 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
4511 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4512 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4513 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4514 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4515 ; SSE2-NEXT:    pand %xmm11, %xmm4
4516 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4517 ; SSE2-NEXT:    por %xmm4, %xmm9
4518 ; SSE2-NEXT:    pand %xmm9, %xmm1
4519 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4520 ; SSE2-NEXT:    por %xmm9, %xmm1
4521 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4522 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4523 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4524 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4525 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4526 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4527 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4528 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4529 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4530 ; SSE2-NEXT:    pand %xmm10, %xmm4
4531 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4532 ; SSE2-NEXT:    por %xmm4, %xmm5
4533 ; SSE2-NEXT:    pand %xmm5, %xmm2
4534 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4535 ; SSE2-NEXT:    por %xmm5, %xmm2
4536 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4537 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4538 ; SSE2-NEXT:    pxor %xmm7, %xmm8
4539 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
4540 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4541 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4542 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4543 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4544 ; SSE2-NEXT:    pand %xmm6, %xmm4
4545 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4546 ; SSE2-NEXT:    por %xmm4, %xmm5
4547 ; SSE2-NEXT:    pand %xmm5, %xmm3
4548 ; SSE2-NEXT:    pandn %xmm7, %xmm5
4549 ; SSE2-NEXT:    por %xmm5, %xmm3
4550 ; SSE2-NEXT:    retq
4552 ; SSE4-LABEL: test121:
4553 ; SSE4:       # %bb.0: # %entry
4554 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
4555 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
4556 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4557 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4558 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
4559 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4560 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4561 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
4562 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4563 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4564 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
4565 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4566 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4567 ; SSE4-NEXT:    movapd %xmm4, %xmm0
4568 ; SSE4-NEXT:    movapd %xmm5, %xmm1
4569 ; SSE4-NEXT:    movapd %xmm6, %xmm2
4570 ; SSE4-NEXT:    movapd %xmm7, %xmm3
4571 ; SSE4-NEXT:    retq
4573 ; AVX1-LABEL: test121:
4574 ; AVX1:       # %bb.0: # %entry
4575 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4576 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4577 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4578 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4579 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4580 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4581 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4582 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4583 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4584 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4585 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4586 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4587 ; AVX1-NEXT:    retq
4589 ; AVX2-LABEL: test121:
4590 ; AVX2:       # %bb.0: # %entry
4591 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4592 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4593 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4594 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4595 ; AVX2-NEXT:    retq
4597 ; AVX512-LABEL: test121:
4598 ; AVX512:       # %bb.0: # %entry
4599 ; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4600 ; AVX512-NEXT:    retq
4601 entry:
4602   %cmp = icmp slt <8 x i64> %a, %b
4603   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4604   ret <8 x i64> %sel
4607 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4608 ; SSE2-LABEL: test122:
4609 ; SSE2:       # %bb.0: # %entry
4610 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4611 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4612 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4613 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4614 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4615 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4616 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4617 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4618 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4619 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4620 ; SSE2-NEXT:    pand %xmm12, %xmm9
4621 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4622 ; SSE2-NEXT:    por %xmm9, %xmm10
4623 ; SSE2-NEXT:    pand %xmm10, %xmm0
4624 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4625 ; SSE2-NEXT:    por %xmm10, %xmm0
4626 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4627 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4628 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4629 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4630 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
4631 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4632 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4633 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4634 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4635 ; SSE2-NEXT:    pand %xmm11, %xmm4
4636 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4637 ; SSE2-NEXT:    por %xmm4, %xmm9
4638 ; SSE2-NEXT:    pand %xmm9, %xmm1
4639 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4640 ; SSE2-NEXT:    por %xmm9, %xmm1
4641 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4642 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4643 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4644 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4645 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4646 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4647 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4648 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4649 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4650 ; SSE2-NEXT:    pand %xmm10, %xmm4
4651 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4652 ; SSE2-NEXT:    por %xmm4, %xmm5
4653 ; SSE2-NEXT:    pand %xmm5, %xmm2
4654 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4655 ; SSE2-NEXT:    por %xmm5, %xmm2
4656 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4657 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4658 ; SSE2-NEXT:    pxor %xmm7, %xmm8
4659 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
4660 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4661 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4662 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4663 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4664 ; SSE2-NEXT:    pand %xmm6, %xmm4
4665 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4666 ; SSE2-NEXT:    por %xmm4, %xmm5
4667 ; SSE2-NEXT:    pand %xmm5, %xmm3
4668 ; SSE2-NEXT:    pandn %xmm7, %xmm5
4669 ; SSE2-NEXT:    por %xmm5, %xmm3
4670 ; SSE2-NEXT:    retq
4672 ; SSE4-LABEL: test122:
4673 ; SSE4:       # %bb.0: # %entry
4674 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
4675 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
4676 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4677 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4678 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
4679 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4680 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4681 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
4682 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4683 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4684 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
4685 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4686 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4687 ; SSE4-NEXT:    movapd %xmm4, %xmm0
4688 ; SSE4-NEXT:    movapd %xmm5, %xmm1
4689 ; SSE4-NEXT:    movapd %xmm6, %xmm2
4690 ; SSE4-NEXT:    movapd %xmm7, %xmm3
4691 ; SSE4-NEXT:    retq
4693 ; AVX1-LABEL: test122:
4694 ; AVX1:       # %bb.0: # %entry
4695 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4696 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4697 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4698 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4699 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4700 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4701 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4702 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4703 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4704 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4705 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4706 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4707 ; AVX1-NEXT:    retq
4709 ; AVX2-LABEL: test122:
4710 ; AVX2:       # %bb.0: # %entry
4711 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4712 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4713 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4714 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4715 ; AVX2-NEXT:    retq
4717 ; AVX512-LABEL: test122:
4718 ; AVX512:       # %bb.0: # %entry
4719 ; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4720 ; AVX512-NEXT:    retq
4721 entry:
4722   %cmp = icmp sle <8 x i64> %a, %b
4723   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4724   ret <8 x i64> %sel
4727 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
4728 ; SSE2-LABEL: test123:
4729 ; SSE2:       # %bb.0: # %entry
4730 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4731 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
4732 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4733 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
4734 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4735 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4736 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4737 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4738 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4739 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4740 ; SSE2-NEXT:    pand %xmm12, %xmm9
4741 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4742 ; SSE2-NEXT:    por %xmm9, %xmm10
4743 ; SSE2-NEXT:    pand %xmm10, %xmm0
4744 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4745 ; SSE2-NEXT:    por %xmm10, %xmm0
4746 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4747 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4748 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4749 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4750 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
4751 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4752 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4753 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4754 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4755 ; SSE2-NEXT:    pand %xmm11, %xmm4
4756 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4757 ; SSE2-NEXT:    por %xmm4, %xmm9
4758 ; SSE2-NEXT:    pand %xmm9, %xmm1
4759 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4760 ; SSE2-NEXT:    por %xmm9, %xmm1
4761 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
4762 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4763 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
4764 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4765 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4766 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4767 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4768 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4770 ; SSE2-NEXT:    pand %xmm10, %xmm4
4771 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4772 ; SSE2-NEXT:    por %xmm4, %xmm5
4773 ; SSE2-NEXT:    pand %xmm5, %xmm2
4774 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4775 ; SSE2-NEXT:    por %xmm5, %xmm2
4776 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
4777 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4778 ; SSE2-NEXT:    pxor %xmm3, %xmm8
4779 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
4780 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4781 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4782 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4783 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4784 ; SSE2-NEXT:    pand %xmm6, %xmm4
4785 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4786 ; SSE2-NEXT:    por %xmm4, %xmm5
4787 ; SSE2-NEXT:    pand %xmm5, %xmm3
4788 ; SSE2-NEXT:    pandn %xmm7, %xmm5
4789 ; SSE2-NEXT:    por %xmm5, %xmm3
4790 ; SSE2-NEXT:    retq
4792 ; SSE4-LABEL: test123:
4793 ; SSE4:       # %bb.0: # %entry
4794 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
4795 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4796 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4797 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
4798 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4799 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4800 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
4801 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4802 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4803 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
4804 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4805 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4806 ; SSE4-NEXT:    movapd %xmm4, %xmm0
4807 ; SSE4-NEXT:    movapd %xmm5, %xmm1
4808 ; SSE4-NEXT:    movapd %xmm6, %xmm2
4809 ; SSE4-NEXT:    movapd %xmm7, %xmm3
4810 ; SSE4-NEXT:    retq
4812 ; AVX1-LABEL: test123:
4813 ; AVX1:       # %bb.0: # %entry
4814 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4815 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4816 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4817 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4818 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4819 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4820 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4821 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4822 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4823 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4824 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4825 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4826 ; AVX1-NEXT:    retq
4828 ; AVX2-LABEL: test123:
4829 ; AVX2:       # %bb.0: # %entry
4830 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4831 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4832 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4833 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4834 ; AVX2-NEXT:    retq
4836 ; AVX512-LABEL: test123:
4837 ; AVX512:       # %bb.0: # %entry
4838 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4839 ; AVX512-NEXT:    retq
4840 entry:
4841   %cmp = icmp sgt <8 x i64> %a, %b
4842   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4843   ret <8 x i64> %sel
4846 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
4847 ; SSE2-LABEL: test124:
4848 ; SSE2:       # %bb.0: # %entry
4849 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4850 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
4851 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4852 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
4853 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4854 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4855 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4856 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4857 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4858 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4859 ; SSE2-NEXT:    pand %xmm12, %xmm9
4860 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4861 ; SSE2-NEXT:    por %xmm9, %xmm10
4862 ; SSE2-NEXT:    pand %xmm10, %xmm0
4863 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4864 ; SSE2-NEXT:    por %xmm10, %xmm0
4865 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4866 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4867 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4868 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4869 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
4870 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4871 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4872 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4873 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4874 ; SSE2-NEXT:    pand %xmm11, %xmm4
4875 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4876 ; SSE2-NEXT:    por %xmm4, %xmm9
4877 ; SSE2-NEXT:    pand %xmm9, %xmm1
4878 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4879 ; SSE2-NEXT:    por %xmm9, %xmm1
4880 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
4881 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4882 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
4883 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4884 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4885 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4886 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4887 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4888 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4889 ; SSE2-NEXT:    pand %xmm10, %xmm4
4890 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4891 ; SSE2-NEXT:    por %xmm4, %xmm5
4892 ; SSE2-NEXT:    pand %xmm5, %xmm2
4893 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4894 ; SSE2-NEXT:    por %xmm5, %xmm2
4895 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
4896 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4897 ; SSE2-NEXT:    pxor %xmm3, %xmm8
4898 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
4899 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4900 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4901 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4902 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4903 ; SSE2-NEXT:    pand %xmm6, %xmm4
4904 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4905 ; SSE2-NEXT:    por %xmm4, %xmm5
4906 ; SSE2-NEXT:    pand %xmm5, %xmm3
4907 ; SSE2-NEXT:    pandn %xmm7, %xmm5
4908 ; SSE2-NEXT:    por %xmm5, %xmm3
4909 ; SSE2-NEXT:    retq
4911 ; SSE4-LABEL: test124:
4912 ; SSE4:       # %bb.0: # %entry
4913 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
4914 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4915 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4916 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
4917 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4918 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4919 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
4920 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4921 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4922 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
4923 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4924 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4925 ; SSE4-NEXT:    movapd %xmm4, %xmm0
4926 ; SSE4-NEXT:    movapd %xmm5, %xmm1
4927 ; SSE4-NEXT:    movapd %xmm6, %xmm2
4928 ; SSE4-NEXT:    movapd %xmm7, %xmm3
4929 ; SSE4-NEXT:    retq
4931 ; AVX1-LABEL: test124:
4932 ; AVX1:       # %bb.0: # %entry
4933 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4934 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4935 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4936 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4937 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4938 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4939 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4940 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4941 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4942 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4943 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4944 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4945 ; AVX1-NEXT:    retq
4947 ; AVX2-LABEL: test124:
4948 ; AVX2:       # %bb.0: # %entry
4949 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4950 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4951 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4952 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4953 ; AVX2-NEXT:    retq
4955 ; AVX512-LABEL: test124:
4956 ; AVX512:       # %bb.0: # %entry
4957 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4958 ; AVX512-NEXT:    retq
4959 entry:
4960   %cmp = icmp sge <8 x i64> %a, %b
4961   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4962   ret <8 x i64> %sel
4965 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
4966 ; SSE2-LABEL: test125:
4967 ; SSE2:       # %bb.0: # %entry
4968 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
4969 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4970 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4971 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4972 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4973 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4974 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4975 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4976 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4977 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4978 ; SSE2-NEXT:    pand %xmm12, %xmm9
4979 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4980 ; SSE2-NEXT:    por %xmm9, %xmm10
4981 ; SSE2-NEXT:    pand %xmm10, %xmm0
4982 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4983 ; SSE2-NEXT:    por %xmm10, %xmm0
4984 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4985 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4986 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4987 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4988 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
4989 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4990 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4991 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4992 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4993 ; SSE2-NEXT:    pand %xmm11, %xmm4
4994 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4995 ; SSE2-NEXT:    por %xmm4, %xmm9
4996 ; SSE2-NEXT:    pand %xmm9, %xmm1
4997 ; SSE2-NEXT:    pandn %xmm5, %xmm9
4998 ; SSE2-NEXT:    por %xmm9, %xmm1
4999 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
5000 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5001 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
5002 ; SSE2-NEXT:    pxor %xmm8, %xmm5
5003 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5004 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5005 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5006 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5007 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5008 ; SSE2-NEXT:    pand %xmm10, %xmm4
5009 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5010 ; SSE2-NEXT:    por %xmm4, %xmm5
5011 ; SSE2-NEXT:    pand %xmm5, %xmm2
5012 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5013 ; SSE2-NEXT:    por %xmm5, %xmm2
5014 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
5015 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5016 ; SSE2-NEXT:    pxor %xmm7, %xmm8
5017 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
5018 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5019 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5020 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5021 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5022 ; SSE2-NEXT:    pand %xmm6, %xmm4
5023 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5024 ; SSE2-NEXT:    por %xmm4, %xmm5
5025 ; SSE2-NEXT:    pand %xmm5, %xmm3
5026 ; SSE2-NEXT:    pandn %xmm7, %xmm5
5027 ; SSE2-NEXT:    por %xmm5, %xmm3
5028 ; SSE2-NEXT:    retq
5030 ; SSE4-LABEL: test125:
5031 ; SSE4:       # %bb.0: # %entry
5032 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
5033 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5034 ; SSE4-NEXT:    movdqa %xmm0, %xmm10
5035 ; SSE4-NEXT:    pxor %xmm8, %xmm10
5036 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
5037 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5038 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5039 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5040 ; SSE4-NEXT:    movdqa %xmm1, %xmm9
5041 ; SSE4-NEXT:    pxor %xmm8, %xmm9
5042 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
5043 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5044 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5045 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5046 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
5047 ; SSE4-NEXT:    pxor %xmm8, %xmm1
5048 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
5049 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5050 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5051 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5052 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
5053 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5054 ; SSE4-NEXT:    pxor %xmm7, %xmm8
5055 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5056 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
5057 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5058 ; SSE4-NEXT:    movapd %xmm4, %xmm0
5059 ; SSE4-NEXT:    movapd %xmm5, %xmm1
5060 ; SSE4-NEXT:    movapd %xmm6, %xmm2
5061 ; SSE4-NEXT:    movapd %xmm7, %xmm3
5062 ; SSE4-NEXT:    retq
5064 ; AVX1-LABEL: test125:
5065 ; AVX1:       # %bb.0: # %entry
5066 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5067 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5068 ; AVX1-NEXT:    # xmm5 = mem[0,0]
5069 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5070 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5071 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5072 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5073 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5074 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5075 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5076 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5077 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5078 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5079 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5080 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5081 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5082 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5083 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5084 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5085 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5086 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5087 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5088 ; AVX1-NEXT:    retq
5090 ; AVX2-LABEL: test125:
5091 ; AVX2:       # %bb.0: # %entry
5092 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5093 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5094 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5095 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5096 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5097 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5098 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5099 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5100 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5101 ; AVX2-NEXT:    retq
5103 ; AVX512-LABEL: test125:
5104 ; AVX512:       # %bb.0: # %entry
5105 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5106 ; AVX512-NEXT:    retq
5107 entry:
5108   %cmp = icmp ult <8 x i64> %a, %b
5109   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5110   ret <8 x i64> %sel
5113 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5114 ; SSE2-LABEL: test126:
5115 ; SSE2:       # %bb.0: # %entry
5116 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5117 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
5118 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5119 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
5120 ; SSE2-NEXT:    pxor %xmm8, %xmm10
5121 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
5122 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5123 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5124 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5125 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5126 ; SSE2-NEXT:    pand %xmm12, %xmm9
5127 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5128 ; SSE2-NEXT:    por %xmm9, %xmm10
5129 ; SSE2-NEXT:    pand %xmm10, %xmm0
5130 ; SSE2-NEXT:    pandn %xmm4, %xmm10
5131 ; SSE2-NEXT:    por %xmm10, %xmm0
5132 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
5133 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5134 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5135 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5136 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
5137 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
5138 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5139 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
5140 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
5141 ; SSE2-NEXT:    pand %xmm11, %xmm4
5142 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5143 ; SSE2-NEXT:    por %xmm4, %xmm9
5144 ; SSE2-NEXT:    pand %xmm9, %xmm1
5145 ; SSE2-NEXT:    pandn %xmm5, %xmm9
5146 ; SSE2-NEXT:    por %xmm9, %xmm1
5147 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
5148 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5149 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
5150 ; SSE2-NEXT:    pxor %xmm8, %xmm5
5151 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5152 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5153 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5154 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5155 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5156 ; SSE2-NEXT:    pand %xmm10, %xmm4
5157 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5158 ; SSE2-NEXT:    por %xmm4, %xmm5
5159 ; SSE2-NEXT:    pand %xmm5, %xmm2
5160 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5161 ; SSE2-NEXT:    por %xmm5, %xmm2
5162 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
5163 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5164 ; SSE2-NEXT:    pxor %xmm7, %xmm8
5165 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
5166 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5167 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5168 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5169 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5170 ; SSE2-NEXT:    pand %xmm6, %xmm4
5171 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5172 ; SSE2-NEXT:    por %xmm4, %xmm5
5173 ; SSE2-NEXT:    pand %xmm5, %xmm3
5174 ; SSE2-NEXT:    pandn %xmm7, %xmm5
5175 ; SSE2-NEXT:    por %xmm5, %xmm3
5176 ; SSE2-NEXT:    retq
5178 ; SSE4-LABEL: test126:
5179 ; SSE4:       # %bb.0: # %entry
5180 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
5181 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5182 ; SSE4-NEXT:    movdqa %xmm0, %xmm10
5183 ; SSE4-NEXT:    pxor %xmm8, %xmm10
5184 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
5185 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5186 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5187 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5188 ; SSE4-NEXT:    movdqa %xmm1, %xmm9
5189 ; SSE4-NEXT:    pxor %xmm8, %xmm9
5190 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
5191 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5192 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5193 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5194 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
5195 ; SSE4-NEXT:    pxor %xmm8, %xmm1
5196 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
5197 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5198 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5199 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5200 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
5201 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5202 ; SSE4-NEXT:    pxor %xmm7, %xmm8
5203 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5204 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
5205 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5206 ; SSE4-NEXT:    movapd %xmm4, %xmm0
5207 ; SSE4-NEXT:    movapd %xmm5, %xmm1
5208 ; SSE4-NEXT:    movapd %xmm6, %xmm2
5209 ; SSE4-NEXT:    movapd %xmm7, %xmm3
5210 ; SSE4-NEXT:    retq
5212 ; AVX1-LABEL: test126:
5213 ; AVX1:       # %bb.0: # %entry
5214 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5215 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5216 ; AVX1-NEXT:    # xmm5 = mem[0,0]
5217 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5218 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5219 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5220 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5221 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5222 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5223 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5224 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5225 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5226 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5227 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5228 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5229 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5230 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5231 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5232 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5233 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5234 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5235 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5236 ; AVX1-NEXT:    retq
5238 ; AVX2-LABEL: test126:
5239 ; AVX2:       # %bb.0: # %entry
5240 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5241 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5242 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5243 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5244 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5245 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5246 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5247 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5248 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5249 ; AVX2-NEXT:    retq
5251 ; AVX512-LABEL: test126:
5252 ; AVX512:       # %bb.0: # %entry
5253 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5254 ; AVX512-NEXT:    retq
5255 entry:
5256   %cmp = icmp ule <8 x i64> %a, %b
5257   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5258   ret <8 x i64> %sel
5261 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5262 ; SSE2-LABEL: test127:
5263 ; SSE2:       # %bb.0: # %entry
5264 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5265 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
5266 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5267 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
5268 ; SSE2-NEXT:    pxor %xmm8, %xmm10
5269 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
5270 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5271 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5272 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5273 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5274 ; SSE2-NEXT:    pand %xmm12, %xmm9
5275 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5276 ; SSE2-NEXT:    por %xmm9, %xmm10
5277 ; SSE2-NEXT:    pand %xmm10, %xmm0
5278 ; SSE2-NEXT:    pandn %xmm4, %xmm10
5279 ; SSE2-NEXT:    por %xmm10, %xmm0
5280 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
5281 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5282 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
5283 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5284 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
5285 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
5286 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5287 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
5288 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
5289 ; SSE2-NEXT:    pand %xmm11, %xmm4
5290 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5291 ; SSE2-NEXT:    por %xmm4, %xmm9
5292 ; SSE2-NEXT:    pand %xmm9, %xmm1
5293 ; SSE2-NEXT:    pandn %xmm5, %xmm9
5294 ; SSE2-NEXT:    por %xmm9, %xmm1
5295 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
5296 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5297 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
5298 ; SSE2-NEXT:    pxor %xmm8, %xmm5
5299 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5300 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5301 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5302 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5303 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5304 ; SSE2-NEXT:    pand %xmm10, %xmm4
5305 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5306 ; SSE2-NEXT:    por %xmm4, %xmm5
5307 ; SSE2-NEXT:    pand %xmm5, %xmm2
5308 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5309 ; SSE2-NEXT:    por %xmm5, %xmm2
5310 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
5311 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5312 ; SSE2-NEXT:    pxor %xmm3, %xmm8
5313 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
5314 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5315 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5316 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5317 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5318 ; SSE2-NEXT:    pand %xmm6, %xmm4
5319 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5320 ; SSE2-NEXT:    por %xmm4, %xmm5
5321 ; SSE2-NEXT:    pand %xmm5, %xmm3
5322 ; SSE2-NEXT:    pandn %xmm7, %xmm5
5323 ; SSE2-NEXT:    por %xmm5, %xmm3
5324 ; SSE2-NEXT:    retq
5326 ; SSE4-LABEL: test127:
5327 ; SSE4:       # %bb.0: # %entry
5328 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
5329 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5330 ; SSE4-NEXT:    movdqa %xmm4, %xmm10
5331 ; SSE4-NEXT:    pxor %xmm8, %xmm10
5332 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5333 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5334 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5335 ; SSE4-NEXT:    movdqa %xmm5, %xmm9
5336 ; SSE4-NEXT:    pxor %xmm8, %xmm9
5337 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
5338 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5339 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5340 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5341 ; SSE4-NEXT:    movdqa %xmm6, %xmm1
5342 ; SSE4-NEXT:    pxor %xmm8, %xmm1
5343 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
5344 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5345 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5346 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5347 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
5348 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5349 ; SSE4-NEXT:    pxor %xmm3, %xmm8
5350 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5351 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
5352 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5353 ; SSE4-NEXT:    movapd %xmm4, %xmm0
5354 ; SSE4-NEXT:    movapd %xmm5, %xmm1
5355 ; SSE4-NEXT:    movapd %xmm6, %xmm2
5356 ; SSE4-NEXT:    movapd %xmm7, %xmm3
5357 ; SSE4-NEXT:    retq
5359 ; AVX1-LABEL: test127:
5360 ; AVX1:       # %bb.0: # %entry
5361 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5362 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5363 ; AVX1-NEXT:    # xmm5 = mem[0,0]
5364 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5365 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5366 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5367 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5368 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5369 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5370 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5371 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5372 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5373 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5374 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5375 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5376 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5377 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5378 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5379 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5380 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5381 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5382 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5383 ; AVX1-NEXT:    retq
5385 ; AVX2-LABEL: test127:
5386 ; AVX2:       # %bb.0: # %entry
5387 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5388 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5389 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5390 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5391 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5392 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5393 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5394 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5395 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5396 ; AVX2-NEXT:    retq
5398 ; AVX512-LABEL: test127:
5399 ; AVX512:       # %bb.0: # %entry
5400 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5401 ; AVX512-NEXT:    retq
5402 entry:
5403   %cmp = icmp ugt <8 x i64> %a, %b
5404   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5405   ret <8 x i64> %sel
5408 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5409 ; SSE2-LABEL: test128:
5410 ; SSE2:       # %bb.0: # %entry
5411 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5412 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
5413 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5414 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
5415 ; SSE2-NEXT:    pxor %xmm8, %xmm10
5416 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
5417 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5418 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5419 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5420 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5421 ; SSE2-NEXT:    pand %xmm12, %xmm9
5422 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5423 ; SSE2-NEXT:    por %xmm9, %xmm10
5424 ; SSE2-NEXT:    pand %xmm10, %xmm0
5425 ; SSE2-NEXT:    pandn %xmm4, %xmm10
5426 ; SSE2-NEXT:    por %xmm10, %xmm0
5427 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
5428 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5429 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
5430 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5431 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
5432 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
5433 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5434 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
5435 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
5436 ; SSE2-NEXT:    pand %xmm11, %xmm4
5437 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5438 ; SSE2-NEXT:    por %xmm4, %xmm9
5439 ; SSE2-NEXT:    pand %xmm9, %xmm1
5440 ; SSE2-NEXT:    pandn %xmm5, %xmm9
5441 ; SSE2-NEXT:    por %xmm9, %xmm1
5442 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
5443 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5444 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
5445 ; SSE2-NEXT:    pxor %xmm8, %xmm5
5446 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5447 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5448 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5449 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5450 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5451 ; SSE2-NEXT:    pand %xmm10, %xmm4
5452 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5453 ; SSE2-NEXT:    por %xmm4, %xmm5
5454 ; SSE2-NEXT:    pand %xmm5, %xmm2
5455 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5456 ; SSE2-NEXT:    por %xmm5, %xmm2
5457 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
5458 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5459 ; SSE2-NEXT:    pxor %xmm3, %xmm8
5460 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
5461 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5462 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5463 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5464 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5465 ; SSE2-NEXT:    pand %xmm6, %xmm4
5466 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5467 ; SSE2-NEXT:    por %xmm4, %xmm5
5468 ; SSE2-NEXT:    pand %xmm5, %xmm3
5469 ; SSE2-NEXT:    pandn %xmm7, %xmm5
5470 ; SSE2-NEXT:    por %xmm5, %xmm3
5471 ; SSE2-NEXT:    retq
5473 ; SSE4-LABEL: test128:
5474 ; SSE4:       # %bb.0: # %entry
5475 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
5476 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5477 ; SSE4-NEXT:    movdqa %xmm4, %xmm10
5478 ; SSE4-NEXT:    pxor %xmm8, %xmm10
5479 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5480 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5481 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5482 ; SSE4-NEXT:    movdqa %xmm5, %xmm9
5483 ; SSE4-NEXT:    pxor %xmm8, %xmm9
5484 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
5485 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5486 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5487 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5488 ; SSE4-NEXT:    movdqa %xmm6, %xmm1
5489 ; SSE4-NEXT:    pxor %xmm8, %xmm1
5490 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
5491 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5492 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5493 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5494 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
5495 ; SSE4-NEXT:    pxor %xmm8, %xmm0
5496 ; SSE4-NEXT:    pxor %xmm3, %xmm8
5497 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5498 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
5499 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5500 ; SSE4-NEXT:    movapd %xmm4, %xmm0
5501 ; SSE4-NEXT:    movapd %xmm5, %xmm1
5502 ; SSE4-NEXT:    movapd %xmm6, %xmm2
5503 ; SSE4-NEXT:    movapd %xmm7, %xmm3
5504 ; SSE4-NEXT:    retq
5506 ; AVX1-LABEL: test128:
5507 ; AVX1:       # %bb.0: # %entry
5508 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5509 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5510 ; AVX1-NEXT:    # xmm5 = mem[0,0]
5511 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5512 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5513 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5514 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5515 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5516 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5517 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5518 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5519 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5520 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5521 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5522 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5523 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5524 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5525 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5526 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5527 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5528 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5529 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5530 ; AVX1-NEXT:    retq
5532 ; AVX2-LABEL: test128:
5533 ; AVX2:       # %bb.0: # %entry
5534 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5535 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5536 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5537 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5538 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5539 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5540 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5541 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5542 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5543 ; AVX2-NEXT:    retq
5545 ; AVX512-LABEL: test128:
5546 ; AVX512:       # %bb.0: # %entry
5547 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5548 ; AVX512-NEXT:    retq
5549 entry:
5550   %cmp = icmp uge <8 x i64> %a, %b
5551   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5552   ret <8 x i64> %sel
5555 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5556 ; SSE2-LABEL: test129:
5557 ; SSE2:       # %bb.0: # %entry
5558 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
5559 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5560 ; SSE2-NEXT:    pand %xmm8, %xmm0
5561 ; SSE2-NEXT:    pandn %xmm4, %xmm8
5562 ; SSE2-NEXT:    por %xmm8, %xmm0
5563 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
5564 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5565 ; SSE2-NEXT:    pand %xmm4, %xmm1
5566 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5567 ; SSE2-NEXT:    por %xmm4, %xmm1
5568 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
5569 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
5570 ; SSE2-NEXT:    pand %xmm4, %xmm2
5571 ; SSE2-NEXT:    pandn %xmm6, %xmm4
5572 ; SSE2-NEXT:    por %xmm4, %xmm2
5573 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
5574 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
5575 ; SSE2-NEXT:    pand %xmm4, %xmm3
5576 ; SSE2-NEXT:    pandn %xmm7, %xmm4
5577 ; SSE2-NEXT:    por %xmm4, %xmm3
5578 ; SSE2-NEXT:    retq
5580 ; SSE4-LABEL: test129:
5581 ; SSE4:       # %bb.0: # %entry
5582 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5583 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5584 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5585 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5586 ; SSE4-NEXT:    retq
5588 ; AVX1-LABEL: test129:
5589 ; AVX1:       # %bb.0: # %entry
5590 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5591 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5592 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5593 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5594 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5595 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5596 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5597 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5598 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5599 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5600 ; AVX1-NEXT:    retq
5602 ; AVX2-LABEL: test129:
5603 ; AVX2:       # %bb.0: # %entry
5604 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5605 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5606 ; AVX2-NEXT:    retq
5608 ; AVX512F-LABEL: test129:
5609 ; AVX512F:       # %bb.0: # %entry
5610 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5611 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5612 ; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
5613 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
5614 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5615 ; AVX512F-NEXT:    retq
5617 ; AVX512BW-LABEL: test129:
5618 ; AVX512BW:       # %bb.0: # %entry
5619 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5620 ; AVX512BW-NEXT:    retq
5621 entry:
5622   %cmp = icmp slt <64 x i8> %a, %b
5623   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5624   ret <64 x i8> %sel
5627 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
5628 ; SSE2-LABEL: test130:
5629 ; SSE2:       # %bb.0: # %entry
5630 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
5631 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5632 ; SSE2-NEXT:    pand %xmm8, %xmm0
5633 ; SSE2-NEXT:    pandn %xmm4, %xmm8
5634 ; SSE2-NEXT:    por %xmm8, %xmm0
5635 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
5636 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5637 ; SSE2-NEXT:    pand %xmm4, %xmm1
5638 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5639 ; SSE2-NEXT:    por %xmm4, %xmm1
5640 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
5641 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
5642 ; SSE2-NEXT:    pand %xmm4, %xmm2
5643 ; SSE2-NEXT:    pandn %xmm6, %xmm4
5644 ; SSE2-NEXT:    por %xmm4, %xmm2
5645 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
5646 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
5647 ; SSE2-NEXT:    pand %xmm4, %xmm3
5648 ; SSE2-NEXT:    pandn %xmm7, %xmm4
5649 ; SSE2-NEXT:    por %xmm4, %xmm3
5650 ; SSE2-NEXT:    retq
5652 ; SSE4-LABEL: test130:
5653 ; SSE4:       # %bb.0: # %entry
5654 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5655 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5656 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5657 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5658 ; SSE4-NEXT:    retq
5660 ; AVX1-LABEL: test130:
5661 ; AVX1:       # %bb.0: # %entry
5662 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5663 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5664 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5665 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5666 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5667 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5668 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5669 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5670 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5671 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5672 ; AVX1-NEXT:    retq
5674 ; AVX2-LABEL: test130:
5675 ; AVX2:       # %bb.0: # %entry
5676 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5677 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5678 ; AVX2-NEXT:    retq
5680 ; AVX512F-LABEL: test130:
5681 ; AVX512F:       # %bb.0: # %entry
5682 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5683 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5684 ; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
5685 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
5686 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5687 ; AVX512F-NEXT:    retq
5689 ; AVX512BW-LABEL: test130:
5690 ; AVX512BW:       # %bb.0: # %entry
5691 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5692 ; AVX512BW-NEXT:    retq
5693 entry:
5694   %cmp = icmp sle <64 x i8> %a, %b
5695   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5696   ret <64 x i8> %sel
5699 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
5700 ; SSE2-LABEL: test131:
5701 ; SSE2:       # %bb.0: # %entry
5702 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
5703 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5704 ; SSE2-NEXT:    pand %xmm8, %xmm0
5705 ; SSE2-NEXT:    pandn %xmm4, %xmm8
5706 ; SSE2-NEXT:    por %xmm8, %xmm0
5707 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
5708 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5709 ; SSE2-NEXT:    pand %xmm4, %xmm1
5710 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5711 ; SSE2-NEXT:    por %xmm4, %xmm1
5712 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
5713 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5714 ; SSE2-NEXT:    pand %xmm4, %xmm2
5715 ; SSE2-NEXT:    pandn %xmm6, %xmm4
5716 ; SSE2-NEXT:    por %xmm4, %xmm2
5717 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
5718 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5719 ; SSE2-NEXT:    pand %xmm4, %xmm3
5720 ; SSE2-NEXT:    pandn %xmm7, %xmm4
5721 ; SSE2-NEXT:    por %xmm4, %xmm3
5722 ; SSE2-NEXT:    retq
5724 ; SSE4-LABEL: test131:
5725 ; SSE4:       # %bb.0: # %entry
5726 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
5727 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
5728 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
5729 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
5730 ; SSE4-NEXT:    retq
5732 ; AVX1-LABEL: test131:
5733 ; AVX1:       # %bb.0: # %entry
5734 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5735 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5736 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5737 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5738 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5739 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5740 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5741 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5742 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5743 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5744 ; AVX1-NEXT:    retq
5746 ; AVX2-LABEL: test131:
5747 ; AVX2:       # %bb.0: # %entry
5748 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5749 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5750 ; AVX2-NEXT:    retq
5752 ; AVX512F-LABEL: test131:
5753 ; AVX512F:       # %bb.0: # %entry
5754 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5755 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5756 ; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
5757 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
5758 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5759 ; AVX512F-NEXT:    retq
5761 ; AVX512BW-LABEL: test131:
5762 ; AVX512BW:       # %bb.0: # %entry
5763 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5764 ; AVX512BW-NEXT:    retq
5765 entry:
5766   %cmp = icmp sgt <64 x i8> %a, %b
5767   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5768   ret <64 x i8> %sel
5771 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
5772 ; SSE2-LABEL: test132:
5773 ; SSE2:       # %bb.0: # %entry
5774 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
5775 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5776 ; SSE2-NEXT:    pand %xmm8, %xmm0
5777 ; SSE2-NEXT:    pandn %xmm4, %xmm8
5778 ; SSE2-NEXT:    por %xmm8, %xmm0
5779 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
5780 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5781 ; SSE2-NEXT:    pand %xmm4, %xmm1
5782 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5783 ; SSE2-NEXT:    por %xmm4, %xmm1
5784 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
5785 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5786 ; SSE2-NEXT:    pand %xmm4, %xmm2
5787 ; SSE2-NEXT:    pandn %xmm6, %xmm4
5788 ; SSE2-NEXT:    por %xmm4, %xmm2
5789 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
5790 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5791 ; SSE2-NEXT:    pand %xmm4, %xmm3
5792 ; SSE2-NEXT:    pandn %xmm7, %xmm4
5793 ; SSE2-NEXT:    por %xmm4, %xmm3
5794 ; SSE2-NEXT:    retq
5796 ; SSE4-LABEL: test132:
5797 ; SSE4:       # %bb.0: # %entry
5798 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
5799 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
5800 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
5801 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
5802 ; SSE4-NEXT:    retq
5804 ; AVX1-LABEL: test132:
5805 ; AVX1:       # %bb.0: # %entry
5806 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5807 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5808 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5809 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5810 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5811 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5812 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5813 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5814 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5815 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5816 ; AVX1-NEXT:    retq
5818 ; AVX2-LABEL: test132:
5819 ; AVX2:       # %bb.0: # %entry
5820 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5821 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5822 ; AVX2-NEXT:    retq
5824 ; AVX512F-LABEL: test132:
5825 ; AVX512F:       # %bb.0: # %entry
5826 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5827 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5828 ; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
5829 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
5830 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5831 ; AVX512F-NEXT:    retq
5833 ; AVX512BW-LABEL: test132:
5834 ; AVX512BW:       # %bb.0: # %entry
5835 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5836 ; AVX512BW-NEXT:    retq
5837 entry:
5838   %cmp = icmp sge <64 x i8> %a, %b
5839   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5840   ret <64 x i8> %sel
5843 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
5844 ; SSE-LABEL: test133:
5845 ; SSE:       # %bb.0: # %entry
5846 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
5847 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
5848 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
5849 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
5850 ; SSE-NEXT:    retq
5852 ; AVX1-LABEL: test133:
5853 ; AVX1:       # %bb.0: # %entry
5854 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5855 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5856 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5857 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5858 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5859 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5860 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5861 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5862 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5863 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5864 ; AVX1-NEXT:    retq
5866 ; AVX2-LABEL: test133:
5867 ; AVX2:       # %bb.0: # %entry
5868 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5869 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5870 ; AVX2-NEXT:    retq
5872 ; AVX512F-LABEL: test133:
5873 ; AVX512F:       # %bb.0: # %entry
5874 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5875 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5876 ; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
5877 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
5878 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5879 ; AVX512F-NEXT:    retq
5881 ; AVX512BW-LABEL: test133:
5882 ; AVX512BW:       # %bb.0: # %entry
5883 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5884 ; AVX512BW-NEXT:    retq
5885 entry:
5886   %cmp = icmp ult <64 x i8> %a, %b
5887   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5888   ret <64 x i8> %sel
5891 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
5892 ; SSE-LABEL: test134:
5893 ; SSE:       # %bb.0: # %entry
5894 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
5895 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
5896 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
5897 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
5898 ; SSE-NEXT:    retq
5900 ; AVX1-LABEL: test134:
5901 ; AVX1:       # %bb.0: # %entry
5902 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5903 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5904 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5905 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5906 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5907 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5908 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5909 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5910 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5911 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5912 ; AVX1-NEXT:    retq
5914 ; AVX2-LABEL: test134:
5915 ; AVX2:       # %bb.0: # %entry
5916 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5917 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5918 ; AVX2-NEXT:    retq
5920 ; AVX512F-LABEL: test134:
5921 ; AVX512F:       # %bb.0: # %entry
5922 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5923 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5924 ; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
5925 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
5926 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5927 ; AVX512F-NEXT:    retq
5929 ; AVX512BW-LABEL: test134:
5930 ; AVX512BW:       # %bb.0: # %entry
5931 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5932 ; AVX512BW-NEXT:    retq
5933 entry:
5934   %cmp = icmp ule <64 x i8> %a, %b
5935   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5936   ret <64 x i8> %sel
5939 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
5940 ; SSE-LABEL: test135:
5941 ; SSE:       # %bb.0: # %entry
5942 ; SSE-NEXT:    pminub %xmm4, %xmm0
5943 ; SSE-NEXT:    pminub %xmm5, %xmm1
5944 ; SSE-NEXT:    pminub %xmm6, %xmm2
5945 ; SSE-NEXT:    pminub %xmm7, %xmm3
5946 ; SSE-NEXT:    retq
5948 ; AVX1-LABEL: test135:
5949 ; AVX1:       # %bb.0: # %entry
5950 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5951 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5952 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
5953 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
5954 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5955 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5956 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5957 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
5958 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
5959 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5960 ; AVX1-NEXT:    retq
5962 ; AVX2-LABEL: test135:
5963 ; AVX2:       # %bb.0: # %entry
5964 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
5965 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
5966 ; AVX2-NEXT:    retq
5968 ; AVX512F-LABEL: test135:
5969 ; AVX512F:       # %bb.0: # %entry
5970 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5971 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5972 ; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
5973 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
5974 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5975 ; AVX512F-NEXT:    retq
5977 ; AVX512BW-LABEL: test135:
5978 ; AVX512BW:       # %bb.0: # %entry
5979 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
5980 ; AVX512BW-NEXT:    retq
5981 entry:
5982   %cmp = icmp ugt <64 x i8> %a, %b
5983   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5984   ret <64 x i8> %sel
5987 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
5988 ; SSE-LABEL: test136:
5989 ; SSE:       # %bb.0: # %entry
5990 ; SSE-NEXT:    pminub %xmm4, %xmm0
5991 ; SSE-NEXT:    pminub %xmm5, %xmm1
5992 ; SSE-NEXT:    pminub %xmm6, %xmm2
5993 ; SSE-NEXT:    pminub %xmm7, %xmm3
5994 ; SSE-NEXT:    retq
5996 ; AVX1-LABEL: test136:
5997 ; AVX1:       # %bb.0: # %entry
5998 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5999 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6000 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
6001 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
6002 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6003 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6004 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6005 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
6006 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
6007 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6008 ; AVX1-NEXT:    retq
6010 ; AVX2-LABEL: test136:
6011 ; AVX2:       # %bb.0: # %entry
6012 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
6013 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
6014 ; AVX2-NEXT:    retq
6016 ; AVX512F-LABEL: test136:
6017 ; AVX512F:       # %bb.0: # %entry
6018 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6019 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6020 ; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
6021 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
6022 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6023 ; AVX512F-NEXT:    retq
6025 ; AVX512BW-LABEL: test136:
6026 ; AVX512BW:       # %bb.0: # %entry
6027 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
6028 ; AVX512BW-NEXT:    retq
6029 entry:
6030   %cmp = icmp uge <64 x i8> %a, %b
6031   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6032   ret <64 x i8> %sel
6035 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
6036 ; SSE-LABEL: test137:
6037 ; SSE:       # %bb.0: # %entry
6038 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6039 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6040 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6041 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6042 ; SSE-NEXT:    retq
6044 ; AVX1-LABEL: test137:
6045 ; AVX1:       # %bb.0: # %entry
6046 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6047 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6048 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6049 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6050 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6051 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6052 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6053 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6054 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6055 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6056 ; AVX1-NEXT:    retq
6058 ; AVX2-LABEL: test137:
6059 ; AVX2:       # %bb.0: # %entry
6060 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6061 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6062 ; AVX2-NEXT:    retq
6064 ; AVX512F-LABEL: test137:
6065 ; AVX512F:       # %bb.0: # %entry
6066 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6067 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6068 ; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
6069 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
6070 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6071 ; AVX512F-NEXT:    retq
6073 ; AVX512BW-LABEL: test137:
6074 ; AVX512BW:       # %bb.0: # %entry
6075 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6076 ; AVX512BW-NEXT:    retq
6077 entry:
6078   %cmp = icmp slt <32 x i16> %a, %b
6079   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6080   ret <32 x i16> %sel
6083 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
6084 ; SSE-LABEL: test138:
6085 ; SSE:       # %bb.0: # %entry
6086 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6087 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6088 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6089 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6090 ; SSE-NEXT:    retq
6092 ; AVX1-LABEL: test138:
6093 ; AVX1:       # %bb.0: # %entry
6094 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6095 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6096 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6097 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6098 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6099 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6100 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6101 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6102 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6103 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6104 ; AVX1-NEXT:    retq
6106 ; AVX2-LABEL: test138:
6107 ; AVX2:       # %bb.0: # %entry
6108 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6109 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6110 ; AVX2-NEXT:    retq
6112 ; AVX512F-LABEL: test138:
6113 ; AVX512F:       # %bb.0: # %entry
6114 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6115 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6116 ; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
6117 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
6118 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6119 ; AVX512F-NEXT:    retq
6121 ; AVX512BW-LABEL: test138:
6122 ; AVX512BW:       # %bb.0: # %entry
6123 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6124 ; AVX512BW-NEXT:    retq
6125 entry:
6126   %cmp = icmp sle <32 x i16> %a, %b
6127   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6128   ret <32 x i16> %sel
6131 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6132 ; SSE-LABEL: test139:
6133 ; SSE:       # %bb.0: # %entry
6134 ; SSE-NEXT:    pminsw %xmm4, %xmm0
6135 ; SSE-NEXT:    pminsw %xmm5, %xmm1
6136 ; SSE-NEXT:    pminsw %xmm6, %xmm2
6137 ; SSE-NEXT:    pminsw %xmm7, %xmm3
6138 ; SSE-NEXT:    retq
6140 ; AVX1-LABEL: test139:
6141 ; AVX1:       # %bb.0: # %entry
6142 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6143 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6144 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6145 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6146 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6147 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6148 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6149 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6150 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6151 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6152 ; AVX1-NEXT:    retq
6154 ; AVX2-LABEL: test139:
6155 ; AVX2:       # %bb.0: # %entry
6156 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6157 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6158 ; AVX2-NEXT:    retq
6160 ; AVX512F-LABEL: test139:
6161 ; AVX512F:       # %bb.0: # %entry
6162 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6163 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6164 ; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
6165 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
6166 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6167 ; AVX512F-NEXT:    retq
6169 ; AVX512BW-LABEL: test139:
6170 ; AVX512BW:       # %bb.0: # %entry
6171 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6172 ; AVX512BW-NEXT:    retq
6173 entry:
6174   %cmp = icmp sgt <32 x i16> %a, %b
6175   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6176   ret <32 x i16> %sel
6179 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6180 ; SSE-LABEL: test140:
6181 ; SSE:       # %bb.0: # %entry
6182 ; SSE-NEXT:    pminsw %xmm4, %xmm0
6183 ; SSE-NEXT:    pminsw %xmm5, %xmm1
6184 ; SSE-NEXT:    pminsw %xmm6, %xmm2
6185 ; SSE-NEXT:    pminsw %xmm7, %xmm3
6186 ; SSE-NEXT:    retq
6188 ; AVX1-LABEL: test140:
6189 ; AVX1:       # %bb.0: # %entry
6190 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6191 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6192 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6193 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6194 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6195 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6196 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6197 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6198 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6199 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6200 ; AVX1-NEXT:    retq
6202 ; AVX2-LABEL: test140:
6203 ; AVX2:       # %bb.0: # %entry
6204 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6205 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6206 ; AVX2-NEXT:    retq
6208 ; AVX512F-LABEL: test140:
6209 ; AVX512F:       # %bb.0: # %entry
6210 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6211 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6212 ; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
6213 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
6214 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6215 ; AVX512F-NEXT:    retq
6217 ; AVX512BW-LABEL: test140:
6218 ; AVX512BW:       # %bb.0: # %entry
6219 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6220 ; AVX512BW-NEXT:    retq
6221 entry:
6222   %cmp = icmp sge <32 x i16> %a, %b
6223   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6224   ret <32 x i16> %sel
6227 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6228 ; SSE2-LABEL: test141:
6229 ; SSE2:       # %bb.0: # %entry
6230 ; SSE2-NEXT:    psubusw %xmm0, %xmm4
6231 ; SSE2-NEXT:    paddw %xmm4, %xmm0
6232 ; SSE2-NEXT:    psubusw %xmm1, %xmm5
6233 ; SSE2-NEXT:    paddw %xmm5, %xmm1
6234 ; SSE2-NEXT:    psubusw %xmm2, %xmm6
6235 ; SSE2-NEXT:    paddw %xmm6, %xmm2
6236 ; SSE2-NEXT:    psubusw %xmm3, %xmm7
6237 ; SSE2-NEXT:    paddw %xmm7, %xmm3
6238 ; SSE2-NEXT:    retq
6240 ; SSE4-LABEL: test141:
6241 ; SSE4:       # %bb.0: # %entry
6242 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6243 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6244 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6245 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6246 ; SSE4-NEXT:    retq
6248 ; AVX1-LABEL: test141:
6249 ; AVX1:       # %bb.0: # %entry
6250 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6251 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6252 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6253 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6254 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6255 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6256 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6257 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6258 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6259 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6260 ; AVX1-NEXT:    retq
6262 ; AVX2-LABEL: test141:
6263 ; AVX2:       # %bb.0: # %entry
6264 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6265 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6266 ; AVX2-NEXT:    retq
6268 ; AVX512F-LABEL: test141:
6269 ; AVX512F:       # %bb.0: # %entry
6270 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6271 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6272 ; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
6273 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
6274 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6275 ; AVX512F-NEXT:    retq
6277 ; AVX512BW-LABEL: test141:
6278 ; AVX512BW:       # %bb.0: # %entry
6279 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6280 ; AVX512BW-NEXT:    retq
6281 entry:
6282   %cmp = icmp ult <32 x i16> %a, %b
6283   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6284   ret <32 x i16> %sel
6287 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6288 ; SSE2-LABEL: test142:
6289 ; SSE2:       # %bb.0: # %entry
6290 ; SSE2-NEXT:    psubusw %xmm0, %xmm4
6291 ; SSE2-NEXT:    paddw %xmm4, %xmm0
6292 ; SSE2-NEXT:    psubusw %xmm1, %xmm5
6293 ; SSE2-NEXT:    paddw %xmm5, %xmm1
6294 ; SSE2-NEXT:    psubusw %xmm2, %xmm6
6295 ; SSE2-NEXT:    paddw %xmm6, %xmm2
6296 ; SSE2-NEXT:    psubusw %xmm3, %xmm7
6297 ; SSE2-NEXT:    paddw %xmm7, %xmm3
6298 ; SSE2-NEXT:    retq
6300 ; SSE4-LABEL: test142:
6301 ; SSE4:       # %bb.0: # %entry
6302 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6303 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6304 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6305 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6306 ; SSE4-NEXT:    retq
6308 ; AVX1-LABEL: test142:
6309 ; AVX1:       # %bb.0: # %entry
6310 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6311 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6312 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6313 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6314 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6315 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6316 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6317 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6318 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6319 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6320 ; AVX1-NEXT:    retq
6322 ; AVX2-LABEL: test142:
6323 ; AVX2:       # %bb.0: # %entry
6324 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6325 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6326 ; AVX2-NEXT:    retq
6328 ; AVX512F-LABEL: test142:
6329 ; AVX512F:       # %bb.0: # %entry
6330 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6331 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6332 ; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
6333 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
6334 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6335 ; AVX512F-NEXT:    retq
6337 ; AVX512BW-LABEL: test142:
6338 ; AVX512BW:       # %bb.0: # %entry
6339 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6340 ; AVX512BW-NEXT:    retq
6341 entry:
6342   %cmp = icmp ule <32 x i16> %a, %b
6343   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6344   ret <32 x i16> %sel
6347 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6348 ; SSE2-LABEL: test143:
6349 ; SSE2:       # %bb.0: # %entry
6350 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
6351 ; SSE2-NEXT:    psubusw %xmm4, %xmm8
6352 ; SSE2-NEXT:    psubw %xmm8, %xmm0
6353 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6354 ; SSE2-NEXT:    psubusw %xmm5, %xmm4
6355 ; SSE2-NEXT:    psubw %xmm4, %xmm1
6356 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6357 ; SSE2-NEXT:    psubusw %xmm6, %xmm4
6358 ; SSE2-NEXT:    psubw %xmm4, %xmm2
6359 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
6360 ; SSE2-NEXT:    psubusw %xmm7, %xmm4
6361 ; SSE2-NEXT:    psubw %xmm4, %xmm3
6362 ; SSE2-NEXT:    retq
6364 ; SSE4-LABEL: test143:
6365 ; SSE4:       # %bb.0: # %entry
6366 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
6367 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
6368 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
6369 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
6370 ; SSE4-NEXT:    retq
6372 ; AVX1-LABEL: test143:
6373 ; AVX1:       # %bb.0: # %entry
6374 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6375 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6376 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6377 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6378 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6379 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6380 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6381 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6382 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6383 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6384 ; AVX1-NEXT:    retq
6386 ; AVX2-LABEL: test143:
6387 ; AVX2:       # %bb.0: # %entry
6388 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6389 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6390 ; AVX2-NEXT:    retq
6392 ; AVX512F-LABEL: test143:
6393 ; AVX512F:       # %bb.0: # %entry
6394 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6395 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6396 ; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
6397 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
6398 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6399 ; AVX512F-NEXT:    retq
6401 ; AVX512BW-LABEL: test143:
6402 ; AVX512BW:       # %bb.0: # %entry
6403 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6404 ; AVX512BW-NEXT:    retq
6405 entry:
6406   %cmp = icmp ugt <32 x i16> %a, %b
6407   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6408   ret <32 x i16> %sel
6411 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6412 ; SSE2-LABEL: test144:
6413 ; SSE2:       # %bb.0: # %entry
6414 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
6415 ; SSE2-NEXT:    psubusw %xmm4, %xmm8
6416 ; SSE2-NEXT:    psubw %xmm8, %xmm0
6417 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6418 ; SSE2-NEXT:    psubusw %xmm5, %xmm4
6419 ; SSE2-NEXT:    psubw %xmm4, %xmm1
6420 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6421 ; SSE2-NEXT:    psubusw %xmm6, %xmm4
6422 ; SSE2-NEXT:    psubw %xmm4, %xmm2
6423 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
6424 ; SSE2-NEXT:    psubusw %xmm7, %xmm4
6425 ; SSE2-NEXT:    psubw %xmm4, %xmm3
6426 ; SSE2-NEXT:    retq
6428 ; SSE4-LABEL: test144:
6429 ; SSE4:       # %bb.0: # %entry
6430 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
6431 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
6432 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
6433 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
6434 ; SSE4-NEXT:    retq
6436 ; AVX1-LABEL: test144:
6437 ; AVX1:       # %bb.0: # %entry
6438 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6439 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6440 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6441 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6442 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6443 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6444 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6445 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6446 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6447 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6448 ; AVX1-NEXT:    retq
6450 ; AVX2-LABEL: test144:
6451 ; AVX2:       # %bb.0: # %entry
6452 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6453 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6454 ; AVX2-NEXT:    retq
6456 ; AVX512F-LABEL: test144:
6457 ; AVX512F:       # %bb.0: # %entry
6458 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6459 ; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6460 ; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
6461 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
6462 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6463 ; AVX512F-NEXT:    retq
6465 ; AVX512BW-LABEL: test144:
6466 ; AVX512BW:       # %bb.0: # %entry
6467 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6468 ; AVX512BW-NEXT:    retq
6469 entry:
6470   %cmp = icmp uge <32 x i16> %a, %b
6471   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6472   ret <32 x i16> %sel
6475 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6476 ; SSE2-LABEL: test145:
6477 ; SSE2:       # %bb.0: # %entry
6478 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
6479 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6480 ; SSE2-NEXT:    pand %xmm8, %xmm0
6481 ; SSE2-NEXT:    pandn %xmm4, %xmm8
6482 ; SSE2-NEXT:    por %xmm8, %xmm0
6483 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6484 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6485 ; SSE2-NEXT:    pand %xmm4, %xmm1
6486 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6487 ; SSE2-NEXT:    por %xmm4, %xmm1
6488 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6489 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
6490 ; SSE2-NEXT:    pand %xmm4, %xmm2
6491 ; SSE2-NEXT:    pandn %xmm6, %xmm4
6492 ; SSE2-NEXT:    por %xmm4, %xmm2
6493 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
6494 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
6495 ; SSE2-NEXT:    pand %xmm4, %xmm3
6496 ; SSE2-NEXT:    pandn %xmm7, %xmm4
6497 ; SSE2-NEXT:    por %xmm4, %xmm3
6498 ; SSE2-NEXT:    retq
6500 ; SSE4-LABEL: test145:
6501 ; SSE4:       # %bb.0: # %entry
6502 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6503 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6504 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6505 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6506 ; SSE4-NEXT:    retq
6508 ; AVX1-LABEL: test145:
6509 ; AVX1:       # %bb.0: # %entry
6510 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6511 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6512 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6513 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6514 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6515 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6516 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6517 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6518 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6519 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6520 ; AVX1-NEXT:    retq
6522 ; AVX2-LABEL: test145:
6523 ; AVX2:       # %bb.0: # %entry
6524 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6525 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6526 ; AVX2-NEXT:    retq
6528 ; AVX512-LABEL: test145:
6529 ; AVX512:       # %bb.0: # %entry
6530 ; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6531 ; AVX512-NEXT:    retq
6532 entry:
6533   %cmp = icmp slt <16 x i32> %a, %b
6534   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6535   ret <16 x i32> %sel
6538 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6539 ; SSE2-LABEL: test146:
6540 ; SSE2:       # %bb.0: # %entry
6541 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
6542 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6543 ; SSE2-NEXT:    pand %xmm8, %xmm0
6544 ; SSE2-NEXT:    pandn %xmm4, %xmm8
6545 ; SSE2-NEXT:    por %xmm8, %xmm0
6546 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6547 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6548 ; SSE2-NEXT:    pand %xmm4, %xmm1
6549 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6550 ; SSE2-NEXT:    por %xmm4, %xmm1
6551 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6552 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
6553 ; SSE2-NEXT:    pand %xmm4, %xmm2
6554 ; SSE2-NEXT:    pandn %xmm6, %xmm4
6555 ; SSE2-NEXT:    por %xmm4, %xmm2
6556 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
6557 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
6558 ; SSE2-NEXT:    pand %xmm4, %xmm3
6559 ; SSE2-NEXT:    pandn %xmm7, %xmm4
6560 ; SSE2-NEXT:    por %xmm4, %xmm3
6561 ; SSE2-NEXT:    retq
6563 ; SSE4-LABEL: test146:
6564 ; SSE4:       # %bb.0: # %entry
6565 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6566 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6567 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6568 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6569 ; SSE4-NEXT:    retq
6571 ; AVX1-LABEL: test146:
6572 ; AVX1:       # %bb.0: # %entry
6573 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6574 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6575 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6576 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6577 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6578 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6579 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6580 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6581 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6582 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6583 ; AVX1-NEXT:    retq
6585 ; AVX2-LABEL: test146:
6586 ; AVX2:       # %bb.0: # %entry
6587 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6588 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6589 ; AVX2-NEXT:    retq
6591 ; AVX512-LABEL: test146:
6592 ; AVX512:       # %bb.0: # %entry
6593 ; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6594 ; AVX512-NEXT:    retq
6595 entry:
6596   %cmp = icmp sle <16 x i32> %a, %b
6597   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6598   ret <16 x i32> %sel
6601 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
6602 ; SSE2-LABEL: test147:
6603 ; SSE2:       # %bb.0: # %entry
6604 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
6605 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6606 ; SSE2-NEXT:    pand %xmm8, %xmm0
6607 ; SSE2-NEXT:    pandn %xmm4, %xmm8
6608 ; SSE2-NEXT:    por %xmm8, %xmm0
6609 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6610 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6611 ; SSE2-NEXT:    pand %xmm4, %xmm1
6612 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6613 ; SSE2-NEXT:    por %xmm4, %xmm1
6614 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
6615 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6616 ; SSE2-NEXT:    pand %xmm4, %xmm2
6617 ; SSE2-NEXT:    pandn %xmm6, %xmm4
6618 ; SSE2-NEXT:    por %xmm4, %xmm2
6619 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
6620 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6621 ; SSE2-NEXT:    pand %xmm4, %xmm3
6622 ; SSE2-NEXT:    pandn %xmm7, %xmm4
6623 ; SSE2-NEXT:    por %xmm4, %xmm3
6624 ; SSE2-NEXT:    retq
6626 ; SSE4-LABEL: test147:
6627 ; SSE4:       # %bb.0: # %entry
6628 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
6629 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
6630 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
6631 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
6632 ; SSE4-NEXT:    retq
6634 ; AVX1-LABEL: test147:
6635 ; AVX1:       # %bb.0: # %entry
6636 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6637 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6638 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6639 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6640 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6641 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6642 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6643 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6644 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6645 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6646 ; AVX1-NEXT:    retq
6648 ; AVX2-LABEL: test147:
6649 ; AVX2:       # %bb.0: # %entry
6650 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6651 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6652 ; AVX2-NEXT:    retq
6654 ; AVX512-LABEL: test147:
6655 ; AVX512:       # %bb.0: # %entry
6656 ; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6657 ; AVX512-NEXT:    retq
6658 entry:
6659   %cmp = icmp sgt <16 x i32> %a, %b
6660   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6661   ret <16 x i32> %sel
6664 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
6665 ; SSE2-LABEL: test148:
6666 ; SSE2:       # %bb.0: # %entry
6667 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
6668 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6669 ; SSE2-NEXT:    pand %xmm8, %xmm0
6670 ; SSE2-NEXT:    pandn %xmm4, %xmm8
6671 ; SSE2-NEXT:    por %xmm8, %xmm0
6672 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6673 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6674 ; SSE2-NEXT:    pand %xmm4, %xmm1
6675 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6676 ; SSE2-NEXT:    por %xmm4, %xmm1
6677 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
6678 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6679 ; SSE2-NEXT:    pand %xmm4, %xmm2
6680 ; SSE2-NEXT:    pandn %xmm6, %xmm4
6681 ; SSE2-NEXT:    por %xmm4, %xmm2
6682 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
6683 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6684 ; SSE2-NEXT:    pand %xmm4, %xmm3
6685 ; SSE2-NEXT:    pandn %xmm7, %xmm4
6686 ; SSE2-NEXT:    por %xmm4, %xmm3
6687 ; SSE2-NEXT:    retq
6689 ; SSE4-LABEL: test148:
6690 ; SSE4:       # %bb.0: # %entry
6691 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
6692 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
6693 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
6694 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
6695 ; SSE4-NEXT:    retq
6697 ; AVX1-LABEL: test148:
6698 ; AVX1:       # %bb.0: # %entry
6699 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6700 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6701 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6702 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6703 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6704 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6705 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6706 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6707 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6708 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6709 ; AVX1-NEXT:    retq
6711 ; AVX2-LABEL: test148:
6712 ; AVX2:       # %bb.0: # %entry
6713 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6714 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6715 ; AVX2-NEXT:    retq
6717 ; AVX512-LABEL: test148:
6718 ; AVX512:       # %bb.0: # %entry
6719 ; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6720 ; AVX512-NEXT:    retq
6721 entry:
6722   %cmp = icmp sge <16 x i32> %a, %b
6723   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6724   ret <16 x i32> %sel
6727 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
6728 ; SSE2-LABEL: test149:
6729 ; SSE2:       # %bb.0: # %entry
6730 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6731 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
6732 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6733 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
6734 ; SSE2-NEXT:    pxor %xmm8, %xmm10
6735 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6736 ; SSE2-NEXT:    pand %xmm10, %xmm0
6737 ; SSE2-NEXT:    pandn %xmm4, %xmm10
6738 ; SSE2-NEXT:    por %xmm10, %xmm0
6739 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6740 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6741 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
6742 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6743 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6744 ; SSE2-NEXT:    pand %xmm9, %xmm1
6745 ; SSE2-NEXT:    pandn %xmm5, %xmm9
6746 ; SSE2-NEXT:    por %xmm9, %xmm1
6747 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
6748 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6749 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
6750 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6751 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6752 ; SSE2-NEXT:    pand %xmm5, %xmm2
6753 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6754 ; SSE2-NEXT:    por %xmm5, %xmm2
6755 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
6756 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6757 ; SSE2-NEXT:    pxor %xmm3, %xmm8
6758 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6759 ; SSE2-NEXT:    pand %xmm8, %xmm3
6760 ; SSE2-NEXT:    pandn %xmm7, %xmm8
6761 ; SSE2-NEXT:    por %xmm8, %xmm3
6762 ; SSE2-NEXT:    retq
6764 ; SSE4-LABEL: test149:
6765 ; SSE4:       # %bb.0: # %entry
6766 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6767 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6768 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6769 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6770 ; SSE4-NEXT:    retq
6772 ; AVX1-LABEL: test149:
6773 ; AVX1:       # %bb.0: # %entry
6774 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6775 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6776 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6777 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6778 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6779 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6780 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6781 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6782 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6783 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6784 ; AVX1-NEXT:    retq
6786 ; AVX2-LABEL: test149:
6787 ; AVX2:       # %bb.0: # %entry
6788 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6789 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6790 ; AVX2-NEXT:    retq
6792 ; AVX512-LABEL: test149:
6793 ; AVX512:       # %bb.0: # %entry
6794 ; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6795 ; AVX512-NEXT:    retq
6796 entry:
6797   %cmp = icmp ult <16 x i32> %a, %b
6798   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6799   ret <16 x i32> %sel
6802 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
6803 ; SSE2-LABEL: test150:
6804 ; SSE2:       # %bb.0: # %entry
6805 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6806 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
6807 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6808 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
6809 ; SSE2-NEXT:    pxor %xmm8, %xmm10
6810 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6811 ; SSE2-NEXT:    pand %xmm10, %xmm0
6812 ; SSE2-NEXT:    pandn %xmm4, %xmm10
6813 ; SSE2-NEXT:    por %xmm10, %xmm0
6814 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6815 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6816 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
6817 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6818 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6819 ; SSE2-NEXT:    pand %xmm9, %xmm1
6820 ; SSE2-NEXT:    pandn %xmm5, %xmm9
6821 ; SSE2-NEXT:    por %xmm9, %xmm1
6822 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
6823 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6824 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
6825 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6826 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6827 ; SSE2-NEXT:    pand %xmm5, %xmm2
6828 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6829 ; SSE2-NEXT:    por %xmm5, %xmm2
6830 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
6831 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6832 ; SSE2-NEXT:    pxor %xmm3, %xmm8
6833 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6834 ; SSE2-NEXT:    pand %xmm8, %xmm3
6835 ; SSE2-NEXT:    pandn %xmm7, %xmm8
6836 ; SSE2-NEXT:    por %xmm8, %xmm3
6837 ; SSE2-NEXT:    retq
6839 ; SSE4-LABEL: test150:
6840 ; SSE4:       # %bb.0: # %entry
6841 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6842 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6843 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6844 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6845 ; SSE4-NEXT:    retq
6847 ; AVX1-LABEL: test150:
6848 ; AVX1:       # %bb.0: # %entry
6849 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6850 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6851 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6852 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6853 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6854 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6855 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6856 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6857 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6858 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6859 ; AVX1-NEXT:    retq
6861 ; AVX2-LABEL: test150:
6862 ; AVX2:       # %bb.0: # %entry
6863 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6864 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6865 ; AVX2-NEXT:    retq
6867 ; AVX512-LABEL: test150:
6868 ; AVX512:       # %bb.0: # %entry
6869 ; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6870 ; AVX512-NEXT:    retq
6871 entry:
6872   %cmp = icmp ule <16 x i32> %a, %b
6873   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6874   ret <16 x i32> %sel
6877 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
6878 ; SSE2-LABEL: test151:
6879 ; SSE2:       # %bb.0: # %entry
6880 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6881 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
6882 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6883 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
6884 ; SSE2-NEXT:    pxor %xmm8, %xmm10
6885 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6886 ; SSE2-NEXT:    pand %xmm10, %xmm0
6887 ; SSE2-NEXT:    pandn %xmm4, %xmm10
6888 ; SSE2-NEXT:    por %xmm10, %xmm0
6889 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6890 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6891 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
6892 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6893 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6894 ; SSE2-NEXT:    pand %xmm9, %xmm1
6895 ; SSE2-NEXT:    pandn %xmm5, %xmm9
6896 ; SSE2-NEXT:    por %xmm9, %xmm1
6897 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6898 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6899 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
6900 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6901 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6902 ; SSE2-NEXT:    pand %xmm5, %xmm2
6903 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6904 ; SSE2-NEXT:    por %xmm5, %xmm2
6905 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
6906 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6907 ; SSE2-NEXT:    pxor %xmm7, %xmm8
6908 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6909 ; SSE2-NEXT:    pand %xmm8, %xmm3
6910 ; SSE2-NEXT:    pandn %xmm7, %xmm8
6911 ; SSE2-NEXT:    por %xmm8, %xmm3
6912 ; SSE2-NEXT:    retq
6914 ; SSE4-LABEL: test151:
6915 ; SSE4:       # %bb.0: # %entry
6916 ; SSE4-NEXT:    pminud %xmm4, %xmm0
6917 ; SSE4-NEXT:    pminud %xmm5, %xmm1
6918 ; SSE4-NEXT:    pminud %xmm6, %xmm2
6919 ; SSE4-NEXT:    pminud %xmm7, %xmm3
6920 ; SSE4-NEXT:    retq
6922 ; AVX1-LABEL: test151:
6923 ; AVX1:       # %bb.0: # %entry
6924 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6925 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6926 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
6927 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
6928 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6929 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6930 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6931 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
6932 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
6933 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6934 ; AVX1-NEXT:    retq
6936 ; AVX2-LABEL: test151:
6937 ; AVX2:       # %bb.0: # %entry
6938 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
6939 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
6940 ; AVX2-NEXT:    retq
6942 ; AVX512-LABEL: test151:
6943 ; AVX512:       # %bb.0: # %entry
6944 ; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
6945 ; AVX512-NEXT:    retq
6946 entry:
6947   %cmp = icmp ugt <16 x i32> %a, %b
6948   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6949   ret <16 x i32> %sel
6952 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
6953 ; SSE2-LABEL: test152:
6954 ; SSE2:       # %bb.0: # %entry
6955 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6956 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
6957 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6958 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
6959 ; SSE2-NEXT:    pxor %xmm8, %xmm10
6960 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6961 ; SSE2-NEXT:    pand %xmm10, %xmm0
6962 ; SSE2-NEXT:    pandn %xmm4, %xmm10
6963 ; SSE2-NEXT:    por %xmm10, %xmm0
6964 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6965 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6966 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
6967 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6968 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6969 ; SSE2-NEXT:    pand %xmm9, %xmm1
6970 ; SSE2-NEXT:    pandn %xmm5, %xmm9
6971 ; SSE2-NEXT:    por %xmm9, %xmm1
6972 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6973 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6974 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
6975 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6976 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6977 ; SSE2-NEXT:    pand %xmm5, %xmm2
6978 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6979 ; SSE2-NEXT:    por %xmm5, %xmm2
6980 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
6981 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6982 ; SSE2-NEXT:    pxor %xmm7, %xmm8
6983 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6984 ; SSE2-NEXT:    pand %xmm8, %xmm3
6985 ; SSE2-NEXT:    pandn %xmm7, %xmm8
6986 ; SSE2-NEXT:    por %xmm8, %xmm3
6987 ; SSE2-NEXT:    retq
6989 ; SSE4-LABEL: test152:
6990 ; SSE4:       # %bb.0: # %entry
6991 ; SSE4-NEXT:    pminud %xmm4, %xmm0
6992 ; SSE4-NEXT:    pminud %xmm5, %xmm1
6993 ; SSE4-NEXT:    pminud %xmm6, %xmm2
6994 ; SSE4-NEXT:    pminud %xmm7, %xmm3
6995 ; SSE4-NEXT:    retq
6997 ; AVX1-LABEL: test152:
6998 ; AVX1:       # %bb.0: # %entry
6999 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7000 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7001 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
7002 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
7003 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7004 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7005 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7006 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
7007 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
7008 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7009 ; AVX1-NEXT:    retq
7011 ; AVX2-LABEL: test152:
7012 ; AVX2:       # %bb.0: # %entry
7013 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
7014 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
7015 ; AVX2-NEXT:    retq
7017 ; AVX512-LABEL: test152:
7018 ; AVX512:       # %bb.0: # %entry
7019 ; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
7020 ; AVX512-NEXT:    retq
7021 entry:
7022   %cmp = icmp uge <16 x i32> %a, %b
7023   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7024   ret <16 x i32> %sel
7027 ; -----------------------
7029 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
7030 ; SSE2-LABEL: test153:
7031 ; SSE2:       # %bb.0: # %entry
7032 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7033 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
7034 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7035 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
7036 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7037 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7038 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7039 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7040 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7041 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7042 ; SSE2-NEXT:    pand %xmm12, %xmm9
7043 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7044 ; SSE2-NEXT:    por %xmm9, %xmm10
7045 ; SSE2-NEXT:    pand %xmm10, %xmm0
7046 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7047 ; SSE2-NEXT:    por %xmm10, %xmm0
7048 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
7049 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7050 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
7051 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7052 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
7053 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7054 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7055 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7056 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7057 ; SSE2-NEXT:    pand %xmm11, %xmm4
7058 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7059 ; SSE2-NEXT:    por %xmm4, %xmm9
7060 ; SSE2-NEXT:    pand %xmm9, %xmm1
7061 ; SSE2-NEXT:    pandn %xmm5, %xmm9
7062 ; SSE2-NEXT:    por %xmm9, %xmm1
7063 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
7064 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7065 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
7066 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7067 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7068 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7069 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7070 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7071 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7072 ; SSE2-NEXT:    pand %xmm10, %xmm4
7073 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7074 ; SSE2-NEXT:    por %xmm4, %xmm5
7075 ; SSE2-NEXT:    pand %xmm5, %xmm2
7076 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7077 ; SSE2-NEXT:    por %xmm5, %xmm2
7078 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
7079 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7080 ; SSE2-NEXT:    pxor %xmm3, %xmm8
7081 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7082 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7083 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7084 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7085 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7086 ; SSE2-NEXT:    pand %xmm6, %xmm4
7087 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7088 ; SSE2-NEXT:    por %xmm4, %xmm5
7089 ; SSE2-NEXT:    pand %xmm5, %xmm3
7090 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7091 ; SSE2-NEXT:    por %xmm5, %xmm3
7092 ; SSE2-NEXT:    retq
7094 ; SSE4-LABEL: test153:
7095 ; SSE4:       # %bb.0: # %entry
7096 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
7097 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7098 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
7099 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
7100 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7101 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7102 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7103 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7104 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7105 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7106 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
7107 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7108 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7109 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7110 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7111 ; SSE4-NEXT:    movapd %xmm7, %xmm3
7112 ; SSE4-NEXT:    retq
7114 ; AVX1-LABEL: test153:
7115 ; AVX1:       # %bb.0: # %entry
7116 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7117 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7118 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7119 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7120 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7121 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7122 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7123 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7124 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7125 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7126 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7127 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7128 ; AVX1-NEXT:    retq
7130 ; AVX2-LABEL: test153:
7131 ; AVX2:       # %bb.0: # %entry
7132 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7133 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7134 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7135 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7136 ; AVX2-NEXT:    retq
7138 ; AVX512-LABEL: test153:
7139 ; AVX512:       # %bb.0: # %entry
7140 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7141 ; AVX512-NEXT:    retq
7142 entry:
7143   %cmp = icmp slt <8 x i64> %a, %b
7144   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7145   ret <8 x i64> %sel
7148 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7149 ; SSE2-LABEL: test154:
7150 ; SSE2:       # %bb.0: # %entry
7151 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7152 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
7153 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7154 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
7155 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7156 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7157 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7158 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7159 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7160 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7161 ; SSE2-NEXT:    pand %xmm12, %xmm9
7162 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7163 ; SSE2-NEXT:    por %xmm9, %xmm10
7164 ; SSE2-NEXT:    pand %xmm10, %xmm0
7165 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7166 ; SSE2-NEXT:    por %xmm10, %xmm0
7167 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
7168 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7169 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
7170 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7171 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
7172 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7173 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7174 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7175 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7176 ; SSE2-NEXT:    pand %xmm11, %xmm4
7177 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7178 ; SSE2-NEXT:    por %xmm4, %xmm9
7179 ; SSE2-NEXT:    pand %xmm9, %xmm1
7180 ; SSE2-NEXT:    pandn %xmm5, %xmm9
7181 ; SSE2-NEXT:    por %xmm9, %xmm1
7182 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
7183 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7184 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
7185 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7186 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7187 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7188 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7189 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7190 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7191 ; SSE2-NEXT:    pand %xmm10, %xmm4
7192 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7193 ; SSE2-NEXT:    por %xmm4, %xmm5
7194 ; SSE2-NEXT:    pand %xmm5, %xmm2
7195 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7196 ; SSE2-NEXT:    por %xmm5, %xmm2
7197 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
7198 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7199 ; SSE2-NEXT:    pxor %xmm3, %xmm8
7200 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7201 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7202 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7203 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7204 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7205 ; SSE2-NEXT:    pand %xmm6, %xmm4
7206 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7207 ; SSE2-NEXT:    por %xmm4, %xmm5
7208 ; SSE2-NEXT:    pand %xmm5, %xmm3
7209 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7210 ; SSE2-NEXT:    por %xmm5, %xmm3
7211 ; SSE2-NEXT:    retq
7213 ; SSE4-LABEL: test154:
7214 ; SSE4:       # %bb.0: # %entry
7215 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
7216 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7217 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
7218 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
7219 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7220 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7221 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7222 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7223 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7224 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7225 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
7226 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7227 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7228 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7229 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7230 ; SSE4-NEXT:    movapd %xmm7, %xmm3
7231 ; SSE4-NEXT:    retq
7233 ; AVX1-LABEL: test154:
7234 ; AVX1:       # %bb.0: # %entry
7235 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7236 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7237 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7238 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7239 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7240 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7241 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7242 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7243 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7244 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7245 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7246 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7247 ; AVX1-NEXT:    retq
7249 ; AVX2-LABEL: test154:
7250 ; AVX2:       # %bb.0: # %entry
7251 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7252 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7253 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7254 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7255 ; AVX2-NEXT:    retq
7257 ; AVX512-LABEL: test154:
7258 ; AVX512:       # %bb.0: # %entry
7259 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7260 ; AVX512-NEXT:    retq
7261 entry:
7262   %cmp = icmp sle <8 x i64> %a, %b
7263   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7264   ret <8 x i64> %sel
7267 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7268 ; SSE2-LABEL: test155:
7269 ; SSE2:       # %bb.0: # %entry
7270 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7271 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
7272 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7273 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7274 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7275 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7276 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7277 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7278 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7279 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7280 ; SSE2-NEXT:    pand %xmm12, %xmm9
7281 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7282 ; SSE2-NEXT:    por %xmm9, %xmm10
7283 ; SSE2-NEXT:    pand %xmm10, %xmm0
7284 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7285 ; SSE2-NEXT:    por %xmm10, %xmm0
7286 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
7287 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7288 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7289 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7290 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
7291 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7292 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7293 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7294 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7295 ; SSE2-NEXT:    pand %xmm11, %xmm4
7296 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7297 ; SSE2-NEXT:    por %xmm4, %xmm9
7298 ; SSE2-NEXT:    pand %xmm9, %xmm1
7299 ; SSE2-NEXT:    pandn %xmm5, %xmm9
7300 ; SSE2-NEXT:    por %xmm9, %xmm1
7301 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
7302 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7303 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
7304 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7305 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7306 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7307 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7308 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7309 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7310 ; SSE2-NEXT:    pand %xmm10, %xmm4
7311 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7312 ; SSE2-NEXT:    por %xmm4, %xmm5
7313 ; SSE2-NEXT:    pand %xmm5, %xmm2
7314 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7315 ; SSE2-NEXT:    por %xmm5, %xmm2
7316 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
7317 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7318 ; SSE2-NEXT:    pxor %xmm7, %xmm8
7319 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7320 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7321 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7322 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7323 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7324 ; SSE2-NEXT:    pand %xmm6, %xmm4
7325 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7326 ; SSE2-NEXT:    por %xmm4, %xmm5
7327 ; SSE2-NEXT:    pand %xmm5, %xmm3
7328 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7329 ; SSE2-NEXT:    por %xmm5, %xmm3
7330 ; SSE2-NEXT:    retq
7332 ; SSE4-LABEL: test155:
7333 ; SSE4:       # %bb.0: # %entry
7334 ; SSE4-NEXT:    movdqa %xmm0, %xmm8
7335 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
7336 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7337 ; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
7338 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
7339 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7340 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7341 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
7342 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7343 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7344 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
7345 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7346 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7347 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7348 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7349 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7350 ; SSE4-NEXT:    movapd %xmm7, %xmm3
7351 ; SSE4-NEXT:    retq
7353 ; AVX1-LABEL: test155:
7354 ; AVX1:       # %bb.0: # %entry
7355 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7356 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
7357 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7358 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
7359 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7360 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7361 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7362 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7363 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7364 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
7365 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7366 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7367 ; AVX1-NEXT:    retq
7369 ; AVX2-LABEL: test155:
7370 ; AVX2:       # %bb.0: # %entry
7371 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
7372 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7373 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
7374 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7375 ; AVX2-NEXT:    retq
7377 ; AVX512-LABEL: test155:
7378 ; AVX512:       # %bb.0: # %entry
7379 ; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7380 ; AVX512-NEXT:    retq
7381 entry:
7382   %cmp = icmp sgt <8 x i64> %a, %b
7383   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7384   ret <8 x i64> %sel
7387 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7388 ; SSE2-LABEL: test156:
7389 ; SSE2:       # %bb.0: # %entry
7390 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7391 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
7392 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7393 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
7394 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7395 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7396 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7397 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7398 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7399 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7400 ; SSE2-NEXT:    pand %xmm12, %xmm9
7401 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7402 ; SSE2-NEXT:    por %xmm9, %xmm10
7403 ; SSE2-NEXT:    pand %xmm10, %xmm0
7404 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7405 ; SSE2-NEXT:    por %xmm10, %xmm0
7406 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
7407 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7408 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
7409 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7410 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
7411 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7412 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7413 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7414 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7415 ; SSE2-NEXT:    pand %xmm11, %xmm4
7416 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7417 ; SSE2-NEXT:    por %xmm4, %xmm9
7418 ; SSE2-NEXT:    pand %xmm9, %xmm1
7419 ; SSE2-NEXT:    pandn %xmm5, %xmm9
7420 ; SSE2-NEXT:    por %xmm9, %xmm1
7421 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
7422 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7423 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
7424 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7425 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7426 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7427 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7428 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7429 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7430 ; SSE2-NEXT:    pand %xmm10, %xmm4
7431 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7432 ; SSE2-NEXT:    por %xmm4, %xmm5
7433 ; SSE2-NEXT:    pand %xmm5, %xmm2
7434 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7435 ; SSE2-NEXT:    por %xmm5, %xmm2
7436 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
7437 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7438 ; SSE2-NEXT:    pxor %xmm3, %xmm8
7439 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7440 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7441 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7442 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7443 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7444 ; SSE2-NEXT:    pand %xmm6, %xmm4
7445 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7446 ; SSE2-NEXT:    por %xmm4, %xmm5
7447 ; SSE2-NEXT:    pand %xmm5, %xmm3
7448 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7449 ; SSE2-NEXT:    por %xmm5, %xmm3
7450 ; SSE2-NEXT:    retq
7452 ; SSE4-LABEL: test156:
7453 ; SSE4:       # %bb.0: # %entry
7454 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
7455 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7456 ; SSE4-NEXT:    movdqa %xmm4, %xmm10
7457 ; SSE4-NEXT:    pxor %xmm8, %xmm10
7458 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7459 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7460 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7461 ; SSE4-NEXT:    movdqa %xmm5, %xmm9
7462 ; SSE4-NEXT:    pxor %xmm8, %xmm9
7463 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
7464 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7465 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7466 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7467 ; SSE4-NEXT:    movdqa %xmm6, %xmm1
7468 ; SSE4-NEXT:    pxor %xmm8, %xmm1
7469 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7470 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7471 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7472 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7473 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
7474 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7475 ; SSE4-NEXT:    pxor %xmm3, %xmm8
7476 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7477 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
7478 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7479 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7480 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7481 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7482 ; SSE4-NEXT:    movapd %xmm7, %xmm3
7483 ; SSE4-NEXT:    retq
7485 ; AVX1-LABEL: test156:
7486 ; AVX1:       # %bb.0: # %entry
7487 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7488 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7489 ; AVX1-NEXT:    # xmm5 = mem[0,0]
7490 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7491 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7492 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7493 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7494 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
7495 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
7496 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7497 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7498 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7499 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7500 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7501 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7502 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7503 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7504 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
7505 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
7506 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7507 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7508 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7509 ; AVX1-NEXT:    retq
7511 ; AVX2-LABEL: test156:
7512 ; AVX2:       # %bb.0: # %entry
7513 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7514 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
7515 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
7516 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7517 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7518 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
7519 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
7520 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7521 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7522 ; AVX2-NEXT:    retq
7524 ; AVX512-LABEL: test156:
7525 ; AVX512:       # %bb.0: # %entry
7526 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
7527 ; AVX512-NEXT:    retq
7528 entry:
7529   %cmp = icmp ule <8 x i64> %a, %b
7530   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7531   ret <8 x i64> %sel
7534 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
7535 ; SSE2-LABEL: test159:
7536 ; SSE2:       # %bb.0: # %entry
7537 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7538 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
7539 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7540 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7541 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7542 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7543 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7544 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7545 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7546 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7547 ; SSE2-NEXT:    pand %xmm12, %xmm9
7548 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7549 ; SSE2-NEXT:    por %xmm9, %xmm10
7550 ; SSE2-NEXT:    pand %xmm10, %xmm0
7551 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7552 ; SSE2-NEXT:    por %xmm10, %xmm0
7553 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
7554 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7555 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7556 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7557 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
7558 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7559 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7560 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7561 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7562 ; SSE2-NEXT:    pand %xmm11, %xmm4
7563 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7564 ; SSE2-NEXT:    por %xmm4, %xmm9
7565 ; SSE2-NEXT:    pand %xmm9, %xmm1
7566 ; SSE2-NEXT:    pandn %xmm5, %xmm9
7567 ; SSE2-NEXT:    por %xmm9, %xmm1
7568 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
7569 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7570 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
7571 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7572 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7573 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7574 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7575 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7576 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7577 ; SSE2-NEXT:    pand %xmm10, %xmm4
7578 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7579 ; SSE2-NEXT:    por %xmm4, %xmm5
7580 ; SSE2-NEXT:    pand %xmm5, %xmm2
7581 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7582 ; SSE2-NEXT:    por %xmm5, %xmm2
7583 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
7584 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7585 ; SSE2-NEXT:    pxor %xmm7, %xmm8
7586 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7587 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7588 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7589 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7590 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7591 ; SSE2-NEXT:    pand %xmm6, %xmm4
7592 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7593 ; SSE2-NEXT:    por %xmm4, %xmm5
7594 ; SSE2-NEXT:    pand %xmm5, %xmm3
7595 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7596 ; SSE2-NEXT:    por %xmm5, %xmm3
7597 ; SSE2-NEXT:    retq
7599 ; SSE4-LABEL: test159:
7600 ; SSE4:       # %bb.0: # %entry
7601 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
7602 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7603 ; SSE4-NEXT:    movdqa %xmm0, %xmm10
7604 ; SSE4-NEXT:    pxor %xmm8, %xmm10
7605 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
7606 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7607 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7608 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7609 ; SSE4-NEXT:    movdqa %xmm1, %xmm9
7610 ; SSE4-NEXT:    pxor %xmm8, %xmm9
7611 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
7612 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7613 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7614 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7615 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
7616 ; SSE4-NEXT:    pxor %xmm8, %xmm1
7617 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
7618 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7619 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7620 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7621 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7622 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7623 ; SSE4-NEXT:    pxor %xmm7, %xmm8
7624 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7625 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
7626 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7627 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7628 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7629 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7630 ; SSE4-NEXT:    movapd %xmm7, %xmm3
7631 ; SSE4-NEXT:    retq
7633 ; AVX1-LABEL: test159:
7634 ; AVX1:       # %bb.0: # %entry
7635 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7636 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7637 ; AVX1-NEXT:    # xmm5 = mem[0,0]
7638 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7639 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7640 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7641 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7642 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7643 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7644 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7645 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7646 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7647 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7648 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7649 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7650 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7651 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7652 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7653 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7654 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7655 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7656 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7657 ; AVX1-NEXT:    retq
7659 ; AVX2-LABEL: test159:
7660 ; AVX2:       # %bb.0: # %entry
7661 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7662 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7663 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7664 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7665 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7666 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7667 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7668 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7669 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7670 ; AVX2-NEXT:    retq
7672 ; AVX512-LABEL: test159:
7673 ; AVX512:       # %bb.0: # %entry
7674 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7675 ; AVX512-NEXT:    retq
7676 entry:
7677   %cmp = icmp ugt <8 x i64> %a, %b
7678   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7679   ret <8 x i64> %sel
7682 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
7683 ; SSE2-LABEL: test160:
7684 ; SSE2:       # %bb.0: # %entry
7685 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7686 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
7687 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7688 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7689 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7690 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7691 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7692 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7693 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7694 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7695 ; SSE2-NEXT:    pand %xmm12, %xmm9
7696 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7697 ; SSE2-NEXT:    por %xmm9, %xmm10
7698 ; SSE2-NEXT:    pand %xmm10, %xmm0
7699 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7700 ; SSE2-NEXT:    por %xmm10, %xmm0
7701 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
7702 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7703 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7704 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7705 ; SSE2-NEXT:    movdqa %xmm9, %xmm10
7706 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7707 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7708 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7709 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7710 ; SSE2-NEXT:    pand %xmm11, %xmm4
7711 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7712 ; SSE2-NEXT:    por %xmm4, %xmm9
7713 ; SSE2-NEXT:    pand %xmm9, %xmm1
7714 ; SSE2-NEXT:    pandn %xmm5, %xmm9
7715 ; SSE2-NEXT:    por %xmm9, %xmm1
7716 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
7717 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7718 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
7719 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7720 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7721 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7722 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7723 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7724 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7725 ; SSE2-NEXT:    pand %xmm10, %xmm4
7726 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7727 ; SSE2-NEXT:    por %xmm4, %xmm5
7728 ; SSE2-NEXT:    pand %xmm5, %xmm2
7729 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7730 ; SSE2-NEXT:    por %xmm5, %xmm2
7731 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
7732 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7733 ; SSE2-NEXT:    pxor %xmm7, %xmm8
7734 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7735 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7736 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7737 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7738 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7739 ; SSE2-NEXT:    pand %xmm6, %xmm4
7740 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7741 ; SSE2-NEXT:    por %xmm4, %xmm5
7742 ; SSE2-NEXT:    pand %xmm5, %xmm3
7743 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7744 ; SSE2-NEXT:    por %xmm5, %xmm3
7745 ; SSE2-NEXT:    retq
7747 ; SSE4-LABEL: test160:
7748 ; SSE4:       # %bb.0: # %entry
7749 ; SSE4-NEXT:    movdqa %xmm0, %xmm9
7750 ; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7751 ; SSE4-NEXT:    movdqa %xmm0, %xmm10
7752 ; SSE4-NEXT:    pxor %xmm8, %xmm10
7753 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
7754 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7755 ; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7756 ; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7757 ; SSE4-NEXT:    movdqa %xmm1, %xmm9
7758 ; SSE4-NEXT:    pxor %xmm8, %xmm9
7759 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
7760 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7761 ; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7762 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7763 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
7764 ; SSE4-NEXT:    pxor %xmm8, %xmm1
7765 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
7766 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7767 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7768 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7769 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7770 ; SSE4-NEXT:    pxor %xmm8, %xmm0
7771 ; SSE4-NEXT:    pxor %xmm7, %xmm8
7772 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7773 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
7774 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7775 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7776 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7777 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7778 ; SSE4-NEXT:    movapd %xmm7, %xmm3
7779 ; SSE4-NEXT:    retq
7781 ; AVX1-LABEL: test160:
7782 ; AVX1:       # %bb.0: # %entry
7783 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7784 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7785 ; AVX1-NEXT:    # xmm5 = mem[0,0]
7786 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7787 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7788 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7789 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7790 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7791 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7792 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7793 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7794 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7795 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7796 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7797 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7798 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7799 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7800 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7801 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7802 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7803 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7804 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7805 ; AVX1-NEXT:    retq
7807 ; AVX2-LABEL: test160:
7808 ; AVX2:       # %bb.0: # %entry
7809 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7810 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7811 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7812 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7813 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7814 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7815 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7816 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7817 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7818 ; AVX2-NEXT:    retq
7820 ; AVX512-LABEL: test160:
7821 ; AVX512:       # %bb.0: # %entry
7822 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7823 ; AVX512-NEXT:    retq
7824 entry:
7825   %cmp = icmp uge <8 x i64> %a, %b
7826   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7827   ret <8 x i64> %sel
7830 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
7831 ; SSE2-LABEL: test161:
7832 ; SSE2:       # %bb.0: # %entry
7833 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7834 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
7835 ; SSE2-NEXT:    pxor %xmm4, %xmm5
7836 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
7837 ; SSE2-NEXT:    pxor %xmm4, %xmm6
7838 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
7839 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7840 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7841 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7842 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7843 ; SSE2-NEXT:    pand %xmm8, %xmm5
7844 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7845 ; SSE2-NEXT:    por %xmm5, %xmm6
7846 ; SSE2-NEXT:    pand %xmm6, %xmm0
7847 ; SSE2-NEXT:    pandn %xmm2, %xmm6
7848 ; SSE2-NEXT:    por %xmm6, %xmm0
7849 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
7850 ; SSE2-NEXT:    pxor %xmm4, %xmm2
7851 ; SSE2-NEXT:    pxor %xmm3, %xmm4
7852 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7853 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7854 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7855 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7856 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7857 ; SSE2-NEXT:    pand %xmm6, %xmm2
7858 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7859 ; SSE2-NEXT:    por %xmm2, %xmm4
7860 ; SSE2-NEXT:    pand %xmm4, %xmm1
7861 ; SSE2-NEXT:    pandn %xmm3, %xmm4
7862 ; SSE2-NEXT:    por %xmm4, %xmm1
7863 ; SSE2-NEXT:    retq
7865 ; SSE4-LABEL: test161:
7866 ; SSE4:       # %bb.0: # %entry
7867 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
7868 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7869 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7870 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7871 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7872 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7873 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7874 ; SSE4-NEXT:    movapd %xmm2, %xmm0
7875 ; SSE4-NEXT:    movapd %xmm3, %xmm1
7876 ; SSE4-NEXT:    retq
7878 ; AVX1-LABEL: test161:
7879 ; AVX1:       # %bb.0: # %entry
7880 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7881 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7882 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7883 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7884 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7885 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7886 ; AVX1-NEXT:    retq
7888 ; AVX2-LABEL: test161:
7889 ; AVX2:       # %bb.0: # %entry
7890 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7891 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7892 ; AVX2-NEXT:    retq
7894 ; AVX512F-LABEL: test161:
7895 ; AVX512F:       # %bb.0: # %entry
7896 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
7897 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7898 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7899 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
7900 ; AVX512F-NEXT:    retq
7902 ; AVX512BW-LABEL: test161:
7903 ; AVX512BW:       # %bb.0: # %entry
7904 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7905 ; AVX512BW-NEXT:    retq
7906 entry:
7907   %cmp = icmp slt <4 x i64> %a, %b
7908   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7909   ret <4 x i64> %sel
7912 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
7913 ; SSE2-LABEL: test162:
7914 ; SSE2:       # %bb.0: # %entry
7915 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7916 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
7917 ; SSE2-NEXT:    pxor %xmm4, %xmm5
7918 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
7919 ; SSE2-NEXT:    pxor %xmm4, %xmm6
7920 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
7921 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7922 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7923 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7924 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7925 ; SSE2-NEXT:    pand %xmm8, %xmm5
7926 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7927 ; SSE2-NEXT:    por %xmm5, %xmm6
7928 ; SSE2-NEXT:    pand %xmm6, %xmm0
7929 ; SSE2-NEXT:    pandn %xmm2, %xmm6
7930 ; SSE2-NEXT:    por %xmm6, %xmm0
7931 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
7932 ; SSE2-NEXT:    pxor %xmm4, %xmm2
7933 ; SSE2-NEXT:    pxor %xmm3, %xmm4
7934 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7935 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7936 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7937 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7938 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7939 ; SSE2-NEXT:    pand %xmm6, %xmm2
7940 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7941 ; SSE2-NEXT:    por %xmm2, %xmm4
7942 ; SSE2-NEXT:    pand %xmm4, %xmm1
7943 ; SSE2-NEXT:    pandn %xmm3, %xmm4
7944 ; SSE2-NEXT:    por %xmm4, %xmm1
7945 ; SSE2-NEXT:    retq
7947 ; SSE4-LABEL: test162:
7948 ; SSE4:       # %bb.0: # %entry
7949 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
7950 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7951 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7952 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7953 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7954 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7955 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7956 ; SSE4-NEXT:    movapd %xmm2, %xmm0
7957 ; SSE4-NEXT:    movapd %xmm3, %xmm1
7958 ; SSE4-NEXT:    retq
7960 ; AVX1-LABEL: test162:
7961 ; AVX1:       # %bb.0: # %entry
7962 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7963 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7964 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7965 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7966 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7967 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7968 ; AVX1-NEXT:    retq
7970 ; AVX2-LABEL: test162:
7971 ; AVX2:       # %bb.0: # %entry
7972 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7973 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7974 ; AVX2-NEXT:    retq
7976 ; AVX512F-LABEL: test162:
7977 ; AVX512F:       # %bb.0: # %entry
7978 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
7979 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7980 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7981 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
7982 ; AVX512F-NEXT:    retq
7984 ; AVX512BW-LABEL: test162:
7985 ; AVX512BW:       # %bb.0: # %entry
7986 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7987 ; AVX512BW-NEXT:    retq
7988 entry:
7989   %cmp = icmp sle <4 x i64> %a, %b
7990   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7991   ret <4 x i64> %sel
7994 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
7995 ; SSE2-LABEL: test163:
7996 ; SSE2:       # %bb.0: # %entry
7997 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7998 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
7999 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8000 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8001 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8002 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8003 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8004 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8005 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8006 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8007 ; SSE2-NEXT:    pand %xmm8, %xmm5
8008 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8009 ; SSE2-NEXT:    por %xmm5, %xmm6
8010 ; SSE2-NEXT:    pand %xmm6, %xmm0
8011 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8012 ; SSE2-NEXT:    por %xmm6, %xmm0
8013 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8014 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8015 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8016 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8017 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8018 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8019 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8020 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8021 ; SSE2-NEXT:    pand %xmm6, %xmm2
8022 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8023 ; SSE2-NEXT:    por %xmm2, %xmm4
8024 ; SSE2-NEXT:    pand %xmm4, %xmm1
8025 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8026 ; SSE2-NEXT:    por %xmm4, %xmm1
8027 ; SSE2-NEXT:    retq
8029 ; SSE4-LABEL: test163:
8030 ; SSE4:       # %bb.0: # %entry
8031 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8032 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8033 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8034 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8035 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8036 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8037 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8038 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8039 ; SSE4-NEXT:    retq
8041 ; AVX1-LABEL: test163:
8042 ; AVX1:       # %bb.0: # %entry
8043 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8044 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8045 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8046 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8047 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8048 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8049 ; AVX1-NEXT:    retq
8051 ; AVX2-LABEL: test163:
8052 ; AVX2:       # %bb.0: # %entry
8053 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8054 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8055 ; AVX2-NEXT:    retq
8057 ; AVX512F-LABEL: test163:
8058 ; AVX512F:       # %bb.0: # %entry
8059 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8060 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8061 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8062 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8063 ; AVX512F-NEXT:    retq
8065 ; AVX512BW-LABEL: test163:
8066 ; AVX512BW:       # %bb.0: # %entry
8067 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8068 ; AVX512BW-NEXT:    retq
8069 entry:
8070   %cmp = icmp sgt <4 x i64> %a, %b
8071   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8072   ret <4 x i64> %sel
8075 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
8076 ; SSE2-LABEL: test164:
8077 ; SSE2:       # %bb.0: # %entry
8078 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8079 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8080 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8081 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8082 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8083 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8084 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8085 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8086 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8087 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8088 ; SSE2-NEXT:    pand %xmm8, %xmm5
8089 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8090 ; SSE2-NEXT:    por %xmm5, %xmm6
8091 ; SSE2-NEXT:    pand %xmm6, %xmm0
8092 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8093 ; SSE2-NEXT:    por %xmm6, %xmm0
8094 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8095 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8096 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8097 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8098 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8099 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8100 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8101 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8102 ; SSE2-NEXT:    pand %xmm6, %xmm2
8103 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8104 ; SSE2-NEXT:    por %xmm2, %xmm4
8105 ; SSE2-NEXT:    pand %xmm4, %xmm1
8106 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8107 ; SSE2-NEXT:    por %xmm4, %xmm1
8108 ; SSE2-NEXT:    retq
8110 ; SSE4-LABEL: test164:
8111 ; SSE4:       # %bb.0: # %entry
8112 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8113 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8114 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8115 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8116 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8117 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8118 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8119 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8120 ; SSE4-NEXT:    retq
8122 ; AVX1-LABEL: test164:
8123 ; AVX1:       # %bb.0: # %entry
8124 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8125 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8126 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8127 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8128 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8129 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8130 ; AVX1-NEXT:    retq
8132 ; AVX2-LABEL: test164:
8133 ; AVX2:       # %bb.0: # %entry
8134 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8135 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8136 ; AVX2-NEXT:    retq
8138 ; AVX512F-LABEL: test164:
8139 ; AVX512F:       # %bb.0: # %entry
8140 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8141 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8142 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8143 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8144 ; AVX512F-NEXT:    retq
8146 ; AVX512BW-LABEL: test164:
8147 ; AVX512BW:       # %bb.0: # %entry
8148 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8149 ; AVX512BW-NEXT:    retq
8150 entry:
8151   %cmp = icmp sge <4 x i64> %a, %b
8152   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8153   ret <4 x i64> %sel
8156 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
8157 ; SSE2-LABEL: test165:
8158 ; SSE2:       # %bb.0: # %entry
8159 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8160 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8161 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8162 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8163 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8164 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8165 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8166 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8167 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8168 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8169 ; SSE2-NEXT:    pand %xmm8, %xmm5
8170 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8171 ; SSE2-NEXT:    por %xmm5, %xmm6
8172 ; SSE2-NEXT:    pand %xmm6, %xmm0
8173 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8174 ; SSE2-NEXT:    por %xmm6, %xmm0
8175 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8176 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8177 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8178 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8179 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8180 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8181 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8182 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8183 ; SSE2-NEXT:    pand %xmm6, %xmm2
8184 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8185 ; SSE2-NEXT:    por %xmm2, %xmm4
8186 ; SSE2-NEXT:    pand %xmm4, %xmm1
8187 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8188 ; SSE2-NEXT:    por %xmm4, %xmm1
8189 ; SSE2-NEXT:    retq
8191 ; SSE4-LABEL: test165:
8192 ; SSE4:       # %bb.0: # %entry
8193 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8194 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8195 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
8196 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8197 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8198 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8199 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8200 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8201 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8202 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8203 ; SSE4-NEXT:    pxor %xmm3, %xmm5
8204 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8205 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8206 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8207 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8208 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8209 ; SSE4-NEXT:    retq
8211 ; AVX1-LABEL: test165:
8212 ; AVX1:       # %bb.0: # %entry
8213 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8214 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8215 ; AVX1-NEXT:    # xmm3 = mem[0,0]
8216 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8217 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8218 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8219 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8220 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8221 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8222 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8223 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8224 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8225 ; AVX1-NEXT:    retq
8227 ; AVX2-LABEL: test165:
8228 ; AVX2:       # %bb.0: # %entry
8229 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8230 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8231 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8232 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8233 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8234 ; AVX2-NEXT:    retq
8236 ; AVX512F-LABEL: test165:
8237 ; AVX512F:       # %bb.0: # %entry
8238 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8239 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8240 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8241 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8242 ; AVX512F-NEXT:    retq
8244 ; AVX512BW-LABEL: test165:
8245 ; AVX512BW:       # %bb.0: # %entry
8246 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8247 ; AVX512BW-NEXT:    retq
8248 entry:
8249   %cmp = icmp ult <4 x i64> %a, %b
8250   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8251   ret <4 x i64> %sel
8254 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
8255 ; SSE2-LABEL: test166:
8256 ; SSE2:       # %bb.0: # %entry
8257 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8258 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8259 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8260 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8261 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8262 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8263 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8264 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8265 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8266 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8267 ; SSE2-NEXT:    pand %xmm8, %xmm5
8268 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8269 ; SSE2-NEXT:    por %xmm5, %xmm6
8270 ; SSE2-NEXT:    pand %xmm6, %xmm0
8271 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8272 ; SSE2-NEXT:    por %xmm6, %xmm0
8273 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8274 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8275 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8276 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8277 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8278 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8279 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8280 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8281 ; SSE2-NEXT:    pand %xmm6, %xmm2
8282 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8283 ; SSE2-NEXT:    por %xmm2, %xmm4
8284 ; SSE2-NEXT:    pand %xmm4, %xmm1
8285 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8286 ; SSE2-NEXT:    por %xmm4, %xmm1
8287 ; SSE2-NEXT:    retq
8289 ; SSE4-LABEL: test166:
8290 ; SSE4:       # %bb.0: # %entry
8291 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8292 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8293 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
8294 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8295 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8296 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8297 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8298 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8299 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8300 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8301 ; SSE4-NEXT:    pxor %xmm3, %xmm5
8302 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8303 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8304 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8305 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8306 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8307 ; SSE4-NEXT:    retq
8309 ; AVX1-LABEL: test166:
8310 ; AVX1:       # %bb.0: # %entry
8311 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8312 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8313 ; AVX1-NEXT:    # xmm3 = mem[0,0]
8314 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8315 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8316 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8317 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8318 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8319 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8320 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8321 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8322 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8323 ; AVX1-NEXT:    retq
8325 ; AVX2-LABEL: test166:
8326 ; AVX2:       # %bb.0: # %entry
8327 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8328 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8329 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8330 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8331 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8332 ; AVX2-NEXT:    retq
8334 ; AVX512F-LABEL: test166:
8335 ; AVX512F:       # %bb.0: # %entry
8336 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8337 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8338 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8339 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8340 ; AVX512F-NEXT:    retq
8342 ; AVX512BW-LABEL: test166:
8343 ; AVX512BW:       # %bb.0: # %entry
8344 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8345 ; AVX512BW-NEXT:    retq
8346 entry:
8347   %cmp = icmp ule <4 x i64> %a, %b
8348   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8349   ret <4 x i64> %sel
8352 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
8353 ; SSE2-LABEL: test167:
8354 ; SSE2:       # %bb.0: # %entry
8355 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8356 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8357 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8358 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8359 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8360 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8361 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8362 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8363 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8364 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8365 ; SSE2-NEXT:    pand %xmm8, %xmm5
8366 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8367 ; SSE2-NEXT:    por %xmm5, %xmm6
8368 ; SSE2-NEXT:    pand %xmm6, %xmm0
8369 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8370 ; SSE2-NEXT:    por %xmm6, %xmm0
8371 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8372 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8373 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8374 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8375 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8376 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8377 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8378 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8379 ; SSE2-NEXT:    pand %xmm6, %xmm2
8380 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8381 ; SSE2-NEXT:    por %xmm2, %xmm4
8382 ; SSE2-NEXT:    pand %xmm4, %xmm1
8383 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8384 ; SSE2-NEXT:    por %xmm4, %xmm1
8385 ; SSE2-NEXT:    retq
8387 ; SSE4-LABEL: test167:
8388 ; SSE4:       # %bb.0: # %entry
8389 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8390 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8391 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
8392 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8393 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8394 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8395 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8396 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8397 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8398 ; SSE4-NEXT:    pxor %xmm1, %xmm5
8399 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8400 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8401 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8402 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8403 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8404 ; SSE4-NEXT:    retq
8406 ; AVX1-LABEL: test167:
8407 ; AVX1:       # %bb.0: # %entry
8408 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8409 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8410 ; AVX1-NEXT:    # xmm3 = mem[0,0]
8411 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8412 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8413 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8414 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8415 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8416 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8417 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8418 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8419 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8420 ; AVX1-NEXT:    retq
8422 ; AVX2-LABEL: test167:
8423 ; AVX2:       # %bb.0: # %entry
8424 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8425 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8426 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8427 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8428 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8429 ; AVX2-NEXT:    retq
8431 ; AVX512F-LABEL: test167:
8432 ; AVX512F:       # %bb.0: # %entry
8433 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8434 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8435 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8436 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8437 ; AVX512F-NEXT:    retq
8439 ; AVX512BW-LABEL: test167:
8440 ; AVX512BW:       # %bb.0: # %entry
8441 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8442 ; AVX512BW-NEXT:    retq
8443 entry:
8444   %cmp = icmp ugt <4 x i64> %a, %b
8445   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8446   ret <4 x i64> %sel
8449 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
8450 ; SSE2-LABEL: test168:
8451 ; SSE2:       # %bb.0: # %entry
8452 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8453 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8454 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8455 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8456 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8457 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8458 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8459 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8460 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8461 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8462 ; SSE2-NEXT:    pand %xmm8, %xmm5
8463 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8464 ; SSE2-NEXT:    por %xmm5, %xmm6
8465 ; SSE2-NEXT:    pand %xmm6, %xmm0
8466 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8467 ; SSE2-NEXT:    por %xmm6, %xmm0
8468 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8469 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8470 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8471 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8472 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8473 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8474 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8475 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8476 ; SSE2-NEXT:    pand %xmm6, %xmm2
8477 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8478 ; SSE2-NEXT:    por %xmm2, %xmm4
8479 ; SSE2-NEXT:    pand %xmm4, %xmm1
8480 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8481 ; SSE2-NEXT:    por %xmm4, %xmm1
8482 ; SSE2-NEXT:    retq
8484 ; SSE4-LABEL: test168:
8485 ; SSE4:       # %bb.0: # %entry
8486 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8487 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8488 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
8489 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8490 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8491 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8492 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8493 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8494 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8495 ; SSE4-NEXT:    pxor %xmm1, %xmm5
8496 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8497 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8498 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8499 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8500 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8501 ; SSE4-NEXT:    retq
8503 ; AVX1-LABEL: test168:
8504 ; AVX1:       # %bb.0: # %entry
8505 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8506 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8507 ; AVX1-NEXT:    # xmm3 = mem[0,0]
8508 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8509 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8510 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8511 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8512 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8513 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8514 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8515 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8516 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8517 ; AVX1-NEXT:    retq
8519 ; AVX2-LABEL: test168:
8520 ; AVX2:       # %bb.0: # %entry
8521 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8522 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8523 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8524 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8525 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8526 ; AVX2-NEXT:    retq
8528 ; AVX512F-LABEL: test168:
8529 ; AVX512F:       # %bb.0: # %entry
8530 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8531 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8532 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8533 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8534 ; AVX512F-NEXT:    retq
8536 ; AVX512BW-LABEL: test168:
8537 ; AVX512BW:       # %bb.0: # %entry
8538 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8539 ; AVX512BW-NEXT:    retq
8540 entry:
8541   %cmp = icmp uge <4 x i64> %a, %b
8542   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8543   ret <4 x i64> %sel
8546 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
8547 ; SSE2-LABEL: test169:
8548 ; SSE2:       # %bb.0: # %entry
8549 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8550 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8551 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8552 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8553 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8554 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8555 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8556 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8557 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8558 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8559 ; SSE2-NEXT:    pand %xmm8, %xmm5
8560 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8561 ; SSE2-NEXT:    por %xmm5, %xmm6
8562 ; SSE2-NEXT:    pand %xmm6, %xmm0
8563 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8564 ; SSE2-NEXT:    por %xmm6, %xmm0
8565 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8566 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8567 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8568 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8569 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8570 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8571 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8572 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8573 ; SSE2-NEXT:    pand %xmm6, %xmm2
8574 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8575 ; SSE2-NEXT:    por %xmm2, %xmm4
8576 ; SSE2-NEXT:    pand %xmm4, %xmm1
8577 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8578 ; SSE2-NEXT:    por %xmm4, %xmm1
8579 ; SSE2-NEXT:    retq
8581 ; SSE4-LABEL: test169:
8582 ; SSE4:       # %bb.0: # %entry
8583 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8584 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8585 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8586 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8587 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8588 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8589 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8590 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8591 ; SSE4-NEXT:    retq
8593 ; AVX1-LABEL: test169:
8594 ; AVX1:       # %bb.0: # %entry
8595 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8596 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8597 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8598 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8599 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8600 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8601 ; AVX1-NEXT:    retq
8603 ; AVX2-LABEL: test169:
8604 ; AVX2:       # %bb.0: # %entry
8605 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8606 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8607 ; AVX2-NEXT:    retq
8609 ; AVX512F-LABEL: test169:
8610 ; AVX512F:       # %bb.0: # %entry
8611 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8612 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8613 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8614 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8615 ; AVX512F-NEXT:    retq
8617 ; AVX512BW-LABEL: test169:
8618 ; AVX512BW:       # %bb.0: # %entry
8619 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8620 ; AVX512BW-NEXT:    retq
8621 entry:
8622   %cmp = icmp slt <4 x i64> %a, %b
8623   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8624   ret <4 x i64> %sel
8627 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
8628 ; SSE2-LABEL: test170:
8629 ; SSE2:       # %bb.0: # %entry
8630 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8631 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8632 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8633 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8634 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8635 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8636 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8637 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8638 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8639 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8640 ; SSE2-NEXT:    pand %xmm8, %xmm5
8641 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8642 ; SSE2-NEXT:    por %xmm5, %xmm6
8643 ; SSE2-NEXT:    pand %xmm6, %xmm0
8644 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8645 ; SSE2-NEXT:    por %xmm6, %xmm0
8646 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8647 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8648 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8649 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8650 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8651 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8652 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8653 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8654 ; SSE2-NEXT:    pand %xmm6, %xmm2
8655 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8656 ; SSE2-NEXT:    por %xmm2, %xmm4
8657 ; SSE2-NEXT:    pand %xmm4, %xmm1
8658 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8659 ; SSE2-NEXT:    por %xmm4, %xmm1
8660 ; SSE2-NEXT:    retq
8662 ; SSE4-LABEL: test170:
8663 ; SSE4:       # %bb.0: # %entry
8664 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8665 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8666 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8667 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8668 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8669 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8670 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8671 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8672 ; SSE4-NEXT:    retq
8674 ; AVX1-LABEL: test170:
8675 ; AVX1:       # %bb.0: # %entry
8676 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8677 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8678 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8679 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8680 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8681 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8682 ; AVX1-NEXT:    retq
8684 ; AVX2-LABEL: test170:
8685 ; AVX2:       # %bb.0: # %entry
8686 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8687 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8688 ; AVX2-NEXT:    retq
8690 ; AVX512F-LABEL: test170:
8691 ; AVX512F:       # %bb.0: # %entry
8692 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8693 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8694 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8695 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8696 ; AVX512F-NEXT:    retq
8698 ; AVX512BW-LABEL: test170:
8699 ; AVX512BW:       # %bb.0: # %entry
8700 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8701 ; AVX512BW-NEXT:    retq
8702 entry:
8703   %cmp = icmp sle <4 x i64> %a, %b
8704   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8705   ret <4 x i64> %sel
8708 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
8709 ; SSE2-LABEL: test171:
8710 ; SSE2:       # %bb.0: # %entry
8711 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8712 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8713 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8714 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8715 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8716 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8717 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8718 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8719 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8720 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8721 ; SSE2-NEXT:    pand %xmm8, %xmm5
8722 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8723 ; SSE2-NEXT:    por %xmm5, %xmm6
8724 ; SSE2-NEXT:    pand %xmm6, %xmm0
8725 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8726 ; SSE2-NEXT:    por %xmm6, %xmm0
8727 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8728 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8729 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8730 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8731 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8732 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8733 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8734 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8735 ; SSE2-NEXT:    pand %xmm6, %xmm2
8736 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8737 ; SSE2-NEXT:    por %xmm2, %xmm4
8738 ; SSE2-NEXT:    pand %xmm4, %xmm1
8739 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8740 ; SSE2-NEXT:    por %xmm4, %xmm1
8741 ; SSE2-NEXT:    retq
8743 ; SSE4-LABEL: test171:
8744 ; SSE4:       # %bb.0: # %entry
8745 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8746 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8747 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8748 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8749 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8750 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8751 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8752 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8753 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8754 ; SSE4-NEXT:    retq
8756 ; AVX1-LABEL: test171:
8757 ; AVX1:       # %bb.0: # %entry
8758 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8759 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8760 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8761 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8762 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8763 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8764 ; AVX1-NEXT:    retq
8766 ; AVX2-LABEL: test171:
8767 ; AVX2:       # %bb.0: # %entry
8768 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8769 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8770 ; AVX2-NEXT:    retq
8772 ; AVX512F-LABEL: test171:
8773 ; AVX512F:       # %bb.0: # %entry
8774 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8775 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8776 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8777 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8778 ; AVX512F-NEXT:    retq
8780 ; AVX512BW-LABEL: test171:
8781 ; AVX512BW:       # %bb.0: # %entry
8782 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8783 ; AVX512BW-NEXT:    retq
8784 entry:
8785   %cmp = icmp sgt <4 x i64> %a, %b
8786   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8787   ret <4 x i64> %sel
8790 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
8791 ; SSE2-LABEL: test172:
8792 ; SSE2:       # %bb.0: # %entry
8793 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8794 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8795 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8796 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8797 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8798 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8799 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8800 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8801 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8802 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8803 ; SSE2-NEXT:    pand %xmm8, %xmm5
8804 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8805 ; SSE2-NEXT:    por %xmm5, %xmm6
8806 ; SSE2-NEXT:    pand %xmm6, %xmm0
8807 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8808 ; SSE2-NEXT:    por %xmm6, %xmm0
8809 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8810 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8811 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8812 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8813 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8814 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8815 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8816 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8817 ; SSE2-NEXT:    pand %xmm6, %xmm2
8818 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8819 ; SSE2-NEXT:    por %xmm2, %xmm4
8820 ; SSE2-NEXT:    pand %xmm4, %xmm1
8821 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8822 ; SSE2-NEXT:    por %xmm4, %xmm1
8823 ; SSE2-NEXT:    retq
8825 ; SSE4-LABEL: test172:
8826 ; SSE4:       # %bb.0: # %entry
8827 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8828 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8829 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8830 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8831 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8832 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8833 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8834 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8835 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8836 ; SSE4-NEXT:    retq
8838 ; AVX1-LABEL: test172:
8839 ; AVX1:       # %bb.0: # %entry
8840 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8841 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8842 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8843 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8844 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8845 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8846 ; AVX1-NEXT:    retq
8848 ; AVX2-LABEL: test172:
8849 ; AVX2:       # %bb.0: # %entry
8850 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8851 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8852 ; AVX2-NEXT:    retq
8854 ; AVX512F-LABEL: test172:
8855 ; AVX512F:       # %bb.0: # %entry
8856 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8857 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8858 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8859 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8860 ; AVX512F-NEXT:    retq
8862 ; AVX512BW-LABEL: test172:
8863 ; AVX512BW:       # %bb.0: # %entry
8864 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8865 ; AVX512BW-NEXT:    retq
8866 entry:
8867   %cmp = icmp sge <4 x i64> %a, %b
8868   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8869   ret <4 x i64> %sel
8872 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
8873 ; SSE2-LABEL: test173:
8874 ; SSE2:       # %bb.0: # %entry
8875 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8876 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8877 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8878 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8879 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8880 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8881 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8882 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8883 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8884 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8885 ; SSE2-NEXT:    pand %xmm8, %xmm5
8886 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8887 ; SSE2-NEXT:    por %xmm5, %xmm6
8888 ; SSE2-NEXT:    pand %xmm6, %xmm0
8889 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8890 ; SSE2-NEXT:    por %xmm6, %xmm0
8891 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8892 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8893 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8894 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8895 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8896 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8897 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8898 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8899 ; SSE2-NEXT:    pand %xmm6, %xmm2
8900 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8901 ; SSE2-NEXT:    por %xmm2, %xmm4
8902 ; SSE2-NEXT:    pand %xmm4, %xmm1
8903 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8904 ; SSE2-NEXT:    por %xmm4, %xmm1
8905 ; SSE2-NEXT:    retq
8907 ; SSE4-LABEL: test173:
8908 ; SSE4:       # %bb.0: # %entry
8909 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8910 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8911 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
8912 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8913 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8914 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8915 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8916 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8917 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8918 ; SSE4-NEXT:    pxor %xmm1, %xmm5
8919 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8920 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8921 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8922 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8923 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8924 ; SSE4-NEXT:    retq
8926 ; AVX1-LABEL: test173:
8927 ; AVX1:       # %bb.0: # %entry
8928 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8929 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8930 ; AVX1-NEXT:    # xmm3 = mem[0,0]
8931 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8932 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8933 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8934 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8935 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8936 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8937 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8938 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8939 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8940 ; AVX1-NEXT:    retq
8942 ; AVX2-LABEL: test173:
8943 ; AVX2:       # %bb.0: # %entry
8944 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8945 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8946 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8947 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8948 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8949 ; AVX2-NEXT:    retq
8951 ; AVX512F-LABEL: test173:
8952 ; AVX512F:       # %bb.0: # %entry
8953 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8954 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8955 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8956 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8957 ; AVX512F-NEXT:    retq
8959 ; AVX512BW-LABEL: test173:
8960 ; AVX512BW:       # %bb.0: # %entry
8961 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8962 ; AVX512BW-NEXT:    retq
8963 entry:
8964   %cmp = icmp ult <4 x i64> %a, %b
8965   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8966   ret <4 x i64> %sel
8969 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
8970 ; SSE2-LABEL: test174:
8971 ; SSE2:       # %bb.0: # %entry
8972 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8973 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8974 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8975 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8976 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8977 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8978 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8979 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8980 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8981 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8982 ; SSE2-NEXT:    pand %xmm8, %xmm5
8983 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8984 ; SSE2-NEXT:    por %xmm5, %xmm6
8985 ; SSE2-NEXT:    pand %xmm6, %xmm0
8986 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8987 ; SSE2-NEXT:    por %xmm6, %xmm0
8988 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8989 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8990 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8991 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8992 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8993 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8994 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8995 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8996 ; SSE2-NEXT:    pand %xmm6, %xmm2
8997 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8998 ; SSE2-NEXT:    por %xmm2, %xmm4
8999 ; SSE2-NEXT:    pand %xmm4, %xmm1
9000 ; SSE2-NEXT:    pandn %xmm3, %xmm4
9001 ; SSE2-NEXT:    por %xmm4, %xmm1
9002 ; SSE2-NEXT:    retq
9004 ; SSE4-LABEL: test174:
9005 ; SSE4:       # %bb.0: # %entry
9006 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
9007 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9008 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
9009 ; SSE4-NEXT:    pxor %xmm5, %xmm6
9010 ; SSE4-NEXT:    pxor %xmm5, %xmm0
9011 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9012 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9013 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
9014 ; SSE4-NEXT:    pxor %xmm5, %xmm0
9015 ; SSE4-NEXT:    pxor %xmm1, %xmm5
9016 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9017 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
9018 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9019 ; SSE4-NEXT:    movapd %xmm2, %xmm0
9020 ; SSE4-NEXT:    movapd %xmm3, %xmm1
9021 ; SSE4-NEXT:    retq
9023 ; AVX1-LABEL: test174:
9024 ; AVX1:       # %bb.0: # %entry
9025 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9026 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9027 ; AVX1-NEXT:    # xmm3 = mem[0,0]
9028 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9029 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9030 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9031 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9032 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
9033 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
9034 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9035 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9036 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9037 ; AVX1-NEXT:    retq
9039 ; AVX2-LABEL: test174:
9040 ; AVX2:       # %bb.0: # %entry
9041 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9042 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9043 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9044 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9045 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9046 ; AVX2-NEXT:    retq
9048 ; AVX512F-LABEL: test174:
9049 ; AVX512F:       # %bb.0: # %entry
9050 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9051 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9052 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9053 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9054 ; AVX512F-NEXT:    retq
9056 ; AVX512BW-LABEL: test174:
9057 ; AVX512BW:       # %bb.0: # %entry
9058 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9059 ; AVX512BW-NEXT:    retq
9060 entry:
9061   %cmp = icmp ule <4 x i64> %a, %b
9062   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9063   ret <4 x i64> %sel
9066 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
9067 ; SSE2-LABEL: test175:
9068 ; SSE2:       # %bb.0: # %entry
9069 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9070 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
9071 ; SSE2-NEXT:    pxor %xmm4, %xmm5
9072 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
9073 ; SSE2-NEXT:    pxor %xmm4, %xmm6
9074 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
9075 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9076 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9077 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9078 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9079 ; SSE2-NEXT:    pand %xmm8, %xmm5
9080 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9081 ; SSE2-NEXT:    por %xmm5, %xmm6
9082 ; SSE2-NEXT:    pand %xmm6, %xmm0
9083 ; SSE2-NEXT:    pandn %xmm2, %xmm6
9084 ; SSE2-NEXT:    por %xmm6, %xmm0
9085 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
9086 ; SSE2-NEXT:    pxor %xmm4, %xmm2
9087 ; SSE2-NEXT:    pxor %xmm3, %xmm4
9088 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
9089 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9090 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9091 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9092 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9093 ; SSE2-NEXT:    pand %xmm6, %xmm2
9094 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9095 ; SSE2-NEXT:    por %xmm2, %xmm4
9096 ; SSE2-NEXT:    pand %xmm4, %xmm1
9097 ; SSE2-NEXT:    pandn %xmm3, %xmm4
9098 ; SSE2-NEXT:    por %xmm4, %xmm1
9099 ; SSE2-NEXT:    retq
9101 ; SSE4-LABEL: test175:
9102 ; SSE4:       # %bb.0: # %entry
9103 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
9104 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9105 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
9106 ; SSE4-NEXT:    pxor %xmm5, %xmm6
9107 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
9108 ; SSE4-NEXT:    pxor %xmm5, %xmm0
9109 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9110 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9111 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9112 ; SSE4-NEXT:    pxor %xmm5, %xmm0
9113 ; SSE4-NEXT:    pxor %xmm3, %xmm5
9114 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9115 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
9116 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9117 ; SSE4-NEXT:    movapd %xmm2, %xmm0
9118 ; SSE4-NEXT:    movapd %xmm3, %xmm1
9119 ; SSE4-NEXT:    retq
9121 ; AVX1-LABEL: test175:
9122 ; AVX1:       # %bb.0: # %entry
9123 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9124 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9125 ; AVX1-NEXT:    # xmm3 = mem[0,0]
9126 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9127 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9128 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9129 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9130 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9131 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9132 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9133 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9134 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9135 ; AVX1-NEXT:    retq
9137 ; AVX2-LABEL: test175:
9138 ; AVX2:       # %bb.0: # %entry
9139 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9140 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9141 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9142 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9143 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9144 ; AVX2-NEXT:    retq
9146 ; AVX512F-LABEL: test175:
9147 ; AVX512F:       # %bb.0: # %entry
9148 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9149 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9150 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9151 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9152 ; AVX512F-NEXT:    retq
9154 ; AVX512BW-LABEL: test175:
9155 ; AVX512BW:       # %bb.0: # %entry
9156 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9157 ; AVX512BW-NEXT:    retq
9158 entry:
9159   %cmp = icmp ugt <4 x i64> %a, %b
9160   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9161   ret <4 x i64> %sel
9164 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
9165 ; SSE2-LABEL: test176:
9166 ; SSE2:       # %bb.0: # %entry
9167 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9168 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
9169 ; SSE2-NEXT:    pxor %xmm4, %xmm5
9170 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
9171 ; SSE2-NEXT:    pxor %xmm4, %xmm6
9172 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
9173 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9174 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9175 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9176 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9177 ; SSE2-NEXT:    pand %xmm8, %xmm5
9178 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9179 ; SSE2-NEXT:    por %xmm5, %xmm6
9180 ; SSE2-NEXT:    pand %xmm6, %xmm0
9181 ; SSE2-NEXT:    pandn %xmm2, %xmm6
9182 ; SSE2-NEXT:    por %xmm6, %xmm0
9183 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
9184 ; SSE2-NEXT:    pxor %xmm4, %xmm2
9185 ; SSE2-NEXT:    pxor %xmm3, %xmm4
9186 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
9187 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9188 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9189 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9190 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9191 ; SSE2-NEXT:    pand %xmm6, %xmm2
9192 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9193 ; SSE2-NEXT:    por %xmm2, %xmm4
9194 ; SSE2-NEXT:    pand %xmm4, %xmm1
9195 ; SSE2-NEXT:    pandn %xmm3, %xmm4
9196 ; SSE2-NEXT:    por %xmm4, %xmm1
9197 ; SSE2-NEXT:    retq
9199 ; SSE4-LABEL: test176:
9200 ; SSE4:       # %bb.0: # %entry
9201 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
9202 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9203 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
9204 ; SSE4-NEXT:    pxor %xmm5, %xmm6
9205 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
9206 ; SSE4-NEXT:    pxor %xmm5, %xmm0
9207 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9208 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9209 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9210 ; SSE4-NEXT:    pxor %xmm5, %xmm0
9211 ; SSE4-NEXT:    pxor %xmm3, %xmm5
9212 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9213 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
9214 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9215 ; SSE4-NEXT:    movapd %xmm2, %xmm0
9216 ; SSE4-NEXT:    movapd %xmm3, %xmm1
9217 ; SSE4-NEXT:    retq
9219 ; AVX1-LABEL: test176:
9220 ; AVX1:       # %bb.0: # %entry
9221 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9222 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9223 ; AVX1-NEXT:    # xmm3 = mem[0,0]
9224 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9225 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9226 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9227 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9228 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9229 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9230 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9231 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9232 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9233 ; AVX1-NEXT:    retq
9235 ; AVX2-LABEL: test176:
9236 ; AVX2:       # %bb.0: # %entry
9237 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9238 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9239 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9240 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9241 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9242 ; AVX2-NEXT:    retq
9244 ; AVX512F-LABEL: test176:
9245 ; AVX512F:       # %bb.0: # %entry
9246 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9247 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9248 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9249 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9250 ; AVX512F-NEXT:    retq
9252 ; AVX512BW-LABEL: test176:
9253 ; AVX512BW:       # %bb.0: # %entry
9254 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9255 ; AVX512BW-NEXT:    retq
9256 entry:
9257   %cmp = icmp uge <4 x i64> %a, %b
9258   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9259   ret <4 x i64> %sel
9262 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
9263 ; SSE2-LABEL: test177:
9264 ; SSE2:       # %bb.0: # %entry
9265 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9266 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9267 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9268 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9269 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9270 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9271 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9272 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9273 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9274 ; SSE2-NEXT:    pand %xmm5, %xmm2
9275 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9276 ; SSE2-NEXT:    por %xmm2, %xmm3
9277 ; SSE2-NEXT:    pand %xmm3, %xmm0
9278 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9279 ; SSE2-NEXT:    por %xmm3, %xmm0
9280 ; SSE2-NEXT:    retq
9282 ; SSE4-LABEL: test177:
9283 ; SSE4:       # %bb.0: # %entry
9284 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9285 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9286 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9287 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9288 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9289 ; SSE4-NEXT:    retq
9291 ; AVX1-LABEL: test177:
9292 ; AVX1:       # %bb.0: # %entry
9293 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9294 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9295 ; AVX1-NEXT:    retq
9297 ; AVX2-LABEL: test177:
9298 ; AVX2:       # %bb.0: # %entry
9299 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9300 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9301 ; AVX2-NEXT:    retq
9303 ; AVX512F-LABEL: test177:
9304 ; AVX512F:       # %bb.0: # %entry
9305 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9306 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9307 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9308 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9309 ; AVX512F-NEXT:    retq
9311 ; AVX512BW-LABEL: test177:
9312 ; AVX512BW:       # %bb.0: # %entry
9313 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9314 ; AVX512BW-NEXT:    retq
9315 entry:
9316   %cmp = icmp slt <2 x i64> %a, %b
9317   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9318   ret <2 x i64> %sel
9321 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
9322 ; SSE2-LABEL: test178:
9323 ; SSE2:       # %bb.0: # %entry
9324 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9325 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9326 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9327 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9328 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9329 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9330 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9331 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9332 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9333 ; SSE2-NEXT:    pand %xmm5, %xmm2
9334 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9335 ; SSE2-NEXT:    por %xmm2, %xmm3
9336 ; SSE2-NEXT:    pand %xmm3, %xmm0
9337 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9338 ; SSE2-NEXT:    por %xmm3, %xmm0
9339 ; SSE2-NEXT:    retq
9341 ; SSE4-LABEL: test178:
9342 ; SSE4:       # %bb.0: # %entry
9343 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9344 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9345 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9346 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9347 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9348 ; SSE4-NEXT:    retq
9350 ; AVX1-LABEL: test178:
9351 ; AVX1:       # %bb.0: # %entry
9352 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9353 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9354 ; AVX1-NEXT:    retq
9356 ; AVX2-LABEL: test178:
9357 ; AVX2:       # %bb.0: # %entry
9358 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9359 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9360 ; AVX2-NEXT:    retq
9362 ; AVX512F-LABEL: test178:
9363 ; AVX512F:       # %bb.0: # %entry
9364 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9365 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9366 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9367 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9368 ; AVX512F-NEXT:    retq
9370 ; AVX512BW-LABEL: test178:
9371 ; AVX512BW:       # %bb.0: # %entry
9372 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9373 ; AVX512BW-NEXT:    retq
9374 entry:
9375   %cmp = icmp sle <2 x i64> %a, %b
9376   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9377   ret <2 x i64> %sel
9380 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
9381 ; SSE2-LABEL: test179:
9382 ; SSE2:       # %bb.0: # %entry
9383 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9384 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9385 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9386 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9387 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9388 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9389 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9390 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9391 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9392 ; SSE2-NEXT:    pand %xmm5, %xmm2
9393 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9394 ; SSE2-NEXT:    por %xmm2, %xmm3
9395 ; SSE2-NEXT:    pand %xmm3, %xmm0
9396 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9397 ; SSE2-NEXT:    por %xmm3, %xmm0
9398 ; SSE2-NEXT:    retq
9400 ; SSE4-LABEL: test179:
9401 ; SSE4:       # %bb.0: # %entry
9402 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9403 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9404 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9405 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9406 ; SSE4-NEXT:    retq
9408 ; AVX1-LABEL: test179:
9409 ; AVX1:       # %bb.0: # %entry
9410 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9411 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9412 ; AVX1-NEXT:    retq
9414 ; AVX2-LABEL: test179:
9415 ; AVX2:       # %bb.0: # %entry
9416 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9417 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9418 ; AVX2-NEXT:    retq
9420 ; AVX512F-LABEL: test179:
9421 ; AVX512F:       # %bb.0: # %entry
9422 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9423 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9424 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9425 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9426 ; AVX512F-NEXT:    retq
9428 ; AVX512BW-LABEL: test179:
9429 ; AVX512BW:       # %bb.0: # %entry
9430 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9431 ; AVX512BW-NEXT:    retq
9432 entry:
9433   %cmp = icmp sgt <2 x i64> %a, %b
9434   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9435   ret <2 x i64> %sel
9438 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
9439 ; SSE2-LABEL: test180:
9440 ; SSE2:       # %bb.0: # %entry
9441 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9442 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9443 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9444 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9445 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9446 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9447 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9448 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9449 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9450 ; SSE2-NEXT:    pand %xmm5, %xmm2
9451 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9452 ; SSE2-NEXT:    por %xmm2, %xmm3
9453 ; SSE2-NEXT:    pand %xmm3, %xmm0
9454 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9455 ; SSE2-NEXT:    por %xmm3, %xmm0
9456 ; SSE2-NEXT:    retq
9458 ; SSE4-LABEL: test180:
9459 ; SSE4:       # %bb.0: # %entry
9460 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9461 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9462 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9463 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9464 ; SSE4-NEXT:    retq
9466 ; AVX1-LABEL: test180:
9467 ; AVX1:       # %bb.0: # %entry
9468 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9469 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9470 ; AVX1-NEXT:    retq
9472 ; AVX2-LABEL: test180:
9473 ; AVX2:       # %bb.0: # %entry
9474 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9475 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9476 ; AVX2-NEXT:    retq
9478 ; AVX512F-LABEL: test180:
9479 ; AVX512F:       # %bb.0: # %entry
9480 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9481 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9482 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9483 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9484 ; AVX512F-NEXT:    retq
9486 ; AVX512BW-LABEL: test180:
9487 ; AVX512BW:       # %bb.0: # %entry
9488 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9489 ; AVX512BW-NEXT:    retq
9490 entry:
9491   %cmp = icmp sge <2 x i64> %a, %b
9492   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9493   ret <2 x i64> %sel
9496 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
9497 ; SSE2-LABEL: test181:
9498 ; SSE2:       # %bb.0: # %entry
9499 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9500 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9501 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9502 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9503 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9504 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9505 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9506 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9507 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9508 ; SSE2-NEXT:    pand %xmm5, %xmm2
9509 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9510 ; SSE2-NEXT:    por %xmm2, %xmm3
9511 ; SSE2-NEXT:    pand %xmm3, %xmm0
9512 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9513 ; SSE2-NEXT:    por %xmm3, %xmm0
9514 ; SSE2-NEXT:    retq
9516 ; SSE4-LABEL: test181:
9517 ; SSE4:       # %bb.0: # %entry
9518 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9519 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9520 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
9521 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9522 ; SSE4-NEXT:    pxor %xmm1, %xmm0
9523 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9524 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9525 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9526 ; SSE4-NEXT:    retq
9528 ; AVX1-LABEL: test181:
9529 ; AVX1:       # %bb.0: # %entry
9530 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9531 ; AVX1-NEXT:    # xmm2 = mem[0,0]
9532 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9533 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9534 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9535 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9536 ; AVX1-NEXT:    retq
9538 ; AVX2-LABEL: test181:
9539 ; AVX2:       # %bb.0: # %entry
9540 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9541 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9542 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9543 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9544 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9545 ; AVX2-NEXT:    retq
9547 ; AVX512F-LABEL: test181:
9548 ; AVX512F:       # %bb.0: # %entry
9549 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9550 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9551 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9552 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9553 ; AVX512F-NEXT:    retq
9555 ; AVX512BW-LABEL: test181:
9556 ; AVX512BW:       # %bb.0: # %entry
9557 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9558 ; AVX512BW-NEXT:    retq
9559 entry:
9560   %cmp = icmp ult <2 x i64> %a, %b
9561   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9562   ret <2 x i64> %sel
9565 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
9566 ; SSE2-LABEL: test182:
9567 ; SSE2:       # %bb.0: # %entry
9568 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9569 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9570 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9571 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9572 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9573 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9574 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9575 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9576 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9577 ; SSE2-NEXT:    pand %xmm5, %xmm2
9578 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9579 ; SSE2-NEXT:    por %xmm2, %xmm3
9580 ; SSE2-NEXT:    pand %xmm3, %xmm0
9581 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9582 ; SSE2-NEXT:    por %xmm3, %xmm0
9583 ; SSE2-NEXT:    retq
9585 ; SSE4-LABEL: test182:
9586 ; SSE4:       # %bb.0: # %entry
9587 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9588 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9589 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
9590 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9591 ; SSE4-NEXT:    pxor %xmm1, %xmm0
9592 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9593 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9594 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9595 ; SSE4-NEXT:    retq
9597 ; AVX1-LABEL: test182:
9598 ; AVX1:       # %bb.0: # %entry
9599 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9600 ; AVX1-NEXT:    # xmm2 = mem[0,0]
9601 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9602 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9603 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9604 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9605 ; AVX1-NEXT:    retq
9607 ; AVX2-LABEL: test182:
9608 ; AVX2:       # %bb.0: # %entry
9609 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9610 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9611 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9612 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9613 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9614 ; AVX2-NEXT:    retq
9616 ; AVX512F-LABEL: test182:
9617 ; AVX512F:       # %bb.0: # %entry
9618 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9619 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9620 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9621 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9622 ; AVX512F-NEXT:    retq
9624 ; AVX512BW-LABEL: test182:
9625 ; AVX512BW:       # %bb.0: # %entry
9626 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9627 ; AVX512BW-NEXT:    retq
9628 entry:
9629   %cmp = icmp ule <2 x i64> %a, %b
9630   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9631   ret <2 x i64> %sel
9634 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
9635 ; SSE2-LABEL: test183:
9636 ; SSE2:       # %bb.0: # %entry
9637 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9638 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9639 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9640 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9641 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9642 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9643 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9644 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9645 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9646 ; SSE2-NEXT:    pand %xmm5, %xmm2
9647 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9648 ; SSE2-NEXT:    por %xmm2, %xmm3
9649 ; SSE2-NEXT:    pand %xmm3, %xmm0
9650 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9651 ; SSE2-NEXT:    por %xmm3, %xmm0
9652 ; SSE2-NEXT:    retq
9654 ; SSE4-LABEL: test183:
9655 ; SSE4:       # %bb.0: # %entry
9656 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9657 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9658 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
9659 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9660 ; SSE4-NEXT:    pxor %xmm2, %xmm0
9661 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9662 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9663 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9664 ; SSE4-NEXT:    retq
9666 ; AVX1-LABEL: test183:
9667 ; AVX1:       # %bb.0: # %entry
9668 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9669 ; AVX1-NEXT:    # xmm2 = mem[0,0]
9670 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9671 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9672 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9673 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9674 ; AVX1-NEXT:    retq
9676 ; AVX2-LABEL: test183:
9677 ; AVX2:       # %bb.0: # %entry
9678 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9679 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9680 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9681 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9682 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9683 ; AVX2-NEXT:    retq
9685 ; AVX512F-LABEL: test183:
9686 ; AVX512F:       # %bb.0: # %entry
9687 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9688 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9689 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9690 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9691 ; AVX512F-NEXT:    retq
9693 ; AVX512BW-LABEL: test183:
9694 ; AVX512BW:       # %bb.0: # %entry
9695 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9696 ; AVX512BW-NEXT:    retq
9697 entry:
9698   %cmp = icmp ugt <2 x i64> %a, %b
9699   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9700   ret <2 x i64> %sel
9703 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
9704 ; SSE2-LABEL: test184:
9705 ; SSE2:       # %bb.0: # %entry
9706 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9707 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9708 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9709 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9710 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9711 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9712 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9713 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9714 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9715 ; SSE2-NEXT:    pand %xmm5, %xmm2
9716 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9717 ; SSE2-NEXT:    por %xmm2, %xmm3
9718 ; SSE2-NEXT:    pand %xmm3, %xmm0
9719 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9720 ; SSE2-NEXT:    por %xmm3, %xmm0
9721 ; SSE2-NEXT:    retq
9723 ; SSE4-LABEL: test184:
9724 ; SSE4:       # %bb.0: # %entry
9725 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9726 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9727 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
9728 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9729 ; SSE4-NEXT:    pxor %xmm2, %xmm0
9730 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9731 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9732 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9733 ; SSE4-NEXT:    retq
9735 ; AVX1-LABEL: test184:
9736 ; AVX1:       # %bb.0: # %entry
9737 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9738 ; AVX1-NEXT:    # xmm2 = mem[0,0]
9739 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9740 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9741 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9742 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9743 ; AVX1-NEXT:    retq
9745 ; AVX2-LABEL: test184:
9746 ; AVX2:       # %bb.0: # %entry
9747 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9748 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9749 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9750 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9751 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9752 ; AVX2-NEXT:    retq
9754 ; AVX512F-LABEL: test184:
9755 ; AVX512F:       # %bb.0: # %entry
9756 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9757 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9758 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9759 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9760 ; AVX512F-NEXT:    retq
9762 ; AVX512BW-LABEL: test184:
9763 ; AVX512BW:       # %bb.0: # %entry
9764 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9765 ; AVX512BW-NEXT:    retq
9766 entry:
9767   %cmp = icmp uge <2 x i64> %a, %b
9768   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9769   ret <2 x i64> %sel
9772 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
9773 ; SSE2-LABEL: test185:
9774 ; SSE2:       # %bb.0: # %entry
9775 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9776 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9777 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9778 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9779 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9780 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9781 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9782 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9783 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9784 ; SSE2-NEXT:    pand %xmm5, %xmm2
9785 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9786 ; SSE2-NEXT:    por %xmm2, %xmm3
9787 ; SSE2-NEXT:    pand %xmm3, %xmm0
9788 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9789 ; SSE2-NEXT:    por %xmm3, %xmm0
9790 ; SSE2-NEXT:    retq
9792 ; SSE4-LABEL: test185:
9793 ; SSE4:       # %bb.0: # %entry
9794 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9795 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9796 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9797 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9798 ; SSE4-NEXT:    retq
9800 ; AVX1-LABEL: test185:
9801 ; AVX1:       # %bb.0: # %entry
9802 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9803 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9804 ; AVX1-NEXT:    retq
9806 ; AVX2-LABEL: test185:
9807 ; AVX2:       # %bb.0: # %entry
9808 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9809 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9810 ; AVX2-NEXT:    retq
9812 ; AVX512F-LABEL: test185:
9813 ; AVX512F:       # %bb.0: # %entry
9814 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9815 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9816 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9817 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9818 ; AVX512F-NEXT:    retq
9820 ; AVX512BW-LABEL: test185:
9821 ; AVX512BW:       # %bb.0: # %entry
9822 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9823 ; AVX512BW-NEXT:    retq
9824 entry:
9825   %cmp = icmp slt <2 x i64> %a, %b
9826   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9827   ret <2 x i64> %sel
9830 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
9831 ; SSE2-LABEL: test186:
9832 ; SSE2:       # %bb.0: # %entry
9833 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9834 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9835 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9836 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9837 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9838 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9839 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9840 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9841 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9842 ; SSE2-NEXT:    pand %xmm5, %xmm2
9843 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9844 ; SSE2-NEXT:    por %xmm2, %xmm3
9845 ; SSE2-NEXT:    pand %xmm3, %xmm0
9846 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9847 ; SSE2-NEXT:    por %xmm3, %xmm0
9848 ; SSE2-NEXT:    retq
9850 ; SSE4-LABEL: test186:
9851 ; SSE4:       # %bb.0: # %entry
9852 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9853 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9854 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9855 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9856 ; SSE4-NEXT:    retq
9858 ; AVX1-LABEL: test186:
9859 ; AVX1:       # %bb.0: # %entry
9860 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9861 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9862 ; AVX1-NEXT:    retq
9864 ; AVX2-LABEL: test186:
9865 ; AVX2:       # %bb.0: # %entry
9866 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9867 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9868 ; AVX2-NEXT:    retq
9870 ; AVX512F-LABEL: test186:
9871 ; AVX512F:       # %bb.0: # %entry
9872 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9873 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9874 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9875 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9876 ; AVX512F-NEXT:    retq
9878 ; AVX512BW-LABEL: test186:
9879 ; AVX512BW:       # %bb.0: # %entry
9880 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9881 ; AVX512BW-NEXT:    retq
9882 entry:
9883   %cmp = icmp sle <2 x i64> %a, %b
9884   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9885   ret <2 x i64> %sel
9888 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
9889 ; SSE2-LABEL: test187:
9890 ; SSE2:       # %bb.0: # %entry
9891 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9892 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9893 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9894 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9895 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9896 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9897 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9898 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9899 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9900 ; SSE2-NEXT:    pand %xmm5, %xmm2
9901 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9902 ; SSE2-NEXT:    por %xmm2, %xmm3
9903 ; SSE2-NEXT:    pand %xmm3, %xmm0
9904 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9905 ; SSE2-NEXT:    por %xmm3, %xmm0
9906 ; SSE2-NEXT:    retq
9908 ; SSE4-LABEL: test187:
9909 ; SSE4:       # %bb.0: # %entry
9910 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9911 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9912 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9913 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9914 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9915 ; SSE4-NEXT:    retq
9917 ; AVX1-LABEL: test187:
9918 ; AVX1:       # %bb.0: # %entry
9919 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9920 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9921 ; AVX1-NEXT:    retq
9923 ; AVX2-LABEL: test187:
9924 ; AVX2:       # %bb.0: # %entry
9925 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9926 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9927 ; AVX2-NEXT:    retq
9929 ; AVX512F-LABEL: test187:
9930 ; AVX512F:       # %bb.0: # %entry
9931 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9932 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9933 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9934 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9935 ; AVX512F-NEXT:    retq
9937 ; AVX512BW-LABEL: test187:
9938 ; AVX512BW:       # %bb.0: # %entry
9939 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9940 ; AVX512BW-NEXT:    retq
9941 entry:
9942   %cmp = icmp sgt <2 x i64> %a, %b
9943   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9944   ret <2 x i64> %sel
9947 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
9948 ; SSE2-LABEL: test188:
9949 ; SSE2:       # %bb.0: # %entry
9950 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9951 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9952 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9953 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9954 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9955 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9956 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9957 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9958 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9959 ; SSE2-NEXT:    pand %xmm5, %xmm2
9960 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9961 ; SSE2-NEXT:    por %xmm2, %xmm3
9962 ; SSE2-NEXT:    pand %xmm3, %xmm0
9963 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9964 ; SSE2-NEXT:    por %xmm3, %xmm0
9965 ; SSE2-NEXT:    retq
9967 ; SSE4-LABEL: test188:
9968 ; SSE4:       # %bb.0: # %entry
9969 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9970 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9971 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9972 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9973 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9974 ; SSE4-NEXT:    retq
9976 ; AVX1-LABEL: test188:
9977 ; AVX1:       # %bb.0: # %entry
9978 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9979 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9980 ; AVX1-NEXT:    retq
9982 ; AVX2-LABEL: test188:
9983 ; AVX2:       # %bb.0: # %entry
9984 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9985 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9986 ; AVX2-NEXT:    retq
9988 ; AVX512F-LABEL: test188:
9989 ; AVX512F:       # %bb.0: # %entry
9990 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9991 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9992 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9993 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9994 ; AVX512F-NEXT:    retq
9996 ; AVX512BW-LABEL: test188:
9997 ; AVX512BW:       # %bb.0: # %entry
9998 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9999 ; AVX512BW-NEXT:    retq
10000 entry:
10001   %cmp = icmp sge <2 x i64> %a, %b
10002   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10003   ret <2 x i64> %sel
10006 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
10007 ; SSE2-LABEL: test189:
10008 ; SSE2:       # %bb.0: # %entry
10009 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10010 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
10011 ; SSE2-NEXT:    pxor %xmm2, %xmm3
10012 ; SSE2-NEXT:    pxor %xmm0, %xmm2
10013 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
10014 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10015 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10016 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10017 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10018 ; SSE2-NEXT:    pand %xmm5, %xmm2
10019 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10020 ; SSE2-NEXT:    por %xmm2, %xmm3
10021 ; SSE2-NEXT:    pand %xmm3, %xmm0
10022 ; SSE2-NEXT:    pandn %xmm1, %xmm3
10023 ; SSE2-NEXT:    por %xmm3, %xmm0
10024 ; SSE2-NEXT:    retq
10026 ; SSE4-LABEL: test189:
10027 ; SSE4:       # %bb.0: # %entry
10028 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
10029 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10030 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
10031 ; SSE4-NEXT:    pxor %xmm0, %xmm3
10032 ; SSE4-NEXT:    pxor %xmm2, %xmm0
10033 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10034 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10035 ; SSE4-NEXT:    movapd %xmm1, %xmm0
10036 ; SSE4-NEXT:    retq
10038 ; AVX1-LABEL: test189:
10039 ; AVX1:       # %bb.0: # %entry
10040 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10041 ; AVX1-NEXT:    # xmm2 = mem[0,0]
10042 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10043 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10044 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10045 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10046 ; AVX1-NEXT:    retq
10048 ; AVX2-LABEL: test189:
10049 ; AVX2:       # %bb.0: # %entry
10050 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10051 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10052 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10053 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10054 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10055 ; AVX2-NEXT:    retq
10057 ; AVX512F-LABEL: test189:
10058 ; AVX512F:       # %bb.0: # %entry
10059 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10060 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10061 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
10062 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10063 ; AVX512F-NEXT:    retq
10065 ; AVX512BW-LABEL: test189:
10066 ; AVX512BW:       # %bb.0: # %entry
10067 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10068 ; AVX512BW-NEXT:    retq
10069 entry:
10070   %cmp = icmp ult <2 x i64> %a, %b
10071   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10072   ret <2 x i64> %sel
10075 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
10076 ; SSE2-LABEL: test190:
10077 ; SSE2:       # %bb.0: # %entry
10078 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10079 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
10080 ; SSE2-NEXT:    pxor %xmm2, %xmm3
10081 ; SSE2-NEXT:    pxor %xmm0, %xmm2
10082 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
10083 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10084 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10085 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10086 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10087 ; SSE2-NEXT:    pand %xmm5, %xmm2
10088 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10089 ; SSE2-NEXT:    por %xmm2, %xmm3
10090 ; SSE2-NEXT:    pand %xmm3, %xmm0
10091 ; SSE2-NEXT:    pandn %xmm1, %xmm3
10092 ; SSE2-NEXT:    por %xmm3, %xmm0
10093 ; SSE2-NEXT:    retq
10095 ; SSE4-LABEL: test190:
10096 ; SSE4:       # %bb.0: # %entry
10097 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
10098 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10099 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
10100 ; SSE4-NEXT:    pxor %xmm0, %xmm3
10101 ; SSE4-NEXT:    pxor %xmm2, %xmm0
10102 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10103 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10104 ; SSE4-NEXT:    movapd %xmm1, %xmm0
10105 ; SSE4-NEXT:    retq
10107 ; AVX1-LABEL: test190:
10108 ; AVX1:       # %bb.0: # %entry
10109 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10110 ; AVX1-NEXT:    # xmm2 = mem[0,0]
10111 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10112 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10113 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10114 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10115 ; AVX1-NEXT:    retq
10117 ; AVX2-LABEL: test190:
10118 ; AVX2:       # %bb.0: # %entry
10119 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10120 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10121 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10122 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10123 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10124 ; AVX2-NEXT:    retq
10126 ; AVX512F-LABEL: test190:
10127 ; AVX512F:       # %bb.0: # %entry
10128 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10129 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10130 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
10131 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10132 ; AVX512F-NEXT:    retq
10134 ; AVX512BW-LABEL: test190:
10135 ; AVX512BW:       # %bb.0: # %entry
10136 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10137 ; AVX512BW-NEXT:    retq
10138 entry:
10139   %cmp = icmp ule <2 x i64> %a, %b
10140   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10141   ret <2 x i64> %sel
10144 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
10145 ; SSE2-LABEL: test191:
10146 ; SSE2:       # %bb.0: # %entry
10147 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10148 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
10149 ; SSE2-NEXT:    pxor %xmm2, %xmm3
10150 ; SSE2-NEXT:    pxor %xmm1, %xmm2
10151 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
10152 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10153 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10154 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10155 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10156 ; SSE2-NEXT:    pand %xmm5, %xmm2
10157 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10158 ; SSE2-NEXT:    por %xmm2, %xmm3
10159 ; SSE2-NEXT:    pand %xmm3, %xmm0
10160 ; SSE2-NEXT:    pandn %xmm1, %xmm3
10161 ; SSE2-NEXT:    por %xmm3, %xmm0
10162 ; SSE2-NEXT:    retq
10164 ; SSE4-LABEL: test191:
10165 ; SSE4:       # %bb.0: # %entry
10166 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
10167 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10168 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
10169 ; SSE4-NEXT:    pxor %xmm0, %xmm3
10170 ; SSE4-NEXT:    pxor %xmm1, %xmm0
10171 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10172 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10173 ; SSE4-NEXT:    movapd %xmm1, %xmm0
10174 ; SSE4-NEXT:    retq
10176 ; AVX1-LABEL: test191:
10177 ; AVX1:       # %bb.0: # %entry
10178 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10179 ; AVX1-NEXT:    # xmm2 = mem[0,0]
10180 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10181 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10182 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10183 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10184 ; AVX1-NEXT:    retq
10186 ; AVX2-LABEL: test191:
10187 ; AVX2:       # %bb.0: # %entry
10188 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10189 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10190 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10191 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10192 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10193 ; AVX2-NEXT:    retq
10195 ; AVX512F-LABEL: test191:
10196 ; AVX512F:       # %bb.0: # %entry
10197 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10198 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10199 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
10200 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10201 ; AVX512F-NEXT:    retq
10203 ; AVX512BW-LABEL: test191:
10204 ; AVX512BW:       # %bb.0: # %entry
10205 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10206 ; AVX512BW-NEXT:    retq
10207 entry:
10208   %cmp = icmp ugt <2 x i64> %a, %b
10209   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10210   ret <2 x i64> %sel
10213 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
10214 ; SSE2-LABEL: test192:
10215 ; SSE2:       # %bb.0: # %entry
10216 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10217 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
10218 ; SSE2-NEXT:    pxor %xmm2, %xmm3
10219 ; SSE2-NEXT:    pxor %xmm1, %xmm2
10220 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
10221 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10222 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10223 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10224 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10225 ; SSE2-NEXT:    pand %xmm5, %xmm2
10226 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10227 ; SSE2-NEXT:    por %xmm2, %xmm3
10228 ; SSE2-NEXT:    pand %xmm3, %xmm0
10229 ; SSE2-NEXT:    pandn %xmm1, %xmm3
10230 ; SSE2-NEXT:    por %xmm3, %xmm0
10231 ; SSE2-NEXT:    retq
10233 ; SSE4-LABEL: test192:
10234 ; SSE4:       # %bb.0: # %entry
10235 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
10236 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10237 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
10238 ; SSE4-NEXT:    pxor %xmm0, %xmm3
10239 ; SSE4-NEXT:    pxor %xmm1, %xmm0
10240 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10241 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10242 ; SSE4-NEXT:    movapd %xmm1, %xmm0
10243 ; SSE4-NEXT:    retq
10245 ; AVX1-LABEL: test192:
10246 ; AVX1:       # %bb.0: # %entry
10247 ; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10248 ; AVX1-NEXT:    # xmm2 = mem[0,0]
10249 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10250 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10251 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10252 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10253 ; AVX1-NEXT:    retq
10255 ; AVX2-LABEL: test192:
10256 ; AVX2:       # %bb.0: # %entry
10257 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10258 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10259 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10260 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10261 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10262 ; AVX2-NEXT:    retq
10264 ; AVX512F-LABEL: test192:
10265 ; AVX512F:       # %bb.0: # %entry
10266 ; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10267 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10268 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
10269 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10270 ; AVX512F-NEXT:    retq
10272 ; AVX512BW-LABEL: test192:
10273 ; AVX512BW:       # %bb.0: # %entry
10274 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10275 ; AVX512BW-NEXT:    retq
10276 entry:
10277   %cmp = icmp uge <2 x i64> %a, %b
10278   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10279   ret <2 x i64> %sel
10282 ; comparisons for smin/smax patterns can be reused
10283 define <8 x i64> @concat_smin_smax(<4 x i64> %a0, <4 x i64> %a1) {
10284 ; SSE2-LABEL: concat_smin_smax:
10285 ; SSE2:       # %bb.0:
10286 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648]
10287 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
10288 ; SSE2-NEXT:    pxor %xmm6, %xmm4
10289 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
10290 ; SSE2-NEXT:    pxor %xmm6, %xmm5
10291 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
10292 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
10293 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
10294 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
10295 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
10296 ; SSE2-NEXT:    pand %xmm8, %xmm4
10297 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
10298 ; SSE2-NEXT:    por %xmm4, %xmm5
10299 ; SSE2-NEXT:    movdqa %xmm5, %xmm7
10300 ; SSE2-NEXT:    pandn %xmm2, %xmm7
10301 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
10302 ; SSE2-NEXT:    pand %xmm5, %xmm4
10303 ; SSE2-NEXT:    por %xmm7, %xmm4
10304 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
10305 ; SSE2-NEXT:    pxor %xmm6, %xmm7
10306 ; SSE2-NEXT:    pxor %xmm3, %xmm6
10307 ; SSE2-NEXT:    movdqa %xmm6, %xmm8
10308 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm8
10309 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
10310 ; SSE2-NEXT:    pcmpeqd %xmm7, %xmm6
10311 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
10312 ; SSE2-NEXT:    pand %xmm9, %xmm6
10313 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm8[1,1,3,3]
10314 ; SSE2-NEXT:    por %xmm6, %xmm7
10315 ; SSE2-NEXT:    movdqa %xmm7, %xmm6
10316 ; SSE2-NEXT:    pandn %xmm3, %xmm6
10317 ; SSE2-NEXT:    movdqa %xmm7, %xmm8
10318 ; SSE2-NEXT:    pandn %xmm1, %xmm8
10319 ; SSE2-NEXT:    pand %xmm7, %xmm1
10320 ; SSE2-NEXT:    por %xmm6, %xmm1
10321 ; SSE2-NEXT:    pand %xmm5, %xmm2
10322 ; SSE2-NEXT:    pandn %xmm0, %xmm5
10323 ; SSE2-NEXT:    por %xmm5, %xmm2
10324 ; SSE2-NEXT:    pand %xmm7, %xmm3
10325 ; SSE2-NEXT:    por %xmm8, %xmm3
10326 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
10327 ; SSE2-NEXT:    retq
10329 ; SSE4-LABEL: concat_smin_smax:
10330 ; SSE4:       # %bb.0:
10331 ; SSE4-NEXT:    movdqa %xmm1, %xmm4
10332 ; SSE4-NEXT:    movdqa %xmm0, %xmm5
10333 ; SSE4-NEXT:    movdqa %xmm2, %xmm8
10334 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
10335 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
10336 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
10337 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm6
10338 ; SSE4-NEXT:    movdqa %xmm3, %xmm7
10339 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm7
10340 ; SSE4-NEXT:    movdqa %xmm3, %xmm1
10341 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
10342 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm1
10343 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
10344 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm5
10345 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
10346 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm4
10347 ; SSE4-NEXT:    movapd %xmm6, %xmm0
10348 ; SSE4-NEXT:    movapd %xmm5, %xmm2
10349 ; SSE4-NEXT:    movapd %xmm4, %xmm3
10350 ; SSE4-NEXT:    retq
10352 ; AVX1-LABEL: concat_smin_smax:
10353 ; AVX1:       # %bb.0:
10354 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10355 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
10356 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
10357 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
10358 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm3
10359 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm1, %ymm0, %ymm2
10360 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm0, %ymm1, %ymm1
10361 ; AVX1-NEXT:    vmovapd %ymm2, %ymm0
10362 ; AVX1-NEXT:    retq
10364 ; AVX2-LABEL: concat_smin_smax:
10365 ; AVX2:       # %bb.0:
10366 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm3
10367 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm0, %ymm2
10368 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm1, %ymm1
10369 ; AVX2-NEXT:    vmovapd %ymm2, %ymm0
10370 ; AVX2-NEXT:    retq
10372 ; AVX512F-LABEL: concat_smin_smax:
10373 ; AVX512F:       # %bb.0:
10374 ; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
10375 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10376 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm2
10377 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
10378 ; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
10379 ; AVX512F-NEXT:    retq
10381 ; AVX512BW-LABEL: concat_smin_smax:
10382 ; AVX512BW:       # %bb.0:
10383 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm2
10384 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
10385 ; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
10386 ; AVX512BW-NEXT:    retq
10387   %cmp = icmp slt <4 x i64> %a0, %a1
10388   %min = select <4 x i1> %cmp, <4 x i64> %a0, <4 x i64> %a1
10389   %max = select <4 x i1> %cmp, <4 x i64> %a1, <4 x i64> %a0
10390   %res = shufflevector <4 x i64> %min, <4 x i64> %max, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
10391   ret <8 x i64> %res