]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/X86/vselect-minmax.ll
Vendor import of llvm trunk r351319 (just before the release_80 branch
[FreeBSD/FreeBSD.git] / test / CodeGen / X86 / vselect-minmax.ll
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE4
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F --check-prefix=AVX512BW --check-prefix=AVX512VL
8
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
18 ;
19 ; SSE4-LABEL: test1:
20 ; SSE4:       # %bb.0: # %entry
21 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
22 ; SSE4-NEXT:    retq
23 ;
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
32 }
33
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
43 ;
44 ; SSE4-LABEL: test2:
45 ; SSE4:       # %bb.0: # %entry
46 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
47 ; SSE4-NEXT:    retq
48 ;
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
57 }
58
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 %xmm0, %xmm2
67 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
68 ; SSE2-NEXT:    retq
69 ;
70 ; SSE4-LABEL: test3:
71 ; SSE4:       # %bb.0: # %entry
72 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
73 ; SSE4-NEXT:    retq
74 ;
75 ; AVX-LABEL: test3:
76 ; AVX:       # %bb.0: # %entry
77 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
78 ; AVX-NEXT:    retq
79 entry:
80   %cmp = icmp sgt <16 x i8> %a, %b
81   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
82   ret <16 x i8> %sel
83 }
84
85 define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
86 ; SSE2-LABEL: test4:
87 ; SSE2:       # %bb.0: # %entry
88 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
89 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
90 ; SSE2-NEXT:    pand %xmm2, %xmm0
91 ; SSE2-NEXT:    pandn %xmm1, %xmm2
92 ; SSE2-NEXT:    por %xmm0, %xmm2
93 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
94 ; SSE2-NEXT:    retq
95 ;
96 ; SSE4-LABEL: test4:
97 ; SSE4:       # %bb.0: # %entry
98 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
99 ; SSE4-NEXT:    retq
100 ;
101 ; AVX-LABEL: test4:
102 ; AVX:       # %bb.0: # %entry
103 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
104 ; AVX-NEXT:    retq
105 entry:
106   %cmp = icmp sge <16 x i8> %a, %b
107   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
108   ret <16 x i8> %sel
109 }
110
111 define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
112 ; SSE-LABEL: test5:
113 ; SSE:       # %bb.0: # %entry
114 ; SSE-NEXT:    pminub %xmm1, %xmm0
115 ; SSE-NEXT:    retq
116 ;
117 ; AVX-LABEL: test5:
118 ; AVX:       # %bb.0: # %entry
119 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
120 ; AVX-NEXT:    retq
121 entry:
122   %cmp = icmp ult <16 x i8> %a, %b
123   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
124   ret <16 x i8> %sel
125 }
126
127 define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
128 ; SSE-LABEL: test6:
129 ; SSE:       # %bb.0: # %entry
130 ; SSE-NEXT:    pminub %xmm1, %xmm0
131 ; SSE-NEXT:    retq
132 ;
133 ; AVX-LABEL: test6:
134 ; AVX:       # %bb.0: # %entry
135 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
136 ; AVX-NEXT:    retq
137 entry:
138   %cmp = icmp ule <16 x i8> %a, %b
139   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
140   ret <16 x i8> %sel
141 }
142
143 define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
144 ; SSE-LABEL: test7:
145 ; SSE:       # %bb.0: # %entry
146 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
147 ; SSE-NEXT:    retq
148 ;
149 ; AVX-LABEL: test7:
150 ; AVX:       # %bb.0: # %entry
151 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
152 ; AVX-NEXT:    retq
153 entry:
154   %cmp = icmp ugt <16 x i8> %a, %b
155   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
156   ret <16 x i8> %sel
157 }
158
159 define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
160 ; SSE-LABEL: test8:
161 ; SSE:       # %bb.0: # %entry
162 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
163 ; SSE-NEXT:    retq
164 ;
165 ; AVX-LABEL: test8:
166 ; AVX:       # %bb.0: # %entry
167 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
168 ; AVX-NEXT:    retq
169 entry:
170   %cmp = icmp uge <16 x i8> %a, %b
171   %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
172   ret <16 x i8> %sel
173 }
174
175 define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
176 ; SSE-LABEL: test9:
177 ; SSE:       # %bb.0: # %entry
178 ; SSE-NEXT:    pminsw %xmm1, %xmm0
179 ; SSE-NEXT:    retq
180 ;
181 ; AVX-LABEL: test9:
182 ; AVX:       # %bb.0: # %entry
183 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
184 ; AVX-NEXT:    retq
185 entry:
186   %cmp = icmp slt <8 x i16> %a, %b
187   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
188   ret <8 x i16> %sel
189 }
190
191 define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
192 ; SSE-LABEL: test10:
193 ; SSE:       # %bb.0: # %entry
194 ; SSE-NEXT:    pminsw %xmm1, %xmm0
195 ; SSE-NEXT:    retq
196 ;
197 ; AVX-LABEL: test10:
198 ; AVX:       # %bb.0: # %entry
199 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
200 ; AVX-NEXT:    retq
201 entry:
202   %cmp = icmp sle <8 x i16> %a, %b
203   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
204   ret <8 x i16> %sel
205 }
206
207 define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
208 ; SSE-LABEL: test11:
209 ; SSE:       # %bb.0: # %entry
210 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
211 ; SSE-NEXT:    retq
212 ;
213 ; AVX-LABEL: test11:
214 ; AVX:       # %bb.0: # %entry
215 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
216 ; AVX-NEXT:    retq
217 entry:
218   %cmp = icmp sgt <8 x i16> %a, %b
219   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
220   ret <8 x i16> %sel
221 }
222
223 define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
224 ; SSE-LABEL: test12:
225 ; SSE:       # %bb.0: # %entry
226 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
227 ; SSE-NEXT:    retq
228 ;
229 ; AVX-LABEL: test12:
230 ; AVX:       # %bb.0: # %entry
231 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
232 ; AVX-NEXT:    retq
233 entry:
234   %cmp = icmp sge <8 x i16> %a, %b
235   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
236   ret <8 x i16> %sel
237 }
238
239 define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
240 ; SSE2-LABEL: test13:
241 ; SSE2:       # %bb.0: # %entry
242 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
243 ; SSE2-NEXT:    pxor %xmm2, %xmm1
244 ; SSE2-NEXT:    pxor %xmm2, %xmm0
245 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
246 ; SSE2-NEXT:    pxor %xmm2, %xmm0
247 ; SSE2-NEXT:    retq
248 ;
249 ; SSE4-LABEL: test13:
250 ; SSE4:       # %bb.0: # %entry
251 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
252 ; SSE4-NEXT:    retq
253 ;
254 ; AVX-LABEL: test13:
255 ; AVX:       # %bb.0: # %entry
256 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
257 ; AVX-NEXT:    retq
258 entry:
259   %cmp = icmp ult <8 x i16> %a, %b
260   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
261   ret <8 x i16> %sel
262 }
263
264 define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
265 ; SSE2-LABEL: test14:
266 ; SSE2:       # %bb.0: # %entry
267 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
268 ; SSE2-NEXT:    pxor %xmm2, %xmm1
269 ; SSE2-NEXT:    pxor %xmm2, %xmm0
270 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
271 ; SSE2-NEXT:    pxor %xmm2, %xmm0
272 ; SSE2-NEXT:    retq
273 ;
274 ; SSE4-LABEL: test14:
275 ; SSE4:       # %bb.0: # %entry
276 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
277 ; SSE4-NEXT:    retq
278 ;
279 ; AVX-LABEL: test14:
280 ; AVX:       # %bb.0: # %entry
281 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
282 ; AVX-NEXT:    retq
283 entry:
284   %cmp = icmp ule <8 x i16> %a, %b
285   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
286   ret <8 x i16> %sel
287 }
288
289 define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
290 ; SSE2-LABEL: test15:
291 ; SSE2:       # %bb.0: # %entry
292 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
293 ; SSE2-NEXT:    pxor %xmm2, %xmm1
294 ; SSE2-NEXT:    pxor %xmm2, %xmm0
295 ; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
296 ; SSE2-NEXT:    pxor %xmm2, %xmm0
297 ; SSE2-NEXT:    retq
298 ;
299 ; SSE4-LABEL: test15:
300 ; SSE4:       # %bb.0: # %entry
301 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
302 ; SSE4-NEXT:    retq
303 ;
304 ; AVX-LABEL: test15:
305 ; AVX:       # %bb.0: # %entry
306 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
307 ; AVX-NEXT:    retq
308 entry:
309   %cmp = icmp ugt <8 x i16> %a, %b
310   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
311   ret <8 x i16> %sel
312 }
313
314 define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
315 ; SSE2-LABEL: test16:
316 ; SSE2:       # %bb.0: # %entry
317 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
318 ; SSE2-NEXT:    pxor %xmm2, %xmm1
319 ; SSE2-NEXT:    pxor %xmm2, %xmm0
320 ; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
321 ; SSE2-NEXT:    pxor %xmm2, %xmm0
322 ; SSE2-NEXT:    retq
323 ;
324 ; SSE4-LABEL: test16:
325 ; SSE4:       # %bb.0: # %entry
326 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
327 ; SSE4-NEXT:    retq
328 ;
329 ; AVX-LABEL: test16:
330 ; AVX:       # %bb.0: # %entry
331 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
332 ; AVX-NEXT:    retq
333 entry:
334   %cmp = icmp uge <8 x i16> %a, %b
335   %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
336   ret <8 x i16> %sel
337 }
338
339 define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
340 ; SSE2-LABEL: test17:
341 ; SSE2:       # %bb.0: # %entry
342 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
343 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
344 ; SSE2-NEXT:    pand %xmm2, %xmm0
345 ; SSE2-NEXT:    pandn %xmm1, %xmm2
346 ; SSE2-NEXT:    por %xmm2, %xmm0
347 ; SSE2-NEXT:    retq
348 ;
349 ; SSE4-LABEL: test17:
350 ; SSE4:       # %bb.0: # %entry
351 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
352 ; SSE4-NEXT:    retq
353 ;
354 ; AVX-LABEL: test17:
355 ; AVX:       # %bb.0: # %entry
356 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
357 ; AVX-NEXT:    retq
358 entry:
359   %cmp = icmp slt <4 x i32> %a, %b
360   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
361   ret <4 x i32> %sel
362 }
363
364 define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
365 ; SSE2-LABEL: test18:
366 ; SSE2:       # %bb.0: # %entry
367 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
368 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
369 ; SSE2-NEXT:    pand %xmm2, %xmm0
370 ; SSE2-NEXT:    pandn %xmm1, %xmm2
371 ; SSE2-NEXT:    por %xmm2, %xmm0
372 ; SSE2-NEXT:    retq
373 ;
374 ; SSE4-LABEL: test18:
375 ; SSE4:       # %bb.0: # %entry
376 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
377 ; SSE4-NEXT:    retq
378 ;
379 ; AVX-LABEL: test18:
380 ; AVX:       # %bb.0: # %entry
381 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
382 ; AVX-NEXT:    retq
383 entry:
384   %cmp = icmp sle <4 x i32> %a, %b
385   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
386   ret <4 x i32> %sel
387 }
388
389 define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
390 ; SSE2-LABEL: test19:
391 ; SSE2:       # %bb.0: # %entry
392 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
393 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
394 ; SSE2-NEXT:    pand %xmm2, %xmm0
395 ; SSE2-NEXT:    pandn %xmm1, %xmm2
396 ; SSE2-NEXT:    por %xmm0, %xmm2
397 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
398 ; SSE2-NEXT:    retq
399 ;
400 ; SSE4-LABEL: test19:
401 ; SSE4:       # %bb.0: # %entry
402 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
403 ; SSE4-NEXT:    retq
404 ;
405 ; AVX-LABEL: test19:
406 ; AVX:       # %bb.0: # %entry
407 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
408 ; AVX-NEXT:    retq
409 entry:
410   %cmp = icmp sgt <4 x i32> %a, %b
411   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
412   ret <4 x i32> %sel
413 }
414
415 define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
416 ; SSE2-LABEL: test20:
417 ; SSE2:       # %bb.0: # %entry
418 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
419 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
420 ; SSE2-NEXT:    pand %xmm2, %xmm0
421 ; SSE2-NEXT:    pandn %xmm1, %xmm2
422 ; SSE2-NEXT:    por %xmm0, %xmm2
423 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
424 ; SSE2-NEXT:    retq
425 ;
426 ; SSE4-LABEL: test20:
427 ; SSE4:       # %bb.0: # %entry
428 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
429 ; SSE4-NEXT:    retq
430 ;
431 ; AVX-LABEL: test20:
432 ; AVX:       # %bb.0: # %entry
433 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
434 ; AVX-NEXT:    retq
435 entry:
436   %cmp = icmp sge <4 x i32> %a, %b
437   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
438   ret <4 x i32> %sel
439 }
440
441 define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
442 ; SSE2-LABEL: test21:
443 ; SSE2:       # %bb.0: # %entry
444 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
445 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
446 ; SSE2-NEXT:    pxor %xmm2, %xmm3
447 ; SSE2-NEXT:    pxor %xmm1, %xmm2
448 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
449 ; SSE2-NEXT:    pand %xmm2, %xmm0
450 ; SSE2-NEXT:    pandn %xmm1, %xmm2
451 ; SSE2-NEXT:    por %xmm2, %xmm0
452 ; SSE2-NEXT:    retq
453 ;
454 ; SSE4-LABEL: test21:
455 ; SSE4:       # %bb.0: # %entry
456 ; SSE4-NEXT:    pminud %xmm1, %xmm0
457 ; SSE4-NEXT:    retq
458 ;
459 ; AVX-LABEL: test21:
460 ; AVX:       # %bb.0: # %entry
461 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
462 ; AVX-NEXT:    retq
463 entry:
464   %cmp = icmp ult <4 x i32> %a, %b
465   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
466   ret <4 x i32> %sel
467 }
468
469 define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
470 ; SSE2-LABEL: test22:
471 ; SSE2:       # %bb.0: # %entry
472 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
473 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
474 ; SSE2-NEXT:    pxor %xmm2, %xmm3
475 ; SSE2-NEXT:    pxor %xmm1, %xmm2
476 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
477 ; SSE2-NEXT:    pand %xmm2, %xmm0
478 ; SSE2-NEXT:    pandn %xmm1, %xmm2
479 ; SSE2-NEXT:    por %xmm2, %xmm0
480 ; SSE2-NEXT:    retq
481 ;
482 ; SSE4-LABEL: test22:
483 ; SSE4:       # %bb.0: # %entry
484 ; SSE4-NEXT:    pminud %xmm1, %xmm0
485 ; SSE4-NEXT:    retq
486 ;
487 ; AVX-LABEL: test22:
488 ; AVX:       # %bb.0: # %entry
489 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
490 ; AVX-NEXT:    retq
491 entry:
492   %cmp = icmp ule <4 x i32> %a, %b
493   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
494   ret <4 x i32> %sel
495 }
496
497 define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
498 ; SSE2-LABEL: test23:
499 ; SSE2:       # %bb.0: # %entry
500 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
501 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
502 ; SSE2-NEXT:    pxor %xmm2, %xmm3
503 ; SSE2-NEXT:    pxor %xmm0, %xmm2
504 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
505 ; SSE2-NEXT:    pand %xmm2, %xmm0
506 ; SSE2-NEXT:    pandn %xmm1, %xmm2
507 ; SSE2-NEXT:    por %xmm2, %xmm0
508 ; SSE2-NEXT:    retq
509 ;
510 ; SSE4-LABEL: test23:
511 ; SSE4:       # %bb.0: # %entry
512 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
513 ; SSE4-NEXT:    retq
514 ;
515 ; AVX-LABEL: test23:
516 ; AVX:       # %bb.0: # %entry
517 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
518 ; AVX-NEXT:    retq
519 entry:
520   %cmp = icmp ugt <4 x i32> %a, %b
521   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
522   ret <4 x i32> %sel
523 }
524
525 define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
526 ; SSE2-LABEL: test24:
527 ; SSE2:       # %bb.0: # %entry
528 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
529 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
530 ; SSE2-NEXT:    pxor %xmm2, %xmm3
531 ; SSE2-NEXT:    pxor %xmm0, %xmm2
532 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
533 ; SSE2-NEXT:    pand %xmm2, %xmm0
534 ; SSE2-NEXT:    pandn %xmm1, %xmm2
535 ; SSE2-NEXT:    por %xmm2, %xmm0
536 ; SSE2-NEXT:    retq
537 ;
538 ; SSE4-LABEL: test24:
539 ; SSE4:       # %bb.0: # %entry
540 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
541 ; SSE4-NEXT:    retq
542 ;
543 ; AVX-LABEL: test24:
544 ; AVX:       # %bb.0: # %entry
545 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
546 ; AVX-NEXT:    retq
547 entry:
548   %cmp = icmp uge <4 x i32> %a, %b
549   %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
550   ret <4 x i32> %sel
551 }
552
553 define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
554 ; SSE2-LABEL: test25:
555 ; SSE2:       # %bb.0: # %entry
556 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
557 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
558 ; SSE2-NEXT:    pand %xmm4, %xmm0
559 ; SSE2-NEXT:    pandn %xmm2, %xmm4
560 ; SSE2-NEXT:    por %xmm4, %xmm0
561 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
562 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
563 ; SSE2-NEXT:    pand %xmm2, %xmm1
564 ; SSE2-NEXT:    pandn %xmm3, %xmm2
565 ; SSE2-NEXT:    por %xmm2, %xmm1
566 ; SSE2-NEXT:    retq
567 ;
568 ; SSE4-LABEL: test25:
569 ; SSE4:       # %bb.0: # %entry
570 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
571 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
572 ; SSE4-NEXT:    retq
573 ;
574 ; AVX1-LABEL: test25:
575 ; AVX1:       # %bb.0: # %entry
576 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
577 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
578 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
579 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
580 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
581 ; AVX1-NEXT:    retq
582 ;
583 ; AVX2-LABEL: test25:
584 ; AVX2:       # %bb.0: # %entry
585 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
586 ; AVX2-NEXT:    retq
587 ;
588 ; AVX512F-LABEL: test25:
589 ; AVX512F:       # %bb.0: # %entry
590 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
591 ; AVX512F-NEXT:    retq
592 entry:
593   %cmp = icmp slt <32 x i8> %a, %b
594   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
595   ret <32 x i8> %sel
596 }
597
598 define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
599 ; SSE2-LABEL: test26:
600 ; SSE2:       # %bb.0: # %entry
601 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
602 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
603 ; SSE2-NEXT:    pand %xmm4, %xmm0
604 ; SSE2-NEXT:    pandn %xmm2, %xmm4
605 ; SSE2-NEXT:    por %xmm4, %xmm0
606 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
607 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
608 ; SSE2-NEXT:    pand %xmm2, %xmm1
609 ; SSE2-NEXT:    pandn %xmm3, %xmm2
610 ; SSE2-NEXT:    por %xmm2, %xmm1
611 ; SSE2-NEXT:    retq
612 ;
613 ; SSE4-LABEL: test26:
614 ; SSE4:       # %bb.0: # %entry
615 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
616 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
617 ; SSE4-NEXT:    retq
618 ;
619 ; AVX1-LABEL: test26:
620 ; AVX1:       # %bb.0: # %entry
621 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
622 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
623 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
624 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
625 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
626 ; AVX1-NEXT:    retq
627 ;
628 ; AVX2-LABEL: test26:
629 ; AVX2:       # %bb.0: # %entry
630 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
631 ; AVX2-NEXT:    retq
632 ;
633 ; AVX512F-LABEL: test26:
634 ; AVX512F:       # %bb.0: # %entry
635 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
636 ; AVX512F-NEXT:    retq
637 entry:
638   %cmp = icmp sle <32 x i8> %a, %b
639   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
640   ret <32 x i8> %sel
641 }
642
643 define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
644 ; SSE2-LABEL: test27:
645 ; SSE2:       # %bb.0: # %entry
646 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
647 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
648 ; SSE2-NEXT:    pand %xmm4, %xmm0
649 ; SSE2-NEXT:    pandn %xmm2, %xmm4
650 ; SSE2-NEXT:    por %xmm0, %xmm4
651 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
652 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
653 ; SSE2-NEXT:    pand %xmm2, %xmm1
654 ; SSE2-NEXT:    pandn %xmm3, %xmm2
655 ; SSE2-NEXT:    por %xmm1, %xmm2
656 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
657 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
658 ; SSE2-NEXT:    retq
659 ;
660 ; SSE4-LABEL: test27:
661 ; SSE4:       # %bb.0: # %entry
662 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
663 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
664 ; SSE4-NEXT:    retq
665 ;
666 ; AVX1-LABEL: test27:
667 ; AVX1:       # %bb.0: # %entry
668 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
669 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
670 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
671 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
672 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
673 ; AVX1-NEXT:    retq
674 ;
675 ; AVX2-LABEL: test27:
676 ; AVX2:       # %bb.0: # %entry
677 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
678 ; AVX2-NEXT:    retq
679 ;
680 ; AVX512F-LABEL: test27:
681 ; AVX512F:       # %bb.0: # %entry
682 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
683 ; AVX512F-NEXT:    retq
684 entry:
685   %cmp = icmp sgt <32 x i8> %a, %b
686   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
687   ret <32 x i8> %sel
688 }
689
690 define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
691 ; SSE2-LABEL: test28:
692 ; SSE2:       # %bb.0: # %entry
693 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
694 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
695 ; SSE2-NEXT:    pand %xmm4, %xmm0
696 ; SSE2-NEXT:    pandn %xmm2, %xmm4
697 ; SSE2-NEXT:    por %xmm0, %xmm4
698 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
699 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
700 ; SSE2-NEXT:    pand %xmm2, %xmm1
701 ; SSE2-NEXT:    pandn %xmm3, %xmm2
702 ; SSE2-NEXT:    por %xmm1, %xmm2
703 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
704 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
705 ; SSE2-NEXT:    retq
706 ;
707 ; SSE4-LABEL: test28:
708 ; SSE4:       # %bb.0: # %entry
709 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
710 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
711 ; SSE4-NEXT:    retq
712 ;
713 ; AVX1-LABEL: test28:
714 ; AVX1:       # %bb.0: # %entry
715 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
716 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
717 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
718 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
719 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
720 ; AVX1-NEXT:    retq
721 ;
722 ; AVX2-LABEL: test28:
723 ; AVX2:       # %bb.0: # %entry
724 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
725 ; AVX2-NEXT:    retq
726 ;
727 ; AVX512F-LABEL: test28:
728 ; AVX512F:       # %bb.0: # %entry
729 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
730 ; AVX512F-NEXT:    retq
731 entry:
732   %cmp = icmp sge <32 x i8> %a, %b
733   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
734   ret <32 x i8> %sel
735 }
736
737 define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
738 ; SSE-LABEL: test29:
739 ; SSE:       # %bb.0: # %entry
740 ; SSE-NEXT:    pminub %xmm2, %xmm0
741 ; SSE-NEXT:    pminub %xmm3, %xmm1
742 ; SSE-NEXT:    retq
743 ;
744 ; AVX1-LABEL: test29:
745 ; AVX1:       # %bb.0: # %entry
746 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
747 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
748 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
749 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
750 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
751 ; AVX1-NEXT:    retq
752 ;
753 ; AVX2-LABEL: test29:
754 ; AVX2:       # %bb.0: # %entry
755 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
756 ; AVX2-NEXT:    retq
757 ;
758 ; AVX512F-LABEL: test29:
759 ; AVX512F:       # %bb.0: # %entry
760 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
761 ; AVX512F-NEXT:    retq
762 entry:
763   %cmp = icmp ult <32 x i8> %a, %b
764   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
765   ret <32 x i8> %sel
766 }
767
768 define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
769 ; SSE-LABEL: test30:
770 ; SSE:       # %bb.0: # %entry
771 ; SSE-NEXT:    pminub %xmm2, %xmm0
772 ; SSE-NEXT:    pminub %xmm3, %xmm1
773 ; SSE-NEXT:    retq
774 ;
775 ; AVX1-LABEL: test30:
776 ; AVX1:       # %bb.0: # %entry
777 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
778 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
779 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
780 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
781 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
782 ; AVX1-NEXT:    retq
783 ;
784 ; AVX2-LABEL: test30:
785 ; AVX2:       # %bb.0: # %entry
786 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
787 ; AVX2-NEXT:    retq
788 ;
789 ; AVX512F-LABEL: test30:
790 ; AVX512F:       # %bb.0: # %entry
791 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
792 ; AVX512F-NEXT:    retq
793 entry:
794   %cmp = icmp ule <32 x i8> %a, %b
795   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
796   ret <32 x i8> %sel
797 }
798
799 define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
800 ; SSE-LABEL: test31:
801 ; SSE:       # %bb.0: # %entry
802 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
803 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
804 ; SSE-NEXT:    retq
805 ;
806 ; AVX1-LABEL: test31:
807 ; AVX1:       # %bb.0: # %entry
808 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
809 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
810 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
811 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
812 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
813 ; AVX1-NEXT:    retq
814 ;
815 ; AVX2-LABEL: test31:
816 ; AVX2:       # %bb.0: # %entry
817 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
818 ; AVX2-NEXT:    retq
819 ;
820 ; AVX512F-LABEL: test31:
821 ; AVX512F:       # %bb.0: # %entry
822 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
823 ; AVX512F-NEXT:    retq
824 entry:
825   %cmp = icmp ugt <32 x i8> %a, %b
826   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
827   ret <32 x i8> %sel
828 }
829
830 define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
831 ; SSE-LABEL: test32:
832 ; SSE:       # %bb.0: # %entry
833 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
834 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
835 ; SSE-NEXT:    retq
836 ;
837 ; AVX1-LABEL: test32:
838 ; AVX1:       # %bb.0: # %entry
839 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
840 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
841 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
842 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
843 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
844 ; AVX1-NEXT:    retq
845 ;
846 ; AVX2-LABEL: test32:
847 ; AVX2:       # %bb.0: # %entry
848 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
849 ; AVX2-NEXT:    retq
850 ;
851 ; AVX512F-LABEL: test32:
852 ; AVX512F:       # %bb.0: # %entry
853 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
854 ; AVX512F-NEXT:    retq
855 entry:
856   %cmp = icmp uge <32 x i8> %a, %b
857   %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
858   ret <32 x i8> %sel
859 }
860
861 define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
862 ; SSE-LABEL: test33:
863 ; SSE:       # %bb.0: # %entry
864 ; SSE-NEXT:    pminsw %xmm2, %xmm0
865 ; SSE-NEXT:    pminsw %xmm3, %xmm1
866 ; SSE-NEXT:    retq
867 ;
868 ; AVX1-LABEL: test33:
869 ; AVX1:       # %bb.0: # %entry
870 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
871 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
872 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
873 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
874 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
875 ; AVX1-NEXT:    retq
876 ;
877 ; AVX2-LABEL: test33:
878 ; AVX2:       # %bb.0: # %entry
879 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
880 ; AVX2-NEXT:    retq
881 ;
882 ; AVX512F-LABEL: test33:
883 ; AVX512F:       # %bb.0: # %entry
884 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
885 ; AVX512F-NEXT:    retq
886 entry:
887   %cmp = icmp slt <16 x i16> %a, %b
888   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
889   ret <16 x i16> %sel
890 }
891
892 define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
893 ; SSE-LABEL: test34:
894 ; SSE:       # %bb.0: # %entry
895 ; SSE-NEXT:    pminsw %xmm2, %xmm0
896 ; SSE-NEXT:    pminsw %xmm3, %xmm1
897 ; SSE-NEXT:    retq
898 ;
899 ; AVX1-LABEL: test34:
900 ; AVX1:       # %bb.0: # %entry
901 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
902 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
903 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
904 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
905 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
906 ; AVX1-NEXT:    retq
907 ;
908 ; AVX2-LABEL: test34:
909 ; AVX2:       # %bb.0: # %entry
910 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
911 ; AVX2-NEXT:    retq
912 ;
913 ; AVX512F-LABEL: test34:
914 ; AVX512F:       # %bb.0: # %entry
915 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
916 ; AVX512F-NEXT:    retq
917 entry:
918   %cmp = icmp sle <16 x i16> %a, %b
919   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
920   ret <16 x i16> %sel
921 }
922
923 define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
924 ; SSE-LABEL: test35:
925 ; SSE:       # %bb.0: # %entry
926 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
927 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
928 ; SSE-NEXT:    retq
929 ;
930 ; AVX1-LABEL: test35:
931 ; AVX1:       # %bb.0: # %entry
932 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
933 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
934 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
935 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
936 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
937 ; AVX1-NEXT:    retq
938 ;
939 ; AVX2-LABEL: test35:
940 ; AVX2:       # %bb.0: # %entry
941 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
942 ; AVX2-NEXT:    retq
943 ;
944 ; AVX512F-LABEL: test35:
945 ; AVX512F:       # %bb.0: # %entry
946 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
947 ; AVX512F-NEXT:    retq
948 entry:
949   %cmp = icmp sgt <16 x i16> %a, %b
950   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
951   ret <16 x i16> %sel
952 }
953
954 define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
955 ; SSE-LABEL: test36:
956 ; SSE:       # %bb.0: # %entry
957 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
958 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
959 ; SSE-NEXT:    retq
960 ;
961 ; AVX1-LABEL: test36:
962 ; AVX1:       # %bb.0: # %entry
963 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
964 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
965 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
966 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
967 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
968 ; AVX1-NEXT:    retq
969 ;
970 ; AVX2-LABEL: test36:
971 ; AVX2:       # %bb.0: # %entry
972 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
973 ; AVX2-NEXT:    retq
974 ;
975 ; AVX512F-LABEL: test36:
976 ; AVX512F:       # %bb.0: # %entry
977 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
978 ; AVX512F-NEXT:    retq
979 entry:
980   %cmp = icmp sge <16 x i16> %a, %b
981   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
982   ret <16 x i16> %sel
983 }
984
985 define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
986 ; SSE2-LABEL: test37:
987 ; SSE2:       # %bb.0: # %entry
988 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
989 ; SSE2-NEXT:    pxor %xmm4, %xmm2
990 ; SSE2-NEXT:    pxor %xmm4, %xmm0
991 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
992 ; SSE2-NEXT:    pxor %xmm4, %xmm0
993 ; SSE2-NEXT:    pxor %xmm4, %xmm3
994 ; SSE2-NEXT:    pxor %xmm4, %xmm1
995 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
996 ; SSE2-NEXT:    pxor %xmm4, %xmm1
997 ; SSE2-NEXT:    retq
998 ;
999 ; SSE4-LABEL: test37:
1000 ; SSE4:       # %bb.0: # %entry
1001 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
1002 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
1003 ; SSE4-NEXT:    retq
1004 ;
1005 ; AVX1-LABEL: test37:
1006 ; AVX1:       # %bb.0: # %entry
1007 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1008 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1009 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1010 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1011 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1012 ; AVX1-NEXT:    retq
1013 ;
1014 ; AVX2-LABEL: test37:
1015 ; AVX2:       # %bb.0: # %entry
1016 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1017 ; AVX2-NEXT:    retq
1018 ;
1019 ; AVX512F-LABEL: test37:
1020 ; AVX512F:       # %bb.0: # %entry
1021 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1022 ; AVX512F-NEXT:    retq
1023 entry:
1024   %cmp = icmp ult <16 x i16> %a, %b
1025   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1026   ret <16 x i16> %sel
1027 }
1028
1029 define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1030 ; SSE2-LABEL: test38:
1031 ; SSE2:       # %bb.0: # %entry
1032 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1033 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1034 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1035 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
1036 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1037 ; SSE2-NEXT:    pxor %xmm4, %xmm3
1038 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1039 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
1040 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1041 ; SSE2-NEXT:    retq
1042 ;
1043 ; SSE4-LABEL: test38:
1044 ; SSE4:       # %bb.0: # %entry
1045 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
1046 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
1047 ; SSE4-NEXT:    retq
1048 ;
1049 ; AVX1-LABEL: test38:
1050 ; AVX1:       # %bb.0: # %entry
1051 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1052 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1053 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1054 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1055 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1056 ; AVX1-NEXT:    retq
1057 ;
1058 ; AVX2-LABEL: test38:
1059 ; AVX2:       # %bb.0: # %entry
1060 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1061 ; AVX2-NEXT:    retq
1062 ;
1063 ; AVX512F-LABEL: test38:
1064 ; AVX512F:       # %bb.0: # %entry
1065 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1066 ; AVX512F-NEXT:    retq
1067 entry:
1068   %cmp = icmp ule <16 x i16> %a, %b
1069   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1070   ret <16 x i16> %sel
1071 }
1072
1073 define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1074 ; SSE2-LABEL: test39:
1075 ; SSE2:       # %bb.0: # %entry
1076 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1077 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1078 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1079 ; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
1080 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1081 ; SSE2-NEXT:    pxor %xmm4, %xmm3
1082 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1083 ; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
1084 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1085 ; SSE2-NEXT:    retq
1086 ;
1087 ; SSE4-LABEL: test39:
1088 ; SSE4:       # %bb.0: # %entry
1089 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1090 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1091 ; SSE4-NEXT:    retq
1092 ;
1093 ; AVX1-LABEL: test39:
1094 ; AVX1:       # %bb.0: # %entry
1095 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1096 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1097 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1098 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1099 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1100 ; AVX1-NEXT:    retq
1101 ;
1102 ; AVX2-LABEL: test39:
1103 ; AVX2:       # %bb.0: # %entry
1104 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1105 ; AVX2-NEXT:    retq
1106 ;
1107 ; AVX512F-LABEL: test39:
1108 ; AVX512F:       # %bb.0: # %entry
1109 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1110 ; AVX512F-NEXT:    retq
1111 entry:
1112   %cmp = icmp ugt <16 x i16> %a, %b
1113   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1114   ret <16 x i16> %sel
1115 }
1116
1117 define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1118 ; SSE2-LABEL: test40:
1119 ; SSE2:       # %bb.0: # %entry
1120 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1121 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1122 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1123 ; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
1124 ; SSE2-NEXT:    pxor %xmm4, %xmm0
1125 ; SSE2-NEXT:    pxor %xmm4, %xmm3
1126 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1127 ; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
1128 ; SSE2-NEXT:    pxor %xmm4, %xmm1
1129 ; SSE2-NEXT:    retq
1130 ;
1131 ; SSE4-LABEL: test40:
1132 ; SSE4:       # %bb.0: # %entry
1133 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1134 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1135 ; SSE4-NEXT:    retq
1136 ;
1137 ; AVX1-LABEL: test40:
1138 ; AVX1:       # %bb.0: # %entry
1139 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1140 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1141 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1142 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1143 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1144 ; AVX1-NEXT:    retq
1145 ;
1146 ; AVX2-LABEL: test40:
1147 ; AVX2:       # %bb.0: # %entry
1148 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1149 ; AVX2-NEXT:    retq
1150 ;
1151 ; AVX512F-LABEL: test40:
1152 ; AVX512F:       # %bb.0: # %entry
1153 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1154 ; AVX512F-NEXT:    retq
1155 entry:
1156   %cmp = icmp uge <16 x i16> %a, %b
1157   %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1158   ret <16 x i16> %sel
1159 }
1160
1161 define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1162 ; SSE2-LABEL: test41:
1163 ; SSE2:       # %bb.0: # %entry
1164 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
1165 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1166 ; SSE2-NEXT:    pand %xmm4, %xmm0
1167 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1168 ; SSE2-NEXT:    por %xmm4, %xmm0
1169 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1170 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1171 ; SSE2-NEXT:    pand %xmm2, %xmm1
1172 ; SSE2-NEXT:    pandn %xmm3, %xmm2
1173 ; SSE2-NEXT:    por %xmm2, %xmm1
1174 ; SSE2-NEXT:    retq
1175 ;
1176 ; SSE4-LABEL: test41:
1177 ; SSE4:       # %bb.0: # %entry
1178 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
1179 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
1180 ; SSE4-NEXT:    retq
1181 ;
1182 ; AVX1-LABEL: test41:
1183 ; AVX1:       # %bb.0: # %entry
1184 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1185 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1186 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1187 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1188 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1189 ; AVX1-NEXT:    retq
1190 ;
1191 ; AVX2-LABEL: test41:
1192 ; AVX2:       # %bb.0: # %entry
1193 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1194 ; AVX2-NEXT:    retq
1195 ;
1196 ; AVX512F-LABEL: test41:
1197 ; AVX512F:       # %bb.0: # %entry
1198 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1199 ; AVX512F-NEXT:    retq
1200 entry:
1201   %cmp = icmp slt <8 x i32> %a, %b
1202   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1203   ret <8 x i32> %sel
1204 }
1205
1206 define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1207 ; SSE2-LABEL: test42:
1208 ; SSE2:       # %bb.0: # %entry
1209 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
1210 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1211 ; SSE2-NEXT:    pand %xmm4, %xmm0
1212 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1213 ; SSE2-NEXT:    por %xmm4, %xmm0
1214 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
1215 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1216 ; SSE2-NEXT:    pand %xmm2, %xmm1
1217 ; SSE2-NEXT:    pandn %xmm3, %xmm2
1218 ; SSE2-NEXT:    por %xmm2, %xmm1
1219 ; SSE2-NEXT:    retq
1220 ;
1221 ; SSE4-LABEL: test42:
1222 ; SSE4:       # %bb.0: # %entry
1223 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
1224 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
1225 ; SSE4-NEXT:    retq
1226 ;
1227 ; AVX1-LABEL: test42:
1228 ; AVX1:       # %bb.0: # %entry
1229 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1230 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1231 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1232 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1233 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1234 ; AVX1-NEXT:    retq
1235 ;
1236 ; AVX2-LABEL: test42:
1237 ; AVX2:       # %bb.0: # %entry
1238 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1239 ; AVX2-NEXT:    retq
1240 ;
1241 ; AVX512F-LABEL: test42:
1242 ; AVX512F:       # %bb.0: # %entry
1243 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1244 ; AVX512F-NEXT:    retq
1245 entry:
1246   %cmp = icmp sle <8 x i32> %a, %b
1247   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1248   ret <8 x i32> %sel
1249 }
1250
1251 define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1252 ; SSE2-LABEL: test43:
1253 ; SSE2:       # %bb.0: # %entry
1254 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1255 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1256 ; SSE2-NEXT:    pand %xmm4, %xmm0
1257 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1258 ; SSE2-NEXT:    por %xmm0, %xmm4
1259 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1260 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1261 ; SSE2-NEXT:    pand %xmm2, %xmm1
1262 ; SSE2-NEXT:    pandn %xmm3, %xmm2
1263 ; SSE2-NEXT:    por %xmm1, %xmm2
1264 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1265 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1266 ; SSE2-NEXT:    retq
1267 ;
1268 ; SSE4-LABEL: test43:
1269 ; SSE4:       # %bb.0: # %entry
1270 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1271 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1272 ; SSE4-NEXT:    retq
1273 ;
1274 ; AVX1-LABEL: test43:
1275 ; AVX1:       # %bb.0: # %entry
1276 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1277 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1278 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1279 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1280 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1281 ; AVX1-NEXT:    retq
1282 ;
1283 ; AVX2-LABEL: test43:
1284 ; AVX2:       # %bb.0: # %entry
1285 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1286 ; AVX2-NEXT:    retq
1287 ;
1288 ; AVX512F-LABEL: test43:
1289 ; AVX512F:       # %bb.0: # %entry
1290 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1291 ; AVX512F-NEXT:    retq
1292 entry:
1293   %cmp = icmp sgt <8 x i32> %a, %b
1294   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1295   ret <8 x i32> %sel
1296 }
1297
1298 define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1299 ; SSE2-LABEL: test44:
1300 ; SSE2:       # %bb.0: # %entry
1301 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1302 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1303 ; SSE2-NEXT:    pand %xmm4, %xmm0
1304 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1305 ; SSE2-NEXT:    por %xmm0, %xmm4
1306 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1307 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1308 ; SSE2-NEXT:    pand %xmm2, %xmm1
1309 ; SSE2-NEXT:    pandn %xmm3, %xmm2
1310 ; SSE2-NEXT:    por %xmm1, %xmm2
1311 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1312 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
1313 ; SSE2-NEXT:    retq
1314 ;
1315 ; SSE4-LABEL: test44:
1316 ; SSE4:       # %bb.0: # %entry
1317 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1318 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1319 ; SSE4-NEXT:    retq
1320 ;
1321 ; AVX1-LABEL: test44:
1322 ; AVX1:       # %bb.0: # %entry
1323 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1324 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1325 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1326 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1327 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1328 ; AVX1-NEXT:    retq
1329 ;
1330 ; AVX2-LABEL: test44:
1331 ; AVX2:       # %bb.0: # %entry
1332 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1333 ; AVX2-NEXT:    retq
1334 ;
1335 ; AVX512F-LABEL: test44:
1336 ; AVX512F:       # %bb.0: # %entry
1337 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1338 ; AVX512F-NEXT:    retq
1339 entry:
1340   %cmp = icmp sge <8 x i32> %a, %b
1341   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1342   ret <8 x i32> %sel
1343 }
1344
1345 define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1346 ; SSE2-LABEL: test45:
1347 ; SSE2:       # %bb.0: # %entry
1348 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1349 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1350 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1351 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1352 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1353 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1354 ; SSE2-NEXT:    pand %xmm6, %xmm0
1355 ; SSE2-NEXT:    pandn %xmm2, %xmm6
1356 ; SSE2-NEXT:    por %xmm6, %xmm0
1357 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1358 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1359 ; SSE2-NEXT:    pxor %xmm3, %xmm4
1360 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1361 ; SSE2-NEXT:    pand %xmm4, %xmm1
1362 ; SSE2-NEXT:    pandn %xmm3, %xmm4
1363 ; SSE2-NEXT:    por %xmm4, %xmm1
1364 ; SSE2-NEXT:    retq
1365 ;
1366 ; SSE4-LABEL: test45:
1367 ; SSE4:       # %bb.0: # %entry
1368 ; SSE4-NEXT:    pminud %xmm2, %xmm0
1369 ; SSE4-NEXT:    pminud %xmm3, %xmm1
1370 ; SSE4-NEXT:    retq
1371 ;
1372 ; AVX1-LABEL: test45:
1373 ; AVX1:       # %bb.0: # %entry
1374 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1375 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1376 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1377 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1378 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1379 ; AVX1-NEXT:    retq
1380 ;
1381 ; AVX2-LABEL: test45:
1382 ; AVX2:       # %bb.0: # %entry
1383 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1384 ; AVX2-NEXT:    retq
1385 ;
1386 ; AVX512F-LABEL: test45:
1387 ; AVX512F:       # %bb.0: # %entry
1388 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1389 ; AVX512F-NEXT:    retq
1390 entry:
1391   %cmp = icmp ult <8 x i32> %a, %b
1392   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1393   ret <8 x i32> %sel
1394 }
1395
1396 define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1397 ; SSE2-LABEL: test46:
1398 ; SSE2:       # %bb.0: # %entry
1399 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1400 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1401 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1402 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1403 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1404 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1405 ; SSE2-NEXT:    pand %xmm6, %xmm0
1406 ; SSE2-NEXT:    pandn %xmm2, %xmm6
1407 ; SSE2-NEXT:    por %xmm6, %xmm0
1408 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1409 ; SSE2-NEXT:    pxor %xmm4, %xmm2
1410 ; SSE2-NEXT:    pxor %xmm3, %xmm4
1411 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1412 ; SSE2-NEXT:    pand %xmm4, %xmm1
1413 ; SSE2-NEXT:    pandn %xmm3, %xmm4
1414 ; SSE2-NEXT:    por %xmm4, %xmm1
1415 ; SSE2-NEXT:    retq
1416 ;
1417 ; SSE4-LABEL: test46:
1418 ; SSE4:       # %bb.0: # %entry
1419 ; SSE4-NEXT:    pminud %xmm2, %xmm0
1420 ; SSE4-NEXT:    pminud %xmm3, %xmm1
1421 ; SSE4-NEXT:    retq
1422 ;
1423 ; AVX1-LABEL: test46:
1424 ; AVX1:       # %bb.0: # %entry
1425 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1426 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1427 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1428 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1429 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1430 ; AVX1-NEXT:    retq
1431 ;
1432 ; AVX2-LABEL: test46:
1433 ; AVX2:       # %bb.0: # %entry
1434 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1435 ; AVX2-NEXT:    retq
1436 ;
1437 ; AVX512F-LABEL: test46:
1438 ; AVX512F:       # %bb.0: # %entry
1439 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1440 ; AVX512F-NEXT:    retq
1441 entry:
1442   %cmp = icmp ule <8 x i32> %a, %b
1443   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1444   ret <8 x i32> %sel
1445 }
1446
1447 define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1448 ; SSE2-LABEL: test47:
1449 ; SSE2:       # %bb.0: # %entry
1450 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1451 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1452 ; SSE2-NEXT:    pxor %xmm5, %xmm6
1453 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1454 ; SSE2-NEXT:    pxor %xmm5, %xmm4
1455 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
1456 ; SSE2-NEXT:    pand %xmm4, %xmm0
1457 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1458 ; SSE2-NEXT:    por %xmm0, %xmm4
1459 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
1460 ; SSE2-NEXT:    pxor %xmm5, %xmm0
1461 ; SSE2-NEXT:    pxor %xmm1, %xmm5
1462 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
1463 ; SSE2-NEXT:    pand %xmm5, %xmm1
1464 ; SSE2-NEXT:    pandn %xmm3, %xmm5
1465 ; SSE2-NEXT:    por %xmm5, %xmm1
1466 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1467 ; SSE2-NEXT:    retq
1468 ;
1469 ; SSE4-LABEL: test47:
1470 ; SSE4:       # %bb.0: # %entry
1471 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1472 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1473 ; SSE4-NEXT:    retq
1474 ;
1475 ; AVX1-LABEL: test47:
1476 ; AVX1:       # %bb.0: # %entry
1477 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1478 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1479 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1480 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1481 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1482 ; AVX1-NEXT:    retq
1483 ;
1484 ; AVX2-LABEL: test47:
1485 ; AVX2:       # %bb.0: # %entry
1486 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1487 ; AVX2-NEXT:    retq
1488 ;
1489 ; AVX512F-LABEL: test47:
1490 ; AVX512F:       # %bb.0: # %entry
1491 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1492 ; AVX512F-NEXT:    retq
1493 entry:
1494   %cmp = icmp ugt <8 x i32> %a, %b
1495   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1496   ret <8 x i32> %sel
1497 }
1498
1499 define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1500 ; SSE2-LABEL: test48:
1501 ; SSE2:       # %bb.0: # %entry
1502 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1503 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1504 ; SSE2-NEXT:    pxor %xmm5, %xmm6
1505 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
1506 ; SSE2-NEXT:    pxor %xmm5, %xmm4
1507 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
1508 ; SSE2-NEXT:    pand %xmm4, %xmm0
1509 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1510 ; SSE2-NEXT:    por %xmm0, %xmm4
1511 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
1512 ; SSE2-NEXT:    pxor %xmm5, %xmm0
1513 ; SSE2-NEXT:    pxor %xmm1, %xmm5
1514 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
1515 ; SSE2-NEXT:    pand %xmm5, %xmm1
1516 ; SSE2-NEXT:    pandn %xmm3, %xmm5
1517 ; SSE2-NEXT:    por %xmm5, %xmm1
1518 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1519 ; SSE2-NEXT:    retq
1520 ;
1521 ; SSE4-LABEL: test48:
1522 ; SSE4:       # %bb.0: # %entry
1523 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1524 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1525 ; SSE4-NEXT:    retq
1526 ;
1527 ; AVX1-LABEL: test48:
1528 ; AVX1:       # %bb.0: # %entry
1529 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1530 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1531 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1532 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1533 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1534 ; AVX1-NEXT:    retq
1535 ;
1536 ; AVX2-LABEL: test48:
1537 ; AVX2:       # %bb.0: # %entry
1538 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1539 ; AVX2-NEXT:    retq
1540 ;
1541 ; AVX512F-LABEL: test48:
1542 ; AVX512F:       # %bb.0: # %entry
1543 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1544 ; AVX512F-NEXT:    retq
1545 entry:
1546   %cmp = icmp uge <8 x i32> %a, %b
1547   %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1548   ret <8 x i32> %sel
1549 }
1550
1551 define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1552 ; SSE2-LABEL: test49:
1553 ; SSE2:       # %bb.0: # %entry
1554 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1555 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1556 ; SSE2-NEXT:    pand %xmm2, %xmm0
1557 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1558 ; SSE2-NEXT:    por %xmm0, %xmm2
1559 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1560 ; SSE2-NEXT:    retq
1561 ;
1562 ; SSE4-LABEL: test49:
1563 ; SSE4:       # %bb.0: # %entry
1564 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1565 ; SSE4-NEXT:    retq
1566 ;
1567 ; AVX-LABEL: test49:
1568 ; AVX:       # %bb.0: # %entry
1569 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1570 ; AVX-NEXT:    retq
1571 entry:
1572   %cmp = icmp slt <16 x i8> %a, %b
1573   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1574   ret <16 x i8> %sel
1575 }
1576
1577 define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1578 ; SSE2-LABEL: test50:
1579 ; SSE2:       # %bb.0: # %entry
1580 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1581 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1582 ; SSE2-NEXT:    pand %xmm2, %xmm0
1583 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1584 ; SSE2-NEXT:    por %xmm0, %xmm2
1585 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1586 ; SSE2-NEXT:    retq
1587 ;
1588 ; SSE4-LABEL: test50:
1589 ; SSE4:       # %bb.0: # %entry
1590 ; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1591 ; SSE4-NEXT:    retq
1592 ;
1593 ; AVX-LABEL: test50:
1594 ; AVX:       # %bb.0: # %entry
1595 ; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1596 ; AVX-NEXT:    retq
1597 entry:
1598   %cmp = icmp sle <16 x i8> %a, %b
1599   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1600   ret <16 x i8> %sel
1601 }
1602
1603 define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1604 ; SSE2-LABEL: test51:
1605 ; SSE2:       # %bb.0: # %entry
1606 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1607 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1608 ; SSE2-NEXT:    pand %xmm2, %xmm0
1609 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1610 ; SSE2-NEXT:    por %xmm2, %xmm0
1611 ; SSE2-NEXT:    retq
1612 ;
1613 ; SSE4-LABEL: test51:
1614 ; SSE4:       # %bb.0: # %entry
1615 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
1616 ; SSE4-NEXT:    retq
1617 ;
1618 ; AVX-LABEL: test51:
1619 ; AVX:       # %bb.0: # %entry
1620 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1621 ; AVX-NEXT:    retq
1622 entry:
1623   %cmp = icmp sgt <16 x i8> %a, %b
1624   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1625   ret <16 x i8> %sel
1626 }
1627
1628 define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1629 ; SSE2-LABEL: test52:
1630 ; SSE2:       # %bb.0: # %entry
1631 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1632 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1633 ; SSE2-NEXT:    pand %xmm2, %xmm0
1634 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1635 ; SSE2-NEXT:    por %xmm2, %xmm0
1636 ; SSE2-NEXT:    retq
1637 ;
1638 ; SSE4-LABEL: test52:
1639 ; SSE4:       # %bb.0: # %entry
1640 ; SSE4-NEXT:    pminsb %xmm1, %xmm0
1641 ; SSE4-NEXT:    retq
1642 ;
1643 ; AVX-LABEL: test52:
1644 ; AVX:       # %bb.0: # %entry
1645 ; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1646 ; AVX-NEXT:    retq
1647 entry:
1648   %cmp = icmp sge <16 x i8> %a, %b
1649   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1650   ret <16 x i8> %sel
1651 }
1652
1653 define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
1654 ; SSE-LABEL: test53:
1655 ; SSE:       # %bb.0: # %entry
1656 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
1657 ; SSE-NEXT:    retq
1658 ;
1659 ; AVX-LABEL: test53:
1660 ; AVX:       # %bb.0: # %entry
1661 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1662 ; AVX-NEXT:    retq
1663 entry:
1664   %cmp = icmp ult <16 x i8> %a, %b
1665   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1666   ret <16 x i8> %sel
1667 }
1668
1669 define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
1670 ; SSE-LABEL: test54:
1671 ; SSE:       # %bb.0: # %entry
1672 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
1673 ; SSE-NEXT:    retq
1674 ;
1675 ; AVX-LABEL: test54:
1676 ; AVX:       # %bb.0: # %entry
1677 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1678 ; AVX-NEXT:    retq
1679 entry:
1680   %cmp = icmp ule <16 x i8> %a, %b
1681   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1682   ret <16 x i8> %sel
1683 }
1684
1685 define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
1686 ; SSE-LABEL: test55:
1687 ; SSE:       # %bb.0: # %entry
1688 ; SSE-NEXT:    pminub %xmm1, %xmm0
1689 ; SSE-NEXT:    retq
1690 ;
1691 ; AVX-LABEL: test55:
1692 ; AVX:       # %bb.0: # %entry
1693 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1694 ; AVX-NEXT:    retq
1695 entry:
1696   %cmp = icmp ugt <16 x i8> %a, %b
1697   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1698   ret <16 x i8> %sel
1699 }
1700
1701 define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1702 ; SSE-LABEL: test56:
1703 ; SSE:       # %bb.0: # %entry
1704 ; SSE-NEXT:    pminub %xmm1, %xmm0
1705 ; SSE-NEXT:    retq
1706 ;
1707 ; AVX-LABEL: test56:
1708 ; AVX:       # %bb.0: # %entry
1709 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1710 ; AVX-NEXT:    retq
1711 entry:
1712   %cmp = icmp uge <16 x i8> %a, %b
1713   %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1714   ret <16 x i8> %sel
1715 }
1716
1717 define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1718 ; SSE-LABEL: test57:
1719 ; SSE:       # %bb.0: # %entry
1720 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1721 ; SSE-NEXT:    retq
1722 ;
1723 ; AVX-LABEL: test57:
1724 ; AVX:       # %bb.0: # %entry
1725 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1726 ; AVX-NEXT:    retq
1727 entry:
1728   %cmp = icmp slt <8 x i16> %a, %b
1729   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1730   ret <8 x i16> %sel
1731 }
1732
1733 define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
1734 ; SSE-LABEL: test58:
1735 ; SSE:       # %bb.0: # %entry
1736 ; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1737 ; SSE-NEXT:    retq
1738 ;
1739 ; AVX-LABEL: test58:
1740 ; AVX:       # %bb.0: # %entry
1741 ; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1742 ; AVX-NEXT:    retq
1743 entry:
1744   %cmp = icmp sle <8 x i16> %a, %b
1745   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1746   ret <8 x i16> %sel
1747 }
1748
1749 define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
1750 ; SSE-LABEL: test59:
1751 ; SSE:       # %bb.0: # %entry
1752 ; SSE-NEXT:    pminsw %xmm1, %xmm0
1753 ; SSE-NEXT:    retq
1754 ;
1755 ; AVX-LABEL: test59:
1756 ; AVX:       # %bb.0: # %entry
1757 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1758 ; AVX-NEXT:    retq
1759 entry:
1760   %cmp = icmp sgt <8 x i16> %a, %b
1761   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1762   ret <8 x i16> %sel
1763 }
1764
1765 define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
1766 ; SSE-LABEL: test60:
1767 ; SSE:       # %bb.0: # %entry
1768 ; SSE-NEXT:    pminsw %xmm1, %xmm0
1769 ; SSE-NEXT:    retq
1770 ;
1771 ; AVX-LABEL: test60:
1772 ; AVX:       # %bb.0: # %entry
1773 ; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1774 ; AVX-NEXT:    retq
1775 entry:
1776   %cmp = icmp sge <8 x i16> %a, %b
1777   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1778   ret <8 x i16> %sel
1779 }
1780
1781 define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1782 ; SSE2-LABEL: test61:
1783 ; SSE2:       # %bb.0: # %entry
1784 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1785 ; SSE2-NEXT:    pxor %xmm2, %xmm1
1786 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1787 ; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
1788 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1789 ; SSE2-NEXT:    retq
1790 ;
1791 ; SSE4-LABEL: test61:
1792 ; SSE4:       # %bb.0: # %entry
1793 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1794 ; SSE4-NEXT:    retq
1795 ;
1796 ; AVX-LABEL: test61:
1797 ; AVX:       # %bb.0: # %entry
1798 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1799 ; AVX-NEXT:    retq
1800 entry:
1801   %cmp = icmp ult <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
1804 }
1805
1806 define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1807 ; SSE2-LABEL: test62:
1808 ; SSE2:       # %bb.0: # %entry
1809 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1810 ; SSE2-NEXT:    pxor %xmm2, %xmm1
1811 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1812 ; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
1813 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1814 ; SSE2-NEXT:    retq
1815 ;
1816 ; SSE4-LABEL: test62:
1817 ; SSE4:       # %bb.0: # %entry
1818 ; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1819 ; SSE4-NEXT:    retq
1820 ;
1821 ; AVX-LABEL: test62:
1822 ; AVX:       # %bb.0: # %entry
1823 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1824 ; AVX-NEXT:    retq
1825 entry:
1826   %cmp = icmp ule <8 x i16> %a, %b
1827   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1828   ret <8 x i16> %sel
1829 }
1830
1831 define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1832 ; SSE2-LABEL: test63:
1833 ; SSE2:       # %bb.0: # %entry
1834 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1835 ; SSE2-NEXT:    pxor %xmm2, %xmm1
1836 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1837 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
1838 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1839 ; SSE2-NEXT:    retq
1840 ;
1841 ; SSE4-LABEL: test63:
1842 ; SSE4:       # %bb.0: # %entry
1843 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
1844 ; SSE4-NEXT:    retq
1845 ;
1846 ; AVX-LABEL: test63:
1847 ; AVX:       # %bb.0: # %entry
1848 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1849 ; AVX-NEXT:    retq
1850 entry:
1851   %cmp = icmp ugt <8 x i16> %a, %b
1852   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1853   ret <8 x i16> %sel
1854 }
1855
1856 define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1857 ; SSE2-LABEL: test64:
1858 ; SSE2:       # %bb.0: # %entry
1859 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1860 ; SSE2-NEXT:    pxor %xmm2, %xmm1
1861 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1862 ; SSE2-NEXT:    pminsw %xmm1, %xmm0
1863 ; SSE2-NEXT:    pxor %xmm2, %xmm0
1864 ; SSE2-NEXT:    retq
1865 ;
1866 ; SSE4-LABEL: test64:
1867 ; SSE4:       # %bb.0: # %entry
1868 ; SSE4-NEXT:    pminuw %xmm1, %xmm0
1869 ; SSE4-NEXT:    retq
1870 ;
1871 ; AVX-LABEL: test64:
1872 ; AVX:       # %bb.0: # %entry
1873 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1874 ; AVX-NEXT:    retq
1875 entry:
1876   %cmp = icmp uge <8 x i16> %a, %b
1877   %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1878   ret <8 x i16> %sel
1879 }
1880
1881 define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1882 ; SSE2-LABEL: test65:
1883 ; SSE2:       # %bb.0: # %entry
1884 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1885 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1886 ; SSE2-NEXT:    pand %xmm2, %xmm0
1887 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1888 ; SSE2-NEXT:    por %xmm0, %xmm2
1889 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1890 ; SSE2-NEXT:    retq
1891 ;
1892 ; SSE4-LABEL: test65:
1893 ; SSE4:       # %bb.0: # %entry
1894 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1895 ; SSE4-NEXT:    retq
1896 ;
1897 ; AVX-LABEL: test65:
1898 ; AVX:       # %bb.0: # %entry
1899 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1900 ; AVX-NEXT:    retq
1901 entry:
1902   %cmp = icmp slt <4 x i32> %a, %b
1903   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1904   ret <4 x i32> %sel
1905 }
1906
1907 define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
1908 ; SSE2-LABEL: test66:
1909 ; SSE2:       # %bb.0: # %entry
1910 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1911 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1912 ; SSE2-NEXT:    pand %xmm2, %xmm0
1913 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1914 ; SSE2-NEXT:    por %xmm0, %xmm2
1915 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1916 ; SSE2-NEXT:    retq
1917 ;
1918 ; SSE4-LABEL: test66:
1919 ; SSE4:       # %bb.0: # %entry
1920 ; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1921 ; SSE4-NEXT:    retq
1922 ;
1923 ; AVX-LABEL: test66:
1924 ; AVX:       # %bb.0: # %entry
1925 ; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1926 ; AVX-NEXT:    retq
1927 entry:
1928   %cmp = icmp sle <4 x i32> %a, %b
1929   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1930   ret <4 x i32> %sel
1931 }
1932
1933 define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
1934 ; SSE2-LABEL: test67:
1935 ; SSE2:       # %bb.0: # %entry
1936 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1937 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1938 ; SSE2-NEXT:    pand %xmm2, %xmm0
1939 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1940 ; SSE2-NEXT:    por %xmm2, %xmm0
1941 ; SSE2-NEXT:    retq
1942 ;
1943 ; SSE4-LABEL: test67:
1944 ; SSE4:       # %bb.0: # %entry
1945 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
1946 ; SSE4-NEXT:    retq
1947 ;
1948 ; AVX-LABEL: test67:
1949 ; AVX:       # %bb.0: # %entry
1950 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1951 ; AVX-NEXT:    retq
1952 entry:
1953   %cmp = icmp sgt <4 x i32> %a, %b
1954   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1955   ret <4 x i32> %sel
1956 }
1957
1958 define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
1959 ; SSE2-LABEL: test68:
1960 ; SSE2:       # %bb.0: # %entry
1961 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1962 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1963 ; SSE2-NEXT:    pand %xmm2, %xmm0
1964 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1965 ; SSE2-NEXT:    por %xmm2, %xmm0
1966 ; SSE2-NEXT:    retq
1967 ;
1968 ; SSE4-LABEL: test68:
1969 ; SSE4:       # %bb.0: # %entry
1970 ; SSE4-NEXT:    pminsd %xmm1, %xmm0
1971 ; SSE4-NEXT:    retq
1972 ;
1973 ; AVX-LABEL: test68:
1974 ; AVX:       # %bb.0: # %entry
1975 ; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1976 ; AVX-NEXT:    retq
1977 entry:
1978   %cmp = icmp sge <4 x i32> %a, %b
1979   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1980   ret <4 x i32> %sel
1981 }
1982
1983 define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
1984 ; SSE2-LABEL: test69:
1985 ; SSE2:       # %bb.0: # %entry
1986 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1987 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
1988 ; SSE2-NEXT:    pxor %xmm2, %xmm3
1989 ; SSE2-NEXT:    pxor %xmm0, %xmm2
1990 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1991 ; SSE2-NEXT:    pand %xmm2, %xmm0
1992 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1993 ; SSE2-NEXT:    por %xmm2, %xmm0
1994 ; SSE2-NEXT:    retq
1995 ;
1996 ; SSE4-LABEL: test69:
1997 ; SSE4:       # %bb.0: # %entry
1998 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1999 ; SSE4-NEXT:    retq
2000 ;
2001 ; AVX-LABEL: test69:
2002 ; AVX:       # %bb.0: # %entry
2003 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2004 ; AVX-NEXT:    retq
2005 entry:
2006   %cmp = icmp ult <4 x i32> %a, %b
2007   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2008   ret <4 x i32> %sel
2009 }
2010
2011 define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
2012 ; SSE2-LABEL: test70:
2013 ; SSE2:       # %bb.0: # %entry
2014 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2015 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
2016 ; SSE2-NEXT:    pxor %xmm2, %xmm3
2017 ; SSE2-NEXT:    pxor %xmm0, %xmm2
2018 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2019 ; SSE2-NEXT:    pand %xmm2, %xmm0
2020 ; SSE2-NEXT:    pandn %xmm1, %xmm2
2021 ; SSE2-NEXT:    por %xmm2, %xmm0
2022 ; SSE2-NEXT:    retq
2023 ;
2024 ; SSE4-LABEL: test70:
2025 ; SSE4:       # %bb.0: # %entry
2026 ; SSE4-NEXT:    pmaxud %xmm1, %xmm0
2027 ; SSE4-NEXT:    retq
2028 ;
2029 ; AVX-LABEL: test70:
2030 ; AVX:       # %bb.0: # %entry
2031 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2032 ; AVX-NEXT:    retq
2033 entry:
2034   %cmp = icmp ule <4 x i32> %a, %b
2035   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2036   ret <4 x i32> %sel
2037 }
2038
2039 define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
2040 ; SSE2-LABEL: test71:
2041 ; SSE2:       # %bb.0: # %entry
2042 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2043 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
2044 ; SSE2-NEXT:    pxor %xmm2, %xmm3
2045 ; SSE2-NEXT:    pxor %xmm1, %xmm2
2046 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2047 ; SSE2-NEXT:    pand %xmm2, %xmm0
2048 ; SSE2-NEXT:    pandn %xmm1, %xmm2
2049 ; SSE2-NEXT:    por %xmm2, %xmm0
2050 ; SSE2-NEXT:    retq
2051 ;
2052 ; SSE4-LABEL: test71:
2053 ; SSE4:       # %bb.0: # %entry
2054 ; SSE4-NEXT:    pminud %xmm1, %xmm0
2055 ; SSE4-NEXT:    retq
2056 ;
2057 ; AVX-LABEL: test71:
2058 ; AVX:       # %bb.0: # %entry
2059 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2060 ; AVX-NEXT:    retq
2061 entry:
2062   %cmp = icmp ugt <4 x i32> %a, %b
2063   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2064   ret <4 x i32> %sel
2065 }
2066
2067 define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2068 ; SSE2-LABEL: test72:
2069 ; SSE2:       # %bb.0: # %entry
2070 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2071 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
2072 ; SSE2-NEXT:    pxor %xmm2, %xmm3
2073 ; SSE2-NEXT:    pxor %xmm1, %xmm2
2074 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2075 ; SSE2-NEXT:    pand %xmm2, %xmm0
2076 ; SSE2-NEXT:    pandn %xmm1, %xmm2
2077 ; SSE2-NEXT:    por %xmm2, %xmm0
2078 ; SSE2-NEXT:    retq
2079 ;
2080 ; SSE4-LABEL: test72:
2081 ; SSE4:       # %bb.0: # %entry
2082 ; SSE4-NEXT:    pminud %xmm1, %xmm0
2083 ; SSE4-NEXT:    retq
2084 ;
2085 ; AVX-LABEL: test72:
2086 ; AVX:       # %bb.0: # %entry
2087 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2088 ; AVX-NEXT:    retq
2089 entry:
2090   %cmp = icmp uge <4 x i32> %a, %b
2091   %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2092   ret <4 x i32> %sel
2093 }
2094
2095 define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2096 ; SSE2-LABEL: test73:
2097 ; SSE2:       # %bb.0: # %entry
2098 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2099 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2100 ; SSE2-NEXT:    pand %xmm4, %xmm0
2101 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2102 ; SSE2-NEXT:    por %xmm0, %xmm4
2103 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2104 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2105 ; SSE2-NEXT:    pand %xmm2, %xmm1
2106 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2107 ; SSE2-NEXT:    por %xmm1, %xmm2
2108 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
2109 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
2110 ; SSE2-NEXT:    retq
2111 ;
2112 ; SSE4-LABEL: test73:
2113 ; SSE4:       # %bb.0: # %entry
2114 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2115 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2116 ; SSE4-NEXT:    retq
2117 ;
2118 ; AVX1-LABEL: test73:
2119 ; AVX1:       # %bb.0: # %entry
2120 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2121 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2122 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2123 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2124 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2125 ; AVX1-NEXT:    retq
2126 ;
2127 ; AVX2-LABEL: test73:
2128 ; AVX2:       # %bb.0: # %entry
2129 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2130 ; AVX2-NEXT:    retq
2131 ;
2132 ; AVX512F-LABEL: test73:
2133 ; AVX512F:       # %bb.0: # %entry
2134 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2135 ; AVX512F-NEXT:    retq
2136 entry:
2137   %cmp = icmp slt <32 x i8> %a, %b
2138   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2139   ret <32 x i8> %sel
2140 }
2141
2142 define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2143 ; SSE2-LABEL: test74:
2144 ; SSE2:       # %bb.0: # %entry
2145 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2146 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2147 ; SSE2-NEXT:    pand %xmm4, %xmm0
2148 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2149 ; SSE2-NEXT:    por %xmm0, %xmm4
2150 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2151 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2152 ; SSE2-NEXT:    pand %xmm2, %xmm1
2153 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2154 ; SSE2-NEXT:    por %xmm1, %xmm2
2155 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
2156 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
2157 ; SSE2-NEXT:    retq
2158 ;
2159 ; SSE4-LABEL: test74:
2160 ; SSE4:       # %bb.0: # %entry
2161 ; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2162 ; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2163 ; SSE4-NEXT:    retq
2164 ;
2165 ; AVX1-LABEL: test74:
2166 ; AVX1:       # %bb.0: # %entry
2167 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2168 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2169 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2170 ; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2171 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2172 ; AVX1-NEXT:    retq
2173 ;
2174 ; AVX2-LABEL: test74:
2175 ; AVX2:       # %bb.0: # %entry
2176 ; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2177 ; AVX2-NEXT:    retq
2178 ;
2179 ; AVX512F-LABEL: test74:
2180 ; AVX512F:       # %bb.0: # %entry
2181 ; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2182 ; AVX512F-NEXT:    retq
2183 entry:
2184   %cmp = icmp sle <32 x i8> %a, %b
2185   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2186   ret <32 x i8> %sel
2187 }
2188
2189 define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2190 ; SSE2-LABEL: test75:
2191 ; SSE2:       # %bb.0: # %entry
2192 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2193 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2194 ; SSE2-NEXT:    pand %xmm4, %xmm0
2195 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2196 ; SSE2-NEXT:    por %xmm4, %xmm0
2197 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2198 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2199 ; SSE2-NEXT:    pand %xmm2, %xmm1
2200 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2201 ; SSE2-NEXT:    por %xmm2, %xmm1
2202 ; SSE2-NEXT:    retq
2203 ;
2204 ; SSE4-LABEL: test75:
2205 ; SSE4:       # %bb.0: # %entry
2206 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
2207 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
2208 ; SSE4-NEXT:    retq
2209 ;
2210 ; AVX1-LABEL: test75:
2211 ; AVX1:       # %bb.0: # %entry
2212 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2213 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2214 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2215 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2216 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2217 ; AVX1-NEXT:    retq
2218 ;
2219 ; AVX2-LABEL: test75:
2220 ; AVX2:       # %bb.0: # %entry
2221 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2222 ; AVX2-NEXT:    retq
2223 ;
2224 ; AVX512F-LABEL: test75:
2225 ; AVX512F:       # %bb.0: # %entry
2226 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2227 ; AVX512F-NEXT:    retq
2228 entry:
2229   %cmp = icmp sgt <32 x i8> %a, %b
2230   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2231   ret <32 x i8> %sel
2232 }
2233
2234 define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2235 ; SSE2-LABEL: test76:
2236 ; SSE2:       # %bb.0: # %entry
2237 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2238 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2239 ; SSE2-NEXT:    pand %xmm4, %xmm0
2240 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2241 ; SSE2-NEXT:    por %xmm4, %xmm0
2242 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2243 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2244 ; SSE2-NEXT:    pand %xmm2, %xmm1
2245 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2246 ; SSE2-NEXT:    por %xmm2, %xmm1
2247 ; SSE2-NEXT:    retq
2248 ;
2249 ; SSE4-LABEL: test76:
2250 ; SSE4:       # %bb.0: # %entry
2251 ; SSE4-NEXT:    pminsb %xmm2, %xmm0
2252 ; SSE4-NEXT:    pminsb %xmm3, %xmm1
2253 ; SSE4-NEXT:    retq
2254 ;
2255 ; AVX1-LABEL: test76:
2256 ; AVX1:       # %bb.0: # %entry
2257 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2258 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2259 ; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2260 ; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2261 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2262 ; AVX1-NEXT:    retq
2263 ;
2264 ; AVX2-LABEL: test76:
2265 ; AVX2:       # %bb.0: # %entry
2266 ; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2267 ; AVX2-NEXT:    retq
2268 ;
2269 ; AVX512F-LABEL: test76:
2270 ; AVX512F:       # %bb.0: # %entry
2271 ; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2272 ; AVX512F-NEXT:    retq
2273 entry:
2274   %cmp = icmp sge <32 x i8> %a, %b
2275   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2276   ret <32 x i8> %sel
2277 }
2278
2279 define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2280 ; SSE-LABEL: test77:
2281 ; SSE:       # %bb.0: # %entry
2282 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
2283 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
2284 ; SSE-NEXT:    retq
2285 ;
2286 ; AVX1-LABEL: test77:
2287 ; AVX1:       # %bb.0: # %entry
2288 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2289 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2290 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2291 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2292 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2293 ; AVX1-NEXT:    retq
2294 ;
2295 ; AVX2-LABEL: test77:
2296 ; AVX2:       # %bb.0: # %entry
2297 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2298 ; AVX2-NEXT:    retq
2299 ;
2300 ; AVX512F-LABEL: test77:
2301 ; AVX512F:       # %bb.0: # %entry
2302 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2303 ; AVX512F-NEXT:    retq
2304 entry:
2305   %cmp = icmp ult <32 x i8> %a, %b
2306   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2307   ret <32 x i8> %sel
2308 }
2309
2310 define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2311 ; SSE-LABEL: test78:
2312 ; SSE:       # %bb.0: # %entry
2313 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
2314 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
2315 ; SSE-NEXT:    retq
2316 ;
2317 ; AVX1-LABEL: test78:
2318 ; AVX1:       # %bb.0: # %entry
2319 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2320 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2321 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2322 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2323 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2324 ; AVX1-NEXT:    retq
2325 ;
2326 ; AVX2-LABEL: test78:
2327 ; AVX2:       # %bb.0: # %entry
2328 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2329 ; AVX2-NEXT:    retq
2330 ;
2331 ; AVX512F-LABEL: test78:
2332 ; AVX512F:       # %bb.0: # %entry
2333 ; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2334 ; AVX512F-NEXT:    retq
2335 entry:
2336   %cmp = icmp ule <32 x i8> %a, %b
2337   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2338   ret <32 x i8> %sel
2339 }
2340
2341 define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2342 ; SSE-LABEL: test79:
2343 ; SSE:       # %bb.0: # %entry
2344 ; SSE-NEXT:    pminub %xmm2, %xmm0
2345 ; SSE-NEXT:    pminub %xmm3, %xmm1
2346 ; SSE-NEXT:    retq
2347 ;
2348 ; AVX1-LABEL: test79:
2349 ; AVX1:       # %bb.0: # %entry
2350 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2351 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2352 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2353 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2354 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2355 ; AVX1-NEXT:    retq
2356 ;
2357 ; AVX2-LABEL: test79:
2358 ; AVX2:       # %bb.0: # %entry
2359 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2360 ; AVX2-NEXT:    retq
2361 ;
2362 ; AVX512F-LABEL: test79:
2363 ; AVX512F:       # %bb.0: # %entry
2364 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2365 ; AVX512F-NEXT:    retq
2366 entry:
2367   %cmp = icmp ugt <32 x i8> %a, %b
2368   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2369   ret <32 x i8> %sel
2370 }
2371
2372 define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2373 ; SSE-LABEL: test80:
2374 ; SSE:       # %bb.0: # %entry
2375 ; SSE-NEXT:    pminub %xmm2, %xmm0
2376 ; SSE-NEXT:    pminub %xmm3, %xmm1
2377 ; SSE-NEXT:    retq
2378 ;
2379 ; AVX1-LABEL: test80:
2380 ; AVX1:       # %bb.0: # %entry
2381 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2382 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2383 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2384 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2385 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2386 ; AVX1-NEXT:    retq
2387 ;
2388 ; AVX2-LABEL: test80:
2389 ; AVX2:       # %bb.0: # %entry
2390 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2391 ; AVX2-NEXT:    retq
2392 ;
2393 ; AVX512F-LABEL: test80:
2394 ; AVX512F:       # %bb.0: # %entry
2395 ; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2396 ; AVX512F-NEXT:    retq
2397 entry:
2398   %cmp = icmp uge <32 x i8> %a, %b
2399   %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2400   ret <32 x i8> %sel
2401 }
2402
2403 define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2404 ; SSE-LABEL: test81:
2405 ; SSE:       # %bb.0: # %entry
2406 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2407 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2408 ; SSE-NEXT:    retq
2409 ;
2410 ; AVX1-LABEL: test81:
2411 ; AVX1:       # %bb.0: # %entry
2412 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2413 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2414 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2415 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2416 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2417 ; AVX1-NEXT:    retq
2418 ;
2419 ; AVX2-LABEL: test81:
2420 ; AVX2:       # %bb.0: # %entry
2421 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2422 ; AVX2-NEXT:    retq
2423 ;
2424 ; AVX512F-LABEL: test81:
2425 ; AVX512F:       # %bb.0: # %entry
2426 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2427 ; AVX512F-NEXT:    retq
2428 entry:
2429   %cmp = icmp slt <16 x i16> %a, %b
2430   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2431   ret <16 x i16> %sel
2432 }
2433
2434 define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2435 ; SSE-LABEL: test82:
2436 ; SSE:       # %bb.0: # %entry
2437 ; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2438 ; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2439 ; SSE-NEXT:    retq
2440 ;
2441 ; AVX1-LABEL: test82:
2442 ; AVX1:       # %bb.0: # %entry
2443 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2444 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2445 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2446 ; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2447 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2448 ; AVX1-NEXT:    retq
2449 ;
2450 ; AVX2-LABEL: test82:
2451 ; AVX2:       # %bb.0: # %entry
2452 ; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2453 ; AVX2-NEXT:    retq
2454 ;
2455 ; AVX512F-LABEL: test82:
2456 ; AVX512F:       # %bb.0: # %entry
2457 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2458 ; AVX512F-NEXT:    retq
2459 entry:
2460   %cmp = icmp sle <16 x i16> %a, %b
2461   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2462   ret <16 x i16> %sel
2463 }
2464
2465 define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2466 ; SSE-LABEL: test83:
2467 ; SSE:       # %bb.0: # %entry
2468 ; SSE-NEXT:    pminsw %xmm2, %xmm0
2469 ; SSE-NEXT:    pminsw %xmm3, %xmm1
2470 ; SSE-NEXT:    retq
2471 ;
2472 ; AVX1-LABEL: test83:
2473 ; AVX1:       # %bb.0: # %entry
2474 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2475 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2476 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2477 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2478 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2479 ; AVX1-NEXT:    retq
2480 ;
2481 ; AVX2-LABEL: test83:
2482 ; AVX2:       # %bb.0: # %entry
2483 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2484 ; AVX2-NEXT:    retq
2485 ;
2486 ; AVX512F-LABEL: test83:
2487 ; AVX512F:       # %bb.0: # %entry
2488 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2489 ; AVX512F-NEXT:    retq
2490 entry:
2491   %cmp = icmp sgt <16 x i16> %a, %b
2492   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2493   ret <16 x i16> %sel
2494 }
2495
2496 define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2497 ; SSE-LABEL: test84:
2498 ; SSE:       # %bb.0: # %entry
2499 ; SSE-NEXT:    pminsw %xmm2, %xmm0
2500 ; SSE-NEXT:    pminsw %xmm3, %xmm1
2501 ; SSE-NEXT:    retq
2502 ;
2503 ; AVX1-LABEL: test84:
2504 ; AVX1:       # %bb.0: # %entry
2505 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2506 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2507 ; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2508 ; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2509 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2510 ; AVX1-NEXT:    retq
2511 ;
2512 ; AVX2-LABEL: test84:
2513 ; AVX2:       # %bb.0: # %entry
2514 ; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2515 ; AVX2-NEXT:    retq
2516 ;
2517 ; AVX512F-LABEL: test84:
2518 ; AVX512F:       # %bb.0: # %entry
2519 ; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2520 ; AVX512F-NEXT:    retq
2521 entry:
2522   %cmp = icmp sge <16 x i16> %a, %b
2523   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2524   ret <16 x i16> %sel
2525 }
2526
2527 define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2528 ; SSE2-LABEL: test85:
2529 ; SSE2:       # %bb.0: # %entry
2530 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2531 ; SSE2-NEXT:    pxor %xmm4, %xmm2
2532 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2533 ; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
2534 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2535 ; SSE2-NEXT:    pxor %xmm4, %xmm3
2536 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2537 ; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
2538 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2539 ; SSE2-NEXT:    retq
2540 ;
2541 ; SSE4-LABEL: test85:
2542 ; SSE4:       # %bb.0: # %entry
2543 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2544 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2545 ; SSE4-NEXT:    retq
2546 ;
2547 ; AVX1-LABEL: test85:
2548 ; AVX1:       # %bb.0: # %entry
2549 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2550 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2551 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2552 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2553 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2554 ; AVX1-NEXT:    retq
2555 ;
2556 ; AVX2-LABEL: test85:
2557 ; AVX2:       # %bb.0: # %entry
2558 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2559 ; AVX2-NEXT:    retq
2560 ;
2561 ; AVX512F-LABEL: test85:
2562 ; AVX512F:       # %bb.0: # %entry
2563 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2564 ; AVX512F-NEXT:    retq
2565 entry:
2566   %cmp = icmp ult <16 x i16> %a, %b
2567   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2568   ret <16 x i16> %sel
2569 }
2570
2571 define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2572 ; SSE2-LABEL: test86:
2573 ; SSE2:       # %bb.0: # %entry
2574 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2575 ; SSE2-NEXT:    pxor %xmm4, %xmm2
2576 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2577 ; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
2578 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2579 ; SSE2-NEXT:    pxor %xmm4, %xmm3
2580 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2581 ; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
2582 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2583 ; SSE2-NEXT:    retq
2584 ;
2585 ; SSE4-LABEL: test86:
2586 ; SSE4:       # %bb.0: # %entry
2587 ; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2588 ; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2589 ; SSE4-NEXT:    retq
2590 ;
2591 ; AVX1-LABEL: test86:
2592 ; AVX1:       # %bb.0: # %entry
2593 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2594 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2595 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2596 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2597 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2598 ; AVX1-NEXT:    retq
2599 ;
2600 ; AVX2-LABEL: test86:
2601 ; AVX2:       # %bb.0: # %entry
2602 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2603 ; AVX2-NEXT:    retq
2604 ;
2605 ; AVX512F-LABEL: test86:
2606 ; AVX512F:       # %bb.0: # %entry
2607 ; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2608 ; AVX512F-NEXT:    retq
2609 entry:
2610   %cmp = icmp ule <16 x i16> %a, %b
2611   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2612   ret <16 x i16> %sel
2613 }
2614
2615 define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2616 ; SSE2-LABEL: test87:
2617 ; SSE2:       # %bb.0: # %entry
2618 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2619 ; SSE2-NEXT:    pxor %xmm4, %xmm2
2620 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2621 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
2622 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2623 ; SSE2-NEXT:    pxor %xmm4, %xmm3
2624 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2625 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
2626 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2627 ; SSE2-NEXT:    retq
2628 ;
2629 ; SSE4-LABEL: test87:
2630 ; SSE4:       # %bb.0: # %entry
2631 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
2632 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
2633 ; SSE4-NEXT:    retq
2634 ;
2635 ; AVX1-LABEL: test87:
2636 ; AVX1:       # %bb.0: # %entry
2637 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2638 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2639 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2640 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2641 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2642 ; AVX1-NEXT:    retq
2643 ;
2644 ; AVX2-LABEL: test87:
2645 ; AVX2:       # %bb.0: # %entry
2646 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2647 ; AVX2-NEXT:    retq
2648 ;
2649 ; AVX512F-LABEL: test87:
2650 ; AVX512F:       # %bb.0: # %entry
2651 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2652 ; AVX512F-NEXT:    retq
2653 entry:
2654   %cmp = icmp ugt <16 x i16> %a, %b
2655   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2656   ret <16 x i16> %sel
2657 }
2658
2659 define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2660 ; SSE2-LABEL: test88:
2661 ; SSE2:       # %bb.0: # %entry
2662 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2663 ; SSE2-NEXT:    pxor %xmm4, %xmm2
2664 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2665 ; SSE2-NEXT:    pminsw %xmm2, %xmm0
2666 ; SSE2-NEXT:    pxor %xmm4, %xmm0
2667 ; SSE2-NEXT:    pxor %xmm4, %xmm3
2668 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2669 ; SSE2-NEXT:    pminsw %xmm3, %xmm1
2670 ; SSE2-NEXT:    pxor %xmm4, %xmm1
2671 ; SSE2-NEXT:    retq
2672 ;
2673 ; SSE4-LABEL: test88:
2674 ; SSE4:       # %bb.0: # %entry
2675 ; SSE4-NEXT:    pminuw %xmm2, %xmm0
2676 ; SSE4-NEXT:    pminuw %xmm3, %xmm1
2677 ; SSE4-NEXT:    retq
2678 ;
2679 ; AVX1-LABEL: test88:
2680 ; AVX1:       # %bb.0: # %entry
2681 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2682 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2683 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2684 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2685 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2686 ; AVX1-NEXT:    retq
2687 ;
2688 ; AVX2-LABEL: test88:
2689 ; AVX2:       # %bb.0: # %entry
2690 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2691 ; AVX2-NEXT:    retq
2692 ;
2693 ; AVX512F-LABEL: test88:
2694 ; AVX512F:       # %bb.0: # %entry
2695 ; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2696 ; AVX512F-NEXT:    retq
2697 entry:
2698   %cmp = icmp uge <16 x i16> %a, %b
2699   %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2700   ret <16 x i16> %sel
2701 }
2702
2703 define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2704 ; SSE2-LABEL: test89:
2705 ; SSE2:       # %bb.0: # %entry
2706 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2707 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2708 ; SSE2-NEXT:    pand %xmm4, %xmm0
2709 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2710 ; SSE2-NEXT:    por %xmm0, %xmm4
2711 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2712 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2713 ; SSE2-NEXT:    pand %xmm2, %xmm1
2714 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2715 ; SSE2-NEXT:    por %xmm1, %xmm2
2716 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
2717 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
2718 ; SSE2-NEXT:    retq
2719 ;
2720 ; SSE4-LABEL: test89:
2721 ; SSE4:       # %bb.0: # %entry
2722 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2723 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2724 ; SSE4-NEXT:    retq
2725 ;
2726 ; AVX1-LABEL: test89:
2727 ; AVX1:       # %bb.0: # %entry
2728 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2729 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2730 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2731 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2732 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2733 ; AVX1-NEXT:    retq
2734 ;
2735 ; AVX2-LABEL: test89:
2736 ; AVX2:       # %bb.0: # %entry
2737 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2738 ; AVX2-NEXT:    retq
2739 ;
2740 ; AVX512F-LABEL: test89:
2741 ; AVX512F:       # %bb.0: # %entry
2742 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2743 ; AVX512F-NEXT:    retq
2744 entry:
2745   %cmp = icmp slt <8 x i32> %a, %b
2746   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2747   ret <8 x i32> %sel
2748 }
2749
2750 define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2751 ; SSE2-LABEL: test90:
2752 ; SSE2:       # %bb.0: # %entry
2753 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2754 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2755 ; SSE2-NEXT:    pand %xmm4, %xmm0
2756 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2757 ; SSE2-NEXT:    por %xmm0, %xmm4
2758 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
2759 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2760 ; SSE2-NEXT:    pand %xmm2, %xmm1
2761 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2762 ; SSE2-NEXT:    por %xmm1, %xmm2
2763 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
2764 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
2765 ; SSE2-NEXT:    retq
2766 ;
2767 ; SSE4-LABEL: test90:
2768 ; SSE4:       # %bb.0: # %entry
2769 ; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2770 ; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2771 ; SSE4-NEXT:    retq
2772 ;
2773 ; AVX1-LABEL: test90:
2774 ; AVX1:       # %bb.0: # %entry
2775 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2776 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2777 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2778 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2779 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2780 ; AVX1-NEXT:    retq
2781 ;
2782 ; AVX2-LABEL: test90:
2783 ; AVX2:       # %bb.0: # %entry
2784 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2785 ; AVX2-NEXT:    retq
2786 ;
2787 ; AVX512F-LABEL: test90:
2788 ; AVX512F:       # %bb.0: # %entry
2789 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2790 ; AVX512F-NEXT:    retq
2791 entry:
2792   %cmp = icmp sle <8 x i32> %a, %b
2793   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2794   ret <8 x i32> %sel
2795 }
2796
2797 define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2798 ; SSE2-LABEL: test91:
2799 ; SSE2:       # %bb.0: # %entry
2800 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2801 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2802 ; SSE2-NEXT:    pand %xmm4, %xmm0
2803 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2804 ; SSE2-NEXT:    por %xmm4, %xmm0
2805 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2806 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2807 ; SSE2-NEXT:    pand %xmm2, %xmm1
2808 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2809 ; SSE2-NEXT:    por %xmm2, %xmm1
2810 ; SSE2-NEXT:    retq
2811 ;
2812 ; SSE4-LABEL: test91:
2813 ; SSE4:       # %bb.0: # %entry
2814 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
2815 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
2816 ; SSE4-NEXT:    retq
2817 ;
2818 ; AVX1-LABEL: test91:
2819 ; AVX1:       # %bb.0: # %entry
2820 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2821 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2822 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2823 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2824 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2825 ; AVX1-NEXT:    retq
2826 ;
2827 ; AVX2-LABEL: test91:
2828 ; AVX2:       # %bb.0: # %entry
2829 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2830 ; AVX2-NEXT:    retq
2831 ;
2832 ; AVX512F-LABEL: test91:
2833 ; AVX512F:       # %bb.0: # %entry
2834 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2835 ; AVX512F-NEXT:    retq
2836 entry:
2837   %cmp = icmp sgt <8 x i32> %a, %b
2838   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2839   ret <8 x i32> %sel
2840 }
2841
2842 define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
2843 ; SSE2-LABEL: test92:
2844 ; SSE2:       # %bb.0: # %entry
2845 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
2846 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2847 ; SSE2-NEXT:    pand %xmm4, %xmm0
2848 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2849 ; SSE2-NEXT:    por %xmm4, %xmm0
2850 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
2851 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2852 ; SSE2-NEXT:    pand %xmm2, %xmm1
2853 ; SSE2-NEXT:    pandn %xmm3, %xmm2
2854 ; SSE2-NEXT:    por %xmm2, %xmm1
2855 ; SSE2-NEXT:    retq
2856 ;
2857 ; SSE4-LABEL: test92:
2858 ; SSE4:       # %bb.0: # %entry
2859 ; SSE4-NEXT:    pminsd %xmm2, %xmm0
2860 ; SSE4-NEXT:    pminsd %xmm3, %xmm1
2861 ; SSE4-NEXT:    retq
2862 ;
2863 ; AVX1-LABEL: test92:
2864 ; AVX1:       # %bb.0: # %entry
2865 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2866 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2867 ; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2868 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2869 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2870 ; AVX1-NEXT:    retq
2871 ;
2872 ; AVX2-LABEL: test92:
2873 ; AVX2:       # %bb.0: # %entry
2874 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2875 ; AVX2-NEXT:    retq
2876 ;
2877 ; AVX512F-LABEL: test92:
2878 ; AVX512F:       # %bb.0: # %entry
2879 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2880 ; AVX512F-NEXT:    retq
2881 entry:
2882   %cmp = icmp sge <8 x i32> %a, %b
2883   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2884   ret <8 x i32> %sel
2885 }
2886
2887 define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
2888 ; SSE2-LABEL: test93:
2889 ; SSE2:       # %bb.0: # %entry
2890 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
2891 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
2892 ; SSE2-NEXT:    pxor %xmm5, %xmm6
2893 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2894 ; SSE2-NEXT:    pxor %xmm5, %xmm4
2895 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
2896 ; SSE2-NEXT:    pand %xmm4, %xmm0
2897 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2898 ; SSE2-NEXT:    por %xmm0, %xmm4
2899 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
2900 ; SSE2-NEXT:    pxor %xmm5, %xmm0
2901 ; SSE2-NEXT:    pxor %xmm1, %xmm5
2902 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
2903 ; SSE2-NEXT:    pand %xmm5, %xmm1
2904 ; SSE2-NEXT:    pandn %xmm3, %xmm5
2905 ; SSE2-NEXT:    por %xmm5, %xmm1
2906 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
2907 ; SSE2-NEXT:    retq
2908 ;
2909 ; SSE4-LABEL: test93:
2910 ; SSE4:       # %bb.0: # %entry
2911 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2912 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2913 ; SSE4-NEXT:    retq
2914 ;
2915 ; AVX1-LABEL: test93:
2916 ; AVX1:       # %bb.0: # %entry
2917 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2918 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2919 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2920 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2921 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2922 ; AVX1-NEXT:    retq
2923 ;
2924 ; AVX2-LABEL: test93:
2925 ; AVX2:       # %bb.0: # %entry
2926 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2927 ; AVX2-NEXT:    retq
2928 ;
2929 ; AVX512F-LABEL: test93:
2930 ; AVX512F:       # %bb.0: # %entry
2931 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2932 ; AVX512F-NEXT:    retq
2933 entry:
2934   %cmp = icmp ult <8 x i32> %a, %b
2935   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2936   ret <8 x i32> %sel
2937 }
2938
2939 define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
2940 ; SSE2-LABEL: test94:
2941 ; SSE2:       # %bb.0: # %entry
2942 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
2943 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
2944 ; SSE2-NEXT:    pxor %xmm5, %xmm6
2945 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
2946 ; SSE2-NEXT:    pxor %xmm5, %xmm4
2947 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
2948 ; SSE2-NEXT:    pand %xmm4, %xmm0
2949 ; SSE2-NEXT:    pandn %xmm2, %xmm4
2950 ; SSE2-NEXT:    por %xmm0, %xmm4
2951 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
2952 ; SSE2-NEXT:    pxor %xmm5, %xmm0
2953 ; SSE2-NEXT:    pxor %xmm1, %xmm5
2954 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
2955 ; SSE2-NEXT:    pand %xmm5, %xmm1
2956 ; SSE2-NEXT:    pandn %xmm3, %xmm5
2957 ; SSE2-NEXT:    por %xmm5, %xmm1
2958 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
2959 ; SSE2-NEXT:    retq
2960 ;
2961 ; SSE4-LABEL: test94:
2962 ; SSE4:       # %bb.0: # %entry
2963 ; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2964 ; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2965 ; SSE4-NEXT:    retq
2966 ;
2967 ; AVX1-LABEL: test94:
2968 ; AVX1:       # %bb.0: # %entry
2969 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2970 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2971 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2972 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2973 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2974 ; AVX1-NEXT:    retq
2975 ;
2976 ; AVX2-LABEL: test94:
2977 ; AVX2:       # %bb.0: # %entry
2978 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2979 ; AVX2-NEXT:    retq
2980 ;
2981 ; AVX512F-LABEL: test94:
2982 ; AVX512F:       # %bb.0: # %entry
2983 ; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2984 ; AVX512F-NEXT:    retq
2985 entry:
2986   %cmp = icmp ule <8 x i32> %a, %b
2987   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2988   ret <8 x i32> %sel
2989 }
2990
2991 define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
2992 ; SSE2-LABEL: test95:
2993 ; SSE2:       # %bb.0: # %entry
2994 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2995 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
2996 ; SSE2-NEXT:    pxor %xmm4, %xmm5
2997 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
2998 ; SSE2-NEXT:    pxor %xmm4, %xmm6
2999 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
3000 ; SSE2-NEXT:    pand %xmm6, %xmm0
3001 ; SSE2-NEXT:    pandn %xmm2, %xmm6
3002 ; SSE2-NEXT:    por %xmm6, %xmm0
3003 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
3004 ; SSE2-NEXT:    pxor %xmm4, %xmm2
3005 ; SSE2-NEXT:    pxor %xmm3, %xmm4
3006 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3007 ; SSE2-NEXT:    pand %xmm4, %xmm1
3008 ; SSE2-NEXT:    pandn %xmm3, %xmm4
3009 ; SSE2-NEXT:    por %xmm4, %xmm1
3010 ; SSE2-NEXT:    retq
3011 ;
3012 ; SSE4-LABEL: test95:
3013 ; SSE4:       # %bb.0: # %entry
3014 ; SSE4-NEXT:    pminud %xmm2, %xmm0
3015 ; SSE4-NEXT:    pminud %xmm3, %xmm1
3016 ; SSE4-NEXT:    retq
3017 ;
3018 ; AVX1-LABEL: test95:
3019 ; AVX1:       # %bb.0: # %entry
3020 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3021 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3022 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
3023 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
3024 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3025 ; AVX1-NEXT:    retq
3026 ;
3027 ; AVX2-LABEL: test95:
3028 ; AVX2:       # %bb.0: # %entry
3029 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3030 ; AVX2-NEXT:    retq
3031 ;
3032 ; AVX512F-LABEL: test95:
3033 ; AVX512F:       # %bb.0: # %entry
3034 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3035 ; AVX512F-NEXT:    retq
3036 entry:
3037   %cmp = icmp ugt <8 x i32> %a, %b
3038   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3039   ret <8 x i32> %sel
3040 }
3041
3042 define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
3043 ; SSE2-LABEL: test96:
3044 ; SSE2:       # %bb.0: # %entry
3045 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
3046 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
3047 ; SSE2-NEXT:    pxor %xmm4, %xmm5
3048 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
3049 ; SSE2-NEXT:    pxor %xmm4, %xmm6
3050 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
3051 ; SSE2-NEXT:    pand %xmm6, %xmm0
3052 ; SSE2-NEXT:    pandn %xmm2, %xmm6
3053 ; SSE2-NEXT:    por %xmm6, %xmm0
3054 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
3055 ; SSE2-NEXT:    pxor %xmm4, %xmm2
3056 ; SSE2-NEXT:    pxor %xmm3, %xmm4
3057 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3058 ; SSE2-NEXT:    pand %xmm4, %xmm1
3059 ; SSE2-NEXT:    pandn %xmm3, %xmm4
3060 ; SSE2-NEXT:    por %xmm4, %xmm1
3061 ; SSE2-NEXT:    retq
3062 ;
3063 ; SSE4-LABEL: test96:
3064 ; SSE4:       # %bb.0: # %entry
3065 ; SSE4-NEXT:    pminud %xmm2, %xmm0
3066 ; SSE4-NEXT:    pminud %xmm3, %xmm1
3067 ; SSE4-NEXT:    retq
3068 ;
3069 ; AVX1-LABEL: test96:
3070 ; AVX1:       # %bb.0: # %entry
3071 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3072 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3073 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
3074 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
3075 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3076 ; AVX1-NEXT:    retq
3077 ;
3078 ; AVX2-LABEL: test96:
3079 ; AVX2:       # %bb.0: # %entry
3080 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3081 ; AVX2-NEXT:    retq
3082 ;
3083 ; AVX512F-LABEL: test96:
3084 ; AVX512F:       # %bb.0: # %entry
3085 ; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3086 ; AVX512F-NEXT:    retq
3087 entry:
3088   %cmp = icmp uge <8 x i32> %a, %b
3089   %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3090   ret <8 x i32> %sel
3091 }
3092
3093 ; ----------------------------
3094
3095 define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3096 ; SSE2-LABEL: test97:
3097 ; SSE2:       # %bb.0: # %entry
3098 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
3099 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3100 ; SSE2-NEXT:    pand %xmm8, %xmm0
3101 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3102 ; SSE2-NEXT:    por %xmm8, %xmm0
3103 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
3104 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3105 ; SSE2-NEXT:    pand %xmm4, %xmm1
3106 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3107 ; SSE2-NEXT:    por %xmm4, %xmm1
3108 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
3109 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3110 ; SSE2-NEXT:    pand %xmm4, %xmm2
3111 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3112 ; SSE2-NEXT:    por %xmm4, %xmm2
3113 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
3114 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3115 ; SSE2-NEXT:    pand %xmm4, %xmm3
3116 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3117 ; SSE2-NEXT:    por %xmm4, %xmm3
3118 ; SSE2-NEXT:    retq
3119 ;
3120 ; SSE4-LABEL: test97:
3121 ; SSE4:       # %bb.0: # %entry
3122 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
3123 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
3124 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
3125 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
3126 ; SSE4-NEXT:    retq
3127 ;
3128 ; AVX1-LABEL: test97:
3129 ; AVX1:       # %bb.0: # %entry
3130 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3131 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3132 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3133 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3134 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3135 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3136 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3137 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3138 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3139 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3140 ; AVX1-NEXT:    retq
3141 ;
3142 ; AVX2-LABEL: test97:
3143 ; AVX2:       # %bb.0: # %entry
3144 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3145 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3146 ; AVX2-NEXT:    retq
3147 ;
3148 ; AVX512BW-LABEL: test97:
3149 ; AVX512BW:       # %bb.0: # %entry
3150 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3151 ; AVX512BW-NEXT:    retq
3152 entry:
3153   %cmp = icmp slt <64 x i8> %a, %b
3154   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3155   ret <64 x i8> %sel
3156 }
3157
3158 define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3159 ; SSE2-LABEL: test98:
3160 ; SSE2:       # %bb.0: # %entry
3161 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
3162 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3163 ; SSE2-NEXT:    pand %xmm8, %xmm0
3164 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3165 ; SSE2-NEXT:    por %xmm8, %xmm0
3166 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
3167 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3168 ; SSE2-NEXT:    pand %xmm4, %xmm1
3169 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3170 ; SSE2-NEXT:    por %xmm4, %xmm1
3171 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
3172 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3173 ; SSE2-NEXT:    pand %xmm4, %xmm2
3174 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3175 ; SSE2-NEXT:    por %xmm4, %xmm2
3176 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
3177 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3178 ; SSE2-NEXT:    pand %xmm4, %xmm3
3179 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3180 ; SSE2-NEXT:    por %xmm4, %xmm3
3181 ; SSE2-NEXT:    retq
3182 ;
3183 ; SSE4-LABEL: test98:
3184 ; SSE4:       # %bb.0: # %entry
3185 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
3186 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
3187 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
3188 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
3189 ; SSE4-NEXT:    retq
3190 ;
3191 ; AVX1-LABEL: test98:
3192 ; AVX1:       # %bb.0: # %entry
3193 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3194 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3195 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3196 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3197 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3198 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3199 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3200 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3201 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3202 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3203 ; AVX1-NEXT:    retq
3204 ;
3205 ; AVX2-LABEL: test98:
3206 ; AVX2:       # %bb.0: # %entry
3207 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3208 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3209 ; AVX2-NEXT:    retq
3210 ;
3211 ; AVX512BW-LABEL: test98:
3212 ; AVX512BW:       # %bb.0: # %entry
3213 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3214 ; AVX512BW-NEXT:    retq
3215 entry:
3216   %cmp = icmp sle <64 x i8> %a, %b
3217   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3218   ret <64 x i8> %sel
3219 }
3220
3221 define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3222 ; SSE2-LABEL: test99:
3223 ; SSE2:       # %bb.0: # %entry
3224 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
3225 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3226 ; SSE2-NEXT:    pand %xmm8, %xmm0
3227 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3228 ; SSE2-NEXT:    por %xmm0, %xmm8
3229 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
3230 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3231 ; SSE2-NEXT:    pand %xmm4, %xmm1
3232 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3233 ; SSE2-NEXT:    por %xmm1, %xmm4
3234 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
3235 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
3236 ; SSE2-NEXT:    pand %xmm5, %xmm2
3237 ; SSE2-NEXT:    pandn %xmm6, %xmm5
3238 ; SSE2-NEXT:    por %xmm2, %xmm5
3239 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
3240 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
3241 ; SSE2-NEXT:    pand %xmm6, %xmm3
3242 ; SSE2-NEXT:    pandn %xmm7, %xmm6
3243 ; SSE2-NEXT:    por %xmm3, %xmm6
3244 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
3245 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
3246 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
3247 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
3248 ; SSE2-NEXT:    retq
3249 ;
3250 ; SSE4-LABEL: test99:
3251 ; SSE4:       # %bb.0: # %entry
3252 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3253 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3254 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3255 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3256 ; SSE4-NEXT:    retq
3257 ;
3258 ; AVX1-LABEL: test99:
3259 ; AVX1:       # %bb.0: # %entry
3260 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3261 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3262 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3263 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3264 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3265 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3266 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3267 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3268 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3269 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3270 ; AVX1-NEXT:    retq
3271 ;
3272 ; AVX2-LABEL: test99:
3273 ; AVX2:       # %bb.0: # %entry
3274 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3275 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3276 ; AVX2-NEXT:    retq
3277 ;
3278 ; AVX512BW-LABEL: test99:
3279 ; AVX512BW:       # %bb.0: # %entry
3280 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3281 ; AVX512BW-NEXT:    retq
3282 entry:
3283   %cmp = icmp sgt <64 x i8> %a, %b
3284   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3285   ret <64 x i8> %sel
3286 }
3287
3288 define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3289 ; SSE2-LABEL: test100:
3290 ; SSE2:       # %bb.0: # %entry
3291 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
3292 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3293 ; SSE2-NEXT:    pand %xmm8, %xmm0
3294 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3295 ; SSE2-NEXT:    por %xmm0, %xmm8
3296 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
3297 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3298 ; SSE2-NEXT:    pand %xmm4, %xmm1
3299 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3300 ; SSE2-NEXT:    por %xmm1, %xmm4
3301 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
3302 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
3303 ; SSE2-NEXT:    pand %xmm5, %xmm2
3304 ; SSE2-NEXT:    pandn %xmm6, %xmm5
3305 ; SSE2-NEXT:    por %xmm2, %xmm5
3306 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
3307 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
3308 ; SSE2-NEXT:    pand %xmm6, %xmm3
3309 ; SSE2-NEXT:    pandn %xmm7, %xmm6
3310 ; SSE2-NEXT:    por %xmm3, %xmm6
3311 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
3312 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
3313 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
3314 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
3315 ; SSE2-NEXT:    retq
3316 ;
3317 ; SSE4-LABEL: test100:
3318 ; SSE4:       # %bb.0: # %entry
3319 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3320 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3321 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3322 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3323 ; SSE4-NEXT:    retq
3324 ;
3325 ; AVX1-LABEL: test100:
3326 ; AVX1:       # %bb.0: # %entry
3327 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3328 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3329 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3330 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3331 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3332 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3333 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3334 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3335 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3336 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3337 ; AVX1-NEXT:    retq
3338 ;
3339 ; AVX2-LABEL: test100:
3340 ; AVX2:       # %bb.0: # %entry
3341 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3342 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3343 ; AVX2-NEXT:    retq
3344 ;
3345 ; AVX512BW-LABEL: test100:
3346 ; AVX512BW:       # %bb.0: # %entry
3347 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3348 ; AVX512BW-NEXT:    retq
3349 entry:
3350   %cmp = icmp sge <64 x i8> %a, %b
3351   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3352   ret <64 x i8> %sel
3353 }
3354
3355 define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3356 ; SSE-LABEL: test101:
3357 ; SSE:       # %bb.0: # %entry
3358 ; SSE-NEXT:    pminub %xmm4, %xmm0
3359 ; SSE-NEXT:    pminub %xmm5, %xmm1
3360 ; SSE-NEXT:    pminub %xmm6, %xmm2
3361 ; SSE-NEXT:    pminub %xmm7, %xmm3
3362 ; SSE-NEXT:    retq
3363 ;
3364 ; AVX1-LABEL: test101:
3365 ; AVX1:       # %bb.0: # %entry
3366 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3367 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3368 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3369 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3370 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3371 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3372 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3373 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3374 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3375 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3376 ; AVX1-NEXT:    retq
3377 ;
3378 ; AVX2-LABEL: test101:
3379 ; AVX2:       # %bb.0: # %entry
3380 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3381 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3382 ; AVX2-NEXT:    retq
3383 ;
3384 ; AVX512BW-LABEL: test101:
3385 ; AVX512BW:       # %bb.0: # %entry
3386 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3387 ; AVX512BW-NEXT:    retq
3388 entry:
3389   %cmp = icmp ult <64 x i8> %a, %b
3390   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3391   ret <64 x i8> %sel
3392 }
3393
3394 define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3395 ; SSE-LABEL: test102:
3396 ; SSE:       # %bb.0: # %entry
3397 ; SSE-NEXT:    pminub %xmm4, %xmm0
3398 ; SSE-NEXT:    pminub %xmm5, %xmm1
3399 ; SSE-NEXT:    pminub %xmm6, %xmm2
3400 ; SSE-NEXT:    pminub %xmm7, %xmm3
3401 ; SSE-NEXT:    retq
3402 ;
3403 ; AVX1-LABEL: test102:
3404 ; AVX1:       # %bb.0: # %entry
3405 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3406 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3407 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3408 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3409 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3410 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3411 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3412 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3413 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3414 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3415 ; AVX1-NEXT:    retq
3416 ;
3417 ; AVX2-LABEL: test102:
3418 ; AVX2:       # %bb.0: # %entry
3419 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3420 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3421 ; AVX2-NEXT:    retq
3422 ;
3423 ; AVX512BW-LABEL: test102:
3424 ; AVX512BW:       # %bb.0: # %entry
3425 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3426 ; AVX512BW-NEXT:    retq
3427 entry:
3428   %cmp = icmp ule <64 x i8> %a, %b
3429   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3430   ret <64 x i8> %sel
3431 }
3432
3433 define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3434 ; SSE-LABEL: test103:
3435 ; SSE:       # %bb.0: # %entry
3436 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
3437 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
3438 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
3439 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
3440 ; SSE-NEXT:    retq
3441 ;
3442 ; AVX1-LABEL: test103:
3443 ; AVX1:       # %bb.0: # %entry
3444 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3445 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3446 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3447 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3448 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3449 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3450 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3451 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3452 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3453 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3454 ; AVX1-NEXT:    retq
3455 ;
3456 ; AVX2-LABEL: test103:
3457 ; AVX2:       # %bb.0: # %entry
3458 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3459 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3460 ; AVX2-NEXT:    retq
3461 ;
3462 ; AVX512BW-LABEL: test103:
3463 ; AVX512BW:       # %bb.0: # %entry
3464 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3465 ; AVX512BW-NEXT:    retq
3466 entry:
3467   %cmp = icmp ugt <64 x i8> %a, %b
3468   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3469   ret <64 x i8> %sel
3470 }
3471
3472 define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3473 ; SSE-LABEL: test104:
3474 ; SSE:       # %bb.0: # %entry
3475 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
3476 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
3477 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
3478 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
3479 ; SSE-NEXT:    retq
3480 ;
3481 ; AVX1-LABEL: test104:
3482 ; AVX1:       # %bb.0: # %entry
3483 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3484 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3485 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3486 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3487 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3488 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3489 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3490 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3491 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3492 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3493 ; AVX1-NEXT:    retq
3494 ;
3495 ; AVX2-LABEL: test104:
3496 ; AVX2:       # %bb.0: # %entry
3497 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3498 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3499 ; AVX2-NEXT:    retq
3500 ;
3501 ; AVX512BW-LABEL: test104:
3502 ; AVX512BW:       # %bb.0: # %entry
3503 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3504 ; AVX512BW-NEXT:    retq
3505 entry:
3506   %cmp = icmp uge <64 x i8> %a, %b
3507   %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3508   ret <64 x i8> %sel
3509 }
3510
3511 define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3512 ; SSE-LABEL: test105:
3513 ; SSE:       # %bb.0: # %entry
3514 ; SSE-NEXT:    pminsw %xmm4, %xmm0
3515 ; SSE-NEXT:    pminsw %xmm5, %xmm1
3516 ; SSE-NEXT:    pminsw %xmm6, %xmm2
3517 ; SSE-NEXT:    pminsw %xmm7, %xmm3
3518 ; SSE-NEXT:    retq
3519 ;
3520 ; AVX1-LABEL: test105:
3521 ; AVX1:       # %bb.0: # %entry
3522 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3523 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3524 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3525 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3526 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3527 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3528 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3529 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3530 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3531 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3532 ; AVX1-NEXT:    retq
3533 ;
3534 ; AVX2-LABEL: test105:
3535 ; AVX2:       # %bb.0: # %entry
3536 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3537 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3538 ; AVX2-NEXT:    retq
3539 ;
3540 ; AVX512BW-LABEL: test105:
3541 ; AVX512BW:       # %bb.0: # %entry
3542 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3543 ; AVX512BW-NEXT:    retq
3544 entry:
3545   %cmp = icmp slt <32 x i16> %a, %b
3546   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3547   ret <32 x i16> %sel
3548 }
3549
3550 define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3551 ; SSE-LABEL: test106:
3552 ; SSE:       # %bb.0: # %entry
3553 ; SSE-NEXT:    pminsw %xmm4, %xmm0
3554 ; SSE-NEXT:    pminsw %xmm5, %xmm1
3555 ; SSE-NEXT:    pminsw %xmm6, %xmm2
3556 ; SSE-NEXT:    pminsw %xmm7, %xmm3
3557 ; SSE-NEXT:    retq
3558 ;
3559 ; AVX1-LABEL: test106:
3560 ; AVX1:       # %bb.0: # %entry
3561 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3562 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3563 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3564 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3565 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3566 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3567 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3568 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3569 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3570 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3571 ; AVX1-NEXT:    retq
3572 ;
3573 ; AVX2-LABEL: test106:
3574 ; AVX2:       # %bb.0: # %entry
3575 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3576 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3577 ; AVX2-NEXT:    retq
3578 ;
3579 ; AVX512BW-LABEL: test106:
3580 ; AVX512BW:       # %bb.0: # %entry
3581 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3582 ; AVX512BW-NEXT:    retq
3583 entry:
3584   %cmp = icmp sle <32 x i16> %a, %b
3585   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3586   ret <32 x i16> %sel
3587 }
3588
3589 define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3590 ; SSE-LABEL: test107:
3591 ; SSE:       # %bb.0: # %entry
3592 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3593 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3594 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3595 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3596 ; SSE-NEXT:    retq
3597 ;
3598 ; AVX1-LABEL: test107:
3599 ; AVX1:       # %bb.0: # %entry
3600 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3601 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3602 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3603 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3604 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3605 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3606 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3607 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3608 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3609 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3610 ; AVX1-NEXT:    retq
3611 ;
3612 ; AVX2-LABEL: test107:
3613 ; AVX2:       # %bb.0: # %entry
3614 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3615 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3616 ; AVX2-NEXT:    retq
3617 ;
3618 ; AVX512BW-LABEL: test107:
3619 ; AVX512BW:       # %bb.0: # %entry
3620 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3621 ; AVX512BW-NEXT:    retq
3622 entry:
3623   %cmp = icmp sgt <32 x i16> %a, %b
3624   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3625   ret <32 x i16> %sel
3626 }
3627
3628 define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3629 ; SSE-LABEL: test108:
3630 ; SSE:       # %bb.0: # %entry
3631 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3632 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3633 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3634 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3635 ; SSE-NEXT:    retq
3636 ;
3637 ; AVX1-LABEL: test108:
3638 ; AVX1:       # %bb.0: # %entry
3639 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3640 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3641 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3642 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3643 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3644 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3645 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3646 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3647 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3648 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3649 ; AVX1-NEXT:    retq
3650 ;
3651 ; AVX2-LABEL: test108:
3652 ; AVX2:       # %bb.0: # %entry
3653 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3654 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3655 ; AVX2-NEXT:    retq
3656 ;
3657 ; AVX512BW-LABEL: test108:
3658 ; AVX512BW:       # %bb.0: # %entry
3659 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3660 ; AVX512BW-NEXT:    retq
3661 entry:
3662   %cmp = icmp sge <32 x i16> %a, %b
3663   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3664   ret <32 x i16> %sel
3665 }
3666
3667 define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3668 ; SSE2-LABEL: test109:
3669 ; SSE2:       # %bb.0: # %entry
3670 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3671 ; SSE2-NEXT:    pxor %xmm8, %xmm4
3672 ; SSE2-NEXT:    pxor %xmm8, %xmm0
3673 ; SSE2-NEXT:    pminsw %xmm4, %xmm0
3674 ; SSE2-NEXT:    pxor %xmm8, %xmm0
3675 ; SSE2-NEXT:    pxor %xmm8, %xmm5
3676 ; SSE2-NEXT:    pxor %xmm8, %xmm1
3677 ; SSE2-NEXT:    pminsw %xmm5, %xmm1
3678 ; SSE2-NEXT:    pxor %xmm8, %xmm1
3679 ; SSE2-NEXT:    pxor %xmm8, %xmm6
3680 ; SSE2-NEXT:    pxor %xmm8, %xmm2
3681 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
3682 ; SSE2-NEXT:    pxor %xmm8, %xmm2
3683 ; SSE2-NEXT:    pxor %xmm8, %xmm7
3684 ; SSE2-NEXT:    pxor %xmm8, %xmm3
3685 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
3686 ; SSE2-NEXT:    pxor %xmm8, %xmm3
3687 ; SSE2-NEXT:    retq
3688 ;
3689 ; SSE4-LABEL: test109:
3690 ; SSE4:       # %bb.0: # %entry
3691 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
3692 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
3693 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
3694 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
3695 ; SSE4-NEXT:    retq
3696 ;
3697 ; AVX1-LABEL: test109:
3698 ; AVX1:       # %bb.0: # %entry
3699 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3700 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3701 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3702 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3703 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3704 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3705 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3706 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3707 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3708 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3709 ; AVX1-NEXT:    retq
3710 ;
3711 ; AVX2-LABEL: test109:
3712 ; AVX2:       # %bb.0: # %entry
3713 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3714 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3715 ; AVX2-NEXT:    retq
3716 ;
3717 ; AVX512BW-LABEL: test109:
3718 ; AVX512BW:       # %bb.0: # %entry
3719 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3720 ; AVX512BW-NEXT:    retq
3721 entry:
3722   %cmp = icmp ult <32 x i16> %a, %b
3723   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3724   ret <32 x i16> %sel
3725 }
3726
3727 define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3728 ; SSE2-LABEL: test110:
3729 ; SSE2:       # %bb.0: # %entry
3730 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3731 ; SSE2-NEXT:    pxor %xmm8, %xmm4
3732 ; SSE2-NEXT:    pxor %xmm8, %xmm0
3733 ; SSE2-NEXT:    pminsw %xmm4, %xmm0
3734 ; SSE2-NEXT:    pxor %xmm8, %xmm0
3735 ; SSE2-NEXT:    pxor %xmm8, %xmm5
3736 ; SSE2-NEXT:    pxor %xmm8, %xmm1
3737 ; SSE2-NEXT:    pminsw %xmm5, %xmm1
3738 ; SSE2-NEXT:    pxor %xmm8, %xmm1
3739 ; SSE2-NEXT:    pxor %xmm8, %xmm6
3740 ; SSE2-NEXT:    pxor %xmm8, %xmm2
3741 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
3742 ; SSE2-NEXT:    pxor %xmm8, %xmm2
3743 ; SSE2-NEXT:    pxor %xmm8, %xmm7
3744 ; SSE2-NEXT:    pxor %xmm8, %xmm3
3745 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
3746 ; SSE2-NEXT:    pxor %xmm8, %xmm3
3747 ; SSE2-NEXT:    retq
3748 ;
3749 ; SSE4-LABEL: test110:
3750 ; SSE4:       # %bb.0: # %entry
3751 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
3752 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
3753 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
3754 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
3755 ; SSE4-NEXT:    retq
3756 ;
3757 ; AVX1-LABEL: test110:
3758 ; AVX1:       # %bb.0: # %entry
3759 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3760 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3761 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3762 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3763 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3764 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3765 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3766 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3767 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3768 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3769 ; AVX1-NEXT:    retq
3770 ;
3771 ; AVX2-LABEL: test110:
3772 ; AVX2:       # %bb.0: # %entry
3773 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3774 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3775 ; AVX2-NEXT:    retq
3776 ;
3777 ; AVX512BW-LABEL: test110:
3778 ; AVX512BW:       # %bb.0: # %entry
3779 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3780 ; AVX512BW-NEXT:    retq
3781 entry:
3782   %cmp = icmp ule <32 x i16> %a, %b
3783   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3784   ret <32 x i16> %sel
3785 }
3786
3787 define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
3788 ; SSE2-LABEL: test111:
3789 ; SSE2:       # %bb.0: # %entry
3790 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3791 ; SSE2-NEXT:    pxor %xmm8, %xmm4
3792 ; SSE2-NEXT:    pxor %xmm8, %xmm0
3793 ; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
3794 ; SSE2-NEXT:    pxor %xmm8, %xmm0
3795 ; SSE2-NEXT:    pxor %xmm8, %xmm5
3796 ; SSE2-NEXT:    pxor %xmm8, %xmm1
3797 ; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
3798 ; SSE2-NEXT:    pxor %xmm8, %xmm1
3799 ; SSE2-NEXT:    pxor %xmm8, %xmm6
3800 ; SSE2-NEXT:    pxor %xmm8, %xmm2
3801 ; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
3802 ; SSE2-NEXT:    pxor %xmm8, %xmm2
3803 ; SSE2-NEXT:    pxor %xmm8, %xmm7
3804 ; SSE2-NEXT:    pxor %xmm8, %xmm3
3805 ; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
3806 ; SSE2-NEXT:    pxor %xmm8, %xmm3
3807 ; SSE2-NEXT:    retq
3808 ;
3809 ; SSE4-LABEL: test111:
3810 ; SSE4:       # %bb.0: # %entry
3811 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3812 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3813 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3814 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3815 ; SSE4-NEXT:    retq
3816 ;
3817 ; AVX1-LABEL: test111:
3818 ; AVX1:       # %bb.0: # %entry
3819 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3820 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3821 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3822 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3823 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3824 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3825 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3826 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3827 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3828 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3829 ; AVX1-NEXT:    retq
3830 ;
3831 ; AVX2-LABEL: test111:
3832 ; AVX2:       # %bb.0: # %entry
3833 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3834 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3835 ; AVX2-NEXT:    retq
3836 ;
3837 ; AVX512BW-LABEL: test111:
3838 ; AVX512BW:       # %bb.0: # %entry
3839 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3840 ; AVX512BW-NEXT:    retq
3841 entry:
3842   %cmp = icmp ugt <32 x i16> %a, %b
3843   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3844   ret <32 x i16> %sel
3845 }
3846
3847 define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
3848 ; SSE2-LABEL: test112:
3849 ; SSE2:       # %bb.0: # %entry
3850 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3851 ; SSE2-NEXT:    pxor %xmm8, %xmm4
3852 ; SSE2-NEXT:    pxor %xmm8, %xmm0
3853 ; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
3854 ; SSE2-NEXT:    pxor %xmm8, %xmm0
3855 ; SSE2-NEXT:    pxor %xmm8, %xmm5
3856 ; SSE2-NEXT:    pxor %xmm8, %xmm1
3857 ; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
3858 ; SSE2-NEXT:    pxor %xmm8, %xmm1
3859 ; SSE2-NEXT:    pxor %xmm8, %xmm6
3860 ; SSE2-NEXT:    pxor %xmm8, %xmm2
3861 ; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
3862 ; SSE2-NEXT:    pxor %xmm8, %xmm2
3863 ; SSE2-NEXT:    pxor %xmm8, %xmm7
3864 ; SSE2-NEXT:    pxor %xmm8, %xmm3
3865 ; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
3866 ; SSE2-NEXT:    pxor %xmm8, %xmm3
3867 ; SSE2-NEXT:    retq
3868 ;
3869 ; SSE4-LABEL: test112:
3870 ; SSE4:       # %bb.0: # %entry
3871 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3872 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3873 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3874 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3875 ; SSE4-NEXT:    retq
3876 ;
3877 ; AVX1-LABEL: test112:
3878 ; AVX1:       # %bb.0: # %entry
3879 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3880 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3881 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3882 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3883 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3884 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3885 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3886 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3887 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3888 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3889 ; AVX1-NEXT:    retq
3890 ;
3891 ; AVX2-LABEL: test112:
3892 ; AVX2:       # %bb.0: # %entry
3893 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3894 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3895 ; AVX2-NEXT:    retq
3896 ;
3897 ; AVX512BW-LABEL: test112:
3898 ; AVX512BW:       # %bb.0: # %entry
3899 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3900 ; AVX512BW-NEXT:    retq
3901 entry:
3902   %cmp = icmp uge <32 x i16> %a, %b
3903   %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3904   ret <32 x i16> %sel
3905 }
3906
3907 define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
3908 ; SSE2-LABEL: test113:
3909 ; SSE2:       # %bb.0: # %entry
3910 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
3911 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
3912 ; SSE2-NEXT:    pand %xmm8, %xmm0
3913 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3914 ; SSE2-NEXT:    por %xmm8, %xmm0
3915 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
3916 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
3917 ; SSE2-NEXT:    pand %xmm4, %xmm1
3918 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3919 ; SSE2-NEXT:    por %xmm4, %xmm1
3920 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
3921 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3922 ; SSE2-NEXT:    pand %xmm4, %xmm2
3923 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3924 ; SSE2-NEXT:    por %xmm4, %xmm2
3925 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
3926 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
3927 ; SSE2-NEXT:    pand %xmm4, %xmm3
3928 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3929 ; SSE2-NEXT:    por %xmm4, %xmm3
3930 ; SSE2-NEXT:    retq
3931 ;
3932 ; SSE4-LABEL: test113:
3933 ; SSE4:       # %bb.0: # %entry
3934 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
3935 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
3936 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
3937 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
3938 ; SSE4-NEXT:    retq
3939 ;
3940 ; AVX1-LABEL: test113:
3941 ; AVX1:       # %bb.0: # %entry
3942 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3943 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3944 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
3945 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
3946 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3947 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3948 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3949 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
3950 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
3951 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3952 ; AVX1-NEXT:    retq
3953 ;
3954 ; AVX2-LABEL: test113:
3955 ; AVX2:       # %bb.0: # %entry
3956 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
3957 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
3958 ; AVX2-NEXT:    retq
3959 ;
3960 ; AVX512F-LABEL: test113:
3961 ; AVX512F:       # %bb.0: # %entry
3962 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
3963 ; AVX512F-NEXT:    retq
3964 entry:
3965   %cmp = icmp slt <16 x i32> %a, %b
3966   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
3967   ret <16 x i32> %sel
3968 }
3969
3970 define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
3971 ; SSE2-LABEL: test114:
3972 ; SSE2:       # %bb.0: # %entry
3973 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
3974 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
3975 ; SSE2-NEXT:    pand %xmm8, %xmm0
3976 ; SSE2-NEXT:    pandn %xmm4, %xmm8
3977 ; SSE2-NEXT:    por %xmm8, %xmm0
3978 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
3979 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
3980 ; SSE2-NEXT:    pand %xmm4, %xmm1
3981 ; SSE2-NEXT:    pandn %xmm5, %xmm4
3982 ; SSE2-NEXT:    por %xmm4, %xmm1
3983 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
3984 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3985 ; SSE2-NEXT:    pand %xmm4, %xmm2
3986 ; SSE2-NEXT:    pandn %xmm6, %xmm4
3987 ; SSE2-NEXT:    por %xmm4, %xmm2
3988 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
3989 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
3990 ; SSE2-NEXT:    pand %xmm4, %xmm3
3991 ; SSE2-NEXT:    pandn %xmm7, %xmm4
3992 ; SSE2-NEXT:    por %xmm4, %xmm3
3993 ; SSE2-NEXT:    retq
3994 ;
3995 ; SSE4-LABEL: test114:
3996 ; SSE4:       # %bb.0: # %entry
3997 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
3998 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
3999 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
4000 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
4001 ; SSE4-NEXT:    retq
4002 ;
4003 ; AVX1-LABEL: test114:
4004 ; AVX1:       # %bb.0: # %entry
4005 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4006 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4007 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4008 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4009 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4010 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4011 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4012 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4013 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4014 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4015 ; AVX1-NEXT:    retq
4016 ;
4017 ; AVX2-LABEL: test114:
4018 ; AVX2:       # %bb.0: # %entry
4019 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4020 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4021 ; AVX2-NEXT:    retq
4022 ;
4023 ; AVX512F-LABEL: test114:
4024 ; AVX512F:       # %bb.0: # %entry
4025 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4026 ; AVX512F-NEXT:    retq
4027 entry:
4028   %cmp = icmp sle <16 x i32> %a, %b
4029   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4030   ret <16 x i32> %sel
4031 }
4032
4033 define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4034 ; SSE2-LABEL: test115:
4035 ; SSE2:       # %bb.0: # %entry
4036 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
4037 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4038 ; SSE2-NEXT:    pand %xmm8, %xmm0
4039 ; SSE2-NEXT:    pandn %xmm4, %xmm8
4040 ; SSE2-NEXT:    por %xmm0, %xmm8
4041 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4042 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4043 ; SSE2-NEXT:    pand %xmm4, %xmm1
4044 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4045 ; SSE2-NEXT:    por %xmm1, %xmm4
4046 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
4047 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
4048 ; SSE2-NEXT:    pand %xmm5, %xmm2
4049 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4050 ; SSE2-NEXT:    por %xmm2, %xmm5
4051 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
4052 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
4053 ; SSE2-NEXT:    pand %xmm6, %xmm3
4054 ; SSE2-NEXT:    pandn %xmm7, %xmm6
4055 ; SSE2-NEXT:    por %xmm3, %xmm6
4056 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
4057 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
4058 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
4059 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
4060 ; SSE2-NEXT:    retq
4061 ;
4062 ; SSE4-LABEL: test115:
4063 ; SSE4:       # %bb.0: # %entry
4064 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4065 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4066 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4067 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4068 ; SSE4-NEXT:    retq
4069 ;
4070 ; AVX1-LABEL: test115:
4071 ; AVX1:       # %bb.0: # %entry
4072 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4073 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4074 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4075 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4076 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4077 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4078 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4079 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4080 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4081 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4082 ; AVX1-NEXT:    retq
4083 ;
4084 ; AVX2-LABEL: test115:
4085 ; AVX2:       # %bb.0: # %entry
4086 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4087 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4088 ; AVX2-NEXT:    retq
4089 ;
4090 ; AVX512F-LABEL: test115:
4091 ; AVX512F:       # %bb.0: # %entry
4092 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4093 ; AVX512F-NEXT:    retq
4094 entry:
4095   %cmp = icmp sgt <16 x i32> %a, %b
4096   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4097   ret <16 x i32> %sel
4098 }
4099
4100 define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4101 ; SSE2-LABEL: test116:
4102 ; SSE2:       # %bb.0: # %entry
4103 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
4104 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4105 ; SSE2-NEXT:    pand %xmm8, %xmm0
4106 ; SSE2-NEXT:    pandn %xmm4, %xmm8
4107 ; SSE2-NEXT:    por %xmm0, %xmm8
4108 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4109 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4110 ; SSE2-NEXT:    pand %xmm4, %xmm1
4111 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4112 ; SSE2-NEXT:    por %xmm1, %xmm4
4113 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
4114 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
4115 ; SSE2-NEXT:    pand %xmm5, %xmm2
4116 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4117 ; SSE2-NEXT:    por %xmm2, %xmm5
4118 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
4119 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
4120 ; SSE2-NEXT:    pand %xmm6, %xmm3
4121 ; SSE2-NEXT:    pandn %xmm7, %xmm6
4122 ; SSE2-NEXT:    por %xmm3, %xmm6
4123 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
4124 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
4125 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
4126 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
4127 ; SSE2-NEXT:    retq
4128 ;
4129 ; SSE4-LABEL: test116:
4130 ; SSE4:       # %bb.0: # %entry
4131 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4132 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4133 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4134 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4135 ; SSE4-NEXT:    retq
4136 ;
4137 ; AVX1-LABEL: test116:
4138 ; AVX1:       # %bb.0: # %entry
4139 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4140 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4141 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4142 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4143 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4144 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4145 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4146 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4147 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4148 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4149 ; AVX1-NEXT:    retq
4150 ;
4151 ; AVX2-LABEL: test116:
4152 ; AVX2:       # %bb.0: # %entry
4153 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4154 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4155 ; AVX2-NEXT:    retq
4156 ;
4157 ; AVX512F-LABEL: test116:
4158 ; AVX512F:       # %bb.0: # %entry
4159 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4160 ; AVX512F-NEXT:    retq
4161 entry:
4162   %cmp = icmp sge <16 x i32> %a, %b
4163   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4164   ret <16 x i32> %sel
4165 }
4166
4167 define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4168 ; SSE2-LABEL: test117:
4169 ; SSE2:       # %bb.0: # %entry
4170 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4171 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4172 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4173 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4174 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4175 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4176 ; SSE2-NEXT:    pand %xmm10, %xmm0
4177 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4178 ; SSE2-NEXT:    por %xmm10, %xmm0
4179 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4180 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4181 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4182 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4183 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4184 ; SSE2-NEXT:    pand %xmm4, %xmm1
4185 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4186 ; SSE2-NEXT:    por %xmm4, %xmm1
4187 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4188 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4189 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4190 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4191 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4192 ; SSE2-NEXT:    pand %xmm5, %xmm2
4193 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4194 ; SSE2-NEXT:    por %xmm5, %xmm2
4195 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4196 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4197 ; SSE2-NEXT:    pxor %xmm7, %xmm8
4198 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4199 ; SSE2-NEXT:    pand %xmm8, %xmm3
4200 ; SSE2-NEXT:    pandn %xmm7, %xmm8
4201 ; SSE2-NEXT:    por %xmm8, %xmm3
4202 ; SSE2-NEXT:    retq
4203 ;
4204 ; SSE4-LABEL: test117:
4205 ; SSE4:       # %bb.0: # %entry
4206 ; SSE4-NEXT:    pminud %xmm4, %xmm0
4207 ; SSE4-NEXT:    pminud %xmm5, %xmm1
4208 ; SSE4-NEXT:    pminud %xmm6, %xmm2
4209 ; SSE4-NEXT:    pminud %xmm7, %xmm3
4210 ; SSE4-NEXT:    retq
4211 ;
4212 ; AVX1-LABEL: test117:
4213 ; AVX1:       # %bb.0: # %entry
4214 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4215 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4216 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4217 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4218 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4219 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4220 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4221 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4222 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4223 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4224 ; AVX1-NEXT:    retq
4225 ;
4226 ; AVX2-LABEL: test117:
4227 ; AVX2:       # %bb.0: # %entry
4228 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4229 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4230 ; AVX2-NEXT:    retq
4231 ;
4232 ; AVX512F-LABEL: test117:
4233 ; AVX512F:       # %bb.0: # %entry
4234 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4235 ; AVX512F-NEXT:    retq
4236 entry:
4237   %cmp = icmp ult <16 x i32> %a, %b
4238   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4239   ret <16 x i32> %sel
4240 }
4241
4242 define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4243 ; SSE2-LABEL: test118:
4244 ; SSE2:       # %bb.0: # %entry
4245 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4246 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4247 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4248 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4249 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4250 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4251 ; SSE2-NEXT:    pand %xmm10, %xmm0
4252 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4253 ; SSE2-NEXT:    por %xmm10, %xmm0
4254 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4255 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4256 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4257 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4258 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4259 ; SSE2-NEXT:    pand %xmm4, %xmm1
4260 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4261 ; SSE2-NEXT:    por %xmm4, %xmm1
4262 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4263 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4264 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4265 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4266 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4267 ; SSE2-NEXT:    pand %xmm5, %xmm2
4268 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4269 ; SSE2-NEXT:    por %xmm5, %xmm2
4270 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4271 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4272 ; SSE2-NEXT:    pxor %xmm7, %xmm8
4273 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4274 ; SSE2-NEXT:    pand %xmm8, %xmm3
4275 ; SSE2-NEXT:    pandn %xmm7, %xmm8
4276 ; SSE2-NEXT:    por %xmm8, %xmm3
4277 ; SSE2-NEXT:    retq
4278 ;
4279 ; SSE4-LABEL: test118:
4280 ; SSE4:       # %bb.0: # %entry
4281 ; SSE4-NEXT:    pminud %xmm4, %xmm0
4282 ; SSE4-NEXT:    pminud %xmm5, %xmm1
4283 ; SSE4-NEXT:    pminud %xmm6, %xmm2
4284 ; SSE4-NEXT:    pminud %xmm7, %xmm3
4285 ; SSE4-NEXT:    retq
4286 ;
4287 ; AVX1-LABEL: test118:
4288 ; AVX1:       # %bb.0: # %entry
4289 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4290 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4291 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4292 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4293 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4294 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4295 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4296 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4297 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4298 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4299 ; AVX1-NEXT:    retq
4300 ;
4301 ; AVX2-LABEL: test118:
4302 ; AVX2:       # %bb.0: # %entry
4303 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4304 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4305 ; AVX2-NEXT:    retq
4306 ;
4307 ; AVX512F-LABEL: test118:
4308 ; AVX512F:       # %bb.0: # %entry
4309 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4310 ; AVX512F-NEXT:    retq
4311 entry:
4312   %cmp = icmp ule <16 x i32> %a, %b
4313   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4314   ret <16 x i32> %sel
4315 }
4316
4317 define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4318 ; SSE2-LABEL: test119:
4319 ; SSE2:       # %bb.0: # %entry
4320 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
4321 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
4322 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
4323 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
4324 ; SSE2-NEXT:    pxor %xmm9, %xmm1
4325 ; SSE2-NEXT:    pxor %xmm9, %xmm0
4326 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
4327 ; SSE2-NEXT:    pand %xmm0, %xmm10
4328 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4329 ; SSE2-NEXT:    por %xmm10, %xmm0
4330 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4331 ; SSE2-NEXT:    pxor %xmm9, %xmm4
4332 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
4333 ; SSE2-NEXT:    pxor %xmm9, %xmm1
4334 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
4335 ; SSE2-NEXT:    pand %xmm1, %xmm8
4336 ; SSE2-NEXT:    pandn %xmm5, %xmm1
4337 ; SSE2-NEXT:    por %xmm8, %xmm1
4338 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4339 ; SSE2-NEXT:    pxor %xmm9, %xmm5
4340 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4341 ; SSE2-NEXT:    pxor %xmm9, %xmm4
4342 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4343 ; SSE2-NEXT:    pand %xmm4, %xmm2
4344 ; SSE2-NEXT:    pandn %xmm6, %xmm4
4345 ; SSE2-NEXT:    por %xmm2, %xmm4
4346 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
4347 ; SSE2-NEXT:    pxor %xmm9, %xmm2
4348 ; SSE2-NEXT:    pxor %xmm3, %xmm9
4349 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
4350 ; SSE2-NEXT:    pand %xmm9, %xmm3
4351 ; SSE2-NEXT:    pandn %xmm7, %xmm9
4352 ; SSE2-NEXT:    por %xmm9, %xmm3
4353 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
4354 ; SSE2-NEXT:    retq
4355 ;
4356 ; SSE4-LABEL: test119:
4357 ; SSE4:       # %bb.0: # %entry
4358 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4359 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4360 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4361 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4362 ; SSE4-NEXT:    retq
4363 ;
4364 ; AVX1-LABEL: test119:
4365 ; AVX1:       # %bb.0: # %entry
4366 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4367 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4368 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4369 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4370 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4371 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4372 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4373 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4374 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4375 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4376 ; AVX1-NEXT:    retq
4377 ;
4378 ; AVX2-LABEL: test119:
4379 ; AVX2:       # %bb.0: # %entry
4380 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4381 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4382 ; AVX2-NEXT:    retq
4383 ;
4384 ; AVX512F-LABEL: test119:
4385 ; AVX512F:       # %bb.0: # %entry
4386 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4387 ; AVX512F-NEXT:    retq
4388 entry:
4389   %cmp = icmp ugt <16 x i32> %a, %b
4390   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4391   ret <16 x i32> %sel
4392 }
4393
4394 define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4395 ; SSE2-LABEL: test120:
4396 ; SSE2:       # %bb.0: # %entry
4397 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
4398 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
4399 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
4400 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
4401 ; SSE2-NEXT:    pxor %xmm9, %xmm1
4402 ; SSE2-NEXT:    pxor %xmm9, %xmm0
4403 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
4404 ; SSE2-NEXT:    pand %xmm0, %xmm10
4405 ; SSE2-NEXT:    pandn %xmm4, %xmm0
4406 ; SSE2-NEXT:    por %xmm10, %xmm0
4407 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4408 ; SSE2-NEXT:    pxor %xmm9, %xmm4
4409 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
4410 ; SSE2-NEXT:    pxor %xmm9, %xmm1
4411 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
4412 ; SSE2-NEXT:    pand %xmm1, %xmm8
4413 ; SSE2-NEXT:    pandn %xmm5, %xmm1
4414 ; SSE2-NEXT:    por %xmm8, %xmm1
4415 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4416 ; SSE2-NEXT:    pxor %xmm9, %xmm5
4417 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4418 ; SSE2-NEXT:    pxor %xmm9, %xmm4
4419 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4420 ; SSE2-NEXT:    pand %xmm4, %xmm2
4421 ; SSE2-NEXT:    pandn %xmm6, %xmm4
4422 ; SSE2-NEXT:    por %xmm2, %xmm4
4423 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
4424 ; SSE2-NEXT:    pxor %xmm9, %xmm2
4425 ; SSE2-NEXT:    pxor %xmm3, %xmm9
4426 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
4427 ; SSE2-NEXT:    pand %xmm9, %xmm3
4428 ; SSE2-NEXT:    pandn %xmm7, %xmm9
4429 ; SSE2-NEXT:    por %xmm9, %xmm3
4430 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
4431 ; SSE2-NEXT:    retq
4432 ;
4433 ; SSE4-LABEL: test120:
4434 ; SSE4:       # %bb.0: # %entry
4435 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4436 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4437 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4438 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4439 ; SSE4-NEXT:    retq
4440 ;
4441 ; AVX1-LABEL: test120:
4442 ; AVX1:       # %bb.0: # %entry
4443 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4444 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4445 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4446 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4447 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4448 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4449 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4450 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4451 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4452 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4453 ; AVX1-NEXT:    retq
4454 ;
4455 ; AVX2-LABEL: test120:
4456 ; AVX2:       # %bb.0: # %entry
4457 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4458 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4459 ; AVX2-NEXT:    retq
4460 ;
4461 ; AVX512F-LABEL: test120:
4462 ; AVX512F:       # %bb.0: # %entry
4463 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4464 ; AVX512F-NEXT:    retq
4465 entry:
4466   %cmp = icmp uge <16 x i32> %a, %b
4467   %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4468   ret <16 x i32> %sel
4469 }
4470
4471 define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4472 ; SSE2-LABEL: test121:
4473 ; SSE2:       # %bb.0: # %entry
4474 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4475 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4476 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4477 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4478 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4479 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4480 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4481 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4482 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4483 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4484 ; SSE2-NEXT:    pand %xmm12, %xmm9
4485 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4486 ; SSE2-NEXT:    por %xmm9, %xmm10
4487 ; SSE2-NEXT:    pand %xmm10, %xmm0
4488 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4489 ; SSE2-NEXT:    por %xmm10, %xmm0
4490 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4491 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4492 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4493 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4494 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4495 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4496 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4497 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4498 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4499 ; SSE2-NEXT:    pand %xmm11, %xmm9
4500 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4501 ; SSE2-NEXT:    por %xmm9, %xmm4
4502 ; SSE2-NEXT:    pand %xmm4, %xmm1
4503 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4504 ; SSE2-NEXT:    por %xmm4, %xmm1
4505 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4506 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4507 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4508 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4509 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4510 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4511 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4512 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4513 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4514 ; SSE2-NEXT:    pand %xmm10, %xmm4
4515 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4516 ; SSE2-NEXT:    por %xmm4, %xmm5
4517 ; SSE2-NEXT:    pand %xmm5, %xmm2
4518 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4519 ; SSE2-NEXT:    por %xmm5, %xmm2
4520 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4521 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4522 ; SSE2-NEXT:    pxor %xmm7, %xmm8
4523 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
4524 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4525 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4526 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4527 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4528 ; SSE2-NEXT:    pand %xmm6, %xmm4
4529 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4530 ; SSE2-NEXT:    por %xmm4, %xmm5
4531 ; SSE2-NEXT:    pand %xmm5, %xmm3
4532 ; SSE2-NEXT:    pandn %xmm7, %xmm5
4533 ; SSE2-NEXT:    por %xmm5, %xmm3
4534 ; SSE2-NEXT:    retq
4535 ;
4536 ; SSE4-LABEL: test121:
4537 ; SSE4:       # %bb.0: # %entry
4538 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
4539 ; SSE4-NEXT:    movdqa %xmm0, %xmm7
4540 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
4541 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4542 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4543 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
4544 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4545 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4546 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
4547 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4548 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4549 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
4550 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4551 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4552 ; SSE4-NEXT:    movapd %xmm4, %xmm0
4553 ; SSE4-NEXT:    movapd %xmm5, %xmm1
4554 ; SSE4-NEXT:    movapd %xmm6, %xmm2
4555 ; SSE4-NEXT:    movapd %xmm8, %xmm3
4556 ; SSE4-NEXT:    retq
4557 ;
4558 ; AVX1-LABEL: test121:
4559 ; AVX1:       # %bb.0: # %entry
4560 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4561 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4562 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4563 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4564 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4565 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4566 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4567 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4568 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4569 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4570 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4571 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4572 ; AVX1-NEXT:    retq
4573 ;
4574 ; AVX2-LABEL: test121:
4575 ; AVX2:       # %bb.0: # %entry
4576 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4577 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4578 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4579 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4580 ; AVX2-NEXT:    retq
4581 ;
4582 ; AVX512F-LABEL: test121:
4583 ; AVX512F:       # %bb.0: # %entry
4584 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4585 ; AVX512F-NEXT:    retq
4586 entry:
4587   %cmp = icmp slt <8 x i64> %a, %b
4588   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4589   ret <8 x i64> %sel
4590 }
4591
4592 define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4593 ; SSE2-LABEL: test122:
4594 ; SSE2:       # %bb.0: # %entry
4595 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4596 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4597 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4598 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4599 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4600 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4601 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4602 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4603 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4604 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4605 ; SSE2-NEXT:    pand %xmm12, %xmm9
4606 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4607 ; SSE2-NEXT:    por %xmm9, %xmm10
4608 ; SSE2-NEXT:    pand %xmm10, %xmm0
4609 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4610 ; SSE2-NEXT:    por %xmm10, %xmm0
4611 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4612 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4613 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4614 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4615 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4616 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4617 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4618 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4619 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4620 ; SSE2-NEXT:    pand %xmm11, %xmm9
4621 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4622 ; SSE2-NEXT:    por %xmm9, %xmm4
4623 ; SSE2-NEXT:    pand %xmm4, %xmm1
4624 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4625 ; SSE2-NEXT:    por %xmm4, %xmm1
4626 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4627 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4628 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4629 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4630 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4631 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4632 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4633 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4634 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4635 ; SSE2-NEXT:    pand %xmm10, %xmm4
4636 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4637 ; SSE2-NEXT:    por %xmm4, %xmm5
4638 ; SSE2-NEXT:    pand %xmm5, %xmm2
4639 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4640 ; SSE2-NEXT:    por %xmm5, %xmm2
4641 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
4642 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4643 ; SSE2-NEXT:    pxor %xmm7, %xmm8
4644 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
4645 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4646 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4647 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4648 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4649 ; SSE2-NEXT:    pand %xmm6, %xmm4
4650 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4651 ; SSE2-NEXT:    por %xmm4, %xmm5
4652 ; SSE2-NEXT:    pand %xmm5, %xmm3
4653 ; SSE2-NEXT:    pandn %xmm7, %xmm5
4654 ; SSE2-NEXT:    por %xmm5, %xmm3
4655 ; SSE2-NEXT:    retq
4656 ;
4657 ; SSE4-LABEL: test122:
4658 ; SSE4:       # %bb.0: # %entry
4659 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
4660 ; SSE4-NEXT:    movdqa %xmm0, %xmm7
4661 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
4662 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4663 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4664 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
4665 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4666 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4667 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
4668 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4669 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4670 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
4671 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4672 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4673 ; SSE4-NEXT:    movapd %xmm4, %xmm0
4674 ; SSE4-NEXT:    movapd %xmm5, %xmm1
4675 ; SSE4-NEXT:    movapd %xmm6, %xmm2
4676 ; SSE4-NEXT:    movapd %xmm8, %xmm3
4677 ; SSE4-NEXT:    retq
4678 ;
4679 ; AVX1-LABEL: test122:
4680 ; AVX1:       # %bb.0: # %entry
4681 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4682 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4683 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4684 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4685 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4686 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4687 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4688 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4689 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4690 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4691 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4692 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4693 ; AVX1-NEXT:    retq
4694 ;
4695 ; AVX2-LABEL: test122:
4696 ; AVX2:       # %bb.0: # %entry
4697 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4698 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4699 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4700 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4701 ; AVX2-NEXT:    retq
4702 ;
4703 ; AVX512F-LABEL: test122:
4704 ; AVX512F:       # %bb.0: # %entry
4705 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4706 ; AVX512F-NEXT:    retq
4707 entry:
4708   %cmp = icmp sle <8 x i64> %a, %b
4709   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4710   ret <8 x i64> %sel
4711 }
4712
4713 define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
4714 ; SSE2-LABEL: test123:
4715 ; SSE2:       # %bb.0: # %entry
4716 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4717 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
4718 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4719 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
4720 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4721 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4722 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4723 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4724 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4725 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4726 ; SSE2-NEXT:    pand %xmm12, %xmm9
4727 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4728 ; SSE2-NEXT:    por %xmm9, %xmm10
4729 ; SSE2-NEXT:    pand %xmm10, %xmm0
4730 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4731 ; SSE2-NEXT:    por %xmm10, %xmm0
4732 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4733 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4734 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4735 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4736 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4737 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4738 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4739 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4740 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4741 ; SSE2-NEXT:    pand %xmm11, %xmm9
4742 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4743 ; SSE2-NEXT:    por %xmm9, %xmm4
4744 ; SSE2-NEXT:    pand %xmm4, %xmm1
4745 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4746 ; SSE2-NEXT:    por %xmm4, %xmm1
4747 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
4748 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4749 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
4750 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4751 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4752 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4753 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4754 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4755 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4756 ; SSE2-NEXT:    pand %xmm10, %xmm4
4757 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4758 ; SSE2-NEXT:    por %xmm4, %xmm5
4759 ; SSE2-NEXT:    pand %xmm5, %xmm2
4760 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4761 ; SSE2-NEXT:    por %xmm5, %xmm2
4762 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
4763 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4764 ; SSE2-NEXT:    pxor %xmm3, %xmm8
4765 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
4766 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4767 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4768 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4769 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4770 ; SSE2-NEXT:    pand %xmm6, %xmm4
4771 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4772 ; SSE2-NEXT:    por %xmm4, %xmm5
4773 ; SSE2-NEXT:    pand %xmm5, %xmm3
4774 ; SSE2-NEXT:    pandn %xmm7, %xmm5
4775 ; SSE2-NEXT:    por %xmm5, %xmm3
4776 ; SSE2-NEXT:    retq
4777 ;
4778 ; SSE4-LABEL: test123:
4779 ; SSE4:       # %bb.0: # %entry
4780 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
4781 ; SSE4-NEXT:    movdqa %xmm0, %xmm7
4782 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4783 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4784 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
4785 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4786 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4787 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
4788 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4789 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4790 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
4791 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4792 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4793 ; SSE4-NEXT:    movapd %xmm4, %xmm0
4794 ; SSE4-NEXT:    movapd %xmm5, %xmm1
4795 ; SSE4-NEXT:    movapd %xmm6, %xmm2
4796 ; SSE4-NEXT:    movapd %xmm8, %xmm3
4797 ; SSE4-NEXT:    retq
4798 ;
4799 ; AVX1-LABEL: test123:
4800 ; AVX1:       # %bb.0: # %entry
4801 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4802 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4803 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4804 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4805 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4806 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4807 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4808 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4809 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4810 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4811 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4812 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4813 ; AVX1-NEXT:    retq
4814 ;
4815 ; AVX2-LABEL: test123:
4816 ; AVX2:       # %bb.0: # %entry
4817 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4818 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4819 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4820 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4821 ; AVX2-NEXT:    retq
4822 ;
4823 ; AVX512F-LABEL: test123:
4824 ; AVX512F:       # %bb.0: # %entry
4825 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4826 ; AVX512F-NEXT:    retq
4827 entry:
4828   %cmp = icmp sgt <8 x i64> %a, %b
4829   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4830   ret <8 x i64> %sel
4831 }
4832
4833 define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
4834 ; SSE2-LABEL: test124:
4835 ; SSE2:       # %bb.0: # %entry
4836 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4837 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
4838 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4839 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
4840 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4841 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4842 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4843 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4844 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4845 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4846 ; SSE2-NEXT:    pand %xmm12, %xmm9
4847 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4848 ; SSE2-NEXT:    por %xmm9, %xmm10
4849 ; SSE2-NEXT:    pand %xmm10, %xmm0
4850 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4851 ; SSE2-NEXT:    por %xmm10, %xmm0
4852 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4853 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4854 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
4855 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4856 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4857 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4858 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4859 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4860 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4861 ; SSE2-NEXT:    pand %xmm11, %xmm9
4862 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4863 ; SSE2-NEXT:    por %xmm9, %xmm4
4864 ; SSE2-NEXT:    pand %xmm4, %xmm1
4865 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4866 ; SSE2-NEXT:    por %xmm4, %xmm1
4867 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
4868 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4869 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
4870 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4871 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4872 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4873 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4874 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4875 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4876 ; SSE2-NEXT:    pand %xmm10, %xmm4
4877 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4878 ; SSE2-NEXT:    por %xmm4, %xmm5
4879 ; SSE2-NEXT:    pand %xmm5, %xmm2
4880 ; SSE2-NEXT:    pandn %xmm6, %xmm5
4881 ; SSE2-NEXT:    por %xmm5, %xmm2
4882 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
4883 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4884 ; SSE2-NEXT:    pxor %xmm3, %xmm8
4885 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
4886 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4887 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4888 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4889 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4890 ; SSE2-NEXT:    pand %xmm6, %xmm4
4891 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4892 ; SSE2-NEXT:    por %xmm4, %xmm5
4893 ; SSE2-NEXT:    pand %xmm5, %xmm3
4894 ; SSE2-NEXT:    pandn %xmm7, %xmm5
4895 ; SSE2-NEXT:    por %xmm5, %xmm3
4896 ; SSE2-NEXT:    retq
4897 ;
4898 ; SSE4-LABEL: test124:
4899 ; SSE4:       # %bb.0: # %entry
4900 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
4901 ; SSE4-NEXT:    movdqa %xmm0, %xmm7
4902 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4903 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4904 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
4905 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4906 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4907 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
4908 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4909 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4910 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
4911 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4912 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4913 ; SSE4-NEXT:    movapd %xmm4, %xmm0
4914 ; SSE4-NEXT:    movapd %xmm5, %xmm1
4915 ; SSE4-NEXT:    movapd %xmm6, %xmm2
4916 ; SSE4-NEXT:    movapd %xmm8, %xmm3
4917 ; SSE4-NEXT:    retq
4918 ;
4919 ; AVX1-LABEL: test124:
4920 ; AVX1:       # %bb.0: # %entry
4921 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4922 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4923 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4924 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4925 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4926 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4927 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4928 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4929 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4930 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4931 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4932 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4933 ; AVX1-NEXT:    retq
4934 ;
4935 ; AVX2-LABEL: test124:
4936 ; AVX2:       # %bb.0: # %entry
4937 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4938 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4939 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4940 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4941 ; AVX2-NEXT:    retq
4942 ;
4943 ; AVX512F-LABEL: test124:
4944 ; AVX512F:       # %bb.0: # %entry
4945 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4946 ; AVX512F-NEXT:    retq
4947 entry:
4948   %cmp = icmp sge <8 x i64> %a, %b
4949   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4950   ret <8 x i64> %sel
4951 }
4952
4953 define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
4954 ; SSE2-LABEL: test125:
4955 ; SSE2:       # %bb.0: # %entry
4956 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
4957 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
4958 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4959 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4960 ; SSE2-NEXT:    pxor %xmm8, %xmm10
4961 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
4962 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4963 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4964 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4965 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4966 ; SSE2-NEXT:    pand %xmm12, %xmm9
4967 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4968 ; SSE2-NEXT:    por %xmm9, %xmm10
4969 ; SSE2-NEXT:    pand %xmm10, %xmm0
4970 ; SSE2-NEXT:    pandn %xmm4, %xmm10
4971 ; SSE2-NEXT:    por %xmm10, %xmm0
4972 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
4973 ; SSE2-NEXT:    pxor %xmm8, %xmm9
4974 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
4975 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4976 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
4977 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4978 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4979 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4980 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4981 ; SSE2-NEXT:    pand %xmm11, %xmm9
4982 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4983 ; SSE2-NEXT:    por %xmm9, %xmm4
4984 ; SSE2-NEXT:    pand %xmm4, %xmm1
4985 ; SSE2-NEXT:    pandn %xmm5, %xmm4
4986 ; SSE2-NEXT:    por %xmm4, %xmm1
4987 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
4988 ; SSE2-NEXT:    pxor %xmm8, %xmm4
4989 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
4990 ; SSE2-NEXT:    pxor %xmm8, %xmm5
4991 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
4992 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4993 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4994 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4995 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4996 ; SSE2-NEXT:    pand %xmm10, %xmm4
4997 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4998 ; SSE2-NEXT:    por %xmm4, %xmm5
4999 ; SSE2-NEXT:    pand %xmm5, %xmm2
5000 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5001 ; SSE2-NEXT:    por %xmm5, %xmm2
5002 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
5003 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5004 ; SSE2-NEXT:    pxor %xmm7, %xmm8
5005 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
5006 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5007 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5008 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5009 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5010 ; SSE2-NEXT:    pand %xmm6, %xmm4
5011 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5012 ; SSE2-NEXT:    por %xmm4, %xmm5
5013 ; SSE2-NEXT:    pand %xmm5, %xmm3
5014 ; SSE2-NEXT:    pandn %xmm7, %xmm5
5015 ; SSE2-NEXT:    por %xmm5, %xmm3
5016 ; SSE2-NEXT:    retq
5017 ;
5018 ; SSE4-LABEL: test125:
5019 ; SSE4:       # %bb.0: # %entry
5020 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
5021 ; SSE4-NEXT:    movdqa %xmm6, %xmm9
5022 ; SSE4-NEXT:    movdqa %xmm5, %xmm10
5023 ; SSE4-NEXT:    movdqa %xmm0, %xmm5
5024 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5025 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
5026 ; SSE4-NEXT:    pxor %xmm7, %xmm6
5027 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
5028 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5029 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
5030 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
5031 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
5032 ; SSE4-NEXT:    pxor %xmm7, %xmm5
5033 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
5034 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5035 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
5036 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5037 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
5038 ; SSE4-NEXT:    pxor %xmm7, %xmm1
5039 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
5040 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5041 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5042 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5043 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
5044 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5045 ; SSE4-NEXT:    pxor %xmm8, %xmm7
5046 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5047 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
5048 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5049 ; SSE4-NEXT:    movapd %xmm4, %xmm0
5050 ; SSE4-NEXT:    movapd %xmm10, %xmm1
5051 ; SSE4-NEXT:    movapd %xmm9, %xmm2
5052 ; SSE4-NEXT:    movapd %xmm8, %xmm3
5053 ; SSE4-NEXT:    retq
5054 ;
5055 ; AVX1-LABEL: test125:
5056 ; AVX1:       # %bb.0: # %entry
5057 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5058 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5059 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5060 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5061 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5062 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5063 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5064 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5065 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5066 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5067 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5068 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5069 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5070 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5071 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5072 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5073 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5074 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5075 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5076 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5077 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5078 ; AVX1-NEXT:    retq
5079 ;
5080 ; AVX2-LABEL: test125:
5081 ; AVX2:       # %bb.0: # %entry
5082 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5083 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5084 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5085 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5086 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5087 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5088 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5089 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5090 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5091 ; AVX2-NEXT:    retq
5092 ;
5093 ; AVX512F-LABEL: test125:
5094 ; AVX512F:       # %bb.0: # %entry
5095 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5096 ; AVX512F-NEXT:    retq
5097 entry:
5098   %cmp = icmp ult <8 x i64> %a, %b
5099   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5100   ret <8 x i64> %sel
5101 }
5102
5103 define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5104 ; SSE2-LABEL: test126:
5105 ; SSE2:       # %bb.0: # %entry
5106 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5107 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
5108 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5109 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
5110 ; SSE2-NEXT:    pxor %xmm8, %xmm10
5111 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
5112 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5113 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5114 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5115 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5116 ; SSE2-NEXT:    pand %xmm12, %xmm9
5117 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5118 ; SSE2-NEXT:    por %xmm9, %xmm10
5119 ; SSE2-NEXT:    pand %xmm10, %xmm0
5120 ; SSE2-NEXT:    pandn %xmm4, %xmm10
5121 ; SSE2-NEXT:    por %xmm10, %xmm0
5122 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
5123 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5124 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
5125 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5126 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
5127 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5128 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5129 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5130 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5131 ; SSE2-NEXT:    pand %xmm11, %xmm9
5132 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5133 ; SSE2-NEXT:    por %xmm9, %xmm4
5134 ; SSE2-NEXT:    pand %xmm4, %xmm1
5135 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5136 ; SSE2-NEXT:    por %xmm4, %xmm1
5137 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
5138 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5139 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
5140 ; SSE2-NEXT:    pxor %xmm8, %xmm5
5141 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5142 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5143 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5144 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5145 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5146 ; SSE2-NEXT:    pand %xmm10, %xmm4
5147 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5148 ; SSE2-NEXT:    por %xmm4, %xmm5
5149 ; SSE2-NEXT:    pand %xmm5, %xmm2
5150 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5151 ; SSE2-NEXT:    por %xmm5, %xmm2
5152 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
5153 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5154 ; SSE2-NEXT:    pxor %xmm7, %xmm8
5155 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
5156 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5157 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5158 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5159 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5160 ; SSE2-NEXT:    pand %xmm6, %xmm4
5161 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5162 ; SSE2-NEXT:    por %xmm4, %xmm5
5163 ; SSE2-NEXT:    pand %xmm5, %xmm3
5164 ; SSE2-NEXT:    pandn %xmm7, %xmm5
5165 ; SSE2-NEXT:    por %xmm5, %xmm3
5166 ; SSE2-NEXT:    retq
5167 ;
5168 ; SSE4-LABEL: test126:
5169 ; SSE4:       # %bb.0: # %entry
5170 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
5171 ; SSE4-NEXT:    movdqa %xmm6, %xmm9
5172 ; SSE4-NEXT:    movdqa %xmm5, %xmm10
5173 ; SSE4-NEXT:    movdqa %xmm0, %xmm5
5174 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5175 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
5176 ; SSE4-NEXT:    pxor %xmm7, %xmm6
5177 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
5178 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5179 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
5180 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
5181 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
5182 ; SSE4-NEXT:    pxor %xmm7, %xmm5
5183 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
5184 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5185 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
5186 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5187 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
5188 ; SSE4-NEXT:    pxor %xmm7, %xmm1
5189 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
5190 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5191 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5192 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5193 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
5194 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5195 ; SSE4-NEXT:    pxor %xmm8, %xmm7
5196 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5197 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
5198 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5199 ; SSE4-NEXT:    movapd %xmm4, %xmm0
5200 ; SSE4-NEXT:    movapd %xmm10, %xmm1
5201 ; SSE4-NEXT:    movapd %xmm9, %xmm2
5202 ; SSE4-NEXT:    movapd %xmm8, %xmm3
5203 ; SSE4-NEXT:    retq
5204 ;
5205 ; AVX1-LABEL: test126:
5206 ; AVX1:       # %bb.0: # %entry
5207 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5208 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5209 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5210 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5211 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5212 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5213 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5214 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5215 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5216 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5217 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5218 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5219 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5220 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5221 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5222 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5223 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5224 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5225 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5226 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5227 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5228 ; AVX1-NEXT:    retq
5229 ;
5230 ; AVX2-LABEL: test126:
5231 ; AVX2:       # %bb.0: # %entry
5232 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5233 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5234 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5235 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5236 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5237 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5238 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5239 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5240 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5241 ; AVX2-NEXT:    retq
5242 ;
5243 ; AVX512F-LABEL: test126:
5244 ; AVX512F:       # %bb.0: # %entry
5245 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5246 ; AVX512F-NEXT:    retq
5247 entry:
5248   %cmp = icmp ule <8 x i64> %a, %b
5249   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5250   ret <8 x i64> %sel
5251 }
5252
5253 define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5254 ; SSE2-LABEL: test127:
5255 ; SSE2:       # %bb.0: # %entry
5256 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5257 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
5258 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5259 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
5260 ; SSE2-NEXT:    pxor %xmm8, %xmm10
5261 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
5262 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5263 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5264 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5265 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5266 ; SSE2-NEXT:    pand %xmm12, %xmm9
5267 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5268 ; SSE2-NEXT:    por %xmm9, %xmm10
5269 ; SSE2-NEXT:    pand %xmm10, %xmm0
5270 ; SSE2-NEXT:    pandn %xmm4, %xmm10
5271 ; SSE2-NEXT:    por %xmm10, %xmm0
5272 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5273 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5274 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
5275 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5276 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
5277 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5278 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5279 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5280 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5281 ; SSE2-NEXT:    pand %xmm11, %xmm9
5282 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5283 ; SSE2-NEXT:    por %xmm9, %xmm4
5284 ; SSE2-NEXT:    pand %xmm4, %xmm1
5285 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5286 ; SSE2-NEXT:    por %xmm4, %xmm1
5287 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
5288 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5289 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
5290 ; SSE2-NEXT:    pxor %xmm8, %xmm5
5291 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5292 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5293 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5294 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5295 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5296 ; SSE2-NEXT:    pand %xmm10, %xmm4
5297 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5298 ; SSE2-NEXT:    por %xmm4, %xmm5
5299 ; SSE2-NEXT:    pand %xmm5, %xmm2
5300 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5301 ; SSE2-NEXT:    por %xmm5, %xmm2
5302 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
5303 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5304 ; SSE2-NEXT:    pxor %xmm3, %xmm8
5305 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
5306 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5307 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5308 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5309 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5310 ; SSE2-NEXT:    pand %xmm6, %xmm4
5311 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5312 ; SSE2-NEXT:    por %xmm4, %xmm5
5313 ; SSE2-NEXT:    pand %xmm5, %xmm3
5314 ; SSE2-NEXT:    pandn %xmm7, %xmm5
5315 ; SSE2-NEXT:    por %xmm5, %xmm3
5316 ; SSE2-NEXT:    retq
5317 ;
5318 ; SSE4-LABEL: test127:
5319 ; SSE4:       # %bb.0: # %entry
5320 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
5321 ; SSE4-NEXT:    movdqa %xmm6, %xmm9
5322 ; SSE4-NEXT:    movdqa %xmm5, %xmm10
5323 ; SSE4-NEXT:    movdqa %xmm4, %xmm5
5324 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
5325 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5326 ; SSE4-NEXT:    pxor %xmm7, %xmm4
5327 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5328 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5329 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
5330 ; SSE4-NEXT:    movdqa %xmm10, %xmm4
5331 ; SSE4-NEXT:    pxor %xmm7, %xmm4
5332 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
5333 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5334 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5335 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5336 ; SSE4-NEXT:    movdqa %xmm9, %xmm1
5337 ; SSE4-NEXT:    pxor %xmm7, %xmm1
5338 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
5339 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5340 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5341 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5342 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
5343 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5344 ; SSE4-NEXT:    pxor %xmm3, %xmm7
5345 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5346 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
5347 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5348 ; SSE4-NEXT:    movapd %xmm5, %xmm0
5349 ; SSE4-NEXT:    movapd %xmm10, %xmm1
5350 ; SSE4-NEXT:    movapd %xmm9, %xmm2
5351 ; SSE4-NEXT:    movapd %xmm8, %xmm3
5352 ; SSE4-NEXT:    retq
5353 ;
5354 ; AVX1-LABEL: test127:
5355 ; AVX1:       # %bb.0: # %entry
5356 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5357 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5358 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5359 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5360 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5361 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5362 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5363 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5364 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5365 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5366 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5367 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5368 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5369 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5370 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5371 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5372 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5373 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5374 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5375 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5376 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5377 ; AVX1-NEXT:    retq
5378 ;
5379 ; AVX2-LABEL: test127:
5380 ; AVX2:       # %bb.0: # %entry
5381 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5382 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5383 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5384 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5385 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5386 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5387 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5388 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5389 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5390 ; AVX2-NEXT:    retq
5391 ;
5392 ; AVX512F-LABEL: test127:
5393 ; AVX512F:       # %bb.0: # %entry
5394 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5395 ; AVX512F-NEXT:    retq
5396 entry:
5397   %cmp = icmp ugt <8 x i64> %a, %b
5398   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5399   ret <8 x i64> %sel
5400 }
5401
5402 define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5403 ; SSE2-LABEL: test128:
5404 ; SSE2:       # %bb.0: # %entry
5405 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5406 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
5407 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5408 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
5409 ; SSE2-NEXT:    pxor %xmm8, %xmm10
5410 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
5411 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5412 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5413 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5414 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5415 ; SSE2-NEXT:    pand %xmm12, %xmm9
5416 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5417 ; SSE2-NEXT:    por %xmm9, %xmm10
5418 ; SSE2-NEXT:    pand %xmm10, %xmm0
5419 ; SSE2-NEXT:    pandn %xmm4, %xmm10
5420 ; SSE2-NEXT:    por %xmm10, %xmm0
5421 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5422 ; SSE2-NEXT:    pxor %xmm8, %xmm9
5423 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
5424 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5425 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
5426 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5427 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5428 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5429 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5430 ; SSE2-NEXT:    pand %xmm11, %xmm9
5431 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5432 ; SSE2-NEXT:    por %xmm9, %xmm4
5433 ; SSE2-NEXT:    pand %xmm4, %xmm1
5434 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5435 ; SSE2-NEXT:    por %xmm4, %xmm1
5436 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
5437 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5438 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
5439 ; SSE2-NEXT:    pxor %xmm8, %xmm5
5440 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
5441 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5442 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5443 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5444 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5445 ; SSE2-NEXT:    pand %xmm10, %xmm4
5446 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5447 ; SSE2-NEXT:    por %xmm4, %xmm5
5448 ; SSE2-NEXT:    pand %xmm5, %xmm2
5449 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5450 ; SSE2-NEXT:    por %xmm5, %xmm2
5451 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
5452 ; SSE2-NEXT:    pxor %xmm8, %xmm4
5453 ; SSE2-NEXT:    pxor %xmm3, %xmm8
5454 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
5455 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5456 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5457 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5458 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5459 ; SSE2-NEXT:    pand %xmm6, %xmm4
5460 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5461 ; SSE2-NEXT:    por %xmm4, %xmm5
5462 ; SSE2-NEXT:    pand %xmm5, %xmm3
5463 ; SSE2-NEXT:    pandn %xmm7, %xmm5
5464 ; SSE2-NEXT:    por %xmm5, %xmm3
5465 ; SSE2-NEXT:    retq
5466 ;
5467 ; SSE4-LABEL: test128:
5468 ; SSE4:       # %bb.0: # %entry
5469 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
5470 ; SSE4-NEXT:    movdqa %xmm6, %xmm9
5471 ; SSE4-NEXT:    movdqa %xmm5, %xmm10
5472 ; SSE4-NEXT:    movdqa %xmm4, %xmm5
5473 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
5474 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5475 ; SSE4-NEXT:    pxor %xmm7, %xmm4
5476 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5477 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5478 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
5479 ; SSE4-NEXT:    movdqa %xmm10, %xmm4
5480 ; SSE4-NEXT:    pxor %xmm7, %xmm4
5481 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
5482 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5483 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5484 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5485 ; SSE4-NEXT:    movdqa %xmm9, %xmm1
5486 ; SSE4-NEXT:    pxor %xmm7, %xmm1
5487 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
5488 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5489 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5490 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5491 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
5492 ; SSE4-NEXT:    pxor %xmm7, %xmm0
5493 ; SSE4-NEXT:    pxor %xmm3, %xmm7
5494 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5495 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
5496 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5497 ; SSE4-NEXT:    movapd %xmm5, %xmm0
5498 ; SSE4-NEXT:    movapd %xmm10, %xmm1
5499 ; SSE4-NEXT:    movapd %xmm9, %xmm2
5500 ; SSE4-NEXT:    movapd %xmm8, %xmm3
5501 ; SSE4-NEXT:    retq
5502 ;
5503 ; AVX1-LABEL: test128:
5504 ; AVX1:       # %bb.0: # %entry
5505 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5506 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5507 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5508 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5509 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5510 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5511 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5512 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5513 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5514 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5515 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5516 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5517 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5518 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5519 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5520 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5521 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5522 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5523 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5524 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5525 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5526 ; AVX1-NEXT:    retq
5527 ;
5528 ; AVX2-LABEL: test128:
5529 ; AVX2:       # %bb.0: # %entry
5530 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5531 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5532 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5533 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5534 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5535 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5536 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5537 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5538 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5539 ; AVX2-NEXT:    retq
5540 ;
5541 ; AVX512F-LABEL: test128:
5542 ; AVX512F:       # %bb.0: # %entry
5543 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5544 ; AVX512F-NEXT:    retq
5545 entry:
5546   %cmp = icmp uge <8 x i64> %a, %b
5547   %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5548   ret <8 x i64> %sel
5549 }
5550
5551 define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5552 ; SSE2-LABEL: test129:
5553 ; SSE2:       # %bb.0: # %entry
5554 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
5555 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5556 ; SSE2-NEXT:    pand %xmm8, %xmm0
5557 ; SSE2-NEXT:    pandn %xmm4, %xmm8
5558 ; SSE2-NEXT:    por %xmm0, %xmm8
5559 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
5560 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5561 ; SSE2-NEXT:    pand %xmm4, %xmm1
5562 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5563 ; SSE2-NEXT:    por %xmm1, %xmm4
5564 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
5565 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
5566 ; SSE2-NEXT:    pand %xmm5, %xmm2
5567 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5568 ; SSE2-NEXT:    por %xmm2, %xmm5
5569 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
5570 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
5571 ; SSE2-NEXT:    pand %xmm6, %xmm3
5572 ; SSE2-NEXT:    pandn %xmm7, %xmm6
5573 ; SSE2-NEXT:    por %xmm3, %xmm6
5574 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
5575 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
5576 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
5577 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
5578 ; SSE2-NEXT:    retq
5579 ;
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
5587 ;
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
5601 ;
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
5607 ;
5608 ; AVX512BW-LABEL: test129:
5609 ; AVX512BW:       # %bb.0: # %entry
5610 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5611 ; AVX512BW-NEXT:    retq
5612 entry:
5613   %cmp = icmp slt <64 x i8> %a, %b
5614   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5615   ret <64 x i8> %sel
5616 }
5617
5618 define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
5619 ; SSE2-LABEL: test130:
5620 ; SSE2:       # %bb.0: # %entry
5621 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
5622 ; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5623 ; SSE2-NEXT:    pand %xmm8, %xmm0
5624 ; SSE2-NEXT:    pandn %xmm4, %xmm8
5625 ; SSE2-NEXT:    por %xmm0, %xmm8
5626 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
5627 ; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5628 ; SSE2-NEXT:    pand %xmm4, %xmm1
5629 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5630 ; SSE2-NEXT:    por %xmm1, %xmm4
5631 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
5632 ; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
5633 ; SSE2-NEXT:    pand %xmm5, %xmm2
5634 ; SSE2-NEXT:    pandn %xmm6, %xmm5
5635 ; SSE2-NEXT:    por %xmm2, %xmm5
5636 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
5637 ; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
5638 ; SSE2-NEXT:    pand %xmm6, %xmm3
5639 ; SSE2-NEXT:    pandn %xmm7, %xmm6
5640 ; SSE2-NEXT:    por %xmm3, %xmm6
5641 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
5642 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
5643 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
5644 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
5645 ; SSE2-NEXT:    retq
5646 ;
5647 ; SSE4-LABEL: test130:
5648 ; SSE4:       # %bb.0: # %entry
5649 ; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5650 ; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5651 ; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5652 ; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5653 ; SSE4-NEXT:    retq
5654 ;
5655 ; AVX1-LABEL: test130:
5656 ; AVX1:       # %bb.0: # %entry
5657 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5658 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5659 ; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5660 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5661 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5662 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5663 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5664 ; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5665 ; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5666 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5667 ; AVX1-NEXT:    retq
5668 ;
5669 ; AVX2-LABEL: test130:
5670 ; AVX2:       # %bb.0: # %entry
5671 ; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5672 ; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5673 ; AVX2-NEXT:    retq
5674 ;
5675 ; AVX512BW-LABEL: test130:
5676 ; AVX512BW:       # %bb.0: # %entry
5677 ; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5678 ; AVX512BW-NEXT:    retq
5679 entry:
5680   %cmp = icmp sle <64 x i8> %a, %b
5681   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5682   ret <64 x i8> %sel
5683 }
5684
5685 define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
5686 ; SSE2-LABEL: test131:
5687 ; SSE2:       # %bb.0: # %entry
5688 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
5689 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5690 ; SSE2-NEXT:    pand %xmm8, %xmm0
5691 ; SSE2-NEXT:    pandn %xmm4, %xmm8
5692 ; SSE2-NEXT:    por %xmm8, %xmm0
5693 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
5694 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5695 ; SSE2-NEXT:    pand %xmm4, %xmm1
5696 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5697 ; SSE2-NEXT:    por %xmm4, %xmm1
5698 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
5699 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5700 ; SSE2-NEXT:    pand %xmm4, %xmm2
5701 ; SSE2-NEXT:    pandn %xmm6, %xmm4
5702 ; SSE2-NEXT:    por %xmm4, %xmm2
5703 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
5704 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5705 ; SSE2-NEXT:    pand %xmm4, %xmm3
5706 ; SSE2-NEXT:    pandn %xmm7, %xmm4
5707 ; SSE2-NEXT:    por %xmm4, %xmm3
5708 ; SSE2-NEXT:    retq
5709 ;
5710 ; SSE4-LABEL: test131:
5711 ; SSE4:       # %bb.0: # %entry
5712 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
5713 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
5714 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
5715 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
5716 ; SSE4-NEXT:    retq
5717 ;
5718 ; AVX1-LABEL: test131:
5719 ; AVX1:       # %bb.0: # %entry
5720 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5721 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5722 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5723 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5724 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5725 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5726 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5727 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5728 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5729 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5730 ; AVX1-NEXT:    retq
5731 ;
5732 ; AVX2-LABEL: test131:
5733 ; AVX2:       # %bb.0: # %entry
5734 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5735 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5736 ; AVX2-NEXT:    retq
5737 ;
5738 ; AVX512BW-LABEL: test131:
5739 ; AVX512BW:       # %bb.0: # %entry
5740 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5741 ; AVX512BW-NEXT:    retq
5742 entry:
5743   %cmp = icmp sgt <64 x i8> %a, %b
5744   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5745   ret <64 x i8> %sel
5746 }
5747
5748 define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
5749 ; SSE2-LABEL: test132:
5750 ; SSE2:       # %bb.0: # %entry
5751 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
5752 ; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5753 ; SSE2-NEXT:    pand %xmm8, %xmm0
5754 ; SSE2-NEXT:    pandn %xmm4, %xmm8
5755 ; SSE2-NEXT:    por %xmm8, %xmm0
5756 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
5757 ; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5758 ; SSE2-NEXT:    pand %xmm4, %xmm1
5759 ; SSE2-NEXT:    pandn %xmm5, %xmm4
5760 ; SSE2-NEXT:    por %xmm4, %xmm1
5761 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
5762 ; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5763 ; SSE2-NEXT:    pand %xmm4, %xmm2
5764 ; SSE2-NEXT:    pandn %xmm6, %xmm4
5765 ; SSE2-NEXT:    por %xmm4, %xmm2
5766 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
5767 ; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5768 ; SSE2-NEXT:    pand %xmm4, %xmm3
5769 ; SSE2-NEXT:    pandn %xmm7, %xmm4
5770 ; SSE2-NEXT:    por %xmm4, %xmm3
5771 ; SSE2-NEXT:    retq
5772 ;
5773 ; SSE4-LABEL: test132:
5774 ; SSE4:       # %bb.0: # %entry
5775 ; SSE4-NEXT:    pminsb %xmm4, %xmm0
5776 ; SSE4-NEXT:    pminsb %xmm5, %xmm1
5777 ; SSE4-NEXT:    pminsb %xmm6, %xmm2
5778 ; SSE4-NEXT:    pminsb %xmm7, %xmm3
5779 ; SSE4-NEXT:    retq
5780 ;
5781 ; AVX1-LABEL: test132:
5782 ; AVX1:       # %bb.0: # %entry
5783 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5784 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5785 ; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5786 ; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5787 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5788 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5789 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5790 ; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5791 ; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5792 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5793 ; AVX1-NEXT:    retq
5794 ;
5795 ; AVX2-LABEL: test132:
5796 ; AVX2:       # %bb.0: # %entry
5797 ; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5798 ; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5799 ; AVX2-NEXT:    retq
5800 ;
5801 ; AVX512BW-LABEL: test132:
5802 ; AVX512BW:       # %bb.0: # %entry
5803 ; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5804 ; AVX512BW-NEXT:    retq
5805 entry:
5806   %cmp = icmp sge <64 x i8> %a, %b
5807   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5808   ret <64 x i8> %sel
5809 }
5810
5811 define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
5812 ; SSE-LABEL: test133:
5813 ; SSE:       # %bb.0: # %entry
5814 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
5815 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
5816 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
5817 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
5818 ; SSE-NEXT:    retq
5819 ;
5820 ; AVX1-LABEL: test133:
5821 ; AVX1:       # %bb.0: # %entry
5822 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5823 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5824 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5825 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5826 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5827 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5828 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5829 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5830 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5831 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5832 ; AVX1-NEXT:    retq
5833 ;
5834 ; AVX2-LABEL: test133:
5835 ; AVX2:       # %bb.0: # %entry
5836 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5837 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5838 ; AVX2-NEXT:    retq
5839 ;
5840 ; AVX512BW-LABEL: test133:
5841 ; AVX512BW:       # %bb.0: # %entry
5842 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5843 ; AVX512BW-NEXT:    retq
5844 entry:
5845   %cmp = icmp ult <64 x i8> %a, %b
5846   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5847   ret <64 x i8> %sel
5848 }
5849
5850 define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
5851 ; SSE-LABEL: test134:
5852 ; SSE:       # %bb.0: # %entry
5853 ; SSE-NEXT:    pmaxub %xmm4, %xmm0
5854 ; SSE-NEXT:    pmaxub %xmm5, %xmm1
5855 ; SSE-NEXT:    pmaxub %xmm6, %xmm2
5856 ; SSE-NEXT:    pmaxub %xmm7, %xmm3
5857 ; SSE-NEXT:    retq
5858 ;
5859 ; AVX1-LABEL: test134:
5860 ; AVX1:       # %bb.0: # %entry
5861 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5862 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5863 ; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5864 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5865 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5866 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5867 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5868 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5869 ; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5870 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5871 ; AVX1-NEXT:    retq
5872 ;
5873 ; AVX2-LABEL: test134:
5874 ; AVX2:       # %bb.0: # %entry
5875 ; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5876 ; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5877 ; AVX2-NEXT:    retq
5878 ;
5879 ; AVX512BW-LABEL: test134:
5880 ; AVX512BW:       # %bb.0: # %entry
5881 ; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5882 ; AVX512BW-NEXT:    retq
5883 entry:
5884   %cmp = icmp ule <64 x i8> %a, %b
5885   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5886   ret <64 x i8> %sel
5887 }
5888
5889 define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
5890 ; SSE-LABEL: test135:
5891 ; SSE:       # %bb.0: # %entry
5892 ; SSE-NEXT:    pminub %xmm4, %xmm0
5893 ; SSE-NEXT:    pminub %xmm5, %xmm1
5894 ; SSE-NEXT:    pminub %xmm6, %xmm2
5895 ; SSE-NEXT:    pminub %xmm7, %xmm3
5896 ; SSE-NEXT:    retq
5897 ;
5898 ; AVX1-LABEL: test135:
5899 ; AVX1:       # %bb.0: # %entry
5900 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5901 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5902 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
5903 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
5904 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5905 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5906 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5907 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
5908 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
5909 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5910 ; AVX1-NEXT:    retq
5911 ;
5912 ; AVX2-LABEL: test135:
5913 ; AVX2:       # %bb.0: # %entry
5914 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
5915 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
5916 ; AVX2-NEXT:    retq
5917 ;
5918 ; AVX512BW-LABEL: test135:
5919 ; AVX512BW:       # %bb.0: # %entry
5920 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
5921 ; AVX512BW-NEXT:    retq
5922 entry:
5923   %cmp = icmp ugt <64 x i8> %a, %b
5924   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5925   ret <64 x i8> %sel
5926 }
5927
5928 define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
5929 ; SSE-LABEL: test136:
5930 ; SSE:       # %bb.0: # %entry
5931 ; SSE-NEXT:    pminub %xmm4, %xmm0
5932 ; SSE-NEXT:    pminub %xmm5, %xmm1
5933 ; SSE-NEXT:    pminub %xmm6, %xmm2
5934 ; SSE-NEXT:    pminub %xmm7, %xmm3
5935 ; SSE-NEXT:    retq
5936 ;
5937 ; AVX1-LABEL: test136:
5938 ; AVX1:       # %bb.0: # %entry
5939 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5940 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5941 ; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
5942 ; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
5943 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5944 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5945 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5946 ; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
5947 ; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
5948 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5949 ; AVX1-NEXT:    retq
5950 ;
5951 ; AVX2-LABEL: test136:
5952 ; AVX2:       # %bb.0: # %entry
5953 ; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
5954 ; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
5955 ; AVX2-NEXT:    retq
5956 ;
5957 ; AVX512BW-LABEL: test136:
5958 ; AVX512BW:       # %bb.0: # %entry
5959 ; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
5960 ; AVX512BW-NEXT:    retq
5961 entry:
5962   %cmp = icmp uge <64 x i8> %a, %b
5963   %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5964   ret <64 x i8> %sel
5965 }
5966
5967 define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
5968 ; SSE-LABEL: test137:
5969 ; SSE:       # %bb.0: # %entry
5970 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
5971 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
5972 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
5973 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
5974 ; SSE-NEXT:    retq
5975 ;
5976 ; AVX1-LABEL: test137:
5977 ; AVX1:       # %bb.0: # %entry
5978 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5979 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5980 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
5981 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
5982 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5983 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5984 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5985 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
5986 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
5987 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5988 ; AVX1-NEXT:    retq
5989 ;
5990 ; AVX2-LABEL: test137:
5991 ; AVX2:       # %bb.0: # %entry
5992 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
5993 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
5994 ; AVX2-NEXT:    retq
5995 ;
5996 ; AVX512BW-LABEL: test137:
5997 ; AVX512BW:       # %bb.0: # %entry
5998 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
5999 ; AVX512BW-NEXT:    retq
6000 entry:
6001   %cmp = icmp slt <32 x i16> %a, %b
6002   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6003   ret <32 x i16> %sel
6004 }
6005
6006 define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
6007 ; SSE-LABEL: test138:
6008 ; SSE:       # %bb.0: # %entry
6009 ; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6010 ; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6011 ; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6012 ; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6013 ; SSE-NEXT:    retq
6014 ;
6015 ; AVX1-LABEL: test138:
6016 ; AVX1:       # %bb.0: # %entry
6017 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6018 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6019 ; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6020 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6021 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6022 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6023 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6024 ; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6025 ; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6026 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6027 ; AVX1-NEXT:    retq
6028 ;
6029 ; AVX2-LABEL: test138:
6030 ; AVX2:       # %bb.0: # %entry
6031 ; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6032 ; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6033 ; AVX2-NEXT:    retq
6034 ;
6035 ; AVX512BW-LABEL: test138:
6036 ; AVX512BW:       # %bb.0: # %entry
6037 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6038 ; AVX512BW-NEXT:    retq
6039 entry:
6040   %cmp = icmp sle <32 x i16> %a, %b
6041   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6042   ret <32 x i16> %sel
6043 }
6044
6045 define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6046 ; SSE-LABEL: test139:
6047 ; SSE:       # %bb.0: # %entry
6048 ; SSE-NEXT:    pminsw %xmm4, %xmm0
6049 ; SSE-NEXT:    pminsw %xmm5, %xmm1
6050 ; SSE-NEXT:    pminsw %xmm6, %xmm2
6051 ; SSE-NEXT:    pminsw %xmm7, %xmm3
6052 ; SSE-NEXT:    retq
6053 ;
6054 ; AVX1-LABEL: test139:
6055 ; AVX1:       # %bb.0: # %entry
6056 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6057 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6058 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6059 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6060 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6061 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6062 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6063 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6064 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6065 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6066 ; AVX1-NEXT:    retq
6067 ;
6068 ; AVX2-LABEL: test139:
6069 ; AVX2:       # %bb.0: # %entry
6070 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6071 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6072 ; AVX2-NEXT:    retq
6073 ;
6074 ; AVX512BW-LABEL: test139:
6075 ; AVX512BW:       # %bb.0: # %entry
6076 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6077 ; AVX512BW-NEXT:    retq
6078 entry:
6079   %cmp = icmp sgt <32 x i16> %a, %b
6080   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6081   ret <32 x i16> %sel
6082 }
6083
6084 define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6085 ; SSE-LABEL: test140:
6086 ; SSE:       # %bb.0: # %entry
6087 ; SSE-NEXT:    pminsw %xmm4, %xmm0
6088 ; SSE-NEXT:    pminsw %xmm5, %xmm1
6089 ; SSE-NEXT:    pminsw %xmm6, %xmm2
6090 ; SSE-NEXT:    pminsw %xmm7, %xmm3
6091 ; SSE-NEXT:    retq
6092 ;
6093 ; AVX1-LABEL: test140:
6094 ; AVX1:       # %bb.0: # %entry
6095 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6096 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6097 ; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6098 ; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6099 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6100 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6101 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6102 ; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6103 ; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6104 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6105 ; AVX1-NEXT:    retq
6106 ;
6107 ; AVX2-LABEL: test140:
6108 ; AVX2:       # %bb.0: # %entry
6109 ; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6110 ; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6111 ; AVX2-NEXT:    retq
6112 ;
6113 ; AVX512BW-LABEL: test140:
6114 ; AVX512BW:       # %bb.0: # %entry
6115 ; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6116 ; AVX512BW-NEXT:    retq
6117 entry:
6118   %cmp = icmp sge <32 x i16> %a, %b
6119   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6120   ret <32 x i16> %sel
6121 }
6122
6123 define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6124 ; SSE2-LABEL: test141:
6125 ; SSE2:       # %bb.0: # %entry
6126 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6127 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6128 ; SSE2-NEXT:    pxor %xmm8, %xmm0
6129 ; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
6130 ; SSE2-NEXT:    pxor %xmm8, %xmm0
6131 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6132 ; SSE2-NEXT:    pxor %xmm8, %xmm1
6133 ; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
6134 ; SSE2-NEXT:    pxor %xmm8, %xmm1
6135 ; SSE2-NEXT:    pxor %xmm8, %xmm6
6136 ; SSE2-NEXT:    pxor %xmm8, %xmm2
6137 ; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
6138 ; SSE2-NEXT:    pxor %xmm8, %xmm2
6139 ; SSE2-NEXT:    pxor %xmm8, %xmm7
6140 ; SSE2-NEXT:    pxor %xmm8, %xmm3
6141 ; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
6142 ; SSE2-NEXT:    pxor %xmm8, %xmm3
6143 ; SSE2-NEXT:    retq
6144 ;
6145 ; SSE4-LABEL: test141:
6146 ; SSE4:       # %bb.0: # %entry
6147 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6148 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6149 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6150 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6151 ; SSE4-NEXT:    retq
6152 ;
6153 ; AVX1-LABEL: test141:
6154 ; AVX1:       # %bb.0: # %entry
6155 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6156 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6157 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6158 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6159 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6160 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6161 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6162 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6163 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6164 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6165 ; AVX1-NEXT:    retq
6166 ;
6167 ; AVX2-LABEL: test141:
6168 ; AVX2:       # %bb.0: # %entry
6169 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6170 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6171 ; AVX2-NEXT:    retq
6172 ;
6173 ; AVX512BW-LABEL: test141:
6174 ; AVX512BW:       # %bb.0: # %entry
6175 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6176 ; AVX512BW-NEXT:    retq
6177 entry:
6178   %cmp = icmp ult <32 x i16> %a, %b
6179   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6180   ret <32 x i16> %sel
6181 }
6182
6183 define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6184 ; SSE2-LABEL: test142:
6185 ; SSE2:       # %bb.0: # %entry
6186 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6187 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6188 ; SSE2-NEXT:    pxor %xmm8, %xmm0
6189 ; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
6190 ; SSE2-NEXT:    pxor %xmm8, %xmm0
6191 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6192 ; SSE2-NEXT:    pxor %xmm8, %xmm1
6193 ; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
6194 ; SSE2-NEXT:    pxor %xmm8, %xmm1
6195 ; SSE2-NEXT:    pxor %xmm8, %xmm6
6196 ; SSE2-NEXT:    pxor %xmm8, %xmm2
6197 ; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
6198 ; SSE2-NEXT:    pxor %xmm8, %xmm2
6199 ; SSE2-NEXT:    pxor %xmm8, %xmm7
6200 ; SSE2-NEXT:    pxor %xmm8, %xmm3
6201 ; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
6202 ; SSE2-NEXT:    pxor %xmm8, %xmm3
6203 ; SSE2-NEXT:    retq
6204 ;
6205 ; SSE4-LABEL: test142:
6206 ; SSE4:       # %bb.0: # %entry
6207 ; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6208 ; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6209 ; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6210 ; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6211 ; SSE4-NEXT:    retq
6212 ;
6213 ; AVX1-LABEL: test142:
6214 ; AVX1:       # %bb.0: # %entry
6215 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6216 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6217 ; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6218 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6219 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6220 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6221 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6222 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6223 ; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6224 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6225 ; AVX1-NEXT:    retq
6226 ;
6227 ; AVX2-LABEL: test142:
6228 ; AVX2:       # %bb.0: # %entry
6229 ; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6230 ; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6231 ; AVX2-NEXT:    retq
6232 ;
6233 ; AVX512BW-LABEL: test142:
6234 ; AVX512BW:       # %bb.0: # %entry
6235 ; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6236 ; AVX512BW-NEXT:    retq
6237 entry:
6238   %cmp = icmp ule <32 x i16> %a, %b
6239   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6240   ret <32 x i16> %sel
6241 }
6242
6243 define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6244 ; SSE2-LABEL: test143:
6245 ; SSE2:       # %bb.0: # %entry
6246 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6247 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6248 ; SSE2-NEXT:    pxor %xmm8, %xmm0
6249 ; SSE2-NEXT:    pminsw %xmm4, %xmm0
6250 ; SSE2-NEXT:    pxor %xmm8, %xmm0
6251 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6252 ; SSE2-NEXT:    pxor %xmm8, %xmm1
6253 ; SSE2-NEXT:    pminsw %xmm5, %xmm1
6254 ; SSE2-NEXT:    pxor %xmm8, %xmm1
6255 ; SSE2-NEXT:    pxor %xmm8, %xmm6
6256 ; SSE2-NEXT:    pxor %xmm8, %xmm2
6257 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
6258 ; SSE2-NEXT:    pxor %xmm8, %xmm2
6259 ; SSE2-NEXT:    pxor %xmm8, %xmm7
6260 ; SSE2-NEXT:    pxor %xmm8, %xmm3
6261 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
6262 ; SSE2-NEXT:    pxor %xmm8, %xmm3
6263 ; SSE2-NEXT:    retq
6264 ;
6265 ; SSE4-LABEL: test143:
6266 ; SSE4:       # %bb.0: # %entry
6267 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
6268 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
6269 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
6270 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
6271 ; SSE4-NEXT:    retq
6272 ;
6273 ; AVX1-LABEL: test143:
6274 ; AVX1:       # %bb.0: # %entry
6275 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6276 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6277 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6278 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6279 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6280 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6281 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6282 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6283 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6284 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6285 ; AVX1-NEXT:    retq
6286 ;
6287 ; AVX2-LABEL: test143:
6288 ; AVX2:       # %bb.0: # %entry
6289 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6290 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6291 ; AVX2-NEXT:    retq
6292 ;
6293 ; AVX512BW-LABEL: test143:
6294 ; AVX512BW:       # %bb.0: # %entry
6295 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6296 ; AVX512BW-NEXT:    retq
6297 entry:
6298   %cmp = icmp ugt <32 x i16> %a, %b
6299   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6300   ret <32 x i16> %sel
6301 }
6302
6303 define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6304 ; SSE2-LABEL: test144:
6305 ; SSE2:       # %bb.0: # %entry
6306 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6307 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6308 ; SSE2-NEXT:    pxor %xmm8, %xmm0
6309 ; SSE2-NEXT:    pminsw %xmm4, %xmm0
6310 ; SSE2-NEXT:    pxor %xmm8, %xmm0
6311 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6312 ; SSE2-NEXT:    pxor %xmm8, %xmm1
6313 ; SSE2-NEXT:    pminsw %xmm5, %xmm1
6314 ; SSE2-NEXT:    pxor %xmm8, %xmm1
6315 ; SSE2-NEXT:    pxor %xmm8, %xmm6
6316 ; SSE2-NEXT:    pxor %xmm8, %xmm2
6317 ; SSE2-NEXT:    pminsw %xmm6, %xmm2
6318 ; SSE2-NEXT:    pxor %xmm8, %xmm2
6319 ; SSE2-NEXT:    pxor %xmm8, %xmm7
6320 ; SSE2-NEXT:    pxor %xmm8, %xmm3
6321 ; SSE2-NEXT:    pminsw %xmm7, %xmm3
6322 ; SSE2-NEXT:    pxor %xmm8, %xmm3
6323 ; SSE2-NEXT:    retq
6324 ;
6325 ; SSE4-LABEL: test144:
6326 ; SSE4:       # %bb.0: # %entry
6327 ; SSE4-NEXT:    pminuw %xmm4, %xmm0
6328 ; SSE4-NEXT:    pminuw %xmm5, %xmm1
6329 ; SSE4-NEXT:    pminuw %xmm6, %xmm2
6330 ; SSE4-NEXT:    pminuw %xmm7, %xmm3
6331 ; SSE4-NEXT:    retq
6332 ;
6333 ; AVX1-LABEL: test144:
6334 ; AVX1:       # %bb.0: # %entry
6335 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6336 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6337 ; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6338 ; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6339 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6340 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6341 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6342 ; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6343 ; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6344 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6345 ; AVX1-NEXT:    retq
6346 ;
6347 ; AVX2-LABEL: test144:
6348 ; AVX2:       # %bb.0: # %entry
6349 ; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6350 ; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6351 ; AVX2-NEXT:    retq
6352 ;
6353 ; AVX512BW-LABEL: test144:
6354 ; AVX512BW:       # %bb.0: # %entry
6355 ; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6356 ; AVX512BW-NEXT:    retq
6357 entry:
6358   %cmp = icmp uge <32 x i16> %a, %b
6359   %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6360   ret <32 x i16> %sel
6361 }
6362
6363 define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6364 ; SSE2-LABEL: test145:
6365 ; SSE2:       # %bb.0: # %entry
6366 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
6367 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6368 ; SSE2-NEXT:    pand %xmm8, %xmm0
6369 ; SSE2-NEXT:    pandn %xmm4, %xmm8
6370 ; SSE2-NEXT:    por %xmm0, %xmm8
6371 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6372 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6373 ; SSE2-NEXT:    pand %xmm4, %xmm1
6374 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6375 ; SSE2-NEXT:    por %xmm1, %xmm4
6376 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
6377 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
6378 ; SSE2-NEXT:    pand %xmm5, %xmm2
6379 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6380 ; SSE2-NEXT:    por %xmm2, %xmm5
6381 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
6382 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
6383 ; SSE2-NEXT:    pand %xmm6, %xmm3
6384 ; SSE2-NEXT:    pandn %xmm7, %xmm6
6385 ; SSE2-NEXT:    por %xmm3, %xmm6
6386 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
6387 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
6388 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
6389 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
6390 ; SSE2-NEXT:    retq
6391 ;
6392 ; SSE4-LABEL: test145:
6393 ; SSE4:       # %bb.0: # %entry
6394 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6395 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6396 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6397 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6398 ; SSE4-NEXT:    retq
6399 ;
6400 ; AVX1-LABEL: test145:
6401 ; AVX1:       # %bb.0: # %entry
6402 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6403 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6404 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6405 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6406 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6407 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6408 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6409 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6410 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6411 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6412 ; AVX1-NEXT:    retq
6413 ;
6414 ; AVX2-LABEL: test145:
6415 ; AVX2:       # %bb.0: # %entry
6416 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6417 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6418 ; AVX2-NEXT:    retq
6419 ;
6420 ; AVX512F-LABEL: test145:
6421 ; AVX512F:       # %bb.0: # %entry
6422 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6423 ; AVX512F-NEXT:    retq
6424 entry:
6425   %cmp = icmp slt <16 x i32> %a, %b
6426   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6427   ret <16 x i32> %sel
6428 }
6429
6430 define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6431 ; SSE2-LABEL: test146:
6432 ; SSE2:       # %bb.0: # %entry
6433 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
6434 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6435 ; SSE2-NEXT:    pand %xmm8, %xmm0
6436 ; SSE2-NEXT:    pandn %xmm4, %xmm8
6437 ; SSE2-NEXT:    por %xmm0, %xmm8
6438 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6439 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6440 ; SSE2-NEXT:    pand %xmm4, %xmm1
6441 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6442 ; SSE2-NEXT:    por %xmm1, %xmm4
6443 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
6444 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
6445 ; SSE2-NEXT:    pand %xmm5, %xmm2
6446 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6447 ; SSE2-NEXT:    por %xmm2, %xmm5
6448 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
6449 ; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
6450 ; SSE2-NEXT:    pand %xmm6, %xmm3
6451 ; SSE2-NEXT:    pandn %xmm7, %xmm6
6452 ; SSE2-NEXT:    por %xmm3, %xmm6
6453 ; SSE2-NEXT:    movdqa %xmm8, %xmm0
6454 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
6455 ; SSE2-NEXT:    movdqa %xmm5, %xmm2
6456 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
6457 ; SSE2-NEXT:    retq
6458 ;
6459 ; SSE4-LABEL: test146:
6460 ; SSE4:       # %bb.0: # %entry
6461 ; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6462 ; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6463 ; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6464 ; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6465 ; SSE4-NEXT:    retq
6466 ;
6467 ; AVX1-LABEL: test146:
6468 ; AVX1:       # %bb.0: # %entry
6469 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6470 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6471 ; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6472 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6473 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6474 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6475 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6476 ; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6477 ; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6478 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6479 ; AVX1-NEXT:    retq
6480 ;
6481 ; AVX2-LABEL: test146:
6482 ; AVX2:       # %bb.0: # %entry
6483 ; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6484 ; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6485 ; AVX2-NEXT:    retq
6486 ;
6487 ; AVX512F-LABEL: test146:
6488 ; AVX512F:       # %bb.0: # %entry
6489 ; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6490 ; AVX512F-NEXT:    retq
6491 entry:
6492   %cmp = icmp sle <16 x i32> %a, %b
6493   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6494   ret <16 x i32> %sel
6495 }
6496
6497 define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
6498 ; SSE2-LABEL: test147:
6499 ; SSE2:       # %bb.0: # %entry
6500 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
6501 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6502 ; SSE2-NEXT:    pand %xmm8, %xmm0
6503 ; SSE2-NEXT:    pandn %xmm4, %xmm8
6504 ; SSE2-NEXT:    por %xmm8, %xmm0
6505 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6506 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6507 ; SSE2-NEXT:    pand %xmm4, %xmm1
6508 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6509 ; SSE2-NEXT:    por %xmm4, %xmm1
6510 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
6511 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6512 ; SSE2-NEXT:    pand %xmm4, %xmm2
6513 ; SSE2-NEXT:    pandn %xmm6, %xmm4
6514 ; SSE2-NEXT:    por %xmm4, %xmm2
6515 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
6516 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6517 ; SSE2-NEXT:    pand %xmm4, %xmm3
6518 ; SSE2-NEXT:    pandn %xmm7, %xmm4
6519 ; SSE2-NEXT:    por %xmm4, %xmm3
6520 ; SSE2-NEXT:    retq
6521 ;
6522 ; SSE4-LABEL: test147:
6523 ; SSE4:       # %bb.0: # %entry
6524 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
6525 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
6526 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
6527 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
6528 ; SSE4-NEXT:    retq
6529 ;
6530 ; AVX1-LABEL: test147:
6531 ; AVX1:       # %bb.0: # %entry
6532 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6533 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6534 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6535 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6536 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6537 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6538 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6539 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6540 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6541 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6542 ; AVX1-NEXT:    retq
6543 ;
6544 ; AVX2-LABEL: test147:
6545 ; AVX2:       # %bb.0: # %entry
6546 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6547 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6548 ; AVX2-NEXT:    retq
6549 ;
6550 ; AVX512F-LABEL: test147:
6551 ; AVX512F:       # %bb.0: # %entry
6552 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6553 ; AVX512F-NEXT:    retq
6554 entry:
6555   %cmp = icmp sgt <16 x i32> %a, %b
6556   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6557   ret <16 x i32> %sel
6558 }
6559
6560 define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
6561 ; SSE2-LABEL: test148:
6562 ; SSE2:       # %bb.0: # %entry
6563 ; SSE2-NEXT:    movdqa %xmm4, %xmm8
6564 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6565 ; SSE2-NEXT:    pand %xmm8, %xmm0
6566 ; SSE2-NEXT:    pandn %xmm4, %xmm8
6567 ; SSE2-NEXT:    por %xmm8, %xmm0
6568 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6569 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6570 ; SSE2-NEXT:    pand %xmm4, %xmm1
6571 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6572 ; SSE2-NEXT:    por %xmm4, %xmm1
6573 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
6574 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6575 ; SSE2-NEXT:    pand %xmm4, %xmm2
6576 ; SSE2-NEXT:    pandn %xmm6, %xmm4
6577 ; SSE2-NEXT:    por %xmm4, %xmm2
6578 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
6579 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6580 ; SSE2-NEXT:    pand %xmm4, %xmm3
6581 ; SSE2-NEXT:    pandn %xmm7, %xmm4
6582 ; SSE2-NEXT:    por %xmm4, %xmm3
6583 ; SSE2-NEXT:    retq
6584 ;
6585 ; SSE4-LABEL: test148:
6586 ; SSE4:       # %bb.0: # %entry
6587 ; SSE4-NEXT:    pminsd %xmm4, %xmm0
6588 ; SSE4-NEXT:    pminsd %xmm5, %xmm1
6589 ; SSE4-NEXT:    pminsd %xmm6, %xmm2
6590 ; SSE4-NEXT:    pminsd %xmm7, %xmm3
6591 ; SSE4-NEXT:    retq
6592 ;
6593 ; AVX1-LABEL: test148:
6594 ; AVX1:       # %bb.0: # %entry
6595 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6596 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6597 ; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6598 ; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6599 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6600 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6601 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6602 ; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6603 ; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6604 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6605 ; AVX1-NEXT:    retq
6606 ;
6607 ; AVX2-LABEL: test148:
6608 ; AVX2:       # %bb.0: # %entry
6609 ; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6610 ; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6611 ; AVX2-NEXT:    retq
6612 ;
6613 ; AVX512F-LABEL: test148:
6614 ; AVX512F:       # %bb.0: # %entry
6615 ; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6616 ; AVX512F-NEXT:    retq
6617 entry:
6618   %cmp = icmp sge <16 x i32> %a, %b
6619   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6620   ret <16 x i32> %sel
6621 }
6622
6623 define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
6624 ; SSE2-LABEL: test149:
6625 ; SSE2:       # %bb.0: # %entry
6626 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
6627 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
6628 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
6629 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
6630 ; SSE2-NEXT:    pxor %xmm9, %xmm1
6631 ; SSE2-NEXT:    pxor %xmm9, %xmm0
6632 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6633 ; SSE2-NEXT:    pand %xmm0, %xmm10
6634 ; SSE2-NEXT:    pandn %xmm4, %xmm0
6635 ; SSE2-NEXT:    por %xmm10, %xmm0
6636 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6637 ; SSE2-NEXT:    pxor %xmm9, %xmm4
6638 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
6639 ; SSE2-NEXT:    pxor %xmm9, %xmm1
6640 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
6641 ; SSE2-NEXT:    pand %xmm1, %xmm8
6642 ; SSE2-NEXT:    pandn %xmm5, %xmm1
6643 ; SSE2-NEXT:    por %xmm8, %xmm1
6644 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
6645 ; SSE2-NEXT:    pxor %xmm9, %xmm5
6646 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6647 ; SSE2-NEXT:    pxor %xmm9, %xmm4
6648 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6649 ; SSE2-NEXT:    pand %xmm4, %xmm2
6650 ; SSE2-NEXT:    pandn %xmm6, %xmm4
6651 ; SSE2-NEXT:    por %xmm2, %xmm4
6652 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
6653 ; SSE2-NEXT:    pxor %xmm9, %xmm2
6654 ; SSE2-NEXT:    pxor %xmm3, %xmm9
6655 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
6656 ; SSE2-NEXT:    pand %xmm9, %xmm3
6657 ; SSE2-NEXT:    pandn %xmm7, %xmm9
6658 ; SSE2-NEXT:    por %xmm9, %xmm3
6659 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
6660 ; SSE2-NEXT:    retq
6661 ;
6662 ; SSE4-LABEL: test149:
6663 ; SSE4:       # %bb.0: # %entry
6664 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6665 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6666 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6667 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6668 ; SSE4-NEXT:    retq
6669 ;
6670 ; AVX1-LABEL: test149:
6671 ; AVX1:       # %bb.0: # %entry
6672 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6673 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6674 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6675 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6676 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6677 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6678 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6679 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6680 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6681 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6682 ; AVX1-NEXT:    retq
6683 ;
6684 ; AVX2-LABEL: test149:
6685 ; AVX2:       # %bb.0: # %entry
6686 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6687 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6688 ; AVX2-NEXT:    retq
6689 ;
6690 ; AVX512F-LABEL: test149:
6691 ; AVX512F:       # %bb.0: # %entry
6692 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6693 ; AVX512F-NEXT:    retq
6694 entry:
6695   %cmp = icmp ult <16 x i32> %a, %b
6696   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6697   ret <16 x i32> %sel
6698 }
6699
6700 define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
6701 ; SSE2-LABEL: test150:
6702 ; SSE2:       # %bb.0: # %entry
6703 ; SSE2-NEXT:    movdqa %xmm1, %xmm8
6704 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
6705 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
6706 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
6707 ; SSE2-NEXT:    pxor %xmm9, %xmm1
6708 ; SSE2-NEXT:    pxor %xmm9, %xmm0
6709 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6710 ; SSE2-NEXT:    pand %xmm0, %xmm10
6711 ; SSE2-NEXT:    pandn %xmm4, %xmm0
6712 ; SSE2-NEXT:    por %xmm10, %xmm0
6713 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6714 ; SSE2-NEXT:    pxor %xmm9, %xmm4
6715 ; SSE2-NEXT:    movdqa %xmm8, %xmm1
6716 ; SSE2-NEXT:    pxor %xmm9, %xmm1
6717 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
6718 ; SSE2-NEXT:    pand %xmm1, %xmm8
6719 ; SSE2-NEXT:    pandn %xmm5, %xmm1
6720 ; SSE2-NEXT:    por %xmm8, %xmm1
6721 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
6722 ; SSE2-NEXT:    pxor %xmm9, %xmm5
6723 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6724 ; SSE2-NEXT:    pxor %xmm9, %xmm4
6725 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6726 ; SSE2-NEXT:    pand %xmm4, %xmm2
6727 ; SSE2-NEXT:    pandn %xmm6, %xmm4
6728 ; SSE2-NEXT:    por %xmm2, %xmm4
6729 ; SSE2-NEXT:    movdqa %xmm7, %xmm2
6730 ; SSE2-NEXT:    pxor %xmm9, %xmm2
6731 ; SSE2-NEXT:    pxor %xmm3, %xmm9
6732 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
6733 ; SSE2-NEXT:    pand %xmm9, %xmm3
6734 ; SSE2-NEXT:    pandn %xmm7, %xmm9
6735 ; SSE2-NEXT:    por %xmm9, %xmm3
6736 ; SSE2-NEXT:    movdqa %xmm4, %xmm2
6737 ; SSE2-NEXT:    retq
6738 ;
6739 ; SSE4-LABEL: test150:
6740 ; SSE4:       # %bb.0: # %entry
6741 ; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6742 ; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6743 ; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6744 ; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6745 ; SSE4-NEXT:    retq
6746 ;
6747 ; AVX1-LABEL: test150:
6748 ; AVX1:       # %bb.0: # %entry
6749 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6750 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6751 ; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6752 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6753 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6754 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6755 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6756 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6757 ; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6758 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6759 ; AVX1-NEXT:    retq
6760 ;
6761 ; AVX2-LABEL: test150:
6762 ; AVX2:       # %bb.0: # %entry
6763 ; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6764 ; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6765 ; AVX2-NEXT:    retq
6766 ;
6767 ; AVX512F-LABEL: test150:
6768 ; AVX512F:       # %bb.0: # %entry
6769 ; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6770 ; AVX512F-NEXT:    retq
6771 entry:
6772   %cmp = icmp ule <16 x i32> %a, %b
6773   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6774   ret <16 x i32> %sel
6775 }
6776
6777 define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
6778 ; SSE2-LABEL: test151:
6779 ; SSE2:       # %bb.0: # %entry
6780 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6781 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
6782 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6783 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
6784 ; SSE2-NEXT:    pxor %xmm8, %xmm10
6785 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6786 ; SSE2-NEXT:    pand %xmm10, %xmm0
6787 ; SSE2-NEXT:    pandn %xmm4, %xmm10
6788 ; SSE2-NEXT:    por %xmm10, %xmm0
6789 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
6790 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6791 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6792 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6793 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6794 ; SSE2-NEXT:    pand %xmm4, %xmm1
6795 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6796 ; SSE2-NEXT:    por %xmm4, %xmm1
6797 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6798 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6799 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
6800 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6801 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6802 ; SSE2-NEXT:    pand %xmm5, %xmm2
6803 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6804 ; SSE2-NEXT:    por %xmm5, %xmm2
6805 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
6806 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6807 ; SSE2-NEXT:    pxor %xmm7, %xmm8
6808 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6809 ; SSE2-NEXT:    pand %xmm8, %xmm3
6810 ; SSE2-NEXT:    pandn %xmm7, %xmm8
6811 ; SSE2-NEXT:    por %xmm8, %xmm3
6812 ; SSE2-NEXT:    retq
6813 ;
6814 ; SSE4-LABEL: test151:
6815 ; SSE4:       # %bb.0: # %entry
6816 ; SSE4-NEXT:    pminud %xmm4, %xmm0
6817 ; SSE4-NEXT:    pminud %xmm5, %xmm1
6818 ; SSE4-NEXT:    pminud %xmm6, %xmm2
6819 ; SSE4-NEXT:    pminud %xmm7, %xmm3
6820 ; SSE4-NEXT:    retq
6821 ;
6822 ; AVX1-LABEL: test151:
6823 ; AVX1:       # %bb.0: # %entry
6824 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6825 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6826 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
6827 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
6828 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6829 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6830 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6831 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
6832 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
6833 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6834 ; AVX1-NEXT:    retq
6835 ;
6836 ; AVX2-LABEL: test151:
6837 ; AVX2:       # %bb.0: # %entry
6838 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
6839 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
6840 ; AVX2-NEXT:    retq
6841 ;
6842 ; AVX512F-LABEL: test151:
6843 ; AVX512F:       # %bb.0: # %entry
6844 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
6845 ; AVX512F-NEXT:    retq
6846 entry:
6847   %cmp = icmp ugt <16 x i32> %a, %b
6848   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6849   ret <16 x i32> %sel
6850 }
6851
6852 define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
6853 ; SSE2-LABEL: test152:
6854 ; SSE2:       # %bb.0: # %entry
6855 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6856 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
6857 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6858 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
6859 ; SSE2-NEXT:    pxor %xmm8, %xmm10
6860 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6861 ; SSE2-NEXT:    pand %xmm10, %xmm0
6862 ; SSE2-NEXT:    pandn %xmm4, %xmm10
6863 ; SSE2-NEXT:    por %xmm10, %xmm0
6864 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
6865 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6866 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
6867 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6868 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6869 ; SSE2-NEXT:    pand %xmm4, %xmm1
6870 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6871 ; SSE2-NEXT:    por %xmm4, %xmm1
6872 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
6873 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6874 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
6875 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6876 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6877 ; SSE2-NEXT:    pand %xmm5, %xmm2
6878 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6879 ; SSE2-NEXT:    por %xmm5, %xmm2
6880 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
6881 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6882 ; SSE2-NEXT:    pxor %xmm7, %xmm8
6883 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6884 ; SSE2-NEXT:    pand %xmm8, %xmm3
6885 ; SSE2-NEXT:    pandn %xmm7, %xmm8
6886 ; SSE2-NEXT:    por %xmm8, %xmm3
6887 ; SSE2-NEXT:    retq
6888 ;
6889 ; SSE4-LABEL: test152:
6890 ; SSE4:       # %bb.0: # %entry
6891 ; SSE4-NEXT:    pminud %xmm4, %xmm0
6892 ; SSE4-NEXT:    pminud %xmm5, %xmm1
6893 ; SSE4-NEXT:    pminud %xmm6, %xmm2
6894 ; SSE4-NEXT:    pminud %xmm7, %xmm3
6895 ; SSE4-NEXT:    retq
6896 ;
6897 ; AVX1-LABEL: test152:
6898 ; AVX1:       # %bb.0: # %entry
6899 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6900 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6901 ; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
6902 ; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
6903 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6904 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6905 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6906 ; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
6907 ; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
6908 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6909 ; AVX1-NEXT:    retq
6910 ;
6911 ; AVX2-LABEL: test152:
6912 ; AVX2:       # %bb.0: # %entry
6913 ; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
6914 ; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
6915 ; AVX2-NEXT:    retq
6916 ;
6917 ; AVX512F-LABEL: test152:
6918 ; AVX512F:       # %bb.0: # %entry
6919 ; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
6920 ; AVX512F-NEXT:    retq
6921 entry:
6922   %cmp = icmp uge <16 x i32> %a, %b
6923   %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6924   ret <16 x i32> %sel
6925 }
6926
6927 ; -----------------------
6928
6929 define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
6930 ; SSE2-LABEL: test153:
6931 ; SSE2:       # %bb.0: # %entry
6932 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
6933 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
6934 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6935 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
6936 ; SSE2-NEXT:    pxor %xmm8, %xmm10
6937 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
6938 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
6939 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
6940 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
6941 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
6942 ; SSE2-NEXT:    pand %xmm12, %xmm9
6943 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
6944 ; SSE2-NEXT:    por %xmm9, %xmm10
6945 ; SSE2-NEXT:    pand %xmm10, %xmm0
6946 ; SSE2-NEXT:    pandn %xmm4, %xmm10
6947 ; SSE2-NEXT:    por %xmm10, %xmm0
6948 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
6949 ; SSE2-NEXT:    pxor %xmm8, %xmm9
6950 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
6951 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6952 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
6953 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6954 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
6955 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
6956 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
6957 ; SSE2-NEXT:    pand %xmm11, %xmm9
6958 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
6959 ; SSE2-NEXT:    por %xmm9, %xmm4
6960 ; SSE2-NEXT:    pand %xmm4, %xmm1
6961 ; SSE2-NEXT:    pandn %xmm5, %xmm4
6962 ; SSE2-NEXT:    por %xmm4, %xmm1
6963 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
6964 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6965 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
6966 ; SSE2-NEXT:    pxor %xmm8, %xmm5
6967 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
6968 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6969 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
6970 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
6971 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
6972 ; SSE2-NEXT:    pand %xmm10, %xmm4
6973 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
6974 ; SSE2-NEXT:    por %xmm4, %xmm5
6975 ; SSE2-NEXT:    pand %xmm5, %xmm2
6976 ; SSE2-NEXT:    pandn %xmm6, %xmm5
6977 ; SSE2-NEXT:    por %xmm5, %xmm2
6978 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
6979 ; SSE2-NEXT:    pxor %xmm8, %xmm4
6980 ; SSE2-NEXT:    pxor %xmm3, %xmm8
6981 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
6982 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6983 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
6984 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
6985 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
6986 ; SSE2-NEXT:    pand %xmm6, %xmm4
6987 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
6988 ; SSE2-NEXT:    por %xmm4, %xmm5
6989 ; SSE2-NEXT:    pand %xmm5, %xmm3
6990 ; SSE2-NEXT:    pandn %xmm7, %xmm5
6991 ; SSE2-NEXT:    por %xmm5, %xmm3
6992 ; SSE2-NEXT:    retq
6993 ;
6994 ; SSE4-LABEL: test153:
6995 ; SSE4:       # %bb.0: # %entry
6996 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
6997 ; SSE4-NEXT:    movdqa %xmm0, %xmm7
6998 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
6999 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7000 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
7001 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7002 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7003 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7004 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7005 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7006 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7007 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7008 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7009 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7010 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7011 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7012 ; SSE4-NEXT:    movapd %xmm8, %xmm3
7013 ; SSE4-NEXT:    retq
7014 ;
7015 ; AVX1-LABEL: test153:
7016 ; AVX1:       # %bb.0: # %entry
7017 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7018 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7019 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7020 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7021 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7022 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7023 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7024 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7025 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7026 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7027 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7028 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7029 ; AVX1-NEXT:    retq
7030 ;
7031 ; AVX2-LABEL: test153:
7032 ; AVX2:       # %bb.0: # %entry
7033 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7034 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7035 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7036 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7037 ; AVX2-NEXT:    retq
7038 ;
7039 ; AVX512F-LABEL: test153:
7040 ; AVX512F:       # %bb.0: # %entry
7041 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7042 ; AVX512F-NEXT:    retq
7043 entry:
7044   %cmp = icmp slt <8 x i64> %a, %b
7045   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7046   ret <8 x i64> %sel
7047 }
7048
7049 define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7050 ; SSE2-LABEL: test154:
7051 ; SSE2:       # %bb.0: # %entry
7052 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7053 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
7054 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7055 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
7056 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7057 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7058 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7059 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7060 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7061 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7062 ; SSE2-NEXT:    pand %xmm12, %xmm9
7063 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7064 ; SSE2-NEXT:    por %xmm9, %xmm10
7065 ; SSE2-NEXT:    pand %xmm10, %xmm0
7066 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7067 ; SSE2-NEXT:    por %xmm10, %xmm0
7068 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7069 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7070 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
7071 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7072 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7073 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7074 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7075 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7076 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7077 ; SSE2-NEXT:    pand %xmm11, %xmm9
7078 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7079 ; SSE2-NEXT:    por %xmm9, %xmm4
7080 ; SSE2-NEXT:    pand %xmm4, %xmm1
7081 ; SSE2-NEXT:    pandn %xmm5, %xmm4
7082 ; SSE2-NEXT:    por %xmm4, %xmm1
7083 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
7084 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7085 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
7086 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7087 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7088 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7089 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7090 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7091 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7092 ; SSE2-NEXT:    pand %xmm10, %xmm4
7093 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7094 ; SSE2-NEXT:    por %xmm4, %xmm5
7095 ; SSE2-NEXT:    pand %xmm5, %xmm2
7096 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7097 ; SSE2-NEXT:    por %xmm5, %xmm2
7098 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
7099 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7100 ; SSE2-NEXT:    pxor %xmm3, %xmm8
7101 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7102 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7103 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7104 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7105 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7106 ; SSE2-NEXT:    pand %xmm6, %xmm4
7107 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7108 ; SSE2-NEXT:    por %xmm4, %xmm5
7109 ; SSE2-NEXT:    pand %xmm5, %xmm3
7110 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7111 ; SSE2-NEXT:    por %xmm5, %xmm3
7112 ; SSE2-NEXT:    retq
7113 ;
7114 ; SSE4-LABEL: test154:
7115 ; SSE4:       # %bb.0: # %entry
7116 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
7117 ; SSE4-NEXT:    movdqa %xmm0, %xmm7
7118 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7119 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7120 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
7121 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7122 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7123 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7124 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7125 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7126 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7127 ; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7128 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7129 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7130 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7131 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7132 ; SSE4-NEXT:    movapd %xmm8, %xmm3
7133 ; SSE4-NEXT:    retq
7134 ;
7135 ; AVX1-LABEL: test154:
7136 ; AVX1:       # %bb.0: # %entry
7137 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7138 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7139 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7140 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7141 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7142 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7143 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7144 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7145 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7146 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7147 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7148 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7149 ; AVX1-NEXT:    retq
7150 ;
7151 ; AVX2-LABEL: test154:
7152 ; AVX2:       # %bb.0: # %entry
7153 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7154 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7155 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7156 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7157 ; AVX2-NEXT:    retq
7158 ;
7159 ; AVX512F-LABEL: test154:
7160 ; AVX512F:       # %bb.0: # %entry
7161 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7162 ; AVX512F-NEXT:    retq
7163 entry:
7164   %cmp = icmp sle <8 x i64> %a, %b
7165   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7166   ret <8 x i64> %sel
7167 }
7168
7169 define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7170 ; SSE2-LABEL: test155:
7171 ; SSE2:       # %bb.0: # %entry
7172 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7173 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
7174 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7175 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7176 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7177 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7178 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7179 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7180 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7181 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7182 ; SSE2-NEXT:    pand %xmm12, %xmm9
7183 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7184 ; SSE2-NEXT:    por %xmm9, %xmm10
7185 ; SSE2-NEXT:    pand %xmm10, %xmm0
7186 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7187 ; SSE2-NEXT:    por %xmm10, %xmm0
7188 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
7189 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7190 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
7191 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7192 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7193 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7194 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7195 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7196 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7197 ; SSE2-NEXT:    pand %xmm11, %xmm9
7198 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7199 ; SSE2-NEXT:    por %xmm9, %xmm4
7200 ; SSE2-NEXT:    pand %xmm4, %xmm1
7201 ; SSE2-NEXT:    pandn %xmm5, %xmm4
7202 ; SSE2-NEXT:    por %xmm4, %xmm1
7203 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
7204 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7205 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
7206 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7207 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7208 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7209 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7210 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7211 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7212 ; SSE2-NEXT:    pand %xmm10, %xmm4
7213 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7214 ; SSE2-NEXT:    por %xmm4, %xmm5
7215 ; SSE2-NEXT:    pand %xmm5, %xmm2
7216 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7217 ; SSE2-NEXT:    por %xmm5, %xmm2
7218 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
7219 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7220 ; SSE2-NEXT:    pxor %xmm7, %xmm8
7221 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7222 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7223 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7224 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7225 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7226 ; SSE2-NEXT:    pand %xmm6, %xmm4
7227 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7228 ; SSE2-NEXT:    por %xmm4, %xmm5
7229 ; SSE2-NEXT:    pand %xmm5, %xmm3
7230 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7231 ; SSE2-NEXT:    por %xmm5, %xmm3
7232 ; SSE2-NEXT:    retq
7233 ;
7234 ; SSE4-LABEL: test155:
7235 ; SSE4:       # %bb.0: # %entry
7236 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
7237 ; SSE4-NEXT:    movdqa %xmm0, %xmm7
7238 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
7239 ; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
7240 ; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7241 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
7242 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7243 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7244 ; SSE4-NEXT:    movdqa %xmm6, %xmm0
7245 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7246 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7247 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
7248 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7249 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7250 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7251 ; SSE4-NEXT:    movapd %xmm5, %xmm1
7252 ; SSE4-NEXT:    movapd %xmm6, %xmm2
7253 ; SSE4-NEXT:    movapd %xmm8, %xmm3
7254 ; SSE4-NEXT:    retq
7255 ;
7256 ; AVX1-LABEL: test155:
7257 ; AVX1:       # %bb.0: # %entry
7258 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7259 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
7260 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7261 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
7262 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7263 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7264 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7265 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7266 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7267 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
7268 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7269 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7270 ; AVX1-NEXT:    retq
7271 ;
7272 ; AVX2-LABEL: test155:
7273 ; AVX2:       # %bb.0: # %entry
7274 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
7275 ; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7276 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
7277 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7278 ; AVX2-NEXT:    retq
7279 ;
7280 ; AVX512F-LABEL: test155:
7281 ; AVX512F:       # %bb.0: # %entry
7282 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7283 ; AVX512F-NEXT:    retq
7284 entry:
7285   %cmp = icmp sgt <8 x i64> %a, %b
7286   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7287   ret <8 x i64> %sel
7288 }
7289
7290 define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7291 ; SSE2-LABEL: test156:
7292 ; SSE2:       # %bb.0: # %entry
7293 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7294 ; SSE2-NEXT:    movdqa %xmm4, %xmm9
7295 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7296 ; SSE2-NEXT:    movdqa %xmm0, %xmm10
7297 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7298 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7299 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7300 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7301 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7302 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7303 ; SSE2-NEXT:    pand %xmm12, %xmm9
7304 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7305 ; SSE2-NEXT:    por %xmm9, %xmm10
7306 ; SSE2-NEXT:    pand %xmm10, %xmm0
7307 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7308 ; SSE2-NEXT:    por %xmm10, %xmm0
7309 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7310 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7311 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
7312 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7313 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7314 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7315 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7316 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7317 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7318 ; SSE2-NEXT:    pand %xmm11, %xmm9
7319 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7320 ; SSE2-NEXT:    por %xmm9, %xmm4
7321 ; SSE2-NEXT:    pand %xmm4, %xmm1
7322 ; SSE2-NEXT:    pandn %xmm5, %xmm4
7323 ; SSE2-NEXT:    por %xmm4, %xmm1
7324 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
7325 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7326 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
7327 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7328 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7329 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7330 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7331 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7332 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7333 ; SSE2-NEXT:    pand %xmm10, %xmm4
7334 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7335 ; SSE2-NEXT:    por %xmm4, %xmm5
7336 ; SSE2-NEXT:    pand %xmm5, %xmm2
7337 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7338 ; SSE2-NEXT:    por %xmm5, %xmm2
7339 ; SSE2-NEXT:    movdqa %xmm7, %xmm4
7340 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7341 ; SSE2-NEXT:    pxor %xmm3, %xmm8
7342 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7343 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7344 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7345 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7346 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7347 ; SSE2-NEXT:    pand %xmm6, %xmm4
7348 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7349 ; SSE2-NEXT:    por %xmm4, %xmm5
7350 ; SSE2-NEXT:    pand %xmm5, %xmm3
7351 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7352 ; SSE2-NEXT:    por %xmm5, %xmm3
7353 ; SSE2-NEXT:    retq
7354 ;
7355 ; SSE4-LABEL: test156:
7356 ; SSE4:       # %bb.0: # %entry
7357 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
7358 ; SSE4-NEXT:    movdqa %xmm6, %xmm9
7359 ; SSE4-NEXT:    movdqa %xmm5, %xmm10
7360 ; SSE4-NEXT:    movdqa %xmm4, %xmm5
7361 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
7362 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7363 ; SSE4-NEXT:    pxor %xmm7, %xmm4
7364 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7365 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7366 ; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
7367 ; SSE4-NEXT:    movdqa %xmm10, %xmm4
7368 ; SSE4-NEXT:    pxor %xmm7, %xmm4
7369 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
7370 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7371 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7372 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7373 ; SSE4-NEXT:    movdqa %xmm9, %xmm1
7374 ; SSE4-NEXT:    pxor %xmm7, %xmm1
7375 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7376 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7377 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7378 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7379 ; SSE4-NEXT:    movdqa %xmm8, %xmm0
7380 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7381 ; SSE4-NEXT:    pxor %xmm3, %xmm7
7382 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7383 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
7384 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7385 ; SSE4-NEXT:    movapd %xmm5, %xmm0
7386 ; SSE4-NEXT:    movapd %xmm10, %xmm1
7387 ; SSE4-NEXT:    movapd %xmm9, %xmm2
7388 ; SSE4-NEXT:    movapd %xmm8, %xmm3
7389 ; SSE4-NEXT:    retq
7390 ;
7391 ; AVX1-LABEL: test156:
7392 ; AVX1:       # %bb.0: # %entry
7393 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7394 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7395 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7396 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7397 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7398 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7399 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
7400 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
7401 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7402 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7403 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7404 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7405 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7406 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7407 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7408 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7409 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
7410 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
7411 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7412 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7413 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7414 ; AVX1-NEXT:    retq
7415 ;
7416 ; AVX2-LABEL: test156:
7417 ; AVX2:       # %bb.0: # %entry
7418 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7419 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
7420 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
7421 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7422 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7423 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
7424 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
7425 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7426 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7427 ; AVX2-NEXT:    retq
7428 ;
7429 ; AVX512F-LABEL: test156:
7430 ; AVX512F:       # %bb.0: # %entry
7431 ; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
7432 ; AVX512F-NEXT:    retq
7433 entry:
7434   %cmp = icmp ule <8 x i64> %a, %b
7435   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7436   ret <8 x i64> %sel
7437 }
7438
7439 define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
7440 ; SSE2-LABEL: test159:
7441 ; SSE2:       # %bb.0: # %entry
7442 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7443 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
7444 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7445 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7446 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7447 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7448 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7449 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7450 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7451 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7452 ; SSE2-NEXT:    pand %xmm12, %xmm9
7453 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7454 ; SSE2-NEXT:    por %xmm9, %xmm10
7455 ; SSE2-NEXT:    pand %xmm10, %xmm0
7456 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7457 ; SSE2-NEXT:    por %xmm10, %xmm0
7458 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
7459 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7460 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
7461 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7462 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7463 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7464 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7465 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7466 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7467 ; SSE2-NEXT:    pand %xmm11, %xmm9
7468 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7469 ; SSE2-NEXT:    por %xmm9, %xmm4
7470 ; SSE2-NEXT:    pand %xmm4, %xmm1
7471 ; SSE2-NEXT:    pandn %xmm5, %xmm4
7472 ; SSE2-NEXT:    por %xmm4, %xmm1
7473 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
7474 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7475 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
7476 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7477 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7478 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7479 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7480 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7481 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7482 ; SSE2-NEXT:    pand %xmm10, %xmm4
7483 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7484 ; SSE2-NEXT:    por %xmm4, %xmm5
7485 ; SSE2-NEXT:    pand %xmm5, %xmm2
7486 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7487 ; SSE2-NEXT:    por %xmm5, %xmm2
7488 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
7489 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7490 ; SSE2-NEXT:    pxor %xmm7, %xmm8
7491 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7492 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7493 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7494 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7495 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7496 ; SSE2-NEXT:    pand %xmm6, %xmm4
7497 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7498 ; SSE2-NEXT:    por %xmm4, %xmm5
7499 ; SSE2-NEXT:    pand %xmm5, %xmm3
7500 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7501 ; SSE2-NEXT:    por %xmm5, %xmm3
7502 ; SSE2-NEXT:    retq
7503 ;
7504 ; SSE4-LABEL: test159:
7505 ; SSE4:       # %bb.0: # %entry
7506 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
7507 ; SSE4-NEXT:    movdqa %xmm6, %xmm9
7508 ; SSE4-NEXT:    movdqa %xmm5, %xmm10
7509 ; SSE4-NEXT:    movdqa %xmm0, %xmm5
7510 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7511 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
7512 ; SSE4-NEXT:    pxor %xmm7, %xmm6
7513 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
7514 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7515 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7516 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
7517 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
7518 ; SSE4-NEXT:    pxor %xmm7, %xmm5
7519 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
7520 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7521 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7522 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7523 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
7524 ; SSE4-NEXT:    pxor %xmm7, %xmm1
7525 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
7526 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7527 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7528 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7529 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7530 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7531 ; SSE4-NEXT:    pxor %xmm8, %xmm7
7532 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7533 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
7534 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7535 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7536 ; SSE4-NEXT:    movapd %xmm10, %xmm1
7537 ; SSE4-NEXT:    movapd %xmm9, %xmm2
7538 ; SSE4-NEXT:    movapd %xmm8, %xmm3
7539 ; SSE4-NEXT:    retq
7540 ;
7541 ; AVX1-LABEL: test159:
7542 ; AVX1:       # %bb.0: # %entry
7543 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7544 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7545 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7546 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7547 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7548 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7549 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7550 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7551 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7552 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7553 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7554 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7555 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7556 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7557 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7558 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7559 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7560 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7561 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7562 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7563 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7564 ; AVX1-NEXT:    retq
7565 ;
7566 ; AVX2-LABEL: test159:
7567 ; AVX2:       # %bb.0: # %entry
7568 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7569 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7570 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7571 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7572 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7573 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7574 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7575 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7576 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7577 ; AVX2-NEXT:    retq
7578 ;
7579 ; AVX512F-LABEL: test159:
7580 ; AVX512F:       # %bb.0: # %entry
7581 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7582 ; AVX512F-NEXT:    retq
7583 entry:
7584   %cmp = icmp ugt <8 x i64> %a, %b
7585   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7586   ret <8 x i64> %sel
7587 }
7588
7589 define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
7590 ; SSE2-LABEL: test160:
7591 ; SSE2:       # %bb.0: # %entry
7592 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7593 ; SSE2-NEXT:    movdqa %xmm0, %xmm9
7594 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7595 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7596 ; SSE2-NEXT:    pxor %xmm8, %xmm10
7597 ; SSE2-NEXT:    movdqa %xmm10, %xmm11
7598 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7599 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7600 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7601 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7602 ; SSE2-NEXT:    pand %xmm12, %xmm9
7603 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7604 ; SSE2-NEXT:    por %xmm9, %xmm10
7605 ; SSE2-NEXT:    pand %xmm10, %xmm0
7606 ; SSE2-NEXT:    pandn %xmm4, %xmm10
7607 ; SSE2-NEXT:    por %xmm10, %xmm0
7608 ; SSE2-NEXT:    movdqa %xmm1, %xmm9
7609 ; SSE2-NEXT:    pxor %xmm8, %xmm9
7610 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
7611 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7612 ; SSE2-NEXT:    movdqa %xmm4, %xmm10
7613 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7614 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7615 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7616 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7617 ; SSE2-NEXT:    pand %xmm11, %xmm9
7618 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7619 ; SSE2-NEXT:    por %xmm9, %xmm4
7620 ; SSE2-NEXT:    pand %xmm4, %xmm1
7621 ; SSE2-NEXT:    pandn %xmm5, %xmm4
7622 ; SSE2-NEXT:    por %xmm4, %xmm1
7623 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
7624 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7625 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
7626 ; SSE2-NEXT:    pxor %xmm8, %xmm5
7627 ; SSE2-NEXT:    movdqa %xmm5, %xmm9
7628 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7629 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7630 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7631 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7632 ; SSE2-NEXT:    pand %xmm10, %xmm4
7633 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7634 ; SSE2-NEXT:    por %xmm4, %xmm5
7635 ; SSE2-NEXT:    pand %xmm5, %xmm2
7636 ; SSE2-NEXT:    pandn %xmm6, %xmm5
7637 ; SSE2-NEXT:    por %xmm5, %xmm2
7638 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
7639 ; SSE2-NEXT:    pxor %xmm8, %xmm4
7640 ; SSE2-NEXT:    pxor %xmm7, %xmm8
7641 ; SSE2-NEXT:    movdqa %xmm8, %xmm5
7642 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7643 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7644 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7645 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7646 ; SSE2-NEXT:    pand %xmm6, %xmm4
7647 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7648 ; SSE2-NEXT:    por %xmm4, %xmm5
7649 ; SSE2-NEXT:    pand %xmm5, %xmm3
7650 ; SSE2-NEXT:    pandn %xmm7, %xmm5
7651 ; SSE2-NEXT:    por %xmm5, %xmm3
7652 ; SSE2-NEXT:    retq
7653 ;
7654 ; SSE4-LABEL: test160:
7655 ; SSE4:       # %bb.0: # %entry
7656 ; SSE4-NEXT:    movdqa %xmm7, %xmm8
7657 ; SSE4-NEXT:    movdqa %xmm6, %xmm9
7658 ; SSE4-NEXT:    movdqa %xmm5, %xmm10
7659 ; SSE4-NEXT:    movdqa %xmm0, %xmm5
7660 ; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7661 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
7662 ; SSE4-NEXT:    pxor %xmm7, %xmm6
7663 ; SSE4-NEXT:    movdqa %xmm4, %xmm0
7664 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7665 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7666 ; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
7667 ; SSE4-NEXT:    movdqa %xmm1, %xmm5
7668 ; SSE4-NEXT:    pxor %xmm7, %xmm5
7669 ; SSE4-NEXT:    movdqa %xmm10, %xmm0
7670 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7671 ; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7672 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7673 ; SSE4-NEXT:    movdqa %xmm2, %xmm1
7674 ; SSE4-NEXT:    pxor %xmm7, %xmm1
7675 ; SSE4-NEXT:    movdqa %xmm9, %xmm0
7676 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7677 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7678 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7679 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7680 ; SSE4-NEXT:    pxor %xmm7, %xmm0
7681 ; SSE4-NEXT:    pxor %xmm8, %xmm7
7682 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7683 ; SSE4-NEXT:    movdqa %xmm7, %xmm0
7684 ; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7685 ; SSE4-NEXT:    movapd %xmm4, %xmm0
7686 ; SSE4-NEXT:    movapd %xmm10, %xmm1
7687 ; SSE4-NEXT:    movapd %xmm9, %xmm2
7688 ; SSE4-NEXT:    movapd %xmm8, %xmm3
7689 ; SSE4-NEXT:    retq
7690 ;
7691 ; AVX1-LABEL: test160:
7692 ; AVX1:       # %bb.0: # %entry
7693 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7694 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7695 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7696 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7697 ; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7698 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7699 ; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7700 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7701 ; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7702 ; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7703 ; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7704 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7705 ; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7706 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7707 ; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7708 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7709 ; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7710 ; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7711 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7712 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7713 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7714 ; AVX1-NEXT:    retq
7715 ;
7716 ; AVX2-LABEL: test160:
7717 ; AVX2:       # %bb.0: # %entry
7718 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7719 ; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7720 ; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7721 ; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7722 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7723 ; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7724 ; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7725 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7726 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7727 ; AVX2-NEXT:    retq
7728 ;
7729 ; AVX512F-LABEL: test160:
7730 ; AVX512F:       # %bb.0: # %entry
7731 ; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7732 ; AVX512F-NEXT:    retq
7733 entry:
7734   %cmp = icmp uge <8 x i64> %a, %b
7735   %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7736   ret <8 x i64> %sel
7737 }
7738
7739 define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
7740 ; SSE2-LABEL: test161:
7741 ; SSE2:       # %bb.0: # %entry
7742 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7743 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
7744 ; SSE2-NEXT:    pxor %xmm4, %xmm5
7745 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
7746 ; SSE2-NEXT:    pxor %xmm4, %xmm6
7747 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
7748 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7749 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7750 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7751 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7752 ; SSE2-NEXT:    pand %xmm8, %xmm5
7753 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7754 ; SSE2-NEXT:    por %xmm5, %xmm6
7755 ; SSE2-NEXT:    pand %xmm6, %xmm0
7756 ; SSE2-NEXT:    pandn %xmm2, %xmm6
7757 ; SSE2-NEXT:    por %xmm6, %xmm0
7758 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
7759 ; SSE2-NEXT:    pxor %xmm4, %xmm2
7760 ; SSE2-NEXT:    pxor %xmm3, %xmm4
7761 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7762 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7763 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7764 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7765 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7766 ; SSE2-NEXT:    pand %xmm6, %xmm2
7767 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7768 ; SSE2-NEXT:    por %xmm2, %xmm4
7769 ; SSE2-NEXT:    pand %xmm4, %xmm1
7770 ; SSE2-NEXT:    pandn %xmm3, %xmm4
7771 ; SSE2-NEXT:    por %xmm4, %xmm1
7772 ; SSE2-NEXT:    retq
7773 ;
7774 ; SSE4-LABEL: test161:
7775 ; SSE4:       # %bb.0: # %entry
7776 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
7777 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7778 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7779 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7780 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7781 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7782 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7783 ; SSE4-NEXT:    movapd %xmm2, %xmm0
7784 ; SSE4-NEXT:    movapd %xmm3, %xmm1
7785 ; SSE4-NEXT:    retq
7786 ;
7787 ; AVX1-LABEL: test161:
7788 ; AVX1:       # %bb.0: # %entry
7789 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7790 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7791 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7792 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7793 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7794 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7795 ; AVX1-NEXT:    retq
7796 ;
7797 ; AVX2-LABEL: test161:
7798 ; AVX2:       # %bb.0: # %entry
7799 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7800 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7801 ; AVX2-NEXT:    retq
7802 ;
7803 ; AVX512BW-LABEL: test161:
7804 ; AVX512BW:       # %bb.0: # %entry
7805 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7806 ; AVX512BW-NEXT:    retq
7807 entry:
7808   %cmp = icmp slt <4 x i64> %a, %b
7809   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7810   ret <4 x i64> %sel
7811 }
7812
7813 define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
7814 ; SSE2-LABEL: test162:
7815 ; SSE2:       # %bb.0: # %entry
7816 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7817 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
7818 ; SSE2-NEXT:    pxor %xmm4, %xmm5
7819 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
7820 ; SSE2-NEXT:    pxor %xmm4, %xmm6
7821 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
7822 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7823 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7824 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7825 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7826 ; SSE2-NEXT:    pand %xmm8, %xmm5
7827 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7828 ; SSE2-NEXT:    por %xmm5, %xmm6
7829 ; SSE2-NEXT:    pand %xmm6, %xmm0
7830 ; SSE2-NEXT:    pandn %xmm2, %xmm6
7831 ; SSE2-NEXT:    por %xmm6, %xmm0
7832 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
7833 ; SSE2-NEXT:    pxor %xmm4, %xmm2
7834 ; SSE2-NEXT:    pxor %xmm3, %xmm4
7835 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7836 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7837 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7838 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7839 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7840 ; SSE2-NEXT:    pand %xmm6, %xmm2
7841 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7842 ; SSE2-NEXT:    por %xmm2, %xmm4
7843 ; SSE2-NEXT:    pand %xmm4, %xmm1
7844 ; SSE2-NEXT:    pandn %xmm3, %xmm4
7845 ; SSE2-NEXT:    por %xmm4, %xmm1
7846 ; SSE2-NEXT:    retq
7847 ;
7848 ; SSE4-LABEL: test162:
7849 ; SSE4:       # %bb.0: # %entry
7850 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
7851 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
7852 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7853 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7854 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
7855 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7856 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7857 ; SSE4-NEXT:    movapd %xmm2, %xmm0
7858 ; SSE4-NEXT:    movapd %xmm3, %xmm1
7859 ; SSE4-NEXT:    retq
7860 ;
7861 ; AVX1-LABEL: test162:
7862 ; AVX1:       # %bb.0: # %entry
7863 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7864 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7865 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7866 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7867 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7868 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7869 ; AVX1-NEXT:    retq
7870 ;
7871 ; AVX2-LABEL: test162:
7872 ; AVX2:       # %bb.0: # %entry
7873 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7874 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7875 ; AVX2-NEXT:    retq
7876 ;
7877 ; AVX512BW-LABEL: test162:
7878 ; AVX512BW:       # %bb.0: # %entry
7879 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7880 ; AVX512BW-NEXT:    retq
7881 entry:
7882   %cmp = icmp sle <4 x i64> %a, %b
7883   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7884   ret <4 x i64> %sel
7885 }
7886
7887 define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
7888 ; SSE2-LABEL: test163:
7889 ; SSE2:       # %bb.0: # %entry
7890 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7891 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
7892 ; SSE2-NEXT:    pxor %xmm4, %xmm5
7893 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
7894 ; SSE2-NEXT:    pxor %xmm4, %xmm6
7895 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
7896 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7897 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7898 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7899 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7900 ; SSE2-NEXT:    pand %xmm8, %xmm5
7901 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7902 ; SSE2-NEXT:    por %xmm5, %xmm6
7903 ; SSE2-NEXT:    pand %xmm6, %xmm0
7904 ; SSE2-NEXT:    pandn %xmm2, %xmm6
7905 ; SSE2-NEXT:    por %xmm6, %xmm0
7906 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
7907 ; SSE2-NEXT:    pxor %xmm4, %xmm2
7908 ; SSE2-NEXT:    pxor %xmm1, %xmm4
7909 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7910 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7911 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7912 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7913 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7914 ; SSE2-NEXT:    pand %xmm6, %xmm2
7915 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7916 ; SSE2-NEXT:    por %xmm2, %xmm4
7917 ; SSE2-NEXT:    pand %xmm4, %xmm1
7918 ; SSE2-NEXT:    pandn %xmm3, %xmm4
7919 ; SSE2-NEXT:    por %xmm4, %xmm1
7920 ; SSE2-NEXT:    retq
7921 ;
7922 ; SSE4-LABEL: test163:
7923 ; SSE4:       # %bb.0: # %entry
7924 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
7925 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7926 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7927 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
7928 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7929 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7930 ; SSE4-NEXT:    movapd %xmm2, %xmm0
7931 ; SSE4-NEXT:    movapd %xmm3, %xmm1
7932 ; SSE4-NEXT:    retq
7933 ;
7934 ; AVX1-LABEL: test163:
7935 ; AVX1:       # %bb.0: # %entry
7936 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7937 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
7938 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7939 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
7940 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7941 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7942 ; AVX1-NEXT:    retq
7943 ;
7944 ; AVX2-LABEL: test163:
7945 ; AVX2:       # %bb.0: # %entry
7946 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
7947 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7948 ; AVX2-NEXT:    retq
7949 ;
7950 ; AVX512BW-LABEL: test163:
7951 ; AVX512BW:       # %bb.0: # %entry
7952 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
7953 ; AVX512BW-NEXT:    retq
7954 entry:
7955   %cmp = icmp sgt <4 x i64> %a, %b
7956   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7957   ret <4 x i64> %sel
7958 }
7959
7960 define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
7961 ; SSE2-LABEL: test164:
7962 ; SSE2:       # %bb.0: # %entry
7963 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7964 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
7965 ; SSE2-NEXT:    pxor %xmm4, %xmm5
7966 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
7967 ; SSE2-NEXT:    pxor %xmm4, %xmm6
7968 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
7969 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7970 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7971 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7972 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7973 ; SSE2-NEXT:    pand %xmm8, %xmm5
7974 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7975 ; SSE2-NEXT:    por %xmm5, %xmm6
7976 ; SSE2-NEXT:    pand %xmm6, %xmm0
7977 ; SSE2-NEXT:    pandn %xmm2, %xmm6
7978 ; SSE2-NEXT:    por %xmm6, %xmm0
7979 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
7980 ; SSE2-NEXT:    pxor %xmm4, %xmm2
7981 ; SSE2-NEXT:    pxor %xmm1, %xmm4
7982 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
7983 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7984 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7985 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7986 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7987 ; SSE2-NEXT:    pand %xmm6, %xmm2
7988 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7989 ; SSE2-NEXT:    por %xmm2, %xmm4
7990 ; SSE2-NEXT:    pand %xmm4, %xmm1
7991 ; SSE2-NEXT:    pandn %xmm3, %xmm4
7992 ; SSE2-NEXT:    por %xmm4, %xmm1
7993 ; SSE2-NEXT:    retq
7994 ;
7995 ; SSE4-LABEL: test164:
7996 ; SSE4:       # %bb.0: # %entry
7997 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
7998 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7999 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8000 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8001 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8002 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8003 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8004 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8005 ; SSE4-NEXT:    retq
8006 ;
8007 ; AVX1-LABEL: test164:
8008 ; AVX1:       # %bb.0: # %entry
8009 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8010 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8011 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8012 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8013 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8014 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8015 ; AVX1-NEXT:    retq
8016 ;
8017 ; AVX2-LABEL: test164:
8018 ; AVX2:       # %bb.0: # %entry
8019 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8020 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8021 ; AVX2-NEXT:    retq
8022 ;
8023 ; AVX512BW-LABEL: test164:
8024 ; AVX512BW:       # %bb.0: # %entry
8025 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8026 ; AVX512BW-NEXT:    retq
8027 entry:
8028   %cmp = icmp sge <4 x i64> %a, %b
8029   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8030   ret <4 x i64> %sel
8031 }
8032
8033 define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
8034 ; SSE2-LABEL: test165:
8035 ; SSE2:       # %bb.0: # %entry
8036 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8037 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8038 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8039 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8040 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8041 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8042 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8043 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8044 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8045 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8046 ; SSE2-NEXT:    pand %xmm8, %xmm5
8047 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8048 ; SSE2-NEXT:    por %xmm5, %xmm6
8049 ; SSE2-NEXT:    pand %xmm6, %xmm0
8050 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8051 ; SSE2-NEXT:    por %xmm6, %xmm0
8052 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8053 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8054 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8055 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8056 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8057 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8058 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8059 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8060 ; SSE2-NEXT:    pand %xmm6, %xmm2
8061 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8062 ; SSE2-NEXT:    por %xmm2, %xmm4
8063 ; SSE2-NEXT:    pand %xmm4, %xmm1
8064 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8065 ; SSE2-NEXT:    por %xmm4, %xmm1
8066 ; SSE2-NEXT:    retq
8067 ;
8068 ; SSE4-LABEL: test165:
8069 ; SSE4:       # %bb.0: # %entry
8070 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8071 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8072 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
8073 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8074 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8075 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8076 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8077 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8078 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8079 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8080 ; SSE4-NEXT:    pxor %xmm3, %xmm5
8081 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8082 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8083 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8084 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8085 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8086 ; SSE4-NEXT:    retq
8087 ;
8088 ; AVX1-LABEL: test165:
8089 ; AVX1:       # %bb.0: # %entry
8090 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8091 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8092 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8093 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8094 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8095 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8096 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8097 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8098 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8099 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8100 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8101 ; AVX1-NEXT:    retq
8102 ;
8103 ; AVX2-LABEL: test165:
8104 ; AVX2:       # %bb.0: # %entry
8105 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8106 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8107 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8108 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8109 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8110 ; AVX2-NEXT:    retq
8111 ;
8112 ; AVX512BW-LABEL: test165:
8113 ; AVX512BW:       # %bb.0: # %entry
8114 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8115 ; AVX512BW-NEXT:    retq
8116 entry:
8117   %cmp = icmp ult <4 x i64> %a, %b
8118   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8119   ret <4 x i64> %sel
8120 }
8121
8122 define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
8123 ; SSE2-LABEL: test166:
8124 ; SSE2:       # %bb.0: # %entry
8125 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8126 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8127 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8128 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8129 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8130 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8131 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8132 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8133 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8134 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8135 ; SSE2-NEXT:    pand %xmm8, %xmm5
8136 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8137 ; SSE2-NEXT:    por %xmm5, %xmm6
8138 ; SSE2-NEXT:    pand %xmm6, %xmm0
8139 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8140 ; SSE2-NEXT:    por %xmm6, %xmm0
8141 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8142 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8143 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8144 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8145 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8146 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8147 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8148 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8149 ; SSE2-NEXT:    pand %xmm6, %xmm2
8150 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8151 ; SSE2-NEXT:    por %xmm2, %xmm4
8152 ; SSE2-NEXT:    pand %xmm4, %xmm1
8153 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8154 ; SSE2-NEXT:    por %xmm4, %xmm1
8155 ; SSE2-NEXT:    retq
8156 ;
8157 ; SSE4-LABEL: test166:
8158 ; SSE4:       # %bb.0: # %entry
8159 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8160 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8161 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
8162 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8163 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8164 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8165 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8166 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8167 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8168 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8169 ; SSE4-NEXT:    pxor %xmm3, %xmm5
8170 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8171 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8172 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8173 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8174 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8175 ; SSE4-NEXT:    retq
8176 ;
8177 ; AVX1-LABEL: test166:
8178 ; AVX1:       # %bb.0: # %entry
8179 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8180 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8181 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8182 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8183 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8184 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8185 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8186 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8187 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8188 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8189 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8190 ; AVX1-NEXT:    retq
8191 ;
8192 ; AVX2-LABEL: test166:
8193 ; AVX2:       # %bb.0: # %entry
8194 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8195 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8196 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8197 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8198 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8199 ; AVX2-NEXT:    retq
8200 ;
8201 ; AVX512BW-LABEL: test166:
8202 ; AVX512BW:       # %bb.0: # %entry
8203 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8204 ; AVX512BW-NEXT:    retq
8205 entry:
8206   %cmp = icmp ule <4 x i64> %a, %b
8207   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8208   ret <4 x i64> %sel
8209 }
8210
8211 define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
8212 ; SSE2-LABEL: test167:
8213 ; SSE2:       # %bb.0: # %entry
8214 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8215 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8216 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8217 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8218 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8219 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8220 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8221 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8222 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8223 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8224 ; SSE2-NEXT:    pand %xmm8, %xmm5
8225 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8226 ; SSE2-NEXT:    por %xmm5, %xmm6
8227 ; SSE2-NEXT:    pand %xmm6, %xmm0
8228 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8229 ; SSE2-NEXT:    por %xmm6, %xmm0
8230 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8231 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8232 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8233 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8234 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8235 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8236 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8237 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8238 ; SSE2-NEXT:    pand %xmm6, %xmm2
8239 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8240 ; SSE2-NEXT:    por %xmm2, %xmm4
8241 ; SSE2-NEXT:    pand %xmm4, %xmm1
8242 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8243 ; SSE2-NEXT:    por %xmm4, %xmm1
8244 ; SSE2-NEXT:    retq
8245 ;
8246 ; SSE4-LABEL: test167:
8247 ; SSE4:       # %bb.0: # %entry
8248 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8249 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8250 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
8251 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8252 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8253 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8254 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8255 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8256 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8257 ; SSE4-NEXT:    pxor %xmm1, %xmm5
8258 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8259 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8260 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8261 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8262 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8263 ; SSE4-NEXT:    retq
8264 ;
8265 ; AVX1-LABEL: test167:
8266 ; AVX1:       # %bb.0: # %entry
8267 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8268 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8269 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8270 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8271 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8272 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8273 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8274 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8275 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8276 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8277 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8278 ; AVX1-NEXT:    retq
8279 ;
8280 ; AVX2-LABEL: test167:
8281 ; AVX2:       # %bb.0: # %entry
8282 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8283 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8284 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8285 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8286 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8287 ; AVX2-NEXT:    retq
8288 ;
8289 ; AVX512BW-LABEL: test167:
8290 ; AVX512BW:       # %bb.0: # %entry
8291 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8292 ; AVX512BW-NEXT:    retq
8293 entry:
8294   %cmp = icmp ugt <4 x i64> %a, %b
8295   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8296   ret <4 x i64> %sel
8297 }
8298
8299 define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
8300 ; SSE2-LABEL: test168:
8301 ; SSE2:       # %bb.0: # %entry
8302 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8303 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8304 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8305 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8306 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8307 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8308 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8309 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8310 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8311 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8312 ; SSE2-NEXT:    pand %xmm8, %xmm5
8313 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8314 ; SSE2-NEXT:    por %xmm5, %xmm6
8315 ; SSE2-NEXT:    pand %xmm6, %xmm0
8316 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8317 ; SSE2-NEXT:    por %xmm6, %xmm0
8318 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8319 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8320 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8321 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8322 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8323 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8324 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8325 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8326 ; SSE2-NEXT:    pand %xmm6, %xmm2
8327 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8328 ; SSE2-NEXT:    por %xmm2, %xmm4
8329 ; SSE2-NEXT:    pand %xmm4, %xmm1
8330 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8331 ; SSE2-NEXT:    por %xmm4, %xmm1
8332 ; SSE2-NEXT:    retq
8333 ;
8334 ; SSE4-LABEL: test168:
8335 ; SSE4:       # %bb.0: # %entry
8336 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8337 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8338 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
8339 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8340 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8341 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8342 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8343 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8344 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8345 ; SSE4-NEXT:    pxor %xmm1, %xmm5
8346 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8347 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8348 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8349 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8350 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8351 ; SSE4-NEXT:    retq
8352 ;
8353 ; AVX1-LABEL: test168:
8354 ; AVX1:       # %bb.0: # %entry
8355 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8356 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8357 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8358 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8359 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8360 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8361 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8362 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8363 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8364 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8365 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8366 ; AVX1-NEXT:    retq
8367 ;
8368 ; AVX2-LABEL: test168:
8369 ; AVX2:       # %bb.0: # %entry
8370 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8371 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8372 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8373 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8374 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8375 ; AVX2-NEXT:    retq
8376 ;
8377 ; AVX512BW-LABEL: test168:
8378 ; AVX512BW:       # %bb.0: # %entry
8379 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8380 ; AVX512BW-NEXT:    retq
8381 entry:
8382   %cmp = icmp uge <4 x i64> %a, %b
8383   %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8384   ret <4 x i64> %sel
8385 }
8386
8387 define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
8388 ; SSE2-LABEL: test169:
8389 ; SSE2:       # %bb.0: # %entry
8390 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8391 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8392 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8393 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8394 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8395 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8396 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8397 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8398 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8399 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8400 ; SSE2-NEXT:    pand %xmm8, %xmm5
8401 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8402 ; SSE2-NEXT:    por %xmm5, %xmm6
8403 ; SSE2-NEXT:    pand %xmm6, %xmm0
8404 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8405 ; SSE2-NEXT:    por %xmm6, %xmm0
8406 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8407 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8408 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8409 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8410 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8411 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8412 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8413 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8414 ; SSE2-NEXT:    pand %xmm6, %xmm2
8415 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8416 ; SSE2-NEXT:    por %xmm2, %xmm4
8417 ; SSE2-NEXT:    pand %xmm4, %xmm1
8418 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8419 ; SSE2-NEXT:    por %xmm4, %xmm1
8420 ; SSE2-NEXT:    retq
8421 ;
8422 ; SSE4-LABEL: test169:
8423 ; SSE4:       # %bb.0: # %entry
8424 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8425 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8426 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8427 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8428 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8429 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8430 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8431 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8432 ; SSE4-NEXT:    retq
8433 ;
8434 ; AVX1-LABEL: test169:
8435 ; AVX1:       # %bb.0: # %entry
8436 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8437 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8438 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8439 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8440 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8441 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8442 ; AVX1-NEXT:    retq
8443 ;
8444 ; AVX2-LABEL: test169:
8445 ; AVX2:       # %bb.0: # %entry
8446 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8447 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8448 ; AVX2-NEXT:    retq
8449 ;
8450 ; AVX512BW-LABEL: test169:
8451 ; AVX512BW:       # %bb.0: # %entry
8452 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8453 ; AVX512BW-NEXT:    retq
8454 entry:
8455   %cmp = icmp slt <4 x i64> %a, %b
8456   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8457   ret <4 x i64> %sel
8458 }
8459
8460 define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
8461 ; SSE2-LABEL: test170:
8462 ; SSE2:       # %bb.0: # %entry
8463 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8464 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8465 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8466 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8467 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8468 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8469 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8470 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8471 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8472 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8473 ; SSE2-NEXT:    pand %xmm8, %xmm5
8474 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8475 ; SSE2-NEXT:    por %xmm5, %xmm6
8476 ; SSE2-NEXT:    pand %xmm6, %xmm0
8477 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8478 ; SSE2-NEXT:    por %xmm6, %xmm0
8479 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8480 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8481 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8482 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8483 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8484 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8485 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8486 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8487 ; SSE2-NEXT:    pand %xmm6, %xmm2
8488 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8489 ; SSE2-NEXT:    por %xmm2, %xmm4
8490 ; SSE2-NEXT:    pand %xmm4, %xmm1
8491 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8492 ; SSE2-NEXT:    por %xmm4, %xmm1
8493 ; SSE2-NEXT:    retq
8494 ;
8495 ; SSE4-LABEL: test170:
8496 ; SSE4:       # %bb.0: # %entry
8497 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8498 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8499 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8500 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8501 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8502 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8503 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8504 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8505 ; SSE4-NEXT:    retq
8506 ;
8507 ; AVX1-LABEL: test170:
8508 ; AVX1:       # %bb.0: # %entry
8509 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8510 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8511 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8512 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8513 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8514 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8515 ; AVX1-NEXT:    retq
8516 ;
8517 ; AVX2-LABEL: test170:
8518 ; AVX2:       # %bb.0: # %entry
8519 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8520 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8521 ; AVX2-NEXT:    retq
8522 ;
8523 ; AVX512BW-LABEL: test170:
8524 ; AVX512BW:       # %bb.0: # %entry
8525 ; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8526 ; AVX512BW-NEXT:    retq
8527 entry:
8528   %cmp = icmp sle <4 x i64> %a, %b
8529   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8530   ret <4 x i64> %sel
8531 }
8532
8533 define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
8534 ; SSE2-LABEL: test171:
8535 ; SSE2:       # %bb.0: # %entry
8536 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8537 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8538 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8539 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8540 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8541 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8542 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8543 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8544 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8545 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8546 ; SSE2-NEXT:    pand %xmm8, %xmm5
8547 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8548 ; SSE2-NEXT:    por %xmm5, %xmm6
8549 ; SSE2-NEXT:    pand %xmm6, %xmm0
8550 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8551 ; SSE2-NEXT:    por %xmm6, %xmm0
8552 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8553 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8554 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8555 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8556 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8557 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8558 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8559 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8560 ; SSE2-NEXT:    pand %xmm6, %xmm2
8561 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8562 ; SSE2-NEXT:    por %xmm2, %xmm4
8563 ; SSE2-NEXT:    pand %xmm4, %xmm1
8564 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8565 ; SSE2-NEXT:    por %xmm4, %xmm1
8566 ; SSE2-NEXT:    retq
8567 ;
8568 ; SSE4-LABEL: test171:
8569 ; SSE4:       # %bb.0: # %entry
8570 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8571 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8572 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8573 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8574 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8575 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8576 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8577 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8578 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8579 ; SSE4-NEXT:    retq
8580 ;
8581 ; AVX1-LABEL: test171:
8582 ; AVX1:       # %bb.0: # %entry
8583 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8584 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8585 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8586 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8587 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8588 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8589 ; AVX1-NEXT:    retq
8590 ;
8591 ; AVX2-LABEL: test171:
8592 ; AVX2:       # %bb.0: # %entry
8593 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8594 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8595 ; AVX2-NEXT:    retq
8596 ;
8597 ; AVX512BW-LABEL: test171:
8598 ; AVX512BW:       # %bb.0: # %entry
8599 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8600 ; AVX512BW-NEXT:    retq
8601 entry:
8602   %cmp = icmp sgt <4 x i64> %a, %b
8603   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8604   ret <4 x i64> %sel
8605 }
8606
8607 define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
8608 ; SSE2-LABEL: test172:
8609 ; SSE2:       # %bb.0: # %entry
8610 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8611 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8612 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8613 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8614 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8615 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8616 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8617 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8618 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8619 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8620 ; SSE2-NEXT:    pand %xmm8, %xmm5
8621 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8622 ; SSE2-NEXT:    por %xmm5, %xmm6
8623 ; SSE2-NEXT:    pand %xmm6, %xmm0
8624 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8625 ; SSE2-NEXT:    por %xmm6, %xmm0
8626 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8627 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8628 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8629 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8630 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8631 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8632 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8633 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8634 ; SSE2-NEXT:    pand %xmm6, %xmm2
8635 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8636 ; SSE2-NEXT:    por %xmm2, %xmm4
8637 ; SSE2-NEXT:    pand %xmm4, %xmm1
8638 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8639 ; SSE2-NEXT:    por %xmm4, %xmm1
8640 ; SSE2-NEXT:    retq
8641 ;
8642 ; SSE4-LABEL: test172:
8643 ; SSE4:       # %bb.0: # %entry
8644 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8645 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8646 ; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8647 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8648 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8649 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8650 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8651 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8652 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8653 ; SSE4-NEXT:    retq
8654 ;
8655 ; AVX1-LABEL: test172:
8656 ; AVX1:       # %bb.0: # %entry
8657 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8658 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8659 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8660 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8661 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8662 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8663 ; AVX1-NEXT:    retq
8664 ;
8665 ; AVX2-LABEL: test172:
8666 ; AVX2:       # %bb.0: # %entry
8667 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8668 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8669 ; AVX2-NEXT:    retq
8670 ;
8671 ; AVX512BW-LABEL: test172:
8672 ; AVX512BW:       # %bb.0: # %entry
8673 ; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8674 ; AVX512BW-NEXT:    retq
8675 entry:
8676   %cmp = icmp sge <4 x i64> %a, %b
8677   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8678   ret <4 x i64> %sel
8679 }
8680
8681 define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
8682 ; SSE2-LABEL: test173:
8683 ; SSE2:       # %bb.0: # %entry
8684 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8685 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8686 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8687 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8688 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8689 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8690 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8691 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8692 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8693 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8694 ; SSE2-NEXT:    pand %xmm8, %xmm5
8695 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8696 ; SSE2-NEXT:    por %xmm5, %xmm6
8697 ; SSE2-NEXT:    pand %xmm6, %xmm0
8698 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8699 ; SSE2-NEXT:    por %xmm6, %xmm0
8700 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8701 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8702 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8703 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8704 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8705 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8706 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8707 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8708 ; SSE2-NEXT:    pand %xmm6, %xmm2
8709 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8710 ; SSE2-NEXT:    por %xmm2, %xmm4
8711 ; SSE2-NEXT:    pand %xmm4, %xmm1
8712 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8713 ; SSE2-NEXT:    por %xmm4, %xmm1
8714 ; SSE2-NEXT:    retq
8715 ;
8716 ; SSE4-LABEL: test173:
8717 ; SSE4:       # %bb.0: # %entry
8718 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8719 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8720 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
8721 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8722 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8723 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8724 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8725 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8726 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8727 ; SSE4-NEXT:    pxor %xmm1, %xmm5
8728 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8729 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8730 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8731 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8732 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8733 ; SSE4-NEXT:    retq
8734 ;
8735 ; AVX1-LABEL: test173:
8736 ; AVX1:       # %bb.0: # %entry
8737 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8738 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8739 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8740 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8741 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8742 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8743 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8744 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8745 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8746 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8747 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8748 ; AVX1-NEXT:    retq
8749 ;
8750 ; AVX2-LABEL: test173:
8751 ; AVX2:       # %bb.0: # %entry
8752 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8753 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8754 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8755 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8756 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8757 ; AVX2-NEXT:    retq
8758 ;
8759 ; AVX512BW-LABEL: test173:
8760 ; AVX512BW:       # %bb.0: # %entry
8761 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8762 ; AVX512BW-NEXT:    retq
8763 entry:
8764   %cmp = icmp ult <4 x i64> %a, %b
8765   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8766   ret <4 x i64> %sel
8767 }
8768
8769 define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
8770 ; SSE2-LABEL: test174:
8771 ; SSE2:       # %bb.0: # %entry
8772 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8773 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
8774 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8775 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
8776 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8777 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8778 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8779 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8780 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8781 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8782 ; SSE2-NEXT:    pand %xmm8, %xmm5
8783 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8784 ; SSE2-NEXT:    por %xmm5, %xmm6
8785 ; SSE2-NEXT:    pand %xmm6, %xmm0
8786 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8787 ; SSE2-NEXT:    por %xmm6, %xmm0
8788 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
8789 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8790 ; SSE2-NEXT:    pxor %xmm1, %xmm4
8791 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8792 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8793 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8794 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8795 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8796 ; SSE2-NEXT:    pand %xmm6, %xmm2
8797 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8798 ; SSE2-NEXT:    por %xmm2, %xmm4
8799 ; SSE2-NEXT:    pand %xmm4, %xmm1
8800 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8801 ; SSE2-NEXT:    por %xmm4, %xmm1
8802 ; SSE2-NEXT:    retq
8803 ;
8804 ; SSE4-LABEL: test174:
8805 ; SSE4:       # %bb.0: # %entry
8806 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8807 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8808 ; SSE4-NEXT:    movdqa %xmm2, %xmm6
8809 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8810 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8811 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8812 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8813 ; SSE4-NEXT:    movdqa %xmm3, %xmm0
8814 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8815 ; SSE4-NEXT:    pxor %xmm1, %xmm5
8816 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8817 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8818 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8819 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8820 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8821 ; SSE4-NEXT:    retq
8822 ;
8823 ; AVX1-LABEL: test174:
8824 ; AVX1:       # %bb.0: # %entry
8825 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8826 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8827 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8828 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8829 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8830 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8831 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8832 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8833 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8834 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8835 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8836 ; AVX1-NEXT:    retq
8837 ;
8838 ; AVX2-LABEL: test174:
8839 ; AVX2:       # %bb.0: # %entry
8840 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8841 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8842 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8843 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8844 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8845 ; AVX2-NEXT:    retq
8846 ;
8847 ; AVX512BW-LABEL: test174:
8848 ; AVX512BW:       # %bb.0: # %entry
8849 ; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8850 ; AVX512BW-NEXT:    retq
8851 entry:
8852   %cmp = icmp ule <4 x i64> %a, %b
8853   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8854   ret <4 x i64> %sel
8855 }
8856
8857 define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
8858 ; SSE2-LABEL: test175:
8859 ; SSE2:       # %bb.0: # %entry
8860 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8861 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8862 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8863 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8864 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8865 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8866 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8867 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8868 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8869 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8870 ; SSE2-NEXT:    pand %xmm8, %xmm5
8871 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8872 ; SSE2-NEXT:    por %xmm5, %xmm6
8873 ; SSE2-NEXT:    pand %xmm6, %xmm0
8874 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8875 ; SSE2-NEXT:    por %xmm6, %xmm0
8876 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8877 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8878 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8879 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8880 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8881 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8882 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8883 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8884 ; SSE2-NEXT:    pand %xmm6, %xmm2
8885 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8886 ; SSE2-NEXT:    por %xmm2, %xmm4
8887 ; SSE2-NEXT:    pand %xmm4, %xmm1
8888 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8889 ; SSE2-NEXT:    por %xmm4, %xmm1
8890 ; SSE2-NEXT:    retq
8891 ;
8892 ; SSE4-LABEL: test175:
8893 ; SSE4:       # %bb.0: # %entry
8894 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8895 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8896 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
8897 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8898 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8899 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8900 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8901 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8902 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8903 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8904 ; SSE4-NEXT:    pxor %xmm3, %xmm5
8905 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8906 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8907 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8908 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8909 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8910 ; SSE4-NEXT:    retq
8911 ;
8912 ; AVX1-LABEL: test175:
8913 ; AVX1:       # %bb.0: # %entry
8914 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8915 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8916 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8917 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8918 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8919 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8920 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8921 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8922 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8923 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8924 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8925 ; AVX1-NEXT:    retq
8926 ;
8927 ; AVX2-LABEL: test175:
8928 ; AVX2:       # %bb.0: # %entry
8929 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8930 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8931 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8932 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8933 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8934 ; AVX2-NEXT:    retq
8935 ;
8936 ; AVX512BW-LABEL: test175:
8937 ; AVX512BW:       # %bb.0: # %entry
8938 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8939 ; AVX512BW-NEXT:    retq
8940 entry:
8941   %cmp = icmp ugt <4 x i64> %a, %b
8942   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8943   ret <4 x i64> %sel
8944 }
8945
8946 define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
8947 ; SSE2-LABEL: test176:
8948 ; SSE2:       # %bb.0: # %entry
8949 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8950 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
8951 ; SSE2-NEXT:    pxor %xmm4, %xmm5
8952 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
8953 ; SSE2-NEXT:    pxor %xmm4, %xmm6
8954 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
8955 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8956 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8957 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8958 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8959 ; SSE2-NEXT:    pand %xmm8, %xmm5
8960 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8961 ; SSE2-NEXT:    por %xmm5, %xmm6
8962 ; SSE2-NEXT:    pand %xmm6, %xmm0
8963 ; SSE2-NEXT:    pandn %xmm2, %xmm6
8964 ; SSE2-NEXT:    por %xmm6, %xmm0
8965 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
8966 ; SSE2-NEXT:    pxor %xmm4, %xmm2
8967 ; SSE2-NEXT:    pxor %xmm3, %xmm4
8968 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
8969 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8970 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8971 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8972 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8973 ; SSE2-NEXT:    pand %xmm6, %xmm2
8974 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8975 ; SSE2-NEXT:    por %xmm2, %xmm4
8976 ; SSE2-NEXT:    pand %xmm4, %xmm1
8977 ; SSE2-NEXT:    pandn %xmm3, %xmm4
8978 ; SSE2-NEXT:    por %xmm4, %xmm1
8979 ; SSE2-NEXT:    retq
8980 ;
8981 ; SSE4-LABEL: test176:
8982 ; SSE4:       # %bb.0: # %entry
8983 ; SSE4-NEXT:    movdqa %xmm0, %xmm4
8984 ; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8985 ; SSE4-NEXT:    movdqa %xmm0, %xmm6
8986 ; SSE4-NEXT:    pxor %xmm5, %xmm6
8987 ; SSE4-NEXT:    movdqa %xmm2, %xmm0
8988 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8989 ; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8990 ; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8991 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
8992 ; SSE4-NEXT:    pxor %xmm5, %xmm0
8993 ; SSE4-NEXT:    pxor %xmm3, %xmm5
8994 ; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8995 ; SSE4-NEXT:    movdqa %xmm5, %xmm0
8996 ; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8997 ; SSE4-NEXT:    movapd %xmm2, %xmm0
8998 ; SSE4-NEXT:    movapd %xmm3, %xmm1
8999 ; SSE4-NEXT:    retq
9000 ;
9001 ; AVX1-LABEL: test176:
9002 ; AVX1:       # %bb.0: # %entry
9003 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9004 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9005 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9006 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9007 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9008 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9009 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9010 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9011 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9012 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9013 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9014 ; AVX1-NEXT:    retq
9015 ;
9016 ; AVX2-LABEL: test176:
9017 ; AVX2:       # %bb.0: # %entry
9018 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9019 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9020 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9021 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9022 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9023 ; AVX2-NEXT:    retq
9024 ;
9025 ; AVX512BW-LABEL: test176:
9026 ; AVX512BW:       # %bb.0: # %entry
9027 ; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9028 ; AVX512BW-NEXT:    retq
9029 entry:
9030   %cmp = icmp uge <4 x i64> %a, %b
9031   %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9032   ret <4 x i64> %sel
9033 }
9034
9035 define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
9036 ; SSE2-LABEL: test177:
9037 ; SSE2:       # %bb.0: # %entry
9038 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9039 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9040 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9041 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9042 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9043 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9044 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9045 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9046 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9047 ; SSE2-NEXT:    pand %xmm5, %xmm2
9048 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9049 ; SSE2-NEXT:    por %xmm2, %xmm3
9050 ; SSE2-NEXT:    pand %xmm3, %xmm0
9051 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9052 ; SSE2-NEXT:    por %xmm3, %xmm0
9053 ; SSE2-NEXT:    retq
9054 ;
9055 ; SSE4-LABEL: test177:
9056 ; SSE4:       # %bb.0: # %entry
9057 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9058 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9059 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9060 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9061 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9062 ; SSE4-NEXT:    retq
9063 ;
9064 ; AVX1-LABEL: test177:
9065 ; AVX1:       # %bb.0: # %entry
9066 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9067 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9068 ; AVX1-NEXT:    retq
9069 ;
9070 ; AVX2-LABEL: test177:
9071 ; AVX2:       # %bb.0: # %entry
9072 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9073 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9074 ; AVX2-NEXT:    retq
9075 ;
9076 ; AVX512BW-LABEL: test177:
9077 ; AVX512BW:       # %bb.0: # %entry
9078 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9079 ; AVX512BW-NEXT:    retq
9080 entry:
9081   %cmp = icmp slt <2 x i64> %a, %b
9082   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9083   ret <2 x i64> %sel
9084 }
9085
9086 define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
9087 ; SSE2-LABEL: test178:
9088 ; SSE2:       # %bb.0: # %entry
9089 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9090 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9091 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9092 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9093 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9094 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9095 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9096 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9097 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9098 ; SSE2-NEXT:    pand %xmm5, %xmm2
9099 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9100 ; SSE2-NEXT:    por %xmm2, %xmm3
9101 ; SSE2-NEXT:    pand %xmm3, %xmm0
9102 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9103 ; SSE2-NEXT:    por %xmm3, %xmm0
9104 ; SSE2-NEXT:    retq
9105 ;
9106 ; SSE4-LABEL: test178:
9107 ; SSE4:       # %bb.0: # %entry
9108 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9109 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9110 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9111 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9112 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9113 ; SSE4-NEXT:    retq
9114 ;
9115 ; AVX1-LABEL: test178:
9116 ; AVX1:       # %bb.0: # %entry
9117 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9118 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9119 ; AVX1-NEXT:    retq
9120 ;
9121 ; AVX2-LABEL: test178:
9122 ; AVX2:       # %bb.0: # %entry
9123 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9124 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9125 ; AVX2-NEXT:    retq
9126 ;
9127 ; AVX512BW-LABEL: test178:
9128 ; AVX512BW:       # %bb.0: # %entry
9129 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9130 ; AVX512BW-NEXT:    retq
9131 entry:
9132   %cmp = icmp sle <2 x i64> %a, %b
9133   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9134   ret <2 x i64> %sel
9135 }
9136
9137 define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
9138 ; SSE2-LABEL: test179:
9139 ; SSE2:       # %bb.0: # %entry
9140 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9141 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9142 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9143 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9144 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9145 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9146 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9147 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9148 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9149 ; SSE2-NEXT:    pand %xmm5, %xmm2
9150 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9151 ; SSE2-NEXT:    por %xmm2, %xmm3
9152 ; SSE2-NEXT:    pand %xmm3, %xmm0
9153 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9154 ; SSE2-NEXT:    por %xmm3, %xmm0
9155 ; SSE2-NEXT:    retq
9156 ;
9157 ; SSE4-LABEL: test179:
9158 ; SSE4:       # %bb.0: # %entry
9159 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9160 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9161 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9162 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9163 ; SSE4-NEXT:    retq
9164 ;
9165 ; AVX1-LABEL: test179:
9166 ; AVX1:       # %bb.0: # %entry
9167 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9168 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9169 ; AVX1-NEXT:    retq
9170 ;
9171 ; AVX2-LABEL: test179:
9172 ; AVX2:       # %bb.0: # %entry
9173 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9174 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9175 ; AVX2-NEXT:    retq
9176 ;
9177 ; AVX512BW-LABEL: test179:
9178 ; AVX512BW:       # %bb.0: # %entry
9179 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9180 ; AVX512BW-NEXT:    retq
9181 entry:
9182   %cmp = icmp sgt <2 x i64> %a, %b
9183   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9184   ret <2 x i64> %sel
9185 }
9186
9187 define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
9188 ; SSE2-LABEL: test180:
9189 ; SSE2:       # %bb.0: # %entry
9190 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9191 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9192 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9193 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9194 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9195 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9196 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9197 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9198 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9199 ; SSE2-NEXT:    pand %xmm5, %xmm2
9200 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9201 ; SSE2-NEXT:    por %xmm2, %xmm3
9202 ; SSE2-NEXT:    pand %xmm3, %xmm0
9203 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9204 ; SSE2-NEXT:    por %xmm3, %xmm0
9205 ; SSE2-NEXT:    retq
9206 ;
9207 ; SSE4-LABEL: test180:
9208 ; SSE4:       # %bb.0: # %entry
9209 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9210 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9211 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9212 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9213 ; SSE4-NEXT:    retq
9214 ;
9215 ; AVX1-LABEL: test180:
9216 ; AVX1:       # %bb.0: # %entry
9217 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9218 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9219 ; AVX1-NEXT:    retq
9220 ;
9221 ; AVX2-LABEL: test180:
9222 ; AVX2:       # %bb.0: # %entry
9223 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9224 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9225 ; AVX2-NEXT:    retq
9226 ;
9227 ; AVX512BW-LABEL: test180:
9228 ; AVX512BW:       # %bb.0: # %entry
9229 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9230 ; AVX512BW-NEXT:    retq
9231 entry:
9232   %cmp = icmp sge <2 x i64> %a, %b
9233   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9234   ret <2 x i64> %sel
9235 }
9236
9237 define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
9238 ; SSE2-LABEL: test181:
9239 ; SSE2:       # %bb.0: # %entry
9240 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9241 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9242 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9243 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9244 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9245 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9246 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9247 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9248 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9249 ; SSE2-NEXT:    pand %xmm5, %xmm2
9250 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9251 ; SSE2-NEXT:    por %xmm2, %xmm3
9252 ; SSE2-NEXT:    pand %xmm3, %xmm0
9253 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9254 ; SSE2-NEXT:    por %xmm3, %xmm0
9255 ; SSE2-NEXT:    retq
9256 ;
9257 ; SSE4-LABEL: test181:
9258 ; SSE4:       # %bb.0: # %entry
9259 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9260 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9261 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
9262 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9263 ; SSE4-NEXT:    pxor %xmm1, %xmm0
9264 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9265 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9266 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9267 ; SSE4-NEXT:    retq
9268 ;
9269 ; AVX1-LABEL: test181:
9270 ; AVX1:       # %bb.0: # %entry
9271 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9272 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9273 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9274 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9275 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9276 ; AVX1-NEXT:    retq
9277 ;
9278 ; AVX2-LABEL: test181:
9279 ; AVX2:       # %bb.0: # %entry
9280 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9281 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9282 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9283 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9284 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9285 ; AVX2-NEXT:    retq
9286 ;
9287 ; AVX512BW-LABEL: test181:
9288 ; AVX512BW:       # %bb.0: # %entry
9289 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9290 ; AVX512BW-NEXT:    retq
9291 entry:
9292   %cmp = icmp ult <2 x i64> %a, %b
9293   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9294   ret <2 x i64> %sel
9295 }
9296
9297 define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
9298 ; SSE2-LABEL: test182:
9299 ; SSE2:       # %bb.0: # %entry
9300 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9301 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9302 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9303 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9304 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9305 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9306 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9307 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9308 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9309 ; SSE2-NEXT:    pand %xmm5, %xmm2
9310 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9311 ; SSE2-NEXT:    por %xmm2, %xmm3
9312 ; SSE2-NEXT:    pand %xmm3, %xmm0
9313 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9314 ; SSE2-NEXT:    por %xmm3, %xmm0
9315 ; SSE2-NEXT:    retq
9316 ;
9317 ; SSE4-LABEL: test182:
9318 ; SSE4:       # %bb.0: # %entry
9319 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9320 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9321 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
9322 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9323 ; SSE4-NEXT:    pxor %xmm1, %xmm0
9324 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9325 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9326 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9327 ; SSE4-NEXT:    retq
9328 ;
9329 ; AVX1-LABEL: test182:
9330 ; AVX1:       # %bb.0: # %entry
9331 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9332 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9333 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9334 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9335 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9336 ; AVX1-NEXT:    retq
9337 ;
9338 ; AVX2-LABEL: test182:
9339 ; AVX2:       # %bb.0: # %entry
9340 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9341 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9342 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9343 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9344 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9345 ; AVX2-NEXT:    retq
9346 ;
9347 ; AVX512BW-LABEL: test182:
9348 ; AVX512BW:       # %bb.0: # %entry
9349 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9350 ; AVX512BW-NEXT:    retq
9351 entry:
9352   %cmp = icmp ule <2 x i64> %a, %b
9353   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9354   ret <2 x i64> %sel
9355 }
9356
9357 define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
9358 ; SSE2-LABEL: test183:
9359 ; SSE2:       # %bb.0: # %entry
9360 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9361 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9362 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9363 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9364 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9365 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9366 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9367 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9368 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9369 ; SSE2-NEXT:    pand %xmm5, %xmm2
9370 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9371 ; SSE2-NEXT:    por %xmm2, %xmm3
9372 ; SSE2-NEXT:    pand %xmm3, %xmm0
9373 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9374 ; SSE2-NEXT:    por %xmm3, %xmm0
9375 ; SSE2-NEXT:    retq
9376 ;
9377 ; SSE4-LABEL: test183:
9378 ; SSE4:       # %bb.0: # %entry
9379 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9380 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9381 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
9382 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9383 ; SSE4-NEXT:    pxor %xmm2, %xmm0
9384 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9385 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9386 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9387 ; SSE4-NEXT:    retq
9388 ;
9389 ; AVX1-LABEL: test183:
9390 ; AVX1:       # %bb.0: # %entry
9391 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9392 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9393 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9394 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9395 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9396 ; AVX1-NEXT:    retq
9397 ;
9398 ; AVX2-LABEL: test183:
9399 ; AVX2:       # %bb.0: # %entry
9400 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9401 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9402 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9403 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9404 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9405 ; AVX2-NEXT:    retq
9406 ;
9407 ; AVX512BW-LABEL: test183:
9408 ; AVX512BW:       # %bb.0: # %entry
9409 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9410 ; AVX512BW-NEXT:    retq
9411 entry:
9412   %cmp = icmp ugt <2 x i64> %a, %b
9413   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9414   ret <2 x i64> %sel
9415 }
9416
9417 define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
9418 ; SSE2-LABEL: test184:
9419 ; SSE2:       # %bb.0: # %entry
9420 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9421 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9422 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9423 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9424 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9425 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9426 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9427 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9428 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9429 ; SSE2-NEXT:    pand %xmm5, %xmm2
9430 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9431 ; SSE2-NEXT:    por %xmm2, %xmm3
9432 ; SSE2-NEXT:    pand %xmm3, %xmm0
9433 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9434 ; SSE2-NEXT:    por %xmm3, %xmm0
9435 ; SSE2-NEXT:    retq
9436 ;
9437 ; SSE4-LABEL: test184:
9438 ; SSE4:       # %bb.0: # %entry
9439 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9440 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9441 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
9442 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9443 ; SSE4-NEXT:    pxor %xmm2, %xmm0
9444 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9445 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9446 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9447 ; SSE4-NEXT:    retq
9448 ;
9449 ; AVX1-LABEL: test184:
9450 ; AVX1:       # %bb.0: # %entry
9451 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9452 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9453 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9454 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9455 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9456 ; AVX1-NEXT:    retq
9457 ;
9458 ; AVX2-LABEL: test184:
9459 ; AVX2:       # %bb.0: # %entry
9460 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9461 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9462 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9463 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9464 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9465 ; AVX2-NEXT:    retq
9466 ;
9467 ; AVX512BW-LABEL: test184:
9468 ; AVX512BW:       # %bb.0: # %entry
9469 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9470 ; AVX512BW-NEXT:    retq
9471 entry:
9472   %cmp = icmp uge <2 x i64> %a, %b
9473   %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9474   ret <2 x i64> %sel
9475 }
9476
9477 define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
9478 ; SSE2-LABEL: test185:
9479 ; SSE2:       # %bb.0: # %entry
9480 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9481 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9482 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9483 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9484 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9485 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9486 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9487 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9488 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9489 ; SSE2-NEXT:    pand %xmm5, %xmm2
9490 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9491 ; SSE2-NEXT:    por %xmm2, %xmm3
9492 ; SSE2-NEXT:    pand %xmm3, %xmm0
9493 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9494 ; SSE2-NEXT:    por %xmm3, %xmm0
9495 ; SSE2-NEXT:    retq
9496 ;
9497 ; SSE4-LABEL: test185:
9498 ; SSE4:       # %bb.0: # %entry
9499 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9500 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9501 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9502 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9503 ; SSE4-NEXT:    retq
9504 ;
9505 ; AVX1-LABEL: test185:
9506 ; AVX1:       # %bb.0: # %entry
9507 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9508 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9509 ; AVX1-NEXT:    retq
9510 ;
9511 ; AVX2-LABEL: test185:
9512 ; AVX2:       # %bb.0: # %entry
9513 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9514 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9515 ; AVX2-NEXT:    retq
9516 ;
9517 ; AVX512BW-LABEL: test185:
9518 ; AVX512BW:       # %bb.0: # %entry
9519 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9520 ; AVX512BW-NEXT:    retq
9521 entry:
9522   %cmp = icmp slt <2 x i64> %a, %b
9523   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9524   ret <2 x i64> %sel
9525 }
9526
9527 define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
9528 ; SSE2-LABEL: test186:
9529 ; SSE2:       # %bb.0: # %entry
9530 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9531 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9532 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9533 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9534 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9535 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9536 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9537 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9538 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9539 ; SSE2-NEXT:    pand %xmm5, %xmm2
9540 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9541 ; SSE2-NEXT:    por %xmm2, %xmm3
9542 ; SSE2-NEXT:    pand %xmm3, %xmm0
9543 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9544 ; SSE2-NEXT:    por %xmm3, %xmm0
9545 ; SSE2-NEXT:    retq
9546 ;
9547 ; SSE4-LABEL: test186:
9548 ; SSE4:       # %bb.0: # %entry
9549 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9550 ; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9551 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9552 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9553 ; SSE4-NEXT:    retq
9554 ;
9555 ; AVX1-LABEL: test186:
9556 ; AVX1:       # %bb.0: # %entry
9557 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9558 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9559 ; AVX1-NEXT:    retq
9560 ;
9561 ; AVX2-LABEL: test186:
9562 ; AVX2:       # %bb.0: # %entry
9563 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9564 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9565 ; AVX2-NEXT:    retq
9566 ;
9567 ; AVX512BW-LABEL: test186:
9568 ; AVX512BW:       # %bb.0: # %entry
9569 ; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9570 ; AVX512BW-NEXT:    retq
9571 entry:
9572   %cmp = icmp sle <2 x i64> %a, %b
9573   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9574   ret <2 x i64> %sel
9575 }
9576
9577 define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
9578 ; SSE2-LABEL: test187:
9579 ; SSE2:       # %bb.0: # %entry
9580 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9581 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9582 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9583 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9584 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9585 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9586 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9587 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9588 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9589 ; SSE2-NEXT:    pand %xmm5, %xmm2
9590 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9591 ; SSE2-NEXT:    por %xmm2, %xmm3
9592 ; SSE2-NEXT:    pand %xmm3, %xmm0
9593 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9594 ; SSE2-NEXT:    por %xmm3, %xmm0
9595 ; SSE2-NEXT:    retq
9596 ;
9597 ; SSE4-LABEL: test187:
9598 ; SSE4:       # %bb.0: # %entry
9599 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9600 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9601 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9602 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9603 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9604 ; SSE4-NEXT:    retq
9605 ;
9606 ; AVX1-LABEL: test187:
9607 ; AVX1:       # %bb.0: # %entry
9608 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9609 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9610 ; AVX1-NEXT:    retq
9611 ;
9612 ; AVX2-LABEL: test187:
9613 ; AVX2:       # %bb.0: # %entry
9614 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9615 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9616 ; AVX2-NEXT:    retq
9617 ;
9618 ; AVX512BW-LABEL: test187:
9619 ; AVX512BW:       # %bb.0: # %entry
9620 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9621 ; AVX512BW-NEXT:    retq
9622 entry:
9623   %cmp = icmp sgt <2 x i64> %a, %b
9624   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9625   ret <2 x i64> %sel
9626 }
9627
9628 define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
9629 ; SSE2-LABEL: test188:
9630 ; SSE2:       # %bb.0: # %entry
9631 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9632 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9633 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9634 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9635 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9636 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9637 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9638 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9639 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9640 ; SSE2-NEXT:    pand %xmm5, %xmm2
9641 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9642 ; SSE2-NEXT:    por %xmm2, %xmm3
9643 ; SSE2-NEXT:    pand %xmm3, %xmm0
9644 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9645 ; SSE2-NEXT:    por %xmm3, %xmm0
9646 ; SSE2-NEXT:    retq
9647 ;
9648 ; SSE4-LABEL: test188:
9649 ; SSE4:       # %bb.0: # %entry
9650 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9651 ; SSE4-NEXT:    movdqa %xmm1, %xmm0
9652 ; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9653 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9654 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9655 ; SSE4-NEXT:    retq
9656 ;
9657 ; AVX1-LABEL: test188:
9658 ; AVX1:       # %bb.0: # %entry
9659 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9660 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9661 ; AVX1-NEXT:    retq
9662 ;
9663 ; AVX2-LABEL: test188:
9664 ; AVX2:       # %bb.0: # %entry
9665 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9666 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9667 ; AVX2-NEXT:    retq
9668 ;
9669 ; AVX512BW-LABEL: test188:
9670 ; AVX512BW:       # %bb.0: # %entry
9671 ; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9672 ; AVX512BW-NEXT:    retq
9673 entry:
9674   %cmp = icmp sge <2 x i64> %a, %b
9675   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9676   ret <2 x i64> %sel
9677 }
9678
9679 define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
9680 ; SSE2-LABEL: test189:
9681 ; SSE2:       # %bb.0: # %entry
9682 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9683 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9684 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9685 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9686 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9687 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9688 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9689 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9690 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9691 ; SSE2-NEXT:    pand %xmm5, %xmm2
9692 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9693 ; SSE2-NEXT:    por %xmm2, %xmm3
9694 ; SSE2-NEXT:    pand %xmm3, %xmm0
9695 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9696 ; SSE2-NEXT:    por %xmm3, %xmm0
9697 ; SSE2-NEXT:    retq
9698 ;
9699 ; SSE4-LABEL: test189:
9700 ; SSE4:       # %bb.0: # %entry
9701 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9702 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9703 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
9704 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9705 ; SSE4-NEXT:    pxor %xmm2, %xmm0
9706 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9707 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9708 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9709 ; SSE4-NEXT:    retq
9710 ;
9711 ; AVX1-LABEL: test189:
9712 ; AVX1:       # %bb.0: # %entry
9713 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9714 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9715 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9716 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9717 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9718 ; AVX1-NEXT:    retq
9719 ;
9720 ; AVX2-LABEL: test189:
9721 ; AVX2:       # %bb.0: # %entry
9722 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9723 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9724 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9725 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9726 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9727 ; AVX2-NEXT:    retq
9728 ;
9729 ; AVX512BW-LABEL: test189:
9730 ; AVX512BW:       # %bb.0: # %entry
9731 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9732 ; AVX512BW-NEXT:    retq
9733 entry:
9734   %cmp = icmp ult <2 x i64> %a, %b
9735   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9736   ret <2 x i64> %sel
9737 }
9738
9739 define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
9740 ; SSE2-LABEL: test190:
9741 ; SSE2:       # %bb.0: # %entry
9742 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9743 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
9744 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9745 ; SSE2-NEXT:    pxor %xmm0, %xmm2
9746 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9747 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9748 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9749 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9750 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9751 ; SSE2-NEXT:    pand %xmm5, %xmm2
9752 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9753 ; SSE2-NEXT:    por %xmm2, %xmm3
9754 ; SSE2-NEXT:    pand %xmm3, %xmm0
9755 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9756 ; SSE2-NEXT:    por %xmm3, %xmm0
9757 ; SSE2-NEXT:    retq
9758 ;
9759 ; SSE4-LABEL: test190:
9760 ; SSE4:       # %bb.0: # %entry
9761 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9762 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9763 ; SSE4-NEXT:    movdqa %xmm1, %xmm3
9764 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9765 ; SSE4-NEXT:    pxor %xmm2, %xmm0
9766 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9767 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9768 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9769 ; SSE4-NEXT:    retq
9770 ;
9771 ; AVX1-LABEL: test190:
9772 ; AVX1:       # %bb.0: # %entry
9773 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9774 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9775 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9776 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9777 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9778 ; AVX1-NEXT:    retq
9779 ;
9780 ; AVX2-LABEL: test190:
9781 ; AVX2:       # %bb.0: # %entry
9782 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9783 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9784 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9785 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9786 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9787 ; AVX2-NEXT:    retq
9788 ;
9789 ; AVX512BW-LABEL: test190:
9790 ; AVX512BW:       # %bb.0: # %entry
9791 ; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9792 ; AVX512BW-NEXT:    retq
9793 entry:
9794   %cmp = icmp ule <2 x i64> %a, %b
9795   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9796   ret <2 x i64> %sel
9797 }
9798
9799 define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
9800 ; SSE2-LABEL: test191:
9801 ; SSE2:       # %bb.0: # %entry
9802 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9803 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9804 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9805 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9806 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9807 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9808 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9809 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9810 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9811 ; SSE2-NEXT:    pand %xmm5, %xmm2
9812 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9813 ; SSE2-NEXT:    por %xmm2, %xmm3
9814 ; SSE2-NEXT:    pand %xmm3, %xmm0
9815 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9816 ; SSE2-NEXT:    por %xmm3, %xmm0
9817 ; SSE2-NEXT:    retq
9818 ;
9819 ; SSE4-LABEL: test191:
9820 ; SSE4:       # %bb.0: # %entry
9821 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9822 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9823 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
9824 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9825 ; SSE4-NEXT:    pxor %xmm1, %xmm0
9826 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9827 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9828 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9829 ; SSE4-NEXT:    retq
9830 ;
9831 ; AVX1-LABEL: test191:
9832 ; AVX1:       # %bb.0: # %entry
9833 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9834 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9835 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9836 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9837 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9838 ; AVX1-NEXT:    retq
9839 ;
9840 ; AVX2-LABEL: test191:
9841 ; AVX2:       # %bb.0: # %entry
9842 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9843 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9844 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9845 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9846 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9847 ; AVX2-NEXT:    retq
9848 ;
9849 ; AVX512BW-LABEL: test191:
9850 ; AVX512BW:       # %bb.0: # %entry
9851 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9852 ; AVX512BW-NEXT:    retq
9853 entry:
9854   %cmp = icmp ugt <2 x i64> %a, %b
9855   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9856   ret <2 x i64> %sel
9857 }
9858
9859 define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
9860 ; SSE2-LABEL: test192:
9861 ; SSE2:       # %bb.0: # %entry
9862 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9863 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
9864 ; SSE2-NEXT:    pxor %xmm2, %xmm3
9865 ; SSE2-NEXT:    pxor %xmm1, %xmm2
9866 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
9867 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9868 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9869 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9870 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9871 ; SSE2-NEXT:    pand %xmm5, %xmm2
9872 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9873 ; SSE2-NEXT:    por %xmm2, %xmm3
9874 ; SSE2-NEXT:    pand %xmm3, %xmm0
9875 ; SSE2-NEXT:    pandn %xmm1, %xmm3
9876 ; SSE2-NEXT:    por %xmm3, %xmm0
9877 ; SSE2-NEXT:    retq
9878 ;
9879 ; SSE4-LABEL: test192:
9880 ; SSE4:       # %bb.0: # %entry
9881 ; SSE4-NEXT:    movdqa %xmm0, %xmm2
9882 ; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9883 ; SSE4-NEXT:    movdqa %xmm2, %xmm3
9884 ; SSE4-NEXT:    pxor %xmm0, %xmm3
9885 ; SSE4-NEXT:    pxor %xmm1, %xmm0
9886 ; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9887 ; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9888 ; SSE4-NEXT:    movapd %xmm1, %xmm0
9889 ; SSE4-NEXT:    retq
9890 ;
9891 ; AVX1-LABEL: test192:
9892 ; AVX1:       # %bb.0: # %entry
9893 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9894 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9895 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9896 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9897 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9898 ; AVX1-NEXT:    retq
9899 ;
9900 ; AVX2-LABEL: test192:
9901 ; AVX2:       # %bb.0: # %entry
9902 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9903 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9904 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9905 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9906 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9907 ; AVX2-NEXT:    retq
9908 ;
9909 ; AVX512BW-LABEL: test192:
9910 ; AVX512BW:       # %bb.0: # %entry
9911 ; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9912 ; AVX512BW-NEXT:    retq
9913 entry:
9914   %cmp = icmp uge <2 x i64> %a, %b
9915   %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9916   ret <2 x i64> %sel
9917 }