xref: /llvm-project/llvm/test/CodeGen/X86/vselect-minmax.ll (revision 7b3bbd83c0c24087072ec5b22a76799ab31f87d5)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE2
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE4
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW
8
9define <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
28entry:
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
34define <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
53entry:
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
59define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
60; SSE2-LABEL: test3:
61; SSE2:       # %bb.0: # %entry
62; SSE2-NEXT:    movdqa %xmm0, %xmm2
63; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
64; SSE2-NEXT:    pand %xmm2, %xmm0
65; SSE2-NEXT:    pandn %xmm1, %xmm2
66; SSE2-NEXT:    por %xmm2, %xmm0
67; SSE2-NEXT:    retq
68;
69; SSE4-LABEL: test3:
70; SSE4:       # %bb.0: # %entry
71; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
72; SSE4-NEXT:    retq
73;
74; AVX-LABEL: test3:
75; AVX:       # %bb.0: # %entry
76; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
77; AVX-NEXT:    retq
78entry:
79  %cmp = icmp sgt <16 x i8> %a, %b
80  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
81  ret <16 x i8> %sel
82}
83
84define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
85; SSE2-LABEL: test4:
86; SSE2:       # %bb.0: # %entry
87; SSE2-NEXT:    movdqa %xmm0, %xmm2
88; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
89; SSE2-NEXT:    pand %xmm2, %xmm0
90; SSE2-NEXT:    pandn %xmm1, %xmm2
91; SSE2-NEXT:    por %xmm2, %xmm0
92; SSE2-NEXT:    retq
93;
94; SSE4-LABEL: test4:
95; SSE4:       # %bb.0: # %entry
96; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
97; SSE4-NEXT:    retq
98;
99; AVX-LABEL: test4:
100; AVX:       # %bb.0: # %entry
101; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
102; AVX-NEXT:    retq
103entry:
104  %cmp = icmp sge <16 x i8> %a, %b
105  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
106  ret <16 x i8> %sel
107}
108
109define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
110; SSE-LABEL: test5:
111; SSE:       # %bb.0: # %entry
112; SSE-NEXT:    pminub %xmm1, %xmm0
113; SSE-NEXT:    retq
114;
115; AVX-LABEL: test5:
116; AVX:       # %bb.0: # %entry
117; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
118; AVX-NEXT:    retq
119entry:
120  %cmp = icmp ult <16 x i8> %a, %b
121  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
122  ret <16 x i8> %sel
123}
124
125define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
126; SSE-LABEL: test6:
127; SSE:       # %bb.0: # %entry
128; SSE-NEXT:    pminub %xmm1, %xmm0
129; SSE-NEXT:    retq
130;
131; AVX-LABEL: test6:
132; AVX:       # %bb.0: # %entry
133; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
134; AVX-NEXT:    retq
135entry:
136  %cmp = icmp ule <16 x i8> %a, %b
137  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
138  ret <16 x i8> %sel
139}
140
141define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
142; SSE-LABEL: test7:
143; SSE:       # %bb.0: # %entry
144; SSE-NEXT:    pmaxub %xmm1, %xmm0
145; SSE-NEXT:    retq
146;
147; AVX-LABEL: test7:
148; AVX:       # %bb.0: # %entry
149; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
150; AVX-NEXT:    retq
151entry:
152  %cmp = icmp ugt <16 x i8> %a, %b
153  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
154  ret <16 x i8> %sel
155}
156
157define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
158; SSE-LABEL: test8:
159; SSE:       # %bb.0: # %entry
160; SSE-NEXT:    pmaxub %xmm1, %xmm0
161; SSE-NEXT:    retq
162;
163; AVX-LABEL: test8:
164; AVX:       # %bb.0: # %entry
165; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
166; AVX-NEXT:    retq
167entry:
168  %cmp = icmp uge <16 x i8> %a, %b
169  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
170  ret <16 x i8> %sel
171}
172
173define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
174; SSE-LABEL: test9:
175; SSE:       # %bb.0: # %entry
176; SSE-NEXT:    pminsw %xmm1, %xmm0
177; SSE-NEXT:    retq
178;
179; AVX-LABEL: test9:
180; AVX:       # %bb.0: # %entry
181; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
182; AVX-NEXT:    retq
183entry:
184  %cmp = icmp slt <8 x i16> %a, %b
185  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
186  ret <8 x i16> %sel
187}
188
189define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
190; SSE-LABEL: test10:
191; SSE:       # %bb.0: # %entry
192; SSE-NEXT:    pminsw %xmm1, %xmm0
193; SSE-NEXT:    retq
194;
195; AVX-LABEL: test10:
196; AVX:       # %bb.0: # %entry
197; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
198; AVX-NEXT:    retq
199entry:
200  %cmp = icmp sle <8 x i16> %a, %b
201  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
202  ret <8 x i16> %sel
203}
204
205define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
206; SSE-LABEL: test11:
207; SSE:       # %bb.0: # %entry
208; SSE-NEXT:    pmaxsw %xmm1, %xmm0
209; SSE-NEXT:    retq
210;
211; AVX-LABEL: test11:
212; AVX:       # %bb.0: # %entry
213; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
214; AVX-NEXT:    retq
215entry:
216  %cmp = icmp sgt <8 x i16> %a, %b
217  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
218  ret <8 x i16> %sel
219}
220
221define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
222; SSE-LABEL: test12:
223; SSE:       # %bb.0: # %entry
224; SSE-NEXT:    pmaxsw %xmm1, %xmm0
225; SSE-NEXT:    retq
226;
227; AVX-LABEL: test12:
228; AVX:       # %bb.0: # %entry
229; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
230; AVX-NEXT:    retq
231entry:
232  %cmp = icmp sge <8 x i16> %a, %b
233  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
234  ret <8 x i16> %sel
235}
236
237define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
238; SSE2-LABEL: test13:
239; SSE2:       # %bb.0: # %entry
240; SSE2-NEXT:    movdqa %xmm0, %xmm2
241; SSE2-NEXT:    psubusw %xmm1, %xmm2
242; SSE2-NEXT:    psubw %xmm2, %xmm0
243; SSE2-NEXT:    retq
244;
245; SSE4-LABEL: test13:
246; SSE4:       # %bb.0: # %entry
247; SSE4-NEXT:    pminuw %xmm1, %xmm0
248; SSE4-NEXT:    retq
249;
250; AVX-LABEL: test13:
251; AVX:       # %bb.0: # %entry
252; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
253; AVX-NEXT:    retq
254entry:
255  %cmp = icmp ult <8 x i16> %a, %b
256  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
257  ret <8 x i16> %sel
258}
259
260define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
261; SSE2-LABEL: test14:
262; SSE2:       # %bb.0: # %entry
263; SSE2-NEXT:    movdqa %xmm0, %xmm2
264; SSE2-NEXT:    psubusw %xmm1, %xmm2
265; SSE2-NEXT:    psubw %xmm2, %xmm0
266; SSE2-NEXT:    retq
267;
268; SSE4-LABEL: test14:
269; SSE4:       # %bb.0: # %entry
270; SSE4-NEXT:    pminuw %xmm1, %xmm0
271; SSE4-NEXT:    retq
272;
273; AVX-LABEL: test14:
274; AVX:       # %bb.0: # %entry
275; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
276; AVX-NEXT:    retq
277entry:
278  %cmp = icmp ule <8 x i16> %a, %b
279  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
280  ret <8 x i16> %sel
281}
282
283define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
284; SSE2-LABEL: test15:
285; SSE2:       # %bb.0: # %entry
286; SSE2-NEXT:    psubusw %xmm0, %xmm1
287; SSE2-NEXT:    paddw %xmm1, %xmm0
288; SSE2-NEXT:    retq
289;
290; SSE4-LABEL: test15:
291; SSE4:       # %bb.0: # %entry
292; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
293; SSE4-NEXT:    retq
294;
295; AVX-LABEL: test15:
296; AVX:       # %bb.0: # %entry
297; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
298; AVX-NEXT:    retq
299entry:
300  %cmp = icmp ugt <8 x i16> %a, %b
301  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
302  ret <8 x i16> %sel
303}
304
305define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
306; SSE2-LABEL: test16:
307; SSE2:       # %bb.0: # %entry
308; SSE2-NEXT:    psubusw %xmm0, %xmm1
309; SSE2-NEXT:    paddw %xmm1, %xmm0
310; SSE2-NEXT:    retq
311;
312; SSE4-LABEL: test16:
313; SSE4:       # %bb.0: # %entry
314; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
315; SSE4-NEXT:    retq
316;
317; AVX-LABEL: test16:
318; AVX:       # %bb.0: # %entry
319; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
320; AVX-NEXT:    retq
321entry:
322  %cmp = icmp uge <8 x i16> %a, %b
323  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
324  ret <8 x i16> %sel
325}
326
327define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
328; SSE2-LABEL: test17:
329; SSE2:       # %bb.0: # %entry
330; SSE2-NEXT:    movdqa %xmm1, %xmm2
331; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
332; SSE2-NEXT:    pand %xmm2, %xmm0
333; SSE2-NEXT:    pandn %xmm1, %xmm2
334; SSE2-NEXT:    por %xmm2, %xmm0
335; SSE2-NEXT:    retq
336;
337; SSE4-LABEL: test17:
338; SSE4:       # %bb.0: # %entry
339; SSE4-NEXT:    pminsd %xmm1, %xmm0
340; SSE4-NEXT:    retq
341;
342; AVX-LABEL: test17:
343; AVX:       # %bb.0: # %entry
344; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
345; AVX-NEXT:    retq
346entry:
347  %cmp = icmp slt <4 x i32> %a, %b
348  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
349  ret <4 x i32> %sel
350}
351
352define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
353; SSE2-LABEL: test18:
354; SSE2:       # %bb.0: # %entry
355; SSE2-NEXT:    movdqa %xmm1, %xmm2
356; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
357; SSE2-NEXT:    pand %xmm2, %xmm0
358; SSE2-NEXT:    pandn %xmm1, %xmm2
359; SSE2-NEXT:    por %xmm2, %xmm0
360; SSE2-NEXT:    retq
361;
362; SSE4-LABEL: test18:
363; SSE4:       # %bb.0: # %entry
364; SSE4-NEXT:    pminsd %xmm1, %xmm0
365; SSE4-NEXT:    retq
366;
367; AVX-LABEL: test18:
368; AVX:       # %bb.0: # %entry
369; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
370; AVX-NEXT:    retq
371entry:
372  %cmp = icmp sle <4 x i32> %a, %b
373  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
374  ret <4 x i32> %sel
375}
376
377define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
378; SSE2-LABEL: test19:
379; SSE2:       # %bb.0: # %entry
380; SSE2-NEXT:    movdqa %xmm0, %xmm2
381; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
382; SSE2-NEXT:    pand %xmm2, %xmm0
383; SSE2-NEXT:    pandn %xmm1, %xmm2
384; SSE2-NEXT:    por %xmm2, %xmm0
385; SSE2-NEXT:    retq
386;
387; SSE4-LABEL: test19:
388; SSE4:       # %bb.0: # %entry
389; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
390; SSE4-NEXT:    retq
391;
392; AVX-LABEL: test19:
393; AVX:       # %bb.0: # %entry
394; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
395; AVX-NEXT:    retq
396entry:
397  %cmp = icmp sgt <4 x i32> %a, %b
398  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
399  ret <4 x i32> %sel
400}
401
402define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
403; SSE2-LABEL: test20:
404; SSE2:       # %bb.0: # %entry
405; SSE2-NEXT:    movdqa %xmm0, %xmm2
406; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
407; SSE2-NEXT:    pand %xmm2, %xmm0
408; SSE2-NEXT:    pandn %xmm1, %xmm2
409; SSE2-NEXT:    por %xmm2, %xmm0
410; SSE2-NEXT:    retq
411;
412; SSE4-LABEL: test20:
413; SSE4:       # %bb.0: # %entry
414; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
415; SSE4-NEXT:    retq
416;
417; AVX-LABEL: test20:
418; AVX:       # %bb.0: # %entry
419; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
420; AVX-NEXT:    retq
421entry:
422  %cmp = icmp sge <4 x i32> %a, %b
423  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
424  ret <4 x i32> %sel
425}
426
427define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
428; SSE2-LABEL: test21:
429; SSE2:       # %bb.0: # %entry
430; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
431; SSE2-NEXT:    movdqa %xmm0, %xmm3
432; SSE2-NEXT:    pxor %xmm2, %xmm3
433; SSE2-NEXT:    pxor %xmm1, %xmm2
434; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
435; SSE2-NEXT:    pand %xmm2, %xmm0
436; SSE2-NEXT:    pandn %xmm1, %xmm2
437; SSE2-NEXT:    por %xmm2, %xmm0
438; SSE2-NEXT:    retq
439;
440; SSE4-LABEL: test21:
441; SSE4:       # %bb.0: # %entry
442; SSE4-NEXT:    pminud %xmm1, %xmm0
443; SSE4-NEXT:    retq
444;
445; AVX-LABEL: test21:
446; AVX:       # %bb.0: # %entry
447; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
448; AVX-NEXT:    retq
449entry:
450  %cmp = icmp ult <4 x i32> %a, %b
451  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
452  ret <4 x i32> %sel
453}
454
455define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
456; SSE2-LABEL: test22:
457; SSE2:       # %bb.0: # %entry
458; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
459; SSE2-NEXT:    movdqa %xmm0, %xmm3
460; SSE2-NEXT:    pxor %xmm2, %xmm3
461; SSE2-NEXT:    pxor %xmm1, %xmm2
462; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
463; SSE2-NEXT:    pand %xmm2, %xmm0
464; SSE2-NEXT:    pandn %xmm1, %xmm2
465; SSE2-NEXT:    por %xmm2, %xmm0
466; SSE2-NEXT:    retq
467;
468; SSE4-LABEL: test22:
469; SSE4:       # %bb.0: # %entry
470; SSE4-NEXT:    pminud %xmm1, %xmm0
471; SSE4-NEXT:    retq
472;
473; AVX-LABEL: test22:
474; AVX:       # %bb.0: # %entry
475; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
476; AVX-NEXT:    retq
477entry:
478  %cmp = icmp ule <4 x i32> %a, %b
479  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
480  ret <4 x i32> %sel
481}
482
483define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
484; SSE2-LABEL: test23:
485; SSE2:       # %bb.0: # %entry
486; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
487; SSE2-NEXT:    movdqa %xmm1, %xmm3
488; SSE2-NEXT:    pxor %xmm2, %xmm3
489; SSE2-NEXT:    pxor %xmm0, %xmm2
490; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
491; SSE2-NEXT:    pand %xmm2, %xmm0
492; SSE2-NEXT:    pandn %xmm1, %xmm2
493; SSE2-NEXT:    por %xmm2, %xmm0
494; SSE2-NEXT:    retq
495;
496; SSE4-LABEL: test23:
497; SSE4:       # %bb.0: # %entry
498; SSE4-NEXT:    pmaxud %xmm1, %xmm0
499; SSE4-NEXT:    retq
500;
501; AVX-LABEL: test23:
502; AVX:       # %bb.0: # %entry
503; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
504; AVX-NEXT:    retq
505entry:
506  %cmp = icmp ugt <4 x i32> %a, %b
507  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
508  ret <4 x i32> %sel
509}
510
511define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
512; SSE2-LABEL: test24:
513; SSE2:       # %bb.0: # %entry
514; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
515; SSE2-NEXT:    movdqa %xmm1, %xmm3
516; SSE2-NEXT:    pxor %xmm2, %xmm3
517; SSE2-NEXT:    pxor %xmm0, %xmm2
518; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
519; SSE2-NEXT:    pand %xmm2, %xmm0
520; SSE2-NEXT:    pandn %xmm1, %xmm2
521; SSE2-NEXT:    por %xmm2, %xmm0
522; SSE2-NEXT:    retq
523;
524; SSE4-LABEL: test24:
525; SSE4:       # %bb.0: # %entry
526; SSE4-NEXT:    pmaxud %xmm1, %xmm0
527; SSE4-NEXT:    retq
528;
529; AVX-LABEL: test24:
530; AVX:       # %bb.0: # %entry
531; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
532; AVX-NEXT:    retq
533entry:
534  %cmp = icmp uge <4 x i32> %a, %b
535  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
536  ret <4 x i32> %sel
537}
538
539define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
540; SSE2-LABEL: test25:
541; SSE2:       # %bb.0: # %entry
542; SSE2-NEXT:    movdqa %xmm2, %xmm4
543; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
544; SSE2-NEXT:    pand %xmm4, %xmm0
545; SSE2-NEXT:    pandn %xmm2, %xmm4
546; SSE2-NEXT:    por %xmm4, %xmm0
547; SSE2-NEXT:    movdqa %xmm3, %xmm2
548; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
549; SSE2-NEXT:    pand %xmm2, %xmm1
550; SSE2-NEXT:    pandn %xmm3, %xmm2
551; SSE2-NEXT:    por %xmm2, %xmm1
552; SSE2-NEXT:    retq
553;
554; SSE4-LABEL: test25:
555; SSE4:       # %bb.0: # %entry
556; SSE4-NEXT:    pminsb %xmm2, %xmm0
557; SSE4-NEXT:    pminsb %xmm3, %xmm1
558; SSE4-NEXT:    retq
559;
560; AVX1-LABEL: test25:
561; AVX1:       # %bb.0: # %entry
562; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
563; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
564; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
565; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
566; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
567; AVX1-NEXT:    retq
568;
569; AVX2-LABEL: test25:
570; AVX2:       # %bb.0: # %entry
571; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
572; AVX2-NEXT:    retq
573;
574; AVX512-LABEL: test25:
575; AVX512:       # %bb.0: # %entry
576; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
577; AVX512-NEXT:    retq
578entry:
579  %cmp = icmp slt <32 x i8> %a, %b
580  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
581  ret <32 x i8> %sel
582}
583
584define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
585; SSE2-LABEL: test26:
586; SSE2:       # %bb.0: # %entry
587; SSE2-NEXT:    movdqa %xmm2, %xmm4
588; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
589; SSE2-NEXT:    pand %xmm4, %xmm0
590; SSE2-NEXT:    pandn %xmm2, %xmm4
591; SSE2-NEXT:    por %xmm4, %xmm0
592; SSE2-NEXT:    movdqa %xmm3, %xmm2
593; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
594; SSE2-NEXT:    pand %xmm2, %xmm1
595; SSE2-NEXT:    pandn %xmm3, %xmm2
596; SSE2-NEXT:    por %xmm2, %xmm1
597; SSE2-NEXT:    retq
598;
599; SSE4-LABEL: test26:
600; SSE4:       # %bb.0: # %entry
601; SSE4-NEXT:    pminsb %xmm2, %xmm0
602; SSE4-NEXT:    pminsb %xmm3, %xmm1
603; SSE4-NEXT:    retq
604;
605; AVX1-LABEL: test26:
606; AVX1:       # %bb.0: # %entry
607; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
608; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
609; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
610; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
611; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
612; AVX1-NEXT:    retq
613;
614; AVX2-LABEL: test26:
615; AVX2:       # %bb.0: # %entry
616; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
617; AVX2-NEXT:    retq
618;
619; AVX512-LABEL: test26:
620; AVX512:       # %bb.0: # %entry
621; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
622; AVX512-NEXT:    retq
623entry:
624  %cmp = icmp sle <32 x i8> %a, %b
625  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
626  ret <32 x i8> %sel
627}
628
629define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
630; SSE2-LABEL: test27:
631; SSE2:       # %bb.0: # %entry
632; SSE2-NEXT:    movdqa %xmm0, %xmm4
633; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
634; SSE2-NEXT:    pand %xmm4, %xmm0
635; SSE2-NEXT:    pandn %xmm2, %xmm4
636; SSE2-NEXT:    por %xmm4, %xmm0
637; SSE2-NEXT:    movdqa %xmm1, %xmm2
638; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
639; SSE2-NEXT:    pand %xmm2, %xmm1
640; SSE2-NEXT:    pandn %xmm3, %xmm2
641; SSE2-NEXT:    por %xmm2, %xmm1
642; SSE2-NEXT:    retq
643;
644; SSE4-LABEL: test27:
645; SSE4:       # %bb.0: # %entry
646; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
647; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
648; SSE4-NEXT:    retq
649;
650; AVX1-LABEL: test27:
651; AVX1:       # %bb.0: # %entry
652; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
653; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
654; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
655; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
656; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
657; AVX1-NEXT:    retq
658;
659; AVX2-LABEL: test27:
660; AVX2:       # %bb.0: # %entry
661; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
662; AVX2-NEXT:    retq
663;
664; AVX512-LABEL: test27:
665; AVX512:       # %bb.0: # %entry
666; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
667; AVX512-NEXT:    retq
668entry:
669  %cmp = icmp sgt <32 x i8> %a, %b
670  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
671  ret <32 x i8> %sel
672}
673
674define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
675; SSE2-LABEL: test28:
676; SSE2:       # %bb.0: # %entry
677; SSE2-NEXT:    movdqa %xmm0, %xmm4
678; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
679; SSE2-NEXT:    pand %xmm4, %xmm0
680; SSE2-NEXT:    pandn %xmm2, %xmm4
681; SSE2-NEXT:    por %xmm4, %xmm0
682; SSE2-NEXT:    movdqa %xmm1, %xmm2
683; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
684; SSE2-NEXT:    pand %xmm2, %xmm1
685; SSE2-NEXT:    pandn %xmm3, %xmm2
686; SSE2-NEXT:    por %xmm2, %xmm1
687; SSE2-NEXT:    retq
688;
689; SSE4-LABEL: test28:
690; SSE4:       # %bb.0: # %entry
691; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
692; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
693; SSE4-NEXT:    retq
694;
695; AVX1-LABEL: test28:
696; AVX1:       # %bb.0: # %entry
697; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
698; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
699; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
700; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
701; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
702; AVX1-NEXT:    retq
703;
704; AVX2-LABEL: test28:
705; AVX2:       # %bb.0: # %entry
706; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
707; AVX2-NEXT:    retq
708;
709; AVX512-LABEL: test28:
710; AVX512:       # %bb.0: # %entry
711; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
712; AVX512-NEXT:    retq
713entry:
714  %cmp = icmp sge <32 x i8> %a, %b
715  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
716  ret <32 x i8> %sel
717}
718
719define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
720; SSE-LABEL: test29:
721; SSE:       # %bb.0: # %entry
722; SSE-NEXT:    pminub %xmm2, %xmm0
723; SSE-NEXT:    pminub %xmm3, %xmm1
724; SSE-NEXT:    retq
725;
726; AVX1-LABEL: test29:
727; AVX1:       # %bb.0: # %entry
728; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
729; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
730; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
731; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
732; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
733; AVX1-NEXT:    retq
734;
735; AVX2-LABEL: test29:
736; AVX2:       # %bb.0: # %entry
737; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
738; AVX2-NEXT:    retq
739;
740; AVX512-LABEL: test29:
741; AVX512:       # %bb.0: # %entry
742; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
743; AVX512-NEXT:    retq
744entry:
745  %cmp = icmp ult <32 x i8> %a, %b
746  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
747  ret <32 x i8> %sel
748}
749
750define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
751; SSE-LABEL: test30:
752; SSE:       # %bb.0: # %entry
753; SSE-NEXT:    pminub %xmm2, %xmm0
754; SSE-NEXT:    pminub %xmm3, %xmm1
755; SSE-NEXT:    retq
756;
757; AVX1-LABEL: test30:
758; AVX1:       # %bb.0: # %entry
759; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
760; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
761; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
762; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
763; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
764; AVX1-NEXT:    retq
765;
766; AVX2-LABEL: test30:
767; AVX2:       # %bb.0: # %entry
768; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
769; AVX2-NEXT:    retq
770;
771; AVX512-LABEL: test30:
772; AVX512:       # %bb.0: # %entry
773; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
774; AVX512-NEXT:    retq
775entry:
776  %cmp = icmp ule <32 x i8> %a, %b
777  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
778  ret <32 x i8> %sel
779}
780
781define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
782; SSE-LABEL: test31:
783; SSE:       # %bb.0: # %entry
784; SSE-NEXT:    pmaxub %xmm2, %xmm0
785; SSE-NEXT:    pmaxub %xmm3, %xmm1
786; SSE-NEXT:    retq
787;
788; AVX1-LABEL: test31:
789; AVX1:       # %bb.0: # %entry
790; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
791; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
792; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
793; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
794; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
795; AVX1-NEXT:    retq
796;
797; AVX2-LABEL: test31:
798; AVX2:       # %bb.0: # %entry
799; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
800; AVX2-NEXT:    retq
801;
802; AVX512-LABEL: test31:
803; AVX512:       # %bb.0: # %entry
804; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
805; AVX512-NEXT:    retq
806entry:
807  %cmp = icmp ugt <32 x i8> %a, %b
808  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
809  ret <32 x i8> %sel
810}
811
812define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
813; SSE-LABEL: test32:
814; SSE:       # %bb.0: # %entry
815; SSE-NEXT:    pmaxub %xmm2, %xmm0
816; SSE-NEXT:    pmaxub %xmm3, %xmm1
817; SSE-NEXT:    retq
818;
819; AVX1-LABEL: test32:
820; AVX1:       # %bb.0: # %entry
821; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
822; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
823; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
824; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
825; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
826; AVX1-NEXT:    retq
827;
828; AVX2-LABEL: test32:
829; AVX2:       # %bb.0: # %entry
830; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
831; AVX2-NEXT:    retq
832;
833; AVX512-LABEL: test32:
834; AVX512:       # %bb.0: # %entry
835; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
836; AVX512-NEXT:    retq
837entry:
838  %cmp = icmp uge <32 x i8> %a, %b
839  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
840  ret <32 x i8> %sel
841}
842
843define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
844; SSE-LABEL: test33:
845; SSE:       # %bb.0: # %entry
846; SSE-NEXT:    pminsw %xmm2, %xmm0
847; SSE-NEXT:    pminsw %xmm3, %xmm1
848; SSE-NEXT:    retq
849;
850; AVX1-LABEL: test33:
851; AVX1:       # %bb.0: # %entry
852; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
853; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
854; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
855; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
856; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
857; AVX1-NEXT:    retq
858;
859; AVX2-LABEL: test33:
860; AVX2:       # %bb.0: # %entry
861; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
862; AVX2-NEXT:    retq
863;
864; AVX512-LABEL: test33:
865; AVX512:       # %bb.0: # %entry
866; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
867; AVX512-NEXT:    retq
868entry:
869  %cmp = icmp slt <16 x i16> %a, %b
870  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
871  ret <16 x i16> %sel
872}
873
874define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
875; SSE-LABEL: test34:
876; SSE:       # %bb.0: # %entry
877; SSE-NEXT:    pminsw %xmm2, %xmm0
878; SSE-NEXT:    pminsw %xmm3, %xmm1
879; SSE-NEXT:    retq
880;
881; AVX1-LABEL: test34:
882; AVX1:       # %bb.0: # %entry
883; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
884; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
885; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
886; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
887; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
888; AVX1-NEXT:    retq
889;
890; AVX2-LABEL: test34:
891; AVX2:       # %bb.0: # %entry
892; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
893; AVX2-NEXT:    retq
894;
895; AVX512-LABEL: test34:
896; AVX512:       # %bb.0: # %entry
897; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
898; AVX512-NEXT:    retq
899entry:
900  %cmp = icmp sle <16 x i16> %a, %b
901  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
902  ret <16 x i16> %sel
903}
904
905define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
906; SSE-LABEL: test35:
907; SSE:       # %bb.0: # %entry
908; SSE-NEXT:    pmaxsw %xmm2, %xmm0
909; SSE-NEXT:    pmaxsw %xmm3, %xmm1
910; SSE-NEXT:    retq
911;
912; AVX1-LABEL: test35:
913; AVX1:       # %bb.0: # %entry
914; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
915; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
916; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
917; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
918; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
919; AVX1-NEXT:    retq
920;
921; AVX2-LABEL: test35:
922; AVX2:       # %bb.0: # %entry
923; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
924; AVX2-NEXT:    retq
925;
926; AVX512-LABEL: test35:
927; AVX512:       # %bb.0: # %entry
928; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
929; AVX512-NEXT:    retq
930entry:
931  %cmp = icmp sgt <16 x i16> %a, %b
932  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
933  ret <16 x i16> %sel
934}
935
936define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
937; SSE-LABEL: test36:
938; SSE:       # %bb.0: # %entry
939; SSE-NEXT:    pmaxsw %xmm2, %xmm0
940; SSE-NEXT:    pmaxsw %xmm3, %xmm1
941; SSE-NEXT:    retq
942;
943; AVX1-LABEL: test36:
944; AVX1:       # %bb.0: # %entry
945; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
946; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
947; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
948; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
949; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
950; AVX1-NEXT:    retq
951;
952; AVX2-LABEL: test36:
953; AVX2:       # %bb.0: # %entry
954; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
955; AVX2-NEXT:    retq
956;
957; AVX512-LABEL: test36:
958; AVX512:       # %bb.0: # %entry
959; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
960; AVX512-NEXT:    retq
961entry:
962  %cmp = icmp sge <16 x i16> %a, %b
963  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
964  ret <16 x i16> %sel
965}
966
967define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
968; SSE2-LABEL: test37:
969; SSE2:       # %bb.0: # %entry
970; SSE2-NEXT:    movdqa %xmm0, %xmm4
971; SSE2-NEXT:    psubusw %xmm2, %xmm4
972; SSE2-NEXT:    psubw %xmm4, %xmm0
973; SSE2-NEXT:    movdqa %xmm1, %xmm2
974; SSE2-NEXT:    psubusw %xmm3, %xmm2
975; SSE2-NEXT:    psubw %xmm2, %xmm1
976; SSE2-NEXT:    retq
977;
978; SSE4-LABEL: test37:
979; SSE4:       # %bb.0: # %entry
980; SSE4-NEXT:    pminuw %xmm2, %xmm0
981; SSE4-NEXT:    pminuw %xmm3, %xmm1
982; SSE4-NEXT:    retq
983;
984; AVX1-LABEL: test37:
985; AVX1:       # %bb.0: # %entry
986; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
987; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
988; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
989; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
990; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
991; AVX1-NEXT:    retq
992;
993; AVX2-LABEL: test37:
994; AVX2:       # %bb.0: # %entry
995; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
996; AVX2-NEXT:    retq
997;
998; AVX512-LABEL: test37:
999; AVX512:       # %bb.0: # %entry
1000; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1001; AVX512-NEXT:    retq
1002entry:
1003  %cmp = icmp ult <16 x i16> %a, %b
1004  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1005  ret <16 x i16> %sel
1006}
1007
1008define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1009; SSE2-LABEL: test38:
1010; SSE2:       # %bb.0: # %entry
1011; SSE2-NEXT:    movdqa %xmm0, %xmm4
1012; SSE2-NEXT:    psubusw %xmm2, %xmm4
1013; SSE2-NEXT:    psubw %xmm4, %xmm0
1014; SSE2-NEXT:    movdqa %xmm1, %xmm2
1015; SSE2-NEXT:    psubusw %xmm3, %xmm2
1016; SSE2-NEXT:    psubw %xmm2, %xmm1
1017; SSE2-NEXT:    retq
1018;
1019; SSE4-LABEL: test38:
1020; SSE4:       # %bb.0: # %entry
1021; SSE4-NEXT:    pminuw %xmm2, %xmm0
1022; SSE4-NEXT:    pminuw %xmm3, %xmm1
1023; SSE4-NEXT:    retq
1024;
1025; AVX1-LABEL: test38:
1026; AVX1:       # %bb.0: # %entry
1027; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1028; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1029; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1030; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1031; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1032; AVX1-NEXT:    retq
1033;
1034; AVX2-LABEL: test38:
1035; AVX2:       # %bb.0: # %entry
1036; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1037; AVX2-NEXT:    retq
1038;
1039; AVX512-LABEL: test38:
1040; AVX512:       # %bb.0: # %entry
1041; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1042; AVX512-NEXT:    retq
1043entry:
1044  %cmp = icmp ule <16 x i16> %a, %b
1045  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1046  ret <16 x i16> %sel
1047}
1048
1049define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1050; SSE2-LABEL: test39:
1051; SSE2:       # %bb.0: # %entry
1052; SSE2-NEXT:    psubusw %xmm0, %xmm2
1053; SSE2-NEXT:    paddw %xmm2, %xmm0
1054; SSE2-NEXT:    psubusw %xmm1, %xmm3
1055; SSE2-NEXT:    paddw %xmm3, %xmm1
1056; SSE2-NEXT:    retq
1057;
1058; SSE4-LABEL: test39:
1059; SSE4:       # %bb.0: # %entry
1060; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1061; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1062; SSE4-NEXT:    retq
1063;
1064; AVX1-LABEL: test39:
1065; AVX1:       # %bb.0: # %entry
1066; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1067; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1068; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1069; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1070; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1071; AVX1-NEXT:    retq
1072;
1073; AVX2-LABEL: test39:
1074; AVX2:       # %bb.0: # %entry
1075; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1076; AVX2-NEXT:    retq
1077;
1078; AVX512-LABEL: test39:
1079; AVX512:       # %bb.0: # %entry
1080; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1081; AVX512-NEXT:    retq
1082entry:
1083  %cmp = icmp ugt <16 x i16> %a, %b
1084  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1085  ret <16 x i16> %sel
1086}
1087
1088define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1089; SSE2-LABEL: test40:
1090; SSE2:       # %bb.0: # %entry
1091; SSE2-NEXT:    psubusw %xmm0, %xmm2
1092; SSE2-NEXT:    paddw %xmm2, %xmm0
1093; SSE2-NEXT:    psubusw %xmm1, %xmm3
1094; SSE2-NEXT:    paddw %xmm3, %xmm1
1095; SSE2-NEXT:    retq
1096;
1097; SSE4-LABEL: test40:
1098; SSE4:       # %bb.0: # %entry
1099; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1100; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1101; SSE4-NEXT:    retq
1102;
1103; AVX1-LABEL: test40:
1104; AVX1:       # %bb.0: # %entry
1105; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1106; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1107; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1108; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1109; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1110; AVX1-NEXT:    retq
1111;
1112; AVX2-LABEL: test40:
1113; AVX2:       # %bb.0: # %entry
1114; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1115; AVX2-NEXT:    retq
1116;
1117; AVX512-LABEL: test40:
1118; AVX512:       # %bb.0: # %entry
1119; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1120; AVX512-NEXT:    retq
1121entry:
1122  %cmp = icmp uge <16 x i16> %a, %b
1123  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1124  ret <16 x i16> %sel
1125}
1126
1127define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1128; SSE2-LABEL: test41:
1129; SSE2:       # %bb.0: # %entry
1130; SSE2-NEXT:    movdqa %xmm2, %xmm4
1131; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1132; SSE2-NEXT:    pand %xmm4, %xmm0
1133; SSE2-NEXT:    pandn %xmm2, %xmm4
1134; SSE2-NEXT:    por %xmm4, %xmm0
1135; SSE2-NEXT:    movdqa %xmm3, %xmm2
1136; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1137; SSE2-NEXT:    pand %xmm2, %xmm1
1138; SSE2-NEXT:    pandn %xmm3, %xmm2
1139; SSE2-NEXT:    por %xmm2, %xmm1
1140; SSE2-NEXT:    retq
1141;
1142; SSE4-LABEL: test41:
1143; SSE4:       # %bb.0: # %entry
1144; SSE4-NEXT:    pminsd %xmm2, %xmm0
1145; SSE4-NEXT:    pminsd %xmm3, %xmm1
1146; SSE4-NEXT:    retq
1147;
1148; AVX1-LABEL: test41:
1149; AVX1:       # %bb.0: # %entry
1150; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1151; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1152; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1153; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1154; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1155; AVX1-NEXT:    retq
1156;
1157; AVX2-LABEL: test41:
1158; AVX2:       # %bb.0: # %entry
1159; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1160; AVX2-NEXT:    retq
1161;
1162; AVX512-LABEL: test41:
1163; AVX512:       # %bb.0: # %entry
1164; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1165; AVX512-NEXT:    retq
1166entry:
1167  %cmp = icmp slt <8 x i32> %a, %b
1168  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1169  ret <8 x i32> %sel
1170}
1171
1172define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1173; SSE2-LABEL: test42:
1174; SSE2:       # %bb.0: # %entry
1175; SSE2-NEXT:    movdqa %xmm2, %xmm4
1176; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1177; SSE2-NEXT:    pand %xmm4, %xmm0
1178; SSE2-NEXT:    pandn %xmm2, %xmm4
1179; SSE2-NEXT:    por %xmm4, %xmm0
1180; SSE2-NEXT:    movdqa %xmm3, %xmm2
1181; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1182; SSE2-NEXT:    pand %xmm2, %xmm1
1183; SSE2-NEXT:    pandn %xmm3, %xmm2
1184; SSE2-NEXT:    por %xmm2, %xmm1
1185; SSE2-NEXT:    retq
1186;
1187; SSE4-LABEL: test42:
1188; SSE4:       # %bb.0: # %entry
1189; SSE4-NEXT:    pminsd %xmm2, %xmm0
1190; SSE4-NEXT:    pminsd %xmm3, %xmm1
1191; SSE4-NEXT:    retq
1192;
1193; AVX1-LABEL: test42:
1194; AVX1:       # %bb.0: # %entry
1195; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1196; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1197; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1198; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1199; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1200; AVX1-NEXT:    retq
1201;
1202; AVX2-LABEL: test42:
1203; AVX2:       # %bb.0: # %entry
1204; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1205; AVX2-NEXT:    retq
1206;
1207; AVX512-LABEL: test42:
1208; AVX512:       # %bb.0: # %entry
1209; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1210; AVX512-NEXT:    retq
1211entry:
1212  %cmp = icmp sle <8 x i32> %a, %b
1213  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1214  ret <8 x i32> %sel
1215}
1216
1217define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1218; SSE2-LABEL: test43:
1219; SSE2:       # %bb.0: # %entry
1220; SSE2-NEXT:    movdqa %xmm0, %xmm4
1221; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1222; SSE2-NEXT:    pand %xmm4, %xmm0
1223; SSE2-NEXT:    pandn %xmm2, %xmm4
1224; SSE2-NEXT:    por %xmm4, %xmm0
1225; SSE2-NEXT:    movdqa %xmm1, %xmm2
1226; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1227; SSE2-NEXT:    pand %xmm2, %xmm1
1228; SSE2-NEXT:    pandn %xmm3, %xmm2
1229; SSE2-NEXT:    por %xmm2, %xmm1
1230; SSE2-NEXT:    retq
1231;
1232; SSE4-LABEL: test43:
1233; SSE4:       # %bb.0: # %entry
1234; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1235; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1236; SSE4-NEXT:    retq
1237;
1238; AVX1-LABEL: test43:
1239; AVX1:       # %bb.0: # %entry
1240; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1241; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1242; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1243; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1244; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1245; AVX1-NEXT:    retq
1246;
1247; AVX2-LABEL: test43:
1248; AVX2:       # %bb.0: # %entry
1249; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1250; AVX2-NEXT:    retq
1251;
1252; AVX512-LABEL: test43:
1253; AVX512:       # %bb.0: # %entry
1254; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1255; AVX512-NEXT:    retq
1256entry:
1257  %cmp = icmp sgt <8 x i32> %a, %b
1258  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1259  ret <8 x i32> %sel
1260}
1261
1262define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1263; SSE2-LABEL: test44:
1264; SSE2:       # %bb.0: # %entry
1265; SSE2-NEXT:    movdqa %xmm0, %xmm4
1266; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1267; SSE2-NEXT:    pand %xmm4, %xmm0
1268; SSE2-NEXT:    pandn %xmm2, %xmm4
1269; SSE2-NEXT:    por %xmm4, %xmm0
1270; SSE2-NEXT:    movdqa %xmm1, %xmm2
1271; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1272; SSE2-NEXT:    pand %xmm2, %xmm1
1273; SSE2-NEXT:    pandn %xmm3, %xmm2
1274; SSE2-NEXT:    por %xmm2, %xmm1
1275; SSE2-NEXT:    retq
1276;
1277; SSE4-LABEL: test44:
1278; SSE4:       # %bb.0: # %entry
1279; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1280; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1281; SSE4-NEXT:    retq
1282;
1283; AVX1-LABEL: test44:
1284; AVX1:       # %bb.0: # %entry
1285; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1286; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1287; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1288; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1289; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1290; AVX1-NEXT:    retq
1291;
1292; AVX2-LABEL: test44:
1293; AVX2:       # %bb.0: # %entry
1294; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1295; AVX2-NEXT:    retq
1296;
1297; AVX512-LABEL: test44:
1298; AVX512:       # %bb.0: # %entry
1299; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1300; AVX512-NEXT:    retq
1301entry:
1302  %cmp = icmp sge <8 x i32> %a, %b
1303  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1304  ret <8 x i32> %sel
1305}
1306
1307define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1308; SSE2-LABEL: test45:
1309; SSE2:       # %bb.0: # %entry
1310; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1311; SSE2-NEXT:    movdqa %xmm0, %xmm5
1312; SSE2-NEXT:    pxor %xmm4, %xmm5
1313; SSE2-NEXT:    movdqa %xmm2, %xmm6
1314; SSE2-NEXT:    pxor %xmm4, %xmm6
1315; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1316; SSE2-NEXT:    pand %xmm6, %xmm0
1317; SSE2-NEXT:    pandn %xmm2, %xmm6
1318; SSE2-NEXT:    por %xmm6, %xmm0
1319; SSE2-NEXT:    movdqa %xmm1, %xmm2
1320; SSE2-NEXT:    pxor %xmm4, %xmm2
1321; SSE2-NEXT:    pxor %xmm3, %xmm4
1322; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1323; SSE2-NEXT:    pand %xmm4, %xmm1
1324; SSE2-NEXT:    pandn %xmm3, %xmm4
1325; SSE2-NEXT:    por %xmm4, %xmm1
1326; SSE2-NEXT:    retq
1327;
1328; SSE4-LABEL: test45:
1329; SSE4:       # %bb.0: # %entry
1330; SSE4-NEXT:    pminud %xmm2, %xmm0
1331; SSE4-NEXT:    pminud %xmm3, %xmm1
1332; SSE4-NEXT:    retq
1333;
1334; AVX1-LABEL: test45:
1335; AVX1:       # %bb.0: # %entry
1336; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1337; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1338; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1339; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1340; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1341; AVX1-NEXT:    retq
1342;
1343; AVX2-LABEL: test45:
1344; AVX2:       # %bb.0: # %entry
1345; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1346; AVX2-NEXT:    retq
1347;
1348; AVX512-LABEL: test45:
1349; AVX512:       # %bb.0: # %entry
1350; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1351; AVX512-NEXT:    retq
1352entry:
1353  %cmp = icmp ult <8 x i32> %a, %b
1354  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1355  ret <8 x i32> %sel
1356}
1357
1358define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1359; SSE2-LABEL: test46:
1360; SSE2:       # %bb.0: # %entry
1361; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1362; SSE2-NEXT:    movdqa %xmm0, %xmm5
1363; SSE2-NEXT:    pxor %xmm4, %xmm5
1364; SSE2-NEXT:    movdqa %xmm2, %xmm6
1365; SSE2-NEXT:    pxor %xmm4, %xmm6
1366; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1367; SSE2-NEXT:    pand %xmm6, %xmm0
1368; SSE2-NEXT:    pandn %xmm2, %xmm6
1369; SSE2-NEXT:    por %xmm6, %xmm0
1370; SSE2-NEXT:    movdqa %xmm1, %xmm2
1371; SSE2-NEXT:    pxor %xmm4, %xmm2
1372; SSE2-NEXT:    pxor %xmm3, %xmm4
1373; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1374; SSE2-NEXT:    pand %xmm4, %xmm1
1375; SSE2-NEXT:    pandn %xmm3, %xmm4
1376; SSE2-NEXT:    por %xmm4, %xmm1
1377; SSE2-NEXT:    retq
1378;
1379; SSE4-LABEL: test46:
1380; SSE4:       # %bb.0: # %entry
1381; SSE4-NEXT:    pminud %xmm2, %xmm0
1382; SSE4-NEXT:    pminud %xmm3, %xmm1
1383; SSE4-NEXT:    retq
1384;
1385; AVX1-LABEL: test46:
1386; AVX1:       # %bb.0: # %entry
1387; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1388; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1389; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1390; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1391; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1392; AVX1-NEXT:    retq
1393;
1394; AVX2-LABEL: test46:
1395; AVX2:       # %bb.0: # %entry
1396; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1397; AVX2-NEXT:    retq
1398;
1399; AVX512-LABEL: test46:
1400; AVX512:       # %bb.0: # %entry
1401; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1402; AVX512-NEXT:    retq
1403entry:
1404  %cmp = icmp ule <8 x i32> %a, %b
1405  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1406  ret <8 x i32> %sel
1407}
1408
1409define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1410; SSE2-LABEL: test47:
1411; SSE2:       # %bb.0: # %entry
1412; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1413; SSE2-NEXT:    movdqa %xmm2, %xmm5
1414; SSE2-NEXT:    pxor %xmm4, %xmm5
1415; SSE2-NEXT:    movdqa %xmm0, %xmm6
1416; SSE2-NEXT:    pxor %xmm4, %xmm6
1417; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1418; SSE2-NEXT:    pand %xmm6, %xmm0
1419; SSE2-NEXT:    pandn %xmm2, %xmm6
1420; SSE2-NEXT:    por %xmm6, %xmm0
1421; SSE2-NEXT:    movdqa %xmm3, %xmm2
1422; SSE2-NEXT:    pxor %xmm4, %xmm2
1423; SSE2-NEXT:    pxor %xmm1, %xmm4
1424; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1425; SSE2-NEXT:    pand %xmm4, %xmm1
1426; SSE2-NEXT:    pandn %xmm3, %xmm4
1427; SSE2-NEXT:    por %xmm4, %xmm1
1428; SSE2-NEXT:    retq
1429;
1430; SSE4-LABEL: test47:
1431; SSE4:       # %bb.0: # %entry
1432; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1433; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1434; SSE4-NEXT:    retq
1435;
1436; AVX1-LABEL: test47:
1437; AVX1:       # %bb.0: # %entry
1438; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1439; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1440; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1441; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1442; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1443; AVX1-NEXT:    retq
1444;
1445; AVX2-LABEL: test47:
1446; AVX2:       # %bb.0: # %entry
1447; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1448; AVX2-NEXT:    retq
1449;
1450; AVX512-LABEL: test47:
1451; AVX512:       # %bb.0: # %entry
1452; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1453; AVX512-NEXT:    retq
1454entry:
1455  %cmp = icmp ugt <8 x i32> %a, %b
1456  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1457  ret <8 x i32> %sel
1458}
1459
1460define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1461; SSE2-LABEL: test48:
1462; SSE2:       # %bb.0: # %entry
1463; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1464; SSE2-NEXT:    movdqa %xmm2, %xmm5
1465; SSE2-NEXT:    pxor %xmm4, %xmm5
1466; SSE2-NEXT:    movdqa %xmm0, %xmm6
1467; SSE2-NEXT:    pxor %xmm4, %xmm6
1468; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1469; SSE2-NEXT:    pand %xmm6, %xmm0
1470; SSE2-NEXT:    pandn %xmm2, %xmm6
1471; SSE2-NEXT:    por %xmm6, %xmm0
1472; SSE2-NEXT:    movdqa %xmm3, %xmm2
1473; SSE2-NEXT:    pxor %xmm4, %xmm2
1474; SSE2-NEXT:    pxor %xmm1, %xmm4
1475; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1476; SSE2-NEXT:    pand %xmm4, %xmm1
1477; SSE2-NEXT:    pandn %xmm3, %xmm4
1478; SSE2-NEXT:    por %xmm4, %xmm1
1479; SSE2-NEXT:    retq
1480;
1481; SSE4-LABEL: test48:
1482; SSE4:       # %bb.0: # %entry
1483; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1484; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1485; SSE4-NEXT:    retq
1486;
1487; AVX1-LABEL: test48:
1488; AVX1:       # %bb.0: # %entry
1489; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1490; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1491; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1492; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1493; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1494; AVX1-NEXT:    retq
1495;
1496; AVX2-LABEL: test48:
1497; AVX2:       # %bb.0: # %entry
1498; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1499; AVX2-NEXT:    retq
1500;
1501; AVX512-LABEL: test48:
1502; AVX512:       # %bb.0: # %entry
1503; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1504; AVX512-NEXT:    retq
1505entry:
1506  %cmp = icmp uge <8 x i32> %a, %b
1507  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1508  ret <8 x i32> %sel
1509}
1510
1511define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1512; SSE2-LABEL: test49:
1513; SSE2:       # %bb.0: # %entry
1514; SSE2-NEXT:    movdqa %xmm0, %xmm2
1515; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1516; SSE2-NEXT:    pand %xmm2, %xmm0
1517; SSE2-NEXT:    pandn %xmm1, %xmm2
1518; SSE2-NEXT:    por %xmm2, %xmm0
1519; SSE2-NEXT:    retq
1520;
1521; SSE4-LABEL: test49:
1522; SSE4:       # %bb.0: # %entry
1523; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1524; SSE4-NEXT:    retq
1525;
1526; AVX-LABEL: test49:
1527; AVX:       # %bb.0: # %entry
1528; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1529; AVX-NEXT:    retq
1530entry:
1531  %cmp = icmp slt <16 x i8> %a, %b
1532  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1533  ret <16 x i8> %sel
1534}
1535
1536define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1537; SSE2-LABEL: test50:
1538; SSE2:       # %bb.0: # %entry
1539; SSE2-NEXT:    movdqa %xmm0, %xmm2
1540; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1541; SSE2-NEXT:    pand %xmm2, %xmm0
1542; SSE2-NEXT:    pandn %xmm1, %xmm2
1543; SSE2-NEXT:    por %xmm2, %xmm0
1544; SSE2-NEXT:    retq
1545;
1546; SSE4-LABEL: test50:
1547; SSE4:       # %bb.0: # %entry
1548; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1549; SSE4-NEXT:    retq
1550;
1551; AVX-LABEL: test50:
1552; AVX:       # %bb.0: # %entry
1553; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1554; AVX-NEXT:    retq
1555entry:
1556  %cmp = icmp sle <16 x i8> %a, %b
1557  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1558  ret <16 x i8> %sel
1559}
1560
1561define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1562; SSE2-LABEL: test51:
1563; SSE2:       # %bb.0: # %entry
1564; SSE2-NEXT:    movdqa %xmm1, %xmm2
1565; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1566; SSE2-NEXT:    pand %xmm2, %xmm0
1567; SSE2-NEXT:    pandn %xmm1, %xmm2
1568; SSE2-NEXT:    por %xmm2, %xmm0
1569; SSE2-NEXT:    retq
1570;
1571; SSE4-LABEL: test51:
1572; SSE4:       # %bb.0: # %entry
1573; SSE4-NEXT:    pminsb %xmm1, %xmm0
1574; SSE4-NEXT:    retq
1575;
1576; AVX-LABEL: test51:
1577; AVX:       # %bb.0: # %entry
1578; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1579; AVX-NEXT:    retq
1580entry:
1581  %cmp = icmp sgt <16 x i8> %a, %b
1582  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1583  ret <16 x i8> %sel
1584}
1585
1586define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1587; SSE2-LABEL: test52:
1588; SSE2:       # %bb.0: # %entry
1589; SSE2-NEXT:    movdqa %xmm1, %xmm2
1590; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1591; SSE2-NEXT:    pand %xmm2, %xmm0
1592; SSE2-NEXT:    pandn %xmm1, %xmm2
1593; SSE2-NEXT:    por %xmm2, %xmm0
1594; SSE2-NEXT:    retq
1595;
1596; SSE4-LABEL: test52:
1597; SSE4:       # %bb.0: # %entry
1598; SSE4-NEXT:    pminsb %xmm1, %xmm0
1599; SSE4-NEXT:    retq
1600;
1601; AVX-LABEL: test52:
1602; AVX:       # %bb.0: # %entry
1603; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1604; AVX-NEXT:    retq
1605entry:
1606  %cmp = icmp sge <16 x i8> %a, %b
1607  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1608  ret <16 x i8> %sel
1609}
1610
1611define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
1612; SSE-LABEL: test53:
1613; SSE:       # %bb.0: # %entry
1614; SSE-NEXT:    pmaxub %xmm1, %xmm0
1615; SSE-NEXT:    retq
1616;
1617; AVX-LABEL: test53:
1618; AVX:       # %bb.0: # %entry
1619; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1620; AVX-NEXT:    retq
1621entry:
1622  %cmp = icmp ult <16 x i8> %a, %b
1623  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1624  ret <16 x i8> %sel
1625}
1626
1627define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
1628; SSE-LABEL: test54:
1629; SSE:       # %bb.0: # %entry
1630; SSE-NEXT:    pmaxub %xmm1, %xmm0
1631; SSE-NEXT:    retq
1632;
1633; AVX-LABEL: test54:
1634; AVX:       # %bb.0: # %entry
1635; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1636; AVX-NEXT:    retq
1637entry:
1638  %cmp = icmp ule <16 x i8> %a, %b
1639  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1640  ret <16 x i8> %sel
1641}
1642
1643define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
1644; SSE-LABEL: test55:
1645; SSE:       # %bb.0: # %entry
1646; SSE-NEXT:    pminub %xmm1, %xmm0
1647; SSE-NEXT:    retq
1648;
1649; AVX-LABEL: test55:
1650; AVX:       # %bb.0: # %entry
1651; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1652; AVX-NEXT:    retq
1653entry:
1654  %cmp = icmp ugt <16 x i8> %a, %b
1655  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1656  ret <16 x i8> %sel
1657}
1658
1659define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1660; SSE-LABEL: test56:
1661; SSE:       # %bb.0: # %entry
1662; SSE-NEXT:    pminub %xmm1, %xmm0
1663; SSE-NEXT:    retq
1664;
1665; AVX-LABEL: test56:
1666; AVX:       # %bb.0: # %entry
1667; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1668; AVX-NEXT:    retq
1669entry:
1670  %cmp = icmp uge <16 x i8> %a, %b
1671  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1672  ret <16 x i8> %sel
1673}
1674
1675define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1676; SSE-LABEL: test57:
1677; SSE:       # %bb.0: # %entry
1678; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1679; SSE-NEXT:    retq
1680;
1681; AVX-LABEL: test57:
1682; AVX:       # %bb.0: # %entry
1683; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1684; AVX-NEXT:    retq
1685entry:
1686  %cmp = icmp slt <8 x i16> %a, %b
1687  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1688  ret <8 x i16> %sel
1689}
1690
1691define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
1692; SSE-LABEL: test58:
1693; SSE:       # %bb.0: # %entry
1694; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1695; SSE-NEXT:    retq
1696;
1697; AVX-LABEL: test58:
1698; AVX:       # %bb.0: # %entry
1699; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1700; AVX-NEXT:    retq
1701entry:
1702  %cmp = icmp sle <8 x i16> %a, %b
1703  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1704  ret <8 x i16> %sel
1705}
1706
1707define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
1708; SSE-LABEL: test59:
1709; SSE:       # %bb.0: # %entry
1710; SSE-NEXT:    pminsw %xmm1, %xmm0
1711; SSE-NEXT:    retq
1712;
1713; AVX-LABEL: test59:
1714; AVX:       # %bb.0: # %entry
1715; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1716; AVX-NEXT:    retq
1717entry:
1718  %cmp = icmp sgt <8 x i16> %a, %b
1719  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1720  ret <8 x i16> %sel
1721}
1722
1723define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
1724; SSE-LABEL: test60:
1725; SSE:       # %bb.0: # %entry
1726; SSE-NEXT:    pminsw %xmm1, %xmm0
1727; SSE-NEXT:    retq
1728;
1729; AVX-LABEL: test60:
1730; AVX:       # %bb.0: # %entry
1731; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1732; AVX-NEXT:    retq
1733entry:
1734  %cmp = icmp sge <8 x i16> %a, %b
1735  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1736  ret <8 x i16> %sel
1737}
1738
1739define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1740; SSE2-LABEL: test61:
1741; SSE2:       # %bb.0: # %entry
1742; SSE2-NEXT:    psubusw %xmm0, %xmm1
1743; SSE2-NEXT:    paddw %xmm1, %xmm0
1744; SSE2-NEXT:    retq
1745;
1746; SSE4-LABEL: test61:
1747; SSE4:       # %bb.0: # %entry
1748; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1749; SSE4-NEXT:    retq
1750;
1751; AVX-LABEL: test61:
1752; AVX:       # %bb.0: # %entry
1753; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1754; AVX-NEXT:    retq
1755entry:
1756  %cmp = icmp ult <8 x i16> %a, %b
1757  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1758  ret <8 x i16> %sel
1759}
1760
1761define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1762; SSE2-LABEL: test62:
1763; SSE2:       # %bb.0: # %entry
1764; SSE2-NEXT:    psubusw %xmm0, %xmm1
1765; SSE2-NEXT:    paddw %xmm1, %xmm0
1766; SSE2-NEXT:    retq
1767;
1768; SSE4-LABEL: test62:
1769; SSE4:       # %bb.0: # %entry
1770; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1771; SSE4-NEXT:    retq
1772;
1773; AVX-LABEL: test62:
1774; AVX:       # %bb.0: # %entry
1775; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1776; AVX-NEXT:    retq
1777entry:
1778  %cmp = icmp ule <8 x i16> %a, %b
1779  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1780  ret <8 x i16> %sel
1781}
1782
1783define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1784; SSE2-LABEL: test63:
1785; SSE2:       # %bb.0: # %entry
1786; SSE2-NEXT:    movdqa %xmm0, %xmm2
1787; SSE2-NEXT:    psubusw %xmm1, %xmm2
1788; SSE2-NEXT:    psubw %xmm2, %xmm0
1789; SSE2-NEXT:    retq
1790;
1791; SSE4-LABEL: test63:
1792; SSE4:       # %bb.0: # %entry
1793; SSE4-NEXT:    pminuw %xmm1, %xmm0
1794; SSE4-NEXT:    retq
1795;
1796; AVX-LABEL: test63:
1797; AVX:       # %bb.0: # %entry
1798; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1799; AVX-NEXT:    retq
1800entry:
1801  %cmp = icmp ugt <8 x i16> %a, %b
1802  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1803  ret <8 x i16> %sel
1804}
1805
1806define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1807; SSE2-LABEL: test64:
1808; SSE2:       # %bb.0: # %entry
1809; SSE2-NEXT:    movdqa %xmm0, %xmm2
1810; SSE2-NEXT:    psubusw %xmm1, %xmm2
1811; SSE2-NEXT:    psubw %xmm2, %xmm0
1812; SSE2-NEXT:    retq
1813;
1814; SSE4-LABEL: test64:
1815; SSE4:       # %bb.0: # %entry
1816; SSE4-NEXT:    pminuw %xmm1, %xmm0
1817; SSE4-NEXT:    retq
1818;
1819; AVX-LABEL: test64:
1820; AVX:       # %bb.0: # %entry
1821; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1822; AVX-NEXT:    retq
1823entry:
1824  %cmp = icmp uge <8 x i16> %a, %b
1825  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1826  ret <8 x i16> %sel
1827}
1828
1829define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1830; SSE2-LABEL: test65:
1831; SSE2:       # %bb.0: # %entry
1832; SSE2-NEXT:    movdqa %xmm0, %xmm2
1833; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1834; SSE2-NEXT:    pand %xmm2, %xmm0
1835; SSE2-NEXT:    pandn %xmm1, %xmm2
1836; SSE2-NEXT:    por %xmm2, %xmm0
1837; SSE2-NEXT:    retq
1838;
1839; SSE4-LABEL: test65:
1840; SSE4:       # %bb.0: # %entry
1841; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1842; SSE4-NEXT:    retq
1843;
1844; AVX-LABEL: test65:
1845; AVX:       # %bb.0: # %entry
1846; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1847; AVX-NEXT:    retq
1848entry:
1849  %cmp = icmp slt <4 x i32> %a, %b
1850  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1851  ret <4 x i32> %sel
1852}
1853
1854define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
1855; SSE2-LABEL: test66:
1856; SSE2:       # %bb.0: # %entry
1857; SSE2-NEXT:    movdqa %xmm0, %xmm2
1858; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1859; SSE2-NEXT:    pand %xmm2, %xmm0
1860; SSE2-NEXT:    pandn %xmm1, %xmm2
1861; SSE2-NEXT:    por %xmm2, %xmm0
1862; SSE2-NEXT:    retq
1863;
1864; SSE4-LABEL: test66:
1865; SSE4:       # %bb.0: # %entry
1866; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1867; SSE4-NEXT:    retq
1868;
1869; AVX-LABEL: test66:
1870; AVX:       # %bb.0: # %entry
1871; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1872; AVX-NEXT:    retq
1873entry:
1874  %cmp = icmp sle <4 x i32> %a, %b
1875  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1876  ret <4 x i32> %sel
1877}
1878
1879define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
1880; SSE2-LABEL: test67:
1881; SSE2:       # %bb.0: # %entry
1882; SSE2-NEXT:    movdqa %xmm1, %xmm2
1883; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1884; SSE2-NEXT:    pand %xmm2, %xmm0
1885; SSE2-NEXT:    pandn %xmm1, %xmm2
1886; SSE2-NEXT:    por %xmm2, %xmm0
1887; SSE2-NEXT:    retq
1888;
1889; SSE4-LABEL: test67:
1890; SSE4:       # %bb.0: # %entry
1891; SSE4-NEXT:    pminsd %xmm1, %xmm0
1892; SSE4-NEXT:    retq
1893;
1894; AVX-LABEL: test67:
1895; AVX:       # %bb.0: # %entry
1896; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1897; AVX-NEXT:    retq
1898entry:
1899  %cmp = icmp sgt <4 x i32> %a, %b
1900  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1901  ret <4 x i32> %sel
1902}
1903
1904define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
1905; SSE2-LABEL: test68:
1906; SSE2:       # %bb.0: # %entry
1907; SSE2-NEXT:    movdqa %xmm1, %xmm2
1908; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1909; SSE2-NEXT:    pand %xmm2, %xmm0
1910; SSE2-NEXT:    pandn %xmm1, %xmm2
1911; SSE2-NEXT:    por %xmm2, %xmm0
1912; SSE2-NEXT:    retq
1913;
1914; SSE4-LABEL: test68:
1915; SSE4:       # %bb.0: # %entry
1916; SSE4-NEXT:    pminsd %xmm1, %xmm0
1917; SSE4-NEXT:    retq
1918;
1919; AVX-LABEL: test68:
1920; AVX:       # %bb.0: # %entry
1921; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1922; AVX-NEXT:    retq
1923entry:
1924  %cmp = icmp sge <4 x i32> %a, %b
1925  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1926  ret <4 x i32> %sel
1927}
1928
1929define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
1930; SSE2-LABEL: test69:
1931; SSE2:       # %bb.0: # %entry
1932; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1933; SSE2-NEXT:    movdqa %xmm1, %xmm3
1934; SSE2-NEXT:    pxor %xmm2, %xmm3
1935; SSE2-NEXT:    pxor %xmm0, %xmm2
1936; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1937; SSE2-NEXT:    pand %xmm2, %xmm0
1938; SSE2-NEXT:    pandn %xmm1, %xmm2
1939; SSE2-NEXT:    por %xmm2, %xmm0
1940; SSE2-NEXT:    retq
1941;
1942; SSE4-LABEL: test69:
1943; SSE4:       # %bb.0: # %entry
1944; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1945; SSE4-NEXT:    retq
1946;
1947; AVX-LABEL: test69:
1948; AVX:       # %bb.0: # %entry
1949; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1950; AVX-NEXT:    retq
1951entry:
1952  %cmp = icmp ult <4 x i32> %a, %b
1953  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1954  ret <4 x i32> %sel
1955}
1956
1957define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
1958; SSE2-LABEL: test70:
1959; SSE2:       # %bb.0: # %entry
1960; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1961; SSE2-NEXT:    movdqa %xmm1, %xmm3
1962; SSE2-NEXT:    pxor %xmm2, %xmm3
1963; SSE2-NEXT:    pxor %xmm0, %xmm2
1964; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1965; SSE2-NEXT:    pand %xmm2, %xmm0
1966; SSE2-NEXT:    pandn %xmm1, %xmm2
1967; SSE2-NEXT:    por %xmm2, %xmm0
1968; SSE2-NEXT:    retq
1969;
1970; SSE4-LABEL: test70:
1971; SSE4:       # %bb.0: # %entry
1972; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1973; SSE4-NEXT:    retq
1974;
1975; AVX-LABEL: test70:
1976; AVX:       # %bb.0: # %entry
1977; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1978; AVX-NEXT:    retq
1979entry:
1980  %cmp = icmp ule <4 x i32> %a, %b
1981  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1982  ret <4 x i32> %sel
1983}
1984
1985define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
1986; SSE2-LABEL: test71:
1987; SSE2:       # %bb.0: # %entry
1988; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1989; SSE2-NEXT:    movdqa %xmm0, %xmm3
1990; SSE2-NEXT:    pxor %xmm2, %xmm3
1991; SSE2-NEXT:    pxor %xmm1, %xmm2
1992; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1993; SSE2-NEXT:    pand %xmm2, %xmm0
1994; SSE2-NEXT:    pandn %xmm1, %xmm2
1995; SSE2-NEXT:    por %xmm2, %xmm0
1996; SSE2-NEXT:    retq
1997;
1998; SSE4-LABEL: test71:
1999; SSE4:       # %bb.0: # %entry
2000; SSE4-NEXT:    pminud %xmm1, %xmm0
2001; SSE4-NEXT:    retq
2002;
2003; AVX-LABEL: test71:
2004; AVX:       # %bb.0: # %entry
2005; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2006; AVX-NEXT:    retq
2007entry:
2008  %cmp = icmp ugt <4 x i32> %a, %b
2009  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2010  ret <4 x i32> %sel
2011}
2012
2013define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2014; SSE2-LABEL: test72:
2015; SSE2:       # %bb.0: # %entry
2016; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2017; SSE2-NEXT:    movdqa %xmm0, %xmm3
2018; SSE2-NEXT:    pxor %xmm2, %xmm3
2019; SSE2-NEXT:    pxor %xmm1, %xmm2
2020; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2021; SSE2-NEXT:    pand %xmm2, %xmm0
2022; SSE2-NEXT:    pandn %xmm1, %xmm2
2023; SSE2-NEXT:    por %xmm2, %xmm0
2024; SSE2-NEXT:    retq
2025;
2026; SSE4-LABEL: test72:
2027; SSE4:       # %bb.0: # %entry
2028; SSE4-NEXT:    pminud %xmm1, %xmm0
2029; SSE4-NEXT:    retq
2030;
2031; AVX-LABEL: test72:
2032; AVX:       # %bb.0: # %entry
2033; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2034; AVX-NEXT:    retq
2035entry:
2036  %cmp = icmp uge <4 x i32> %a, %b
2037  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2038  ret <4 x i32> %sel
2039}
2040
2041define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2042; SSE2-LABEL: test73:
2043; SSE2:       # %bb.0: # %entry
2044; SSE2-NEXT:    movdqa %xmm0, %xmm4
2045; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2046; SSE2-NEXT:    pand %xmm4, %xmm0
2047; SSE2-NEXT:    pandn %xmm2, %xmm4
2048; SSE2-NEXT:    por %xmm4, %xmm0
2049; SSE2-NEXT:    movdqa %xmm1, %xmm2
2050; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2051; SSE2-NEXT:    pand %xmm2, %xmm1
2052; SSE2-NEXT:    pandn %xmm3, %xmm2
2053; SSE2-NEXT:    por %xmm2, %xmm1
2054; SSE2-NEXT:    retq
2055;
2056; SSE4-LABEL: test73:
2057; SSE4:       # %bb.0: # %entry
2058; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2059; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2060; SSE4-NEXT:    retq
2061;
2062; AVX1-LABEL: test73:
2063; AVX1:       # %bb.0: # %entry
2064; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2065; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2066; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2067; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2068; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2069; AVX1-NEXT:    retq
2070;
2071; AVX2-LABEL: test73:
2072; AVX2:       # %bb.0: # %entry
2073; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2074; AVX2-NEXT:    retq
2075;
2076; AVX512-LABEL: test73:
2077; AVX512:       # %bb.0: # %entry
2078; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2079; AVX512-NEXT:    retq
2080entry:
2081  %cmp = icmp slt <32 x i8> %a, %b
2082  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2083  ret <32 x i8> %sel
2084}
2085
2086define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2087; SSE2-LABEL: test74:
2088; SSE2:       # %bb.0: # %entry
2089; SSE2-NEXT:    movdqa %xmm0, %xmm4
2090; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2091; SSE2-NEXT:    pand %xmm4, %xmm0
2092; SSE2-NEXT:    pandn %xmm2, %xmm4
2093; SSE2-NEXT:    por %xmm4, %xmm0
2094; SSE2-NEXT:    movdqa %xmm1, %xmm2
2095; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2096; SSE2-NEXT:    pand %xmm2, %xmm1
2097; SSE2-NEXT:    pandn %xmm3, %xmm2
2098; SSE2-NEXT:    por %xmm2, %xmm1
2099; SSE2-NEXT:    retq
2100;
2101; SSE4-LABEL: test74:
2102; SSE4:       # %bb.0: # %entry
2103; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2104; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2105; SSE4-NEXT:    retq
2106;
2107; AVX1-LABEL: test74:
2108; AVX1:       # %bb.0: # %entry
2109; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2110; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2111; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2112; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2113; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2114; AVX1-NEXT:    retq
2115;
2116; AVX2-LABEL: test74:
2117; AVX2:       # %bb.0: # %entry
2118; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2119; AVX2-NEXT:    retq
2120;
2121; AVX512-LABEL: test74:
2122; AVX512:       # %bb.0: # %entry
2123; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2124; AVX512-NEXT:    retq
2125entry:
2126  %cmp = icmp sle <32 x i8> %a, %b
2127  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2128  ret <32 x i8> %sel
2129}
2130
2131define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2132; SSE2-LABEL: test75:
2133; SSE2:       # %bb.0: # %entry
2134; SSE2-NEXT:    movdqa %xmm2, %xmm4
2135; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2136; SSE2-NEXT:    pand %xmm4, %xmm0
2137; SSE2-NEXT:    pandn %xmm2, %xmm4
2138; SSE2-NEXT:    por %xmm4, %xmm0
2139; SSE2-NEXT:    movdqa %xmm3, %xmm2
2140; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2141; SSE2-NEXT:    pand %xmm2, %xmm1
2142; SSE2-NEXT:    pandn %xmm3, %xmm2
2143; SSE2-NEXT:    por %xmm2, %xmm1
2144; SSE2-NEXT:    retq
2145;
2146; SSE4-LABEL: test75:
2147; SSE4:       # %bb.0: # %entry
2148; SSE4-NEXT:    pminsb %xmm2, %xmm0
2149; SSE4-NEXT:    pminsb %xmm3, %xmm1
2150; SSE4-NEXT:    retq
2151;
2152; AVX1-LABEL: test75:
2153; AVX1:       # %bb.0: # %entry
2154; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2155; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2156; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2157; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2158; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2159; AVX1-NEXT:    retq
2160;
2161; AVX2-LABEL: test75:
2162; AVX2:       # %bb.0: # %entry
2163; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2164; AVX2-NEXT:    retq
2165;
2166; AVX512-LABEL: test75:
2167; AVX512:       # %bb.0: # %entry
2168; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2169; AVX512-NEXT:    retq
2170entry:
2171  %cmp = icmp sgt <32 x i8> %a, %b
2172  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2173  ret <32 x i8> %sel
2174}
2175
2176define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2177; SSE2-LABEL: test76:
2178; SSE2:       # %bb.0: # %entry
2179; SSE2-NEXT:    movdqa %xmm2, %xmm4
2180; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2181; SSE2-NEXT:    pand %xmm4, %xmm0
2182; SSE2-NEXT:    pandn %xmm2, %xmm4
2183; SSE2-NEXT:    por %xmm4, %xmm0
2184; SSE2-NEXT:    movdqa %xmm3, %xmm2
2185; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2186; SSE2-NEXT:    pand %xmm2, %xmm1
2187; SSE2-NEXT:    pandn %xmm3, %xmm2
2188; SSE2-NEXT:    por %xmm2, %xmm1
2189; SSE2-NEXT:    retq
2190;
2191; SSE4-LABEL: test76:
2192; SSE4:       # %bb.0: # %entry
2193; SSE4-NEXT:    pminsb %xmm2, %xmm0
2194; SSE4-NEXT:    pminsb %xmm3, %xmm1
2195; SSE4-NEXT:    retq
2196;
2197; AVX1-LABEL: test76:
2198; AVX1:       # %bb.0: # %entry
2199; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2200; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2201; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2202; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2203; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2204; AVX1-NEXT:    retq
2205;
2206; AVX2-LABEL: test76:
2207; AVX2:       # %bb.0: # %entry
2208; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2209; AVX2-NEXT:    retq
2210;
2211; AVX512-LABEL: test76:
2212; AVX512:       # %bb.0: # %entry
2213; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2214; AVX512-NEXT:    retq
2215entry:
2216  %cmp = icmp sge <32 x i8> %a, %b
2217  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2218  ret <32 x i8> %sel
2219}
2220
2221define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2222; SSE-LABEL: test77:
2223; SSE:       # %bb.0: # %entry
2224; SSE-NEXT:    pmaxub %xmm2, %xmm0
2225; SSE-NEXT:    pmaxub %xmm3, %xmm1
2226; SSE-NEXT:    retq
2227;
2228; AVX1-LABEL: test77:
2229; AVX1:       # %bb.0: # %entry
2230; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2231; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2232; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2233; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2234; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2235; AVX1-NEXT:    retq
2236;
2237; AVX2-LABEL: test77:
2238; AVX2:       # %bb.0: # %entry
2239; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2240; AVX2-NEXT:    retq
2241;
2242; AVX512-LABEL: test77:
2243; AVX512:       # %bb.0: # %entry
2244; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2245; AVX512-NEXT:    retq
2246entry:
2247  %cmp = icmp ult <32 x i8> %a, %b
2248  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2249  ret <32 x i8> %sel
2250}
2251
2252define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2253; SSE-LABEL: test78:
2254; SSE:       # %bb.0: # %entry
2255; SSE-NEXT:    pmaxub %xmm2, %xmm0
2256; SSE-NEXT:    pmaxub %xmm3, %xmm1
2257; SSE-NEXT:    retq
2258;
2259; AVX1-LABEL: test78:
2260; AVX1:       # %bb.0: # %entry
2261; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2262; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2263; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2264; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2265; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2266; AVX1-NEXT:    retq
2267;
2268; AVX2-LABEL: test78:
2269; AVX2:       # %bb.0: # %entry
2270; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2271; AVX2-NEXT:    retq
2272;
2273; AVX512-LABEL: test78:
2274; AVX512:       # %bb.0: # %entry
2275; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2276; AVX512-NEXT:    retq
2277entry:
2278  %cmp = icmp ule <32 x i8> %a, %b
2279  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2280  ret <32 x i8> %sel
2281}
2282
2283define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2284; SSE-LABEL: test79:
2285; SSE:       # %bb.0: # %entry
2286; SSE-NEXT:    pminub %xmm2, %xmm0
2287; SSE-NEXT:    pminub %xmm3, %xmm1
2288; SSE-NEXT:    retq
2289;
2290; AVX1-LABEL: test79:
2291; AVX1:       # %bb.0: # %entry
2292; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2293; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2294; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2295; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2296; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2297; AVX1-NEXT:    retq
2298;
2299; AVX2-LABEL: test79:
2300; AVX2:       # %bb.0: # %entry
2301; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2302; AVX2-NEXT:    retq
2303;
2304; AVX512-LABEL: test79:
2305; AVX512:       # %bb.0: # %entry
2306; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2307; AVX512-NEXT:    retq
2308entry:
2309  %cmp = icmp ugt <32 x i8> %a, %b
2310  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2311  ret <32 x i8> %sel
2312}
2313
2314define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2315; SSE-LABEL: test80:
2316; SSE:       # %bb.0: # %entry
2317; SSE-NEXT:    pminub %xmm2, %xmm0
2318; SSE-NEXT:    pminub %xmm3, %xmm1
2319; SSE-NEXT:    retq
2320;
2321; AVX1-LABEL: test80:
2322; AVX1:       # %bb.0: # %entry
2323; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2324; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2325; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2326; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2327; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2328; AVX1-NEXT:    retq
2329;
2330; AVX2-LABEL: test80:
2331; AVX2:       # %bb.0: # %entry
2332; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2333; AVX2-NEXT:    retq
2334;
2335; AVX512-LABEL: test80:
2336; AVX512:       # %bb.0: # %entry
2337; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2338; AVX512-NEXT:    retq
2339entry:
2340  %cmp = icmp uge <32 x i8> %a, %b
2341  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2342  ret <32 x i8> %sel
2343}
2344
2345define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2346; SSE-LABEL: test81:
2347; SSE:       # %bb.0: # %entry
2348; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2349; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2350; SSE-NEXT:    retq
2351;
2352; AVX1-LABEL: test81:
2353; AVX1:       # %bb.0: # %entry
2354; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2355; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2356; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2357; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2358; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2359; AVX1-NEXT:    retq
2360;
2361; AVX2-LABEL: test81:
2362; AVX2:       # %bb.0: # %entry
2363; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2364; AVX2-NEXT:    retq
2365;
2366; AVX512-LABEL: test81:
2367; AVX512:       # %bb.0: # %entry
2368; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2369; AVX512-NEXT:    retq
2370entry:
2371  %cmp = icmp slt <16 x i16> %a, %b
2372  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2373  ret <16 x i16> %sel
2374}
2375
2376define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2377; SSE-LABEL: test82:
2378; SSE:       # %bb.0: # %entry
2379; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2380; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2381; SSE-NEXT:    retq
2382;
2383; AVX1-LABEL: test82:
2384; AVX1:       # %bb.0: # %entry
2385; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2386; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2387; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2388; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2389; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2390; AVX1-NEXT:    retq
2391;
2392; AVX2-LABEL: test82:
2393; AVX2:       # %bb.0: # %entry
2394; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2395; AVX2-NEXT:    retq
2396;
2397; AVX512-LABEL: test82:
2398; AVX512:       # %bb.0: # %entry
2399; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2400; AVX512-NEXT:    retq
2401entry:
2402  %cmp = icmp sle <16 x i16> %a, %b
2403  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2404  ret <16 x i16> %sel
2405}
2406
2407define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2408; SSE-LABEL: test83:
2409; SSE:       # %bb.0: # %entry
2410; SSE-NEXT:    pminsw %xmm2, %xmm0
2411; SSE-NEXT:    pminsw %xmm3, %xmm1
2412; SSE-NEXT:    retq
2413;
2414; AVX1-LABEL: test83:
2415; AVX1:       # %bb.0: # %entry
2416; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2417; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2418; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2419; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2420; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2421; AVX1-NEXT:    retq
2422;
2423; AVX2-LABEL: test83:
2424; AVX2:       # %bb.0: # %entry
2425; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2426; AVX2-NEXT:    retq
2427;
2428; AVX512-LABEL: test83:
2429; AVX512:       # %bb.0: # %entry
2430; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2431; AVX512-NEXT:    retq
2432entry:
2433  %cmp = icmp sgt <16 x i16> %a, %b
2434  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2435  ret <16 x i16> %sel
2436}
2437
2438define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2439; SSE-LABEL: test84:
2440; SSE:       # %bb.0: # %entry
2441; SSE-NEXT:    pminsw %xmm2, %xmm0
2442; SSE-NEXT:    pminsw %xmm3, %xmm1
2443; SSE-NEXT:    retq
2444;
2445; AVX1-LABEL: test84:
2446; AVX1:       # %bb.0: # %entry
2447; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2448; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2449; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2450; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2451; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2452; AVX1-NEXT:    retq
2453;
2454; AVX2-LABEL: test84:
2455; AVX2:       # %bb.0: # %entry
2456; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2457; AVX2-NEXT:    retq
2458;
2459; AVX512-LABEL: test84:
2460; AVX512:       # %bb.0: # %entry
2461; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2462; AVX512-NEXT:    retq
2463entry:
2464  %cmp = icmp sge <16 x i16> %a, %b
2465  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2466  ret <16 x i16> %sel
2467}
2468
2469define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2470; SSE2-LABEL: test85:
2471; SSE2:       # %bb.0: # %entry
2472; SSE2-NEXT:    psubusw %xmm0, %xmm2
2473; SSE2-NEXT:    paddw %xmm2, %xmm0
2474; SSE2-NEXT:    psubusw %xmm1, %xmm3
2475; SSE2-NEXT:    paddw %xmm3, %xmm1
2476; SSE2-NEXT:    retq
2477;
2478; SSE4-LABEL: test85:
2479; SSE4:       # %bb.0: # %entry
2480; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2481; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2482; SSE4-NEXT:    retq
2483;
2484; AVX1-LABEL: test85:
2485; AVX1:       # %bb.0: # %entry
2486; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2487; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2488; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2489; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2490; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2491; AVX1-NEXT:    retq
2492;
2493; AVX2-LABEL: test85:
2494; AVX2:       # %bb.0: # %entry
2495; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2496; AVX2-NEXT:    retq
2497;
2498; AVX512-LABEL: test85:
2499; AVX512:       # %bb.0: # %entry
2500; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2501; AVX512-NEXT:    retq
2502entry:
2503  %cmp = icmp ult <16 x i16> %a, %b
2504  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2505  ret <16 x i16> %sel
2506}
2507
2508define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2509; SSE2-LABEL: test86:
2510; SSE2:       # %bb.0: # %entry
2511; SSE2-NEXT:    psubusw %xmm0, %xmm2
2512; SSE2-NEXT:    paddw %xmm2, %xmm0
2513; SSE2-NEXT:    psubusw %xmm1, %xmm3
2514; SSE2-NEXT:    paddw %xmm3, %xmm1
2515; SSE2-NEXT:    retq
2516;
2517; SSE4-LABEL: test86:
2518; SSE4:       # %bb.0: # %entry
2519; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2520; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2521; SSE4-NEXT:    retq
2522;
2523; AVX1-LABEL: test86:
2524; AVX1:       # %bb.0: # %entry
2525; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2526; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2527; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2528; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2529; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2530; AVX1-NEXT:    retq
2531;
2532; AVX2-LABEL: test86:
2533; AVX2:       # %bb.0: # %entry
2534; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2535; AVX2-NEXT:    retq
2536;
2537; AVX512-LABEL: test86:
2538; AVX512:       # %bb.0: # %entry
2539; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2540; AVX512-NEXT:    retq
2541entry:
2542  %cmp = icmp ule <16 x i16> %a, %b
2543  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2544  ret <16 x i16> %sel
2545}
2546
2547define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2548; SSE2-LABEL: test87:
2549; SSE2:       # %bb.0: # %entry
2550; SSE2-NEXT:    movdqa %xmm0, %xmm4
2551; SSE2-NEXT:    psubusw %xmm2, %xmm4
2552; SSE2-NEXT:    psubw %xmm4, %xmm0
2553; SSE2-NEXT:    movdqa %xmm1, %xmm2
2554; SSE2-NEXT:    psubusw %xmm3, %xmm2
2555; SSE2-NEXT:    psubw %xmm2, %xmm1
2556; SSE2-NEXT:    retq
2557;
2558; SSE4-LABEL: test87:
2559; SSE4:       # %bb.0: # %entry
2560; SSE4-NEXT:    pminuw %xmm2, %xmm0
2561; SSE4-NEXT:    pminuw %xmm3, %xmm1
2562; SSE4-NEXT:    retq
2563;
2564; AVX1-LABEL: test87:
2565; AVX1:       # %bb.0: # %entry
2566; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2567; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2568; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2569; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2570; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2571; AVX1-NEXT:    retq
2572;
2573; AVX2-LABEL: test87:
2574; AVX2:       # %bb.0: # %entry
2575; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2576; AVX2-NEXT:    retq
2577;
2578; AVX512-LABEL: test87:
2579; AVX512:       # %bb.0: # %entry
2580; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2581; AVX512-NEXT:    retq
2582entry:
2583  %cmp = icmp ugt <16 x i16> %a, %b
2584  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2585  ret <16 x i16> %sel
2586}
2587
2588define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2589; SSE2-LABEL: test88:
2590; SSE2:       # %bb.0: # %entry
2591; SSE2-NEXT:    movdqa %xmm0, %xmm4
2592; SSE2-NEXT:    psubusw %xmm2, %xmm4
2593; SSE2-NEXT:    psubw %xmm4, %xmm0
2594; SSE2-NEXT:    movdqa %xmm1, %xmm2
2595; SSE2-NEXT:    psubusw %xmm3, %xmm2
2596; SSE2-NEXT:    psubw %xmm2, %xmm1
2597; SSE2-NEXT:    retq
2598;
2599; SSE4-LABEL: test88:
2600; SSE4:       # %bb.0: # %entry
2601; SSE4-NEXT:    pminuw %xmm2, %xmm0
2602; SSE4-NEXT:    pminuw %xmm3, %xmm1
2603; SSE4-NEXT:    retq
2604;
2605; AVX1-LABEL: test88:
2606; AVX1:       # %bb.0: # %entry
2607; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2608; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2609; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2610; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2611; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2612; AVX1-NEXT:    retq
2613;
2614; AVX2-LABEL: test88:
2615; AVX2:       # %bb.0: # %entry
2616; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2617; AVX2-NEXT:    retq
2618;
2619; AVX512-LABEL: test88:
2620; AVX512:       # %bb.0: # %entry
2621; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2622; AVX512-NEXT:    retq
2623entry:
2624  %cmp = icmp uge <16 x i16> %a, %b
2625  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2626  ret <16 x i16> %sel
2627}
2628
2629define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2630; SSE2-LABEL: test89:
2631; SSE2:       # %bb.0: # %entry
2632; SSE2-NEXT:    movdqa %xmm0, %xmm4
2633; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2634; SSE2-NEXT:    pand %xmm4, %xmm0
2635; SSE2-NEXT:    pandn %xmm2, %xmm4
2636; SSE2-NEXT:    por %xmm4, %xmm0
2637; SSE2-NEXT:    movdqa %xmm1, %xmm2
2638; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2639; SSE2-NEXT:    pand %xmm2, %xmm1
2640; SSE2-NEXT:    pandn %xmm3, %xmm2
2641; SSE2-NEXT:    por %xmm2, %xmm1
2642; SSE2-NEXT:    retq
2643;
2644; SSE4-LABEL: test89:
2645; SSE4:       # %bb.0: # %entry
2646; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2647; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2648; SSE4-NEXT:    retq
2649;
2650; AVX1-LABEL: test89:
2651; AVX1:       # %bb.0: # %entry
2652; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2653; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2654; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2655; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2656; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2657; AVX1-NEXT:    retq
2658;
2659; AVX2-LABEL: test89:
2660; AVX2:       # %bb.0: # %entry
2661; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2662; AVX2-NEXT:    retq
2663;
2664; AVX512-LABEL: test89:
2665; AVX512:       # %bb.0: # %entry
2666; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2667; AVX512-NEXT:    retq
2668entry:
2669  %cmp = icmp slt <8 x i32> %a, %b
2670  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2671  ret <8 x i32> %sel
2672}
2673
2674define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2675; SSE2-LABEL: test90:
2676; SSE2:       # %bb.0: # %entry
2677; SSE2-NEXT:    movdqa %xmm0, %xmm4
2678; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2679; SSE2-NEXT:    pand %xmm4, %xmm0
2680; SSE2-NEXT:    pandn %xmm2, %xmm4
2681; SSE2-NEXT:    por %xmm4, %xmm0
2682; SSE2-NEXT:    movdqa %xmm1, %xmm2
2683; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2684; SSE2-NEXT:    pand %xmm2, %xmm1
2685; SSE2-NEXT:    pandn %xmm3, %xmm2
2686; SSE2-NEXT:    por %xmm2, %xmm1
2687; SSE2-NEXT:    retq
2688;
2689; SSE4-LABEL: test90:
2690; SSE4:       # %bb.0: # %entry
2691; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2692; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2693; SSE4-NEXT:    retq
2694;
2695; AVX1-LABEL: test90:
2696; AVX1:       # %bb.0: # %entry
2697; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2698; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2699; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2700; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2701; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2702; AVX1-NEXT:    retq
2703;
2704; AVX2-LABEL: test90:
2705; AVX2:       # %bb.0: # %entry
2706; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2707; AVX2-NEXT:    retq
2708;
2709; AVX512-LABEL: test90:
2710; AVX512:       # %bb.0: # %entry
2711; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2712; AVX512-NEXT:    retq
2713entry:
2714  %cmp = icmp sle <8 x i32> %a, %b
2715  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2716  ret <8 x i32> %sel
2717}
2718
2719define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2720; SSE2-LABEL: test91:
2721; SSE2:       # %bb.0: # %entry
2722; SSE2-NEXT:    movdqa %xmm2, %xmm4
2723; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2724; SSE2-NEXT:    pand %xmm4, %xmm0
2725; SSE2-NEXT:    pandn %xmm2, %xmm4
2726; SSE2-NEXT:    por %xmm4, %xmm0
2727; SSE2-NEXT:    movdqa %xmm3, %xmm2
2728; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2729; SSE2-NEXT:    pand %xmm2, %xmm1
2730; SSE2-NEXT:    pandn %xmm3, %xmm2
2731; SSE2-NEXT:    por %xmm2, %xmm1
2732; SSE2-NEXT:    retq
2733;
2734; SSE4-LABEL: test91:
2735; SSE4:       # %bb.0: # %entry
2736; SSE4-NEXT:    pminsd %xmm2, %xmm0
2737; SSE4-NEXT:    pminsd %xmm3, %xmm1
2738; SSE4-NEXT:    retq
2739;
2740; AVX1-LABEL: test91:
2741; AVX1:       # %bb.0: # %entry
2742; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2743; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2744; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2745; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2746; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2747; AVX1-NEXT:    retq
2748;
2749; AVX2-LABEL: test91:
2750; AVX2:       # %bb.0: # %entry
2751; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2752; AVX2-NEXT:    retq
2753;
2754; AVX512-LABEL: test91:
2755; AVX512:       # %bb.0: # %entry
2756; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2757; AVX512-NEXT:    retq
2758entry:
2759  %cmp = icmp sgt <8 x i32> %a, %b
2760  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2761  ret <8 x i32> %sel
2762}
2763
2764define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
2765; SSE2-LABEL: test92:
2766; SSE2:       # %bb.0: # %entry
2767; SSE2-NEXT:    movdqa %xmm2, %xmm4
2768; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2769; SSE2-NEXT:    pand %xmm4, %xmm0
2770; SSE2-NEXT:    pandn %xmm2, %xmm4
2771; SSE2-NEXT:    por %xmm4, %xmm0
2772; SSE2-NEXT:    movdqa %xmm3, %xmm2
2773; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2774; SSE2-NEXT:    pand %xmm2, %xmm1
2775; SSE2-NEXT:    pandn %xmm3, %xmm2
2776; SSE2-NEXT:    por %xmm2, %xmm1
2777; SSE2-NEXT:    retq
2778;
2779; SSE4-LABEL: test92:
2780; SSE4:       # %bb.0: # %entry
2781; SSE4-NEXT:    pminsd %xmm2, %xmm0
2782; SSE4-NEXT:    pminsd %xmm3, %xmm1
2783; SSE4-NEXT:    retq
2784;
2785; AVX1-LABEL: test92:
2786; AVX1:       # %bb.0: # %entry
2787; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2788; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2789; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2790; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2791; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2792; AVX1-NEXT:    retq
2793;
2794; AVX2-LABEL: test92:
2795; AVX2:       # %bb.0: # %entry
2796; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2797; AVX2-NEXT:    retq
2798;
2799; AVX512-LABEL: test92:
2800; AVX512:       # %bb.0: # %entry
2801; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2802; AVX512-NEXT:    retq
2803entry:
2804  %cmp = icmp sge <8 x i32> %a, %b
2805  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2806  ret <8 x i32> %sel
2807}
2808
2809define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
2810; SSE2-LABEL: test93:
2811; SSE2:       # %bb.0: # %entry
2812; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2813; SSE2-NEXT:    movdqa %xmm2, %xmm5
2814; SSE2-NEXT:    pxor %xmm4, %xmm5
2815; SSE2-NEXT:    movdqa %xmm0, %xmm6
2816; SSE2-NEXT:    pxor %xmm4, %xmm6
2817; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2818; SSE2-NEXT:    pand %xmm6, %xmm0
2819; SSE2-NEXT:    pandn %xmm2, %xmm6
2820; SSE2-NEXT:    por %xmm6, %xmm0
2821; SSE2-NEXT:    movdqa %xmm3, %xmm2
2822; SSE2-NEXT:    pxor %xmm4, %xmm2
2823; SSE2-NEXT:    pxor %xmm1, %xmm4
2824; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2825; SSE2-NEXT:    pand %xmm4, %xmm1
2826; SSE2-NEXT:    pandn %xmm3, %xmm4
2827; SSE2-NEXT:    por %xmm4, %xmm1
2828; SSE2-NEXT:    retq
2829;
2830; SSE4-LABEL: test93:
2831; SSE4:       # %bb.0: # %entry
2832; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2833; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2834; SSE4-NEXT:    retq
2835;
2836; AVX1-LABEL: test93:
2837; AVX1:       # %bb.0: # %entry
2838; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2839; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2840; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2841; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2842; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2843; AVX1-NEXT:    retq
2844;
2845; AVX2-LABEL: test93:
2846; AVX2:       # %bb.0: # %entry
2847; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2848; AVX2-NEXT:    retq
2849;
2850; AVX512-LABEL: test93:
2851; AVX512:       # %bb.0: # %entry
2852; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2853; AVX512-NEXT:    retq
2854entry:
2855  %cmp = icmp ult <8 x i32> %a, %b
2856  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2857  ret <8 x i32> %sel
2858}
2859
2860define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
2861; SSE2-LABEL: test94:
2862; SSE2:       # %bb.0: # %entry
2863; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2864; SSE2-NEXT:    movdqa %xmm2, %xmm5
2865; SSE2-NEXT:    pxor %xmm4, %xmm5
2866; SSE2-NEXT:    movdqa %xmm0, %xmm6
2867; SSE2-NEXT:    pxor %xmm4, %xmm6
2868; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2869; SSE2-NEXT:    pand %xmm6, %xmm0
2870; SSE2-NEXT:    pandn %xmm2, %xmm6
2871; SSE2-NEXT:    por %xmm6, %xmm0
2872; SSE2-NEXT:    movdqa %xmm3, %xmm2
2873; SSE2-NEXT:    pxor %xmm4, %xmm2
2874; SSE2-NEXT:    pxor %xmm1, %xmm4
2875; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2876; SSE2-NEXT:    pand %xmm4, %xmm1
2877; SSE2-NEXT:    pandn %xmm3, %xmm4
2878; SSE2-NEXT:    por %xmm4, %xmm1
2879; SSE2-NEXT:    retq
2880;
2881; SSE4-LABEL: test94:
2882; SSE4:       # %bb.0: # %entry
2883; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2884; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2885; SSE4-NEXT:    retq
2886;
2887; AVX1-LABEL: test94:
2888; AVX1:       # %bb.0: # %entry
2889; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2890; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2891; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2892; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2893; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2894; AVX1-NEXT:    retq
2895;
2896; AVX2-LABEL: test94:
2897; AVX2:       # %bb.0: # %entry
2898; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2899; AVX2-NEXT:    retq
2900;
2901; AVX512-LABEL: test94:
2902; AVX512:       # %bb.0: # %entry
2903; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2904; AVX512-NEXT:    retq
2905entry:
2906  %cmp = icmp ule <8 x i32> %a, %b
2907  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2908  ret <8 x i32> %sel
2909}
2910
2911define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
2912; SSE2-LABEL: test95:
2913; SSE2:       # %bb.0: # %entry
2914; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2915; SSE2-NEXT:    movdqa %xmm0, %xmm5
2916; SSE2-NEXT:    pxor %xmm4, %xmm5
2917; SSE2-NEXT:    movdqa %xmm2, %xmm6
2918; SSE2-NEXT:    pxor %xmm4, %xmm6
2919; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2920; SSE2-NEXT:    pand %xmm6, %xmm0
2921; SSE2-NEXT:    pandn %xmm2, %xmm6
2922; SSE2-NEXT:    por %xmm6, %xmm0
2923; SSE2-NEXT:    movdqa %xmm1, %xmm2
2924; SSE2-NEXT:    pxor %xmm4, %xmm2
2925; SSE2-NEXT:    pxor %xmm3, %xmm4
2926; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2927; SSE2-NEXT:    pand %xmm4, %xmm1
2928; SSE2-NEXT:    pandn %xmm3, %xmm4
2929; SSE2-NEXT:    por %xmm4, %xmm1
2930; SSE2-NEXT:    retq
2931;
2932; SSE4-LABEL: test95:
2933; SSE4:       # %bb.0: # %entry
2934; SSE4-NEXT:    pminud %xmm2, %xmm0
2935; SSE4-NEXT:    pminud %xmm3, %xmm1
2936; SSE4-NEXT:    retq
2937;
2938; AVX1-LABEL: test95:
2939; AVX1:       # %bb.0: # %entry
2940; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2941; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2942; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
2943; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2944; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2945; AVX1-NEXT:    retq
2946;
2947; AVX2-LABEL: test95:
2948; AVX2:       # %bb.0: # %entry
2949; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
2950; AVX2-NEXT:    retq
2951;
2952; AVX512-LABEL: test95:
2953; AVX512:       # %bb.0: # %entry
2954; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
2955; AVX512-NEXT:    retq
2956entry:
2957  %cmp = icmp ugt <8 x i32> %a, %b
2958  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2959  ret <8 x i32> %sel
2960}
2961
2962define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
2963; SSE2-LABEL: test96:
2964; SSE2:       # %bb.0: # %entry
2965; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2966; SSE2-NEXT:    movdqa %xmm0, %xmm5
2967; SSE2-NEXT:    pxor %xmm4, %xmm5
2968; SSE2-NEXT:    movdqa %xmm2, %xmm6
2969; SSE2-NEXT:    pxor %xmm4, %xmm6
2970; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2971; SSE2-NEXT:    pand %xmm6, %xmm0
2972; SSE2-NEXT:    pandn %xmm2, %xmm6
2973; SSE2-NEXT:    por %xmm6, %xmm0
2974; SSE2-NEXT:    movdqa %xmm1, %xmm2
2975; SSE2-NEXT:    pxor %xmm4, %xmm2
2976; SSE2-NEXT:    pxor %xmm3, %xmm4
2977; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2978; SSE2-NEXT:    pand %xmm4, %xmm1
2979; SSE2-NEXT:    pandn %xmm3, %xmm4
2980; SSE2-NEXT:    por %xmm4, %xmm1
2981; SSE2-NEXT:    retq
2982;
2983; SSE4-LABEL: test96:
2984; SSE4:       # %bb.0: # %entry
2985; SSE4-NEXT:    pminud %xmm2, %xmm0
2986; SSE4-NEXT:    pminud %xmm3, %xmm1
2987; SSE4-NEXT:    retq
2988;
2989; AVX1-LABEL: test96:
2990; AVX1:       # %bb.0: # %entry
2991; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2992; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2993; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
2994; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2995; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2996; AVX1-NEXT:    retq
2997;
2998; AVX2-LABEL: test96:
2999; AVX2:       # %bb.0: # %entry
3000; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3001; AVX2-NEXT:    retq
3002;
3003; AVX512-LABEL: test96:
3004; AVX512:       # %bb.0: # %entry
3005; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3006; AVX512-NEXT:    retq
3007entry:
3008  %cmp = icmp uge <8 x i32> %a, %b
3009  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3010  ret <8 x i32> %sel
3011}
3012
3013; ----------------------------
3014
3015define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3016; SSE2-LABEL: test97:
3017; SSE2:       # %bb.0: # %entry
3018; SSE2-NEXT:    movdqa %xmm4, %xmm8
3019; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3020; SSE2-NEXT:    pand %xmm8, %xmm0
3021; SSE2-NEXT:    pandn %xmm4, %xmm8
3022; SSE2-NEXT:    por %xmm8, %xmm0
3023; SSE2-NEXT:    movdqa %xmm5, %xmm4
3024; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3025; SSE2-NEXT:    pand %xmm4, %xmm1
3026; SSE2-NEXT:    pandn %xmm5, %xmm4
3027; SSE2-NEXT:    por %xmm4, %xmm1
3028; SSE2-NEXT:    movdqa %xmm6, %xmm4
3029; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3030; SSE2-NEXT:    pand %xmm4, %xmm2
3031; SSE2-NEXT:    pandn %xmm6, %xmm4
3032; SSE2-NEXT:    por %xmm4, %xmm2
3033; SSE2-NEXT:    movdqa %xmm7, %xmm4
3034; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3035; SSE2-NEXT:    pand %xmm4, %xmm3
3036; SSE2-NEXT:    pandn %xmm7, %xmm4
3037; SSE2-NEXT:    por %xmm4, %xmm3
3038; SSE2-NEXT:    retq
3039;
3040; SSE4-LABEL: test97:
3041; SSE4:       # %bb.0: # %entry
3042; SSE4-NEXT:    pminsb %xmm4, %xmm0
3043; SSE4-NEXT:    pminsb %xmm5, %xmm1
3044; SSE4-NEXT:    pminsb %xmm6, %xmm2
3045; SSE4-NEXT:    pminsb %xmm7, %xmm3
3046; SSE4-NEXT:    retq
3047;
3048; AVX1-LABEL: test97:
3049; AVX1:       # %bb.0: # %entry
3050; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3051; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3052; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3053; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3054; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3055; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3056; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3057; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3058; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3059; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3060; AVX1-NEXT:    retq
3061;
3062; AVX2-LABEL: test97:
3063; AVX2:       # %bb.0: # %entry
3064; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3065; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3066; AVX2-NEXT:    retq
3067;
3068; AVX512F-LABEL: test97:
3069; AVX512F:       # %bb.0: # %entry
3070; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3071; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3072; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
3073; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
3074; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3075; AVX512F-NEXT:    retq
3076;
3077; AVX512BW-LABEL: test97:
3078; AVX512BW:       # %bb.0: # %entry
3079; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3080; AVX512BW-NEXT:    retq
3081entry:
3082  %cmp = icmp slt <64 x i8> %a, %b
3083  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3084  ret <64 x i8> %sel
3085}
3086
3087define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3088; SSE2-LABEL: test98:
3089; SSE2:       # %bb.0: # %entry
3090; SSE2-NEXT:    movdqa %xmm4, %xmm8
3091; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3092; SSE2-NEXT:    pand %xmm8, %xmm0
3093; SSE2-NEXT:    pandn %xmm4, %xmm8
3094; SSE2-NEXT:    por %xmm8, %xmm0
3095; SSE2-NEXT:    movdqa %xmm5, %xmm4
3096; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3097; SSE2-NEXT:    pand %xmm4, %xmm1
3098; SSE2-NEXT:    pandn %xmm5, %xmm4
3099; SSE2-NEXT:    por %xmm4, %xmm1
3100; SSE2-NEXT:    movdqa %xmm6, %xmm4
3101; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3102; SSE2-NEXT:    pand %xmm4, %xmm2
3103; SSE2-NEXT:    pandn %xmm6, %xmm4
3104; SSE2-NEXT:    por %xmm4, %xmm2
3105; SSE2-NEXT:    movdqa %xmm7, %xmm4
3106; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3107; SSE2-NEXT:    pand %xmm4, %xmm3
3108; SSE2-NEXT:    pandn %xmm7, %xmm4
3109; SSE2-NEXT:    por %xmm4, %xmm3
3110; SSE2-NEXT:    retq
3111;
3112; SSE4-LABEL: test98:
3113; SSE4:       # %bb.0: # %entry
3114; SSE4-NEXT:    pminsb %xmm4, %xmm0
3115; SSE4-NEXT:    pminsb %xmm5, %xmm1
3116; SSE4-NEXT:    pminsb %xmm6, %xmm2
3117; SSE4-NEXT:    pminsb %xmm7, %xmm3
3118; SSE4-NEXT:    retq
3119;
3120; AVX1-LABEL: test98:
3121; AVX1:       # %bb.0: # %entry
3122; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3123; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3124; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3125; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3126; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3127; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3128; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3129; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3130; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3131; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3132; AVX1-NEXT:    retq
3133;
3134; AVX2-LABEL: test98:
3135; AVX2:       # %bb.0: # %entry
3136; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3137; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3138; AVX2-NEXT:    retq
3139;
3140; AVX512F-LABEL: test98:
3141; AVX512F:       # %bb.0: # %entry
3142; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3143; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3144; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
3145; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
3146; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3147; AVX512F-NEXT:    retq
3148;
3149; AVX512BW-LABEL: test98:
3150; AVX512BW:       # %bb.0: # %entry
3151; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3152; AVX512BW-NEXT:    retq
3153entry:
3154  %cmp = icmp sle <64 x i8> %a, %b
3155  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3156  ret <64 x i8> %sel
3157}
3158
3159define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3160; SSE2-LABEL: test99:
3161; SSE2:       # %bb.0: # %entry
3162; SSE2-NEXT:    movdqa %xmm0, %xmm8
3163; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3164; SSE2-NEXT:    pand %xmm8, %xmm0
3165; SSE2-NEXT:    pandn %xmm4, %xmm8
3166; SSE2-NEXT:    por %xmm8, %xmm0
3167; SSE2-NEXT:    movdqa %xmm1, %xmm4
3168; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3169; SSE2-NEXT:    pand %xmm4, %xmm1
3170; SSE2-NEXT:    pandn %xmm5, %xmm4
3171; SSE2-NEXT:    por %xmm4, %xmm1
3172; SSE2-NEXT:    movdqa %xmm2, %xmm4
3173; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
3174; SSE2-NEXT:    pand %xmm4, %xmm2
3175; SSE2-NEXT:    pandn %xmm6, %xmm4
3176; SSE2-NEXT:    por %xmm4, %xmm2
3177; SSE2-NEXT:    movdqa %xmm3, %xmm4
3178; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
3179; SSE2-NEXT:    pand %xmm4, %xmm3
3180; SSE2-NEXT:    pandn %xmm7, %xmm4
3181; SSE2-NEXT:    por %xmm4, %xmm3
3182; SSE2-NEXT:    retq
3183;
3184; SSE4-LABEL: test99:
3185; SSE4:       # %bb.0: # %entry
3186; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3187; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3188; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3189; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3190; SSE4-NEXT:    retq
3191;
3192; AVX1-LABEL: test99:
3193; AVX1:       # %bb.0: # %entry
3194; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3195; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3196; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3197; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3198; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3199; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3200; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3201; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3202; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3203; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3204; AVX1-NEXT:    retq
3205;
3206; AVX2-LABEL: test99:
3207; AVX2:       # %bb.0: # %entry
3208; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3209; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3210; AVX2-NEXT:    retq
3211;
3212; AVX512F-LABEL: test99:
3213; AVX512F:       # %bb.0: # %entry
3214; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3215; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3216; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
3217; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
3218; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3219; AVX512F-NEXT:    retq
3220;
3221; AVX512BW-LABEL: test99:
3222; AVX512BW:       # %bb.0: # %entry
3223; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3224; AVX512BW-NEXT:    retq
3225entry:
3226  %cmp = icmp sgt <64 x i8> %a, %b
3227  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3228  ret <64 x i8> %sel
3229}
3230
3231define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3232; SSE2-LABEL: test100:
3233; SSE2:       # %bb.0: # %entry
3234; SSE2-NEXT:    movdqa %xmm0, %xmm8
3235; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3236; SSE2-NEXT:    pand %xmm8, %xmm0
3237; SSE2-NEXT:    pandn %xmm4, %xmm8
3238; SSE2-NEXT:    por %xmm8, %xmm0
3239; SSE2-NEXT:    movdqa %xmm1, %xmm4
3240; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3241; SSE2-NEXT:    pand %xmm4, %xmm1
3242; SSE2-NEXT:    pandn %xmm5, %xmm4
3243; SSE2-NEXT:    por %xmm4, %xmm1
3244; SSE2-NEXT:    movdqa %xmm2, %xmm4
3245; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
3246; SSE2-NEXT:    pand %xmm4, %xmm2
3247; SSE2-NEXT:    pandn %xmm6, %xmm4
3248; SSE2-NEXT:    por %xmm4, %xmm2
3249; SSE2-NEXT:    movdqa %xmm3, %xmm4
3250; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
3251; SSE2-NEXT:    pand %xmm4, %xmm3
3252; SSE2-NEXT:    pandn %xmm7, %xmm4
3253; SSE2-NEXT:    por %xmm4, %xmm3
3254; SSE2-NEXT:    retq
3255;
3256; SSE4-LABEL: test100:
3257; SSE4:       # %bb.0: # %entry
3258; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3259; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3260; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3261; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3262; SSE4-NEXT:    retq
3263;
3264; AVX1-LABEL: test100:
3265; AVX1:       # %bb.0: # %entry
3266; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3267; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3268; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3269; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3270; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3271; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3272; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3273; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3274; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3275; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3276; AVX1-NEXT:    retq
3277;
3278; AVX2-LABEL: test100:
3279; AVX2:       # %bb.0: # %entry
3280; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3281; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3282; AVX2-NEXT:    retq
3283;
3284; AVX512F-LABEL: test100:
3285; AVX512F:       # %bb.0: # %entry
3286; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3287; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3288; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
3289; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
3290; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3291; AVX512F-NEXT:    retq
3292;
3293; AVX512BW-LABEL: test100:
3294; AVX512BW:       # %bb.0: # %entry
3295; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3296; AVX512BW-NEXT:    retq
3297entry:
3298  %cmp = icmp sge <64 x i8> %a, %b
3299  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3300  ret <64 x i8> %sel
3301}
3302
3303define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3304; SSE-LABEL: test101:
3305; SSE:       # %bb.0: # %entry
3306; SSE-NEXT:    pminub %xmm4, %xmm0
3307; SSE-NEXT:    pminub %xmm5, %xmm1
3308; SSE-NEXT:    pminub %xmm6, %xmm2
3309; SSE-NEXT:    pminub %xmm7, %xmm3
3310; SSE-NEXT:    retq
3311;
3312; AVX1-LABEL: test101:
3313; AVX1:       # %bb.0: # %entry
3314; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3315; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3316; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3317; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3318; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3319; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3320; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3321; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3322; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3323; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3324; AVX1-NEXT:    retq
3325;
3326; AVX2-LABEL: test101:
3327; AVX2:       # %bb.0: # %entry
3328; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3329; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3330; AVX2-NEXT:    retq
3331;
3332; AVX512F-LABEL: test101:
3333; AVX512F:       # %bb.0: # %entry
3334; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3335; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3336; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
3337; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
3338; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3339; AVX512F-NEXT:    retq
3340;
3341; AVX512BW-LABEL: test101:
3342; AVX512BW:       # %bb.0: # %entry
3343; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3344; AVX512BW-NEXT:    retq
3345entry:
3346  %cmp = icmp ult <64 x i8> %a, %b
3347  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3348  ret <64 x i8> %sel
3349}
3350
3351define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3352; SSE-LABEL: test102:
3353; SSE:       # %bb.0: # %entry
3354; SSE-NEXT:    pminub %xmm4, %xmm0
3355; SSE-NEXT:    pminub %xmm5, %xmm1
3356; SSE-NEXT:    pminub %xmm6, %xmm2
3357; SSE-NEXT:    pminub %xmm7, %xmm3
3358; SSE-NEXT:    retq
3359;
3360; AVX1-LABEL: test102:
3361; AVX1:       # %bb.0: # %entry
3362; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3363; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3364; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3365; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3366; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3367; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3368; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3369; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3370; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3371; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3372; AVX1-NEXT:    retq
3373;
3374; AVX2-LABEL: test102:
3375; AVX2:       # %bb.0: # %entry
3376; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3377; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3378; AVX2-NEXT:    retq
3379;
3380; AVX512F-LABEL: test102:
3381; AVX512F:       # %bb.0: # %entry
3382; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3383; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3384; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
3385; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
3386; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3387; AVX512F-NEXT:    retq
3388;
3389; AVX512BW-LABEL: test102:
3390; AVX512BW:       # %bb.0: # %entry
3391; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3392; AVX512BW-NEXT:    retq
3393entry:
3394  %cmp = icmp ule <64 x i8> %a, %b
3395  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3396  ret <64 x i8> %sel
3397}
3398
3399define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3400; SSE-LABEL: test103:
3401; SSE:       # %bb.0: # %entry
3402; SSE-NEXT:    pmaxub %xmm4, %xmm0
3403; SSE-NEXT:    pmaxub %xmm5, %xmm1
3404; SSE-NEXT:    pmaxub %xmm6, %xmm2
3405; SSE-NEXT:    pmaxub %xmm7, %xmm3
3406; SSE-NEXT:    retq
3407;
3408; AVX1-LABEL: test103:
3409; AVX1:       # %bb.0: # %entry
3410; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3411; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3412; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3413; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3414; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3415; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3416; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3417; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3418; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3419; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3420; AVX1-NEXT:    retq
3421;
3422; AVX2-LABEL: test103:
3423; AVX2:       # %bb.0: # %entry
3424; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3425; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3426; AVX2-NEXT:    retq
3427;
3428; AVX512F-LABEL: test103:
3429; AVX512F:       # %bb.0: # %entry
3430; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3431; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3432; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
3433; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
3434; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3435; AVX512F-NEXT:    retq
3436;
3437; AVX512BW-LABEL: test103:
3438; AVX512BW:       # %bb.0: # %entry
3439; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3440; AVX512BW-NEXT:    retq
3441entry:
3442  %cmp = icmp ugt <64 x i8> %a, %b
3443  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3444  ret <64 x i8> %sel
3445}
3446
3447define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3448; SSE-LABEL: test104:
3449; SSE:       # %bb.0: # %entry
3450; SSE-NEXT:    pmaxub %xmm4, %xmm0
3451; SSE-NEXT:    pmaxub %xmm5, %xmm1
3452; SSE-NEXT:    pmaxub %xmm6, %xmm2
3453; SSE-NEXT:    pmaxub %xmm7, %xmm3
3454; SSE-NEXT:    retq
3455;
3456; AVX1-LABEL: test104:
3457; AVX1:       # %bb.0: # %entry
3458; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3459; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3460; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3461; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3462; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3463; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3464; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3465; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3466; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3467; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3468; AVX1-NEXT:    retq
3469;
3470; AVX2-LABEL: test104:
3471; AVX2:       # %bb.0: # %entry
3472; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3473; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3474; AVX2-NEXT:    retq
3475;
3476; AVX512F-LABEL: test104:
3477; AVX512F:       # %bb.0: # %entry
3478; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3479; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3480; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
3481; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
3482; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3483; AVX512F-NEXT:    retq
3484;
3485; AVX512BW-LABEL: test104:
3486; AVX512BW:       # %bb.0: # %entry
3487; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3488; AVX512BW-NEXT:    retq
3489entry:
3490  %cmp = icmp uge <64 x i8> %a, %b
3491  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3492  ret <64 x i8> %sel
3493}
3494
3495define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3496; SSE-LABEL: test105:
3497; SSE:       # %bb.0: # %entry
3498; SSE-NEXT:    pminsw %xmm4, %xmm0
3499; SSE-NEXT:    pminsw %xmm5, %xmm1
3500; SSE-NEXT:    pminsw %xmm6, %xmm2
3501; SSE-NEXT:    pminsw %xmm7, %xmm3
3502; SSE-NEXT:    retq
3503;
3504; AVX1-LABEL: test105:
3505; AVX1:       # %bb.0: # %entry
3506; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3507; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3508; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3509; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3510; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3511; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3512; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3513; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3514; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3515; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3516; AVX1-NEXT:    retq
3517;
3518; AVX2-LABEL: test105:
3519; AVX2:       # %bb.0: # %entry
3520; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3521; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3522; AVX2-NEXT:    retq
3523;
3524; AVX512F-LABEL: test105:
3525; AVX512F:       # %bb.0: # %entry
3526; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3527; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3528; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
3529; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
3530; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3531; AVX512F-NEXT:    retq
3532;
3533; AVX512BW-LABEL: test105:
3534; AVX512BW:       # %bb.0: # %entry
3535; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3536; AVX512BW-NEXT:    retq
3537entry:
3538  %cmp = icmp slt <32 x i16> %a, %b
3539  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3540  ret <32 x i16> %sel
3541}
3542
3543define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3544; SSE-LABEL: test106:
3545; SSE:       # %bb.0: # %entry
3546; SSE-NEXT:    pminsw %xmm4, %xmm0
3547; SSE-NEXT:    pminsw %xmm5, %xmm1
3548; SSE-NEXT:    pminsw %xmm6, %xmm2
3549; SSE-NEXT:    pminsw %xmm7, %xmm3
3550; SSE-NEXT:    retq
3551;
3552; AVX1-LABEL: test106:
3553; AVX1:       # %bb.0: # %entry
3554; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3555; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3556; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3557; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3558; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3559; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3560; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3561; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3562; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3563; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3564; AVX1-NEXT:    retq
3565;
3566; AVX2-LABEL: test106:
3567; AVX2:       # %bb.0: # %entry
3568; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3569; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3570; AVX2-NEXT:    retq
3571;
3572; AVX512F-LABEL: test106:
3573; AVX512F:       # %bb.0: # %entry
3574; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3575; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3576; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
3577; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
3578; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3579; AVX512F-NEXT:    retq
3580;
3581; AVX512BW-LABEL: test106:
3582; AVX512BW:       # %bb.0: # %entry
3583; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3584; AVX512BW-NEXT:    retq
3585entry:
3586  %cmp = icmp sle <32 x i16> %a, %b
3587  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3588  ret <32 x i16> %sel
3589}
3590
3591define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3592; SSE-LABEL: test107:
3593; SSE:       # %bb.0: # %entry
3594; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3595; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3596; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3597; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3598; SSE-NEXT:    retq
3599;
3600; AVX1-LABEL: test107:
3601; AVX1:       # %bb.0: # %entry
3602; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3603; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3604; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3605; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3606; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3607; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3608; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3609; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3610; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3611; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3612; AVX1-NEXT:    retq
3613;
3614; AVX2-LABEL: test107:
3615; AVX2:       # %bb.0: # %entry
3616; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3617; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3618; AVX2-NEXT:    retq
3619;
3620; AVX512F-LABEL: test107:
3621; AVX512F:       # %bb.0: # %entry
3622; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3623; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3624; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
3625; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3626; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3627; AVX512F-NEXT:    retq
3628;
3629; AVX512BW-LABEL: test107:
3630; AVX512BW:       # %bb.0: # %entry
3631; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3632; AVX512BW-NEXT:    retq
3633entry:
3634  %cmp = icmp sgt <32 x i16> %a, %b
3635  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3636  ret <32 x i16> %sel
3637}
3638
3639define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3640; SSE-LABEL: test108:
3641; SSE:       # %bb.0: # %entry
3642; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3643; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3644; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3645; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3646; SSE-NEXT:    retq
3647;
3648; AVX1-LABEL: test108:
3649; AVX1:       # %bb.0: # %entry
3650; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3651; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3652; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3653; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3654; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3655; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3656; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3657; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3658; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3659; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3660; AVX1-NEXT:    retq
3661;
3662; AVX2-LABEL: test108:
3663; AVX2:       # %bb.0: # %entry
3664; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3665; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3666; AVX2-NEXT:    retq
3667;
3668; AVX512F-LABEL: test108:
3669; AVX512F:       # %bb.0: # %entry
3670; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3671; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3672; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
3673; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3674; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3675; AVX512F-NEXT:    retq
3676;
3677; AVX512BW-LABEL: test108:
3678; AVX512BW:       # %bb.0: # %entry
3679; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3680; AVX512BW-NEXT:    retq
3681entry:
3682  %cmp = icmp sge <32 x i16> %a, %b
3683  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3684  ret <32 x i16> %sel
3685}
3686
3687define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3688; SSE2-LABEL: test109:
3689; SSE2:       # %bb.0: # %entry
3690; SSE2-NEXT:    movdqa %xmm0, %xmm8
3691; SSE2-NEXT:    psubusw %xmm4, %xmm8
3692; SSE2-NEXT:    psubw %xmm8, %xmm0
3693; SSE2-NEXT:    movdqa %xmm1, %xmm4
3694; SSE2-NEXT:    psubusw %xmm5, %xmm4
3695; SSE2-NEXT:    psubw %xmm4, %xmm1
3696; SSE2-NEXT:    movdqa %xmm2, %xmm4
3697; SSE2-NEXT:    psubusw %xmm6, %xmm4
3698; SSE2-NEXT:    psubw %xmm4, %xmm2
3699; SSE2-NEXT:    movdqa %xmm3, %xmm4
3700; SSE2-NEXT:    psubusw %xmm7, %xmm4
3701; SSE2-NEXT:    psubw %xmm4, %xmm3
3702; SSE2-NEXT:    retq
3703;
3704; SSE4-LABEL: test109:
3705; SSE4:       # %bb.0: # %entry
3706; SSE4-NEXT:    pminuw %xmm4, %xmm0
3707; SSE4-NEXT:    pminuw %xmm5, %xmm1
3708; SSE4-NEXT:    pminuw %xmm6, %xmm2
3709; SSE4-NEXT:    pminuw %xmm7, %xmm3
3710; SSE4-NEXT:    retq
3711;
3712; AVX1-LABEL: test109:
3713; AVX1:       # %bb.0: # %entry
3714; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3715; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3716; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3717; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3718; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3719; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3720; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3721; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3722; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3723; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3724; AVX1-NEXT:    retq
3725;
3726; AVX2-LABEL: test109:
3727; AVX2:       # %bb.0: # %entry
3728; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3729; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3730; AVX2-NEXT:    retq
3731;
3732; AVX512F-LABEL: test109:
3733; AVX512F:       # %bb.0: # %entry
3734; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3735; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3736; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
3737; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
3738; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3739; AVX512F-NEXT:    retq
3740;
3741; AVX512BW-LABEL: test109:
3742; AVX512BW:       # %bb.0: # %entry
3743; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3744; AVX512BW-NEXT:    retq
3745entry:
3746  %cmp = icmp ult <32 x i16> %a, %b
3747  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3748  ret <32 x i16> %sel
3749}
3750
3751define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3752; SSE2-LABEL: test110:
3753; SSE2:       # %bb.0: # %entry
3754; SSE2-NEXT:    movdqa %xmm0, %xmm8
3755; SSE2-NEXT:    psubusw %xmm4, %xmm8
3756; SSE2-NEXT:    psubw %xmm8, %xmm0
3757; SSE2-NEXT:    movdqa %xmm1, %xmm4
3758; SSE2-NEXT:    psubusw %xmm5, %xmm4
3759; SSE2-NEXT:    psubw %xmm4, %xmm1
3760; SSE2-NEXT:    movdqa %xmm2, %xmm4
3761; SSE2-NEXT:    psubusw %xmm6, %xmm4
3762; SSE2-NEXT:    psubw %xmm4, %xmm2
3763; SSE2-NEXT:    movdqa %xmm3, %xmm4
3764; SSE2-NEXT:    psubusw %xmm7, %xmm4
3765; SSE2-NEXT:    psubw %xmm4, %xmm3
3766; SSE2-NEXT:    retq
3767;
3768; SSE4-LABEL: test110:
3769; SSE4:       # %bb.0: # %entry
3770; SSE4-NEXT:    pminuw %xmm4, %xmm0
3771; SSE4-NEXT:    pminuw %xmm5, %xmm1
3772; SSE4-NEXT:    pminuw %xmm6, %xmm2
3773; SSE4-NEXT:    pminuw %xmm7, %xmm3
3774; SSE4-NEXT:    retq
3775;
3776; AVX1-LABEL: test110:
3777; AVX1:       # %bb.0: # %entry
3778; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3779; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3780; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3781; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3782; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3783; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3784; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3785; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3786; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3787; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3788; AVX1-NEXT:    retq
3789;
3790; AVX2-LABEL: test110:
3791; AVX2:       # %bb.0: # %entry
3792; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3793; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3794; AVX2-NEXT:    retq
3795;
3796; AVX512F-LABEL: test110:
3797; AVX512F:       # %bb.0: # %entry
3798; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3799; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3800; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
3801; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
3802; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3803; AVX512F-NEXT:    retq
3804;
3805; AVX512BW-LABEL: test110:
3806; AVX512BW:       # %bb.0: # %entry
3807; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3808; AVX512BW-NEXT:    retq
3809entry:
3810  %cmp = icmp ule <32 x i16> %a, %b
3811  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3812  ret <32 x i16> %sel
3813}
3814
3815define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
3816; SSE2-LABEL: test111:
3817; SSE2:       # %bb.0: # %entry
3818; SSE2-NEXT:    psubusw %xmm0, %xmm4
3819; SSE2-NEXT:    paddw %xmm4, %xmm0
3820; SSE2-NEXT:    psubusw %xmm1, %xmm5
3821; SSE2-NEXT:    paddw %xmm5, %xmm1
3822; SSE2-NEXT:    psubusw %xmm2, %xmm6
3823; SSE2-NEXT:    paddw %xmm6, %xmm2
3824; SSE2-NEXT:    psubusw %xmm3, %xmm7
3825; SSE2-NEXT:    paddw %xmm7, %xmm3
3826; SSE2-NEXT:    retq
3827;
3828; SSE4-LABEL: test111:
3829; SSE4:       # %bb.0: # %entry
3830; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3831; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3832; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3833; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3834; SSE4-NEXT:    retq
3835;
3836; AVX1-LABEL: test111:
3837; AVX1:       # %bb.0: # %entry
3838; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3839; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3840; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3841; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3842; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3843; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3844; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3845; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3846; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3847; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3848; AVX1-NEXT:    retq
3849;
3850; AVX2-LABEL: test111:
3851; AVX2:       # %bb.0: # %entry
3852; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3853; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3854; AVX2-NEXT:    retq
3855;
3856; AVX512F-LABEL: test111:
3857; AVX512F:       # %bb.0: # %entry
3858; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3859; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3860; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
3861; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
3862; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3863; AVX512F-NEXT:    retq
3864;
3865; AVX512BW-LABEL: test111:
3866; AVX512BW:       # %bb.0: # %entry
3867; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3868; AVX512BW-NEXT:    retq
3869entry:
3870  %cmp = icmp ugt <32 x i16> %a, %b
3871  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3872  ret <32 x i16> %sel
3873}
3874
3875define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
3876; SSE2-LABEL: test112:
3877; SSE2:       # %bb.0: # %entry
3878; SSE2-NEXT:    psubusw %xmm0, %xmm4
3879; SSE2-NEXT:    paddw %xmm4, %xmm0
3880; SSE2-NEXT:    psubusw %xmm1, %xmm5
3881; SSE2-NEXT:    paddw %xmm5, %xmm1
3882; SSE2-NEXT:    psubusw %xmm2, %xmm6
3883; SSE2-NEXT:    paddw %xmm6, %xmm2
3884; SSE2-NEXT:    psubusw %xmm3, %xmm7
3885; SSE2-NEXT:    paddw %xmm7, %xmm3
3886; SSE2-NEXT:    retq
3887;
3888; SSE4-LABEL: test112:
3889; SSE4:       # %bb.0: # %entry
3890; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3891; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3892; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3893; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3894; SSE4-NEXT:    retq
3895;
3896; AVX1-LABEL: test112:
3897; AVX1:       # %bb.0: # %entry
3898; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3899; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3900; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3901; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3902; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3903; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3904; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3905; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3906; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3907; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3908; AVX1-NEXT:    retq
3909;
3910; AVX2-LABEL: test112:
3911; AVX2:       # %bb.0: # %entry
3912; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3913; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3914; AVX2-NEXT:    retq
3915;
3916; AVX512F-LABEL: test112:
3917; AVX512F:       # %bb.0: # %entry
3918; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3919; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3920; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
3921; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
3922; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3923; AVX512F-NEXT:    retq
3924;
3925; AVX512BW-LABEL: test112:
3926; AVX512BW:       # %bb.0: # %entry
3927; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3928; AVX512BW-NEXT:    retq
3929entry:
3930  %cmp = icmp uge <32 x i16> %a, %b
3931  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3932  ret <32 x i16> %sel
3933}
3934
3935define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
3936; SSE2-LABEL: test113:
3937; SSE2:       # %bb.0: # %entry
3938; SSE2-NEXT:    movdqa %xmm4, %xmm8
3939; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
3940; SSE2-NEXT:    pand %xmm8, %xmm0
3941; SSE2-NEXT:    pandn %xmm4, %xmm8
3942; SSE2-NEXT:    por %xmm8, %xmm0
3943; SSE2-NEXT:    movdqa %xmm5, %xmm4
3944; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
3945; SSE2-NEXT:    pand %xmm4, %xmm1
3946; SSE2-NEXT:    pandn %xmm5, %xmm4
3947; SSE2-NEXT:    por %xmm4, %xmm1
3948; SSE2-NEXT:    movdqa %xmm6, %xmm4
3949; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3950; SSE2-NEXT:    pand %xmm4, %xmm2
3951; SSE2-NEXT:    pandn %xmm6, %xmm4
3952; SSE2-NEXT:    por %xmm4, %xmm2
3953; SSE2-NEXT:    movdqa %xmm7, %xmm4
3954; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
3955; SSE2-NEXT:    pand %xmm4, %xmm3
3956; SSE2-NEXT:    pandn %xmm7, %xmm4
3957; SSE2-NEXT:    por %xmm4, %xmm3
3958; SSE2-NEXT:    retq
3959;
3960; SSE4-LABEL: test113:
3961; SSE4:       # %bb.0: # %entry
3962; SSE4-NEXT:    pminsd %xmm4, %xmm0
3963; SSE4-NEXT:    pminsd %xmm5, %xmm1
3964; SSE4-NEXT:    pminsd %xmm6, %xmm2
3965; SSE4-NEXT:    pminsd %xmm7, %xmm3
3966; SSE4-NEXT:    retq
3967;
3968; AVX1-LABEL: test113:
3969; AVX1:       # %bb.0: # %entry
3970; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3971; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3972; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
3973; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
3974; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3975; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3976; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3977; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
3978; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
3979; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3980; AVX1-NEXT:    retq
3981;
3982; AVX2-LABEL: test113:
3983; AVX2:       # %bb.0: # %entry
3984; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
3985; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
3986; AVX2-NEXT:    retq
3987;
3988; AVX512-LABEL: test113:
3989; AVX512:       # %bb.0: # %entry
3990; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
3991; AVX512-NEXT:    retq
3992entry:
3993  %cmp = icmp slt <16 x i32> %a, %b
3994  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
3995  ret <16 x i32> %sel
3996}
3997
3998define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
3999; SSE2-LABEL: test114:
4000; SSE2:       # %bb.0: # %entry
4001; SSE2-NEXT:    movdqa %xmm4, %xmm8
4002; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
4003; SSE2-NEXT:    pand %xmm8, %xmm0
4004; SSE2-NEXT:    pandn %xmm4, %xmm8
4005; SSE2-NEXT:    por %xmm8, %xmm0
4006; SSE2-NEXT:    movdqa %xmm5, %xmm4
4007; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
4008; SSE2-NEXT:    pand %xmm4, %xmm1
4009; SSE2-NEXT:    pandn %xmm5, %xmm4
4010; SSE2-NEXT:    por %xmm4, %xmm1
4011; SSE2-NEXT:    movdqa %xmm6, %xmm4
4012; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
4013; SSE2-NEXT:    pand %xmm4, %xmm2
4014; SSE2-NEXT:    pandn %xmm6, %xmm4
4015; SSE2-NEXT:    por %xmm4, %xmm2
4016; SSE2-NEXT:    movdqa %xmm7, %xmm4
4017; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
4018; SSE2-NEXT:    pand %xmm4, %xmm3
4019; SSE2-NEXT:    pandn %xmm7, %xmm4
4020; SSE2-NEXT:    por %xmm4, %xmm3
4021; SSE2-NEXT:    retq
4022;
4023; SSE4-LABEL: test114:
4024; SSE4:       # %bb.0: # %entry
4025; SSE4-NEXT:    pminsd %xmm4, %xmm0
4026; SSE4-NEXT:    pminsd %xmm5, %xmm1
4027; SSE4-NEXT:    pminsd %xmm6, %xmm2
4028; SSE4-NEXT:    pminsd %xmm7, %xmm3
4029; SSE4-NEXT:    retq
4030;
4031; AVX1-LABEL: test114:
4032; AVX1:       # %bb.0: # %entry
4033; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4034; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4035; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4036; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4037; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4038; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4039; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4040; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4041; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4042; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4043; AVX1-NEXT:    retq
4044;
4045; AVX2-LABEL: test114:
4046; AVX2:       # %bb.0: # %entry
4047; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4048; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4049; AVX2-NEXT:    retq
4050;
4051; AVX512-LABEL: test114:
4052; AVX512:       # %bb.0: # %entry
4053; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4054; AVX512-NEXT:    retq
4055entry:
4056  %cmp = icmp sle <16 x i32> %a, %b
4057  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4058  ret <16 x i32> %sel
4059}
4060
4061define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4062; SSE2-LABEL: test115:
4063; SSE2:       # %bb.0: # %entry
4064; SSE2-NEXT:    movdqa %xmm0, %xmm8
4065; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4066; SSE2-NEXT:    pand %xmm8, %xmm0
4067; SSE2-NEXT:    pandn %xmm4, %xmm8
4068; SSE2-NEXT:    por %xmm8, %xmm0
4069; SSE2-NEXT:    movdqa %xmm1, %xmm4
4070; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4071; SSE2-NEXT:    pand %xmm4, %xmm1
4072; SSE2-NEXT:    pandn %xmm5, %xmm4
4073; SSE2-NEXT:    por %xmm4, %xmm1
4074; SSE2-NEXT:    movdqa %xmm2, %xmm4
4075; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
4076; SSE2-NEXT:    pand %xmm4, %xmm2
4077; SSE2-NEXT:    pandn %xmm6, %xmm4
4078; SSE2-NEXT:    por %xmm4, %xmm2
4079; SSE2-NEXT:    movdqa %xmm3, %xmm4
4080; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
4081; SSE2-NEXT:    pand %xmm4, %xmm3
4082; SSE2-NEXT:    pandn %xmm7, %xmm4
4083; SSE2-NEXT:    por %xmm4, %xmm3
4084; SSE2-NEXT:    retq
4085;
4086; SSE4-LABEL: test115:
4087; SSE4:       # %bb.0: # %entry
4088; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4089; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4090; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4091; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4092; SSE4-NEXT:    retq
4093;
4094; AVX1-LABEL: test115:
4095; AVX1:       # %bb.0: # %entry
4096; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4097; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4098; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4099; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4100; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4101; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4102; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4103; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4104; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4105; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4106; AVX1-NEXT:    retq
4107;
4108; AVX2-LABEL: test115:
4109; AVX2:       # %bb.0: # %entry
4110; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4111; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4112; AVX2-NEXT:    retq
4113;
4114; AVX512-LABEL: test115:
4115; AVX512:       # %bb.0: # %entry
4116; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4117; AVX512-NEXT:    retq
4118entry:
4119  %cmp = icmp sgt <16 x i32> %a, %b
4120  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4121  ret <16 x i32> %sel
4122}
4123
4124define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4125; SSE2-LABEL: test116:
4126; SSE2:       # %bb.0: # %entry
4127; SSE2-NEXT:    movdqa %xmm0, %xmm8
4128; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4129; SSE2-NEXT:    pand %xmm8, %xmm0
4130; SSE2-NEXT:    pandn %xmm4, %xmm8
4131; SSE2-NEXT:    por %xmm8, %xmm0
4132; SSE2-NEXT:    movdqa %xmm1, %xmm4
4133; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4134; SSE2-NEXT:    pand %xmm4, %xmm1
4135; SSE2-NEXT:    pandn %xmm5, %xmm4
4136; SSE2-NEXT:    por %xmm4, %xmm1
4137; SSE2-NEXT:    movdqa %xmm2, %xmm4
4138; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
4139; SSE2-NEXT:    pand %xmm4, %xmm2
4140; SSE2-NEXT:    pandn %xmm6, %xmm4
4141; SSE2-NEXT:    por %xmm4, %xmm2
4142; SSE2-NEXT:    movdqa %xmm3, %xmm4
4143; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
4144; SSE2-NEXT:    pand %xmm4, %xmm3
4145; SSE2-NEXT:    pandn %xmm7, %xmm4
4146; SSE2-NEXT:    por %xmm4, %xmm3
4147; SSE2-NEXT:    retq
4148;
4149; SSE4-LABEL: test116:
4150; SSE4:       # %bb.0: # %entry
4151; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4152; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4153; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4154; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4155; SSE4-NEXT:    retq
4156;
4157; AVX1-LABEL: test116:
4158; AVX1:       # %bb.0: # %entry
4159; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4160; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4161; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4162; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4163; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4164; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4165; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4166; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4167; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4168; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4169; AVX1-NEXT:    retq
4170;
4171; AVX2-LABEL: test116:
4172; AVX2:       # %bb.0: # %entry
4173; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4174; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4175; AVX2-NEXT:    retq
4176;
4177; AVX512-LABEL: test116:
4178; AVX512:       # %bb.0: # %entry
4179; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4180; AVX512-NEXT:    retq
4181entry:
4182  %cmp = icmp sge <16 x i32> %a, %b
4183  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4184  ret <16 x i32> %sel
4185}
4186
4187define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4188; SSE2-LABEL: test117:
4189; SSE2:       # %bb.0: # %entry
4190; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4191; SSE2-NEXT:    movdqa %xmm0, %xmm9
4192; SSE2-NEXT:    pxor %xmm8, %xmm9
4193; SSE2-NEXT:    movdqa %xmm4, %xmm10
4194; SSE2-NEXT:    pxor %xmm8, %xmm10
4195; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4196; SSE2-NEXT:    pand %xmm10, %xmm0
4197; SSE2-NEXT:    pandn %xmm4, %xmm10
4198; SSE2-NEXT:    por %xmm10, %xmm0
4199; SSE2-NEXT:    movdqa %xmm1, %xmm4
4200; SSE2-NEXT:    pxor %xmm8, %xmm4
4201; SSE2-NEXT:    movdqa %xmm5, %xmm9
4202; SSE2-NEXT:    pxor %xmm8, %xmm9
4203; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4204; SSE2-NEXT:    pand %xmm9, %xmm1
4205; SSE2-NEXT:    pandn %xmm5, %xmm9
4206; SSE2-NEXT:    por %xmm9, %xmm1
4207; SSE2-NEXT:    movdqa %xmm2, %xmm4
4208; SSE2-NEXT:    pxor %xmm8, %xmm4
4209; SSE2-NEXT:    movdqa %xmm6, %xmm5
4210; SSE2-NEXT:    pxor %xmm8, %xmm5
4211; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4212; SSE2-NEXT:    pand %xmm5, %xmm2
4213; SSE2-NEXT:    pandn %xmm6, %xmm5
4214; SSE2-NEXT:    por %xmm5, %xmm2
4215; SSE2-NEXT:    movdqa %xmm3, %xmm4
4216; SSE2-NEXT:    pxor %xmm8, %xmm4
4217; SSE2-NEXT:    pxor %xmm7, %xmm8
4218; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4219; SSE2-NEXT:    pand %xmm8, %xmm3
4220; SSE2-NEXT:    pandn %xmm7, %xmm8
4221; SSE2-NEXT:    por %xmm8, %xmm3
4222; SSE2-NEXT:    retq
4223;
4224; SSE4-LABEL: test117:
4225; SSE4:       # %bb.0: # %entry
4226; SSE4-NEXT:    pminud %xmm4, %xmm0
4227; SSE4-NEXT:    pminud %xmm5, %xmm1
4228; SSE4-NEXT:    pminud %xmm6, %xmm2
4229; SSE4-NEXT:    pminud %xmm7, %xmm3
4230; SSE4-NEXT:    retq
4231;
4232; AVX1-LABEL: test117:
4233; AVX1:       # %bb.0: # %entry
4234; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4235; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4236; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4237; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4238; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4239; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4240; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4241; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4242; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4243; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4244; AVX1-NEXT:    retq
4245;
4246; AVX2-LABEL: test117:
4247; AVX2:       # %bb.0: # %entry
4248; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4249; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4250; AVX2-NEXT:    retq
4251;
4252; AVX512-LABEL: test117:
4253; AVX512:       # %bb.0: # %entry
4254; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4255; AVX512-NEXT:    retq
4256entry:
4257  %cmp = icmp ult <16 x i32> %a, %b
4258  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4259  ret <16 x i32> %sel
4260}
4261
4262define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4263; SSE2-LABEL: test118:
4264; SSE2:       # %bb.0: # %entry
4265; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4266; SSE2-NEXT:    movdqa %xmm0, %xmm9
4267; SSE2-NEXT:    pxor %xmm8, %xmm9
4268; SSE2-NEXT:    movdqa %xmm4, %xmm10
4269; SSE2-NEXT:    pxor %xmm8, %xmm10
4270; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4271; SSE2-NEXT:    pand %xmm10, %xmm0
4272; SSE2-NEXT:    pandn %xmm4, %xmm10
4273; SSE2-NEXT:    por %xmm10, %xmm0
4274; SSE2-NEXT:    movdqa %xmm1, %xmm4
4275; SSE2-NEXT:    pxor %xmm8, %xmm4
4276; SSE2-NEXT:    movdqa %xmm5, %xmm9
4277; SSE2-NEXT:    pxor %xmm8, %xmm9
4278; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4279; SSE2-NEXT:    pand %xmm9, %xmm1
4280; SSE2-NEXT:    pandn %xmm5, %xmm9
4281; SSE2-NEXT:    por %xmm9, %xmm1
4282; SSE2-NEXT:    movdqa %xmm2, %xmm4
4283; SSE2-NEXT:    pxor %xmm8, %xmm4
4284; SSE2-NEXT:    movdqa %xmm6, %xmm5
4285; SSE2-NEXT:    pxor %xmm8, %xmm5
4286; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4287; SSE2-NEXT:    pand %xmm5, %xmm2
4288; SSE2-NEXT:    pandn %xmm6, %xmm5
4289; SSE2-NEXT:    por %xmm5, %xmm2
4290; SSE2-NEXT:    movdqa %xmm3, %xmm4
4291; SSE2-NEXT:    pxor %xmm8, %xmm4
4292; SSE2-NEXT:    pxor %xmm7, %xmm8
4293; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4294; SSE2-NEXT:    pand %xmm8, %xmm3
4295; SSE2-NEXT:    pandn %xmm7, %xmm8
4296; SSE2-NEXT:    por %xmm8, %xmm3
4297; SSE2-NEXT:    retq
4298;
4299; SSE4-LABEL: test118:
4300; SSE4:       # %bb.0: # %entry
4301; SSE4-NEXT:    pminud %xmm4, %xmm0
4302; SSE4-NEXT:    pminud %xmm5, %xmm1
4303; SSE4-NEXT:    pminud %xmm6, %xmm2
4304; SSE4-NEXT:    pminud %xmm7, %xmm3
4305; SSE4-NEXT:    retq
4306;
4307; AVX1-LABEL: test118:
4308; AVX1:       # %bb.0: # %entry
4309; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4310; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4311; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4312; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4313; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4314; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4315; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4316; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4317; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4318; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4319; AVX1-NEXT:    retq
4320;
4321; AVX2-LABEL: test118:
4322; AVX2:       # %bb.0: # %entry
4323; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4324; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4325; AVX2-NEXT:    retq
4326;
4327; AVX512-LABEL: test118:
4328; AVX512:       # %bb.0: # %entry
4329; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4330; AVX512-NEXT:    retq
4331entry:
4332  %cmp = icmp ule <16 x i32> %a, %b
4333  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4334  ret <16 x i32> %sel
4335}
4336
4337define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4338; SSE2-LABEL: test119:
4339; SSE2:       # %bb.0: # %entry
4340; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4341; SSE2-NEXT:    movdqa %xmm4, %xmm9
4342; SSE2-NEXT:    pxor %xmm8, %xmm9
4343; SSE2-NEXT:    movdqa %xmm0, %xmm10
4344; SSE2-NEXT:    pxor %xmm8, %xmm10
4345; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4346; SSE2-NEXT:    pand %xmm10, %xmm0
4347; SSE2-NEXT:    pandn %xmm4, %xmm10
4348; SSE2-NEXT:    por %xmm10, %xmm0
4349; SSE2-NEXT:    movdqa %xmm5, %xmm4
4350; SSE2-NEXT:    pxor %xmm8, %xmm4
4351; SSE2-NEXT:    movdqa %xmm1, %xmm9
4352; SSE2-NEXT:    pxor %xmm8, %xmm9
4353; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4354; SSE2-NEXT:    pand %xmm9, %xmm1
4355; SSE2-NEXT:    pandn %xmm5, %xmm9
4356; SSE2-NEXT:    por %xmm9, %xmm1
4357; SSE2-NEXT:    movdqa %xmm6, %xmm4
4358; SSE2-NEXT:    pxor %xmm8, %xmm4
4359; SSE2-NEXT:    movdqa %xmm2, %xmm5
4360; SSE2-NEXT:    pxor %xmm8, %xmm5
4361; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4362; SSE2-NEXT:    pand %xmm5, %xmm2
4363; SSE2-NEXT:    pandn %xmm6, %xmm5
4364; SSE2-NEXT:    por %xmm5, %xmm2
4365; SSE2-NEXT:    movdqa %xmm7, %xmm4
4366; SSE2-NEXT:    pxor %xmm8, %xmm4
4367; SSE2-NEXT:    pxor %xmm3, %xmm8
4368; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4369; SSE2-NEXT:    pand %xmm8, %xmm3
4370; SSE2-NEXT:    pandn %xmm7, %xmm8
4371; SSE2-NEXT:    por %xmm8, %xmm3
4372; SSE2-NEXT:    retq
4373;
4374; SSE4-LABEL: test119:
4375; SSE4:       # %bb.0: # %entry
4376; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4377; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4378; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4379; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4380; SSE4-NEXT:    retq
4381;
4382; AVX1-LABEL: test119:
4383; AVX1:       # %bb.0: # %entry
4384; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4385; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4386; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4387; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4388; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4389; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4390; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4391; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4392; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4393; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4394; AVX1-NEXT:    retq
4395;
4396; AVX2-LABEL: test119:
4397; AVX2:       # %bb.0: # %entry
4398; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4399; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4400; AVX2-NEXT:    retq
4401;
4402; AVX512-LABEL: test119:
4403; AVX512:       # %bb.0: # %entry
4404; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4405; AVX512-NEXT:    retq
4406entry:
4407  %cmp = icmp ugt <16 x i32> %a, %b
4408  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4409  ret <16 x i32> %sel
4410}
4411
4412define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4413; SSE2-LABEL: test120:
4414; SSE2:       # %bb.0: # %entry
4415; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4416; SSE2-NEXT:    movdqa %xmm4, %xmm9
4417; SSE2-NEXT:    pxor %xmm8, %xmm9
4418; SSE2-NEXT:    movdqa %xmm0, %xmm10
4419; SSE2-NEXT:    pxor %xmm8, %xmm10
4420; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4421; SSE2-NEXT:    pand %xmm10, %xmm0
4422; SSE2-NEXT:    pandn %xmm4, %xmm10
4423; SSE2-NEXT:    por %xmm10, %xmm0
4424; SSE2-NEXT:    movdqa %xmm5, %xmm4
4425; SSE2-NEXT:    pxor %xmm8, %xmm4
4426; SSE2-NEXT:    movdqa %xmm1, %xmm9
4427; SSE2-NEXT:    pxor %xmm8, %xmm9
4428; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4429; SSE2-NEXT:    pand %xmm9, %xmm1
4430; SSE2-NEXT:    pandn %xmm5, %xmm9
4431; SSE2-NEXT:    por %xmm9, %xmm1
4432; SSE2-NEXT:    movdqa %xmm6, %xmm4
4433; SSE2-NEXT:    pxor %xmm8, %xmm4
4434; SSE2-NEXT:    movdqa %xmm2, %xmm5
4435; SSE2-NEXT:    pxor %xmm8, %xmm5
4436; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4437; SSE2-NEXT:    pand %xmm5, %xmm2
4438; SSE2-NEXT:    pandn %xmm6, %xmm5
4439; SSE2-NEXT:    por %xmm5, %xmm2
4440; SSE2-NEXT:    movdqa %xmm7, %xmm4
4441; SSE2-NEXT:    pxor %xmm8, %xmm4
4442; SSE2-NEXT:    pxor %xmm3, %xmm8
4443; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4444; SSE2-NEXT:    pand %xmm8, %xmm3
4445; SSE2-NEXT:    pandn %xmm7, %xmm8
4446; SSE2-NEXT:    por %xmm8, %xmm3
4447; SSE2-NEXT:    retq
4448;
4449; SSE4-LABEL: test120:
4450; SSE4:       # %bb.0: # %entry
4451; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4452; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4453; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4454; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4455; SSE4-NEXT:    retq
4456;
4457; AVX1-LABEL: test120:
4458; AVX1:       # %bb.0: # %entry
4459; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4460; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4461; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4462; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4463; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4464; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4465; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4466; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4467; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4468; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4469; AVX1-NEXT:    retq
4470;
4471; AVX2-LABEL: test120:
4472; AVX2:       # %bb.0: # %entry
4473; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4474; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4475; AVX2-NEXT:    retq
4476;
4477; AVX512-LABEL: test120:
4478; AVX512:       # %bb.0: # %entry
4479; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4480; AVX512-NEXT:    retq
4481entry:
4482  %cmp = icmp uge <16 x i32> %a, %b
4483  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4484  ret <16 x i32> %sel
4485}
4486
4487define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4488; SSE2-LABEL: test121:
4489; SSE2:       # %bb.0: # %entry
4490; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4491; SSE2-NEXT:    movdqa %xmm0, %xmm9
4492; SSE2-NEXT:    pxor %xmm8, %xmm9
4493; SSE2-NEXT:    movdqa %xmm4, %xmm10
4494; SSE2-NEXT:    pxor %xmm8, %xmm10
4495; SSE2-NEXT:    movdqa %xmm10, %xmm11
4496; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4497; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4498; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4499; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4500; SSE2-NEXT:    pand %xmm12, %xmm9
4501; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4502; SSE2-NEXT:    por %xmm9, %xmm10
4503; SSE2-NEXT:    pand %xmm10, %xmm0
4504; SSE2-NEXT:    pandn %xmm4, %xmm10
4505; SSE2-NEXT:    por %xmm10, %xmm0
4506; SSE2-NEXT:    movdqa %xmm1, %xmm4
4507; SSE2-NEXT:    pxor %xmm8, %xmm4
4508; SSE2-NEXT:    movdqa %xmm5, %xmm9
4509; SSE2-NEXT:    pxor %xmm8, %xmm9
4510; SSE2-NEXT:    movdqa %xmm9, %xmm10
4511; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4512; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4513; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4514; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4515; SSE2-NEXT:    pand %xmm11, %xmm4
4516; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4517; SSE2-NEXT:    por %xmm4, %xmm9
4518; SSE2-NEXT:    pand %xmm9, %xmm1
4519; SSE2-NEXT:    pandn %xmm5, %xmm9
4520; SSE2-NEXT:    por %xmm9, %xmm1
4521; SSE2-NEXT:    movdqa %xmm2, %xmm4
4522; SSE2-NEXT:    pxor %xmm8, %xmm4
4523; SSE2-NEXT:    movdqa %xmm6, %xmm5
4524; SSE2-NEXT:    pxor %xmm8, %xmm5
4525; SSE2-NEXT:    movdqa %xmm5, %xmm9
4526; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4527; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4528; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4529; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4530; SSE2-NEXT:    pand %xmm10, %xmm4
4531; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4532; SSE2-NEXT:    por %xmm4, %xmm5
4533; SSE2-NEXT:    pand %xmm5, %xmm2
4534; SSE2-NEXT:    pandn %xmm6, %xmm5
4535; SSE2-NEXT:    por %xmm5, %xmm2
4536; SSE2-NEXT:    movdqa %xmm3, %xmm4
4537; SSE2-NEXT:    pxor %xmm8, %xmm4
4538; SSE2-NEXT:    pxor %xmm7, %xmm8
4539; SSE2-NEXT:    movdqa %xmm8, %xmm5
4540; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4541; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4542; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4543; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4544; SSE2-NEXT:    pand %xmm6, %xmm4
4545; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4546; SSE2-NEXT:    por %xmm4, %xmm5
4547; SSE2-NEXT:    pand %xmm5, %xmm3
4548; SSE2-NEXT:    pandn %xmm7, %xmm5
4549; SSE2-NEXT:    por %xmm5, %xmm3
4550; SSE2-NEXT:    retq
4551;
4552; SSE4-LABEL: test121:
4553; SSE4:       # %bb.0: # %entry
4554; SSE4-NEXT:    movdqa %xmm0, %xmm8
4555; SSE4-NEXT:    movdqa %xmm4, %xmm0
4556; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4557; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4558; SSE4-NEXT:    movdqa %xmm5, %xmm0
4559; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4560; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4561; SSE4-NEXT:    movdqa %xmm6, %xmm0
4562; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4563; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4564; SSE4-NEXT:    movdqa %xmm7, %xmm0
4565; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4566; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4567; SSE4-NEXT:    movapd %xmm4, %xmm0
4568; SSE4-NEXT:    movapd %xmm5, %xmm1
4569; SSE4-NEXT:    movapd %xmm6, %xmm2
4570; SSE4-NEXT:    movapd %xmm7, %xmm3
4571; SSE4-NEXT:    retq
4572;
4573; AVX1-LABEL: test121:
4574; AVX1:       # %bb.0: # %entry
4575; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4576; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4577; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4578; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4579; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4580; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4581; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4582; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4583; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4584; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4585; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4586; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4587; AVX1-NEXT:    retq
4588;
4589; AVX2-LABEL: test121:
4590; AVX2:       # %bb.0: # %entry
4591; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4592; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4593; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4594; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4595; AVX2-NEXT:    retq
4596;
4597; AVX512-LABEL: test121:
4598; AVX512:       # %bb.0: # %entry
4599; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4600; AVX512-NEXT:    retq
4601entry:
4602  %cmp = icmp slt <8 x i64> %a, %b
4603  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4604  ret <8 x i64> %sel
4605}
4606
4607define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4608; SSE2-LABEL: test122:
4609; SSE2:       # %bb.0: # %entry
4610; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4611; SSE2-NEXT:    movdqa %xmm0, %xmm9
4612; SSE2-NEXT:    pxor %xmm8, %xmm9
4613; SSE2-NEXT:    movdqa %xmm4, %xmm10
4614; SSE2-NEXT:    pxor %xmm8, %xmm10
4615; SSE2-NEXT:    movdqa %xmm10, %xmm11
4616; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4617; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4618; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4619; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4620; SSE2-NEXT:    pand %xmm12, %xmm9
4621; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4622; SSE2-NEXT:    por %xmm9, %xmm10
4623; SSE2-NEXT:    pand %xmm10, %xmm0
4624; SSE2-NEXT:    pandn %xmm4, %xmm10
4625; SSE2-NEXT:    por %xmm10, %xmm0
4626; SSE2-NEXT:    movdqa %xmm1, %xmm4
4627; SSE2-NEXT:    pxor %xmm8, %xmm4
4628; SSE2-NEXT:    movdqa %xmm5, %xmm9
4629; SSE2-NEXT:    pxor %xmm8, %xmm9
4630; SSE2-NEXT:    movdqa %xmm9, %xmm10
4631; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4632; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4633; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4634; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4635; SSE2-NEXT:    pand %xmm11, %xmm4
4636; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4637; SSE2-NEXT:    por %xmm4, %xmm9
4638; SSE2-NEXT:    pand %xmm9, %xmm1
4639; SSE2-NEXT:    pandn %xmm5, %xmm9
4640; SSE2-NEXT:    por %xmm9, %xmm1
4641; SSE2-NEXT:    movdqa %xmm2, %xmm4
4642; SSE2-NEXT:    pxor %xmm8, %xmm4
4643; SSE2-NEXT:    movdqa %xmm6, %xmm5
4644; SSE2-NEXT:    pxor %xmm8, %xmm5
4645; SSE2-NEXT:    movdqa %xmm5, %xmm9
4646; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4647; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4648; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4649; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4650; SSE2-NEXT:    pand %xmm10, %xmm4
4651; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4652; SSE2-NEXT:    por %xmm4, %xmm5
4653; SSE2-NEXT:    pand %xmm5, %xmm2
4654; SSE2-NEXT:    pandn %xmm6, %xmm5
4655; SSE2-NEXT:    por %xmm5, %xmm2
4656; SSE2-NEXT:    movdqa %xmm3, %xmm4
4657; SSE2-NEXT:    pxor %xmm8, %xmm4
4658; SSE2-NEXT:    pxor %xmm7, %xmm8
4659; SSE2-NEXT:    movdqa %xmm8, %xmm5
4660; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4661; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4662; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4663; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4664; SSE2-NEXT:    pand %xmm6, %xmm4
4665; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4666; SSE2-NEXT:    por %xmm4, %xmm5
4667; SSE2-NEXT:    pand %xmm5, %xmm3
4668; SSE2-NEXT:    pandn %xmm7, %xmm5
4669; SSE2-NEXT:    por %xmm5, %xmm3
4670; SSE2-NEXT:    retq
4671;
4672; SSE4-LABEL: test122:
4673; SSE4:       # %bb.0: # %entry
4674; SSE4-NEXT:    movdqa %xmm0, %xmm8
4675; SSE4-NEXT:    movdqa %xmm4, %xmm0
4676; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4677; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4678; SSE4-NEXT:    movdqa %xmm5, %xmm0
4679; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4680; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4681; SSE4-NEXT:    movdqa %xmm6, %xmm0
4682; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4683; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4684; SSE4-NEXT:    movdqa %xmm7, %xmm0
4685; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4686; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4687; SSE4-NEXT:    movapd %xmm4, %xmm0
4688; SSE4-NEXT:    movapd %xmm5, %xmm1
4689; SSE4-NEXT:    movapd %xmm6, %xmm2
4690; SSE4-NEXT:    movapd %xmm7, %xmm3
4691; SSE4-NEXT:    retq
4692;
4693; AVX1-LABEL: test122:
4694; AVX1:       # %bb.0: # %entry
4695; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4696; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4697; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4698; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4699; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4700; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4701; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4702; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4703; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4704; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4705; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4706; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4707; AVX1-NEXT:    retq
4708;
4709; AVX2-LABEL: test122:
4710; AVX2:       # %bb.0: # %entry
4711; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4712; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4713; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4714; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4715; AVX2-NEXT:    retq
4716;
4717; AVX512-LABEL: test122:
4718; AVX512:       # %bb.0: # %entry
4719; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4720; AVX512-NEXT:    retq
4721entry:
4722  %cmp = icmp sle <8 x i64> %a, %b
4723  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4724  ret <8 x i64> %sel
4725}
4726
4727define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
4728; SSE2-LABEL: test123:
4729; SSE2:       # %bb.0: # %entry
4730; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4731; SSE2-NEXT:    movdqa %xmm4, %xmm9
4732; SSE2-NEXT:    pxor %xmm8, %xmm9
4733; SSE2-NEXT:    movdqa %xmm0, %xmm10
4734; SSE2-NEXT:    pxor %xmm8, %xmm10
4735; SSE2-NEXT:    movdqa %xmm10, %xmm11
4736; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4737; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4738; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4739; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4740; SSE2-NEXT:    pand %xmm12, %xmm9
4741; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4742; SSE2-NEXT:    por %xmm9, %xmm10
4743; SSE2-NEXT:    pand %xmm10, %xmm0
4744; SSE2-NEXT:    pandn %xmm4, %xmm10
4745; SSE2-NEXT:    por %xmm10, %xmm0
4746; SSE2-NEXT:    movdqa %xmm5, %xmm4
4747; SSE2-NEXT:    pxor %xmm8, %xmm4
4748; SSE2-NEXT:    movdqa %xmm1, %xmm9
4749; SSE2-NEXT:    pxor %xmm8, %xmm9
4750; SSE2-NEXT:    movdqa %xmm9, %xmm10
4751; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4752; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4753; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4754; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4755; SSE2-NEXT:    pand %xmm11, %xmm4
4756; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4757; SSE2-NEXT:    por %xmm4, %xmm9
4758; SSE2-NEXT:    pand %xmm9, %xmm1
4759; SSE2-NEXT:    pandn %xmm5, %xmm9
4760; SSE2-NEXT:    por %xmm9, %xmm1
4761; SSE2-NEXT:    movdqa %xmm6, %xmm4
4762; SSE2-NEXT:    pxor %xmm8, %xmm4
4763; SSE2-NEXT:    movdqa %xmm2, %xmm5
4764; SSE2-NEXT:    pxor %xmm8, %xmm5
4765; SSE2-NEXT:    movdqa %xmm5, %xmm9
4766; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4767; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4768; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4769; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4770; SSE2-NEXT:    pand %xmm10, %xmm4
4771; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4772; SSE2-NEXT:    por %xmm4, %xmm5
4773; SSE2-NEXT:    pand %xmm5, %xmm2
4774; SSE2-NEXT:    pandn %xmm6, %xmm5
4775; SSE2-NEXT:    por %xmm5, %xmm2
4776; SSE2-NEXT:    movdqa %xmm7, %xmm4
4777; SSE2-NEXT:    pxor %xmm8, %xmm4
4778; SSE2-NEXT:    pxor %xmm3, %xmm8
4779; SSE2-NEXT:    movdqa %xmm8, %xmm5
4780; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4781; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4782; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4783; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4784; SSE2-NEXT:    pand %xmm6, %xmm4
4785; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4786; SSE2-NEXT:    por %xmm4, %xmm5
4787; SSE2-NEXT:    pand %xmm5, %xmm3
4788; SSE2-NEXT:    pandn %xmm7, %xmm5
4789; SSE2-NEXT:    por %xmm5, %xmm3
4790; SSE2-NEXT:    retq
4791;
4792; SSE4-LABEL: test123:
4793; SSE4:       # %bb.0: # %entry
4794; SSE4-NEXT:    movdqa %xmm0, %xmm8
4795; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4796; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4797; SSE4-NEXT:    movdqa %xmm1, %xmm0
4798; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4799; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4800; SSE4-NEXT:    movdqa %xmm2, %xmm0
4801; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4802; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4803; SSE4-NEXT:    movdqa %xmm3, %xmm0
4804; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4805; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4806; SSE4-NEXT:    movapd %xmm4, %xmm0
4807; SSE4-NEXT:    movapd %xmm5, %xmm1
4808; SSE4-NEXT:    movapd %xmm6, %xmm2
4809; SSE4-NEXT:    movapd %xmm7, %xmm3
4810; SSE4-NEXT:    retq
4811;
4812; AVX1-LABEL: test123:
4813; AVX1:       # %bb.0: # %entry
4814; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4815; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4816; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4817; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4818; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4819; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4820; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4821; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4822; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4823; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4824; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4825; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4826; AVX1-NEXT:    retq
4827;
4828; AVX2-LABEL: test123:
4829; AVX2:       # %bb.0: # %entry
4830; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4831; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4832; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4833; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4834; AVX2-NEXT:    retq
4835;
4836; AVX512-LABEL: test123:
4837; AVX512:       # %bb.0: # %entry
4838; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4839; AVX512-NEXT:    retq
4840entry:
4841  %cmp = icmp sgt <8 x i64> %a, %b
4842  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4843  ret <8 x i64> %sel
4844}
4845
4846define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
4847; SSE2-LABEL: test124:
4848; SSE2:       # %bb.0: # %entry
4849; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4850; SSE2-NEXT:    movdqa %xmm4, %xmm9
4851; SSE2-NEXT:    pxor %xmm8, %xmm9
4852; SSE2-NEXT:    movdqa %xmm0, %xmm10
4853; SSE2-NEXT:    pxor %xmm8, %xmm10
4854; SSE2-NEXT:    movdqa %xmm10, %xmm11
4855; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4856; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4857; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4858; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4859; SSE2-NEXT:    pand %xmm12, %xmm9
4860; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4861; SSE2-NEXT:    por %xmm9, %xmm10
4862; SSE2-NEXT:    pand %xmm10, %xmm0
4863; SSE2-NEXT:    pandn %xmm4, %xmm10
4864; SSE2-NEXT:    por %xmm10, %xmm0
4865; SSE2-NEXT:    movdqa %xmm5, %xmm4
4866; SSE2-NEXT:    pxor %xmm8, %xmm4
4867; SSE2-NEXT:    movdqa %xmm1, %xmm9
4868; SSE2-NEXT:    pxor %xmm8, %xmm9
4869; SSE2-NEXT:    movdqa %xmm9, %xmm10
4870; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4871; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4872; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4873; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4874; SSE2-NEXT:    pand %xmm11, %xmm4
4875; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4876; SSE2-NEXT:    por %xmm4, %xmm9
4877; SSE2-NEXT:    pand %xmm9, %xmm1
4878; SSE2-NEXT:    pandn %xmm5, %xmm9
4879; SSE2-NEXT:    por %xmm9, %xmm1
4880; SSE2-NEXT:    movdqa %xmm6, %xmm4
4881; SSE2-NEXT:    pxor %xmm8, %xmm4
4882; SSE2-NEXT:    movdqa %xmm2, %xmm5
4883; SSE2-NEXT:    pxor %xmm8, %xmm5
4884; SSE2-NEXT:    movdqa %xmm5, %xmm9
4885; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4886; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4887; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4888; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4889; SSE2-NEXT:    pand %xmm10, %xmm4
4890; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4891; SSE2-NEXT:    por %xmm4, %xmm5
4892; SSE2-NEXT:    pand %xmm5, %xmm2
4893; SSE2-NEXT:    pandn %xmm6, %xmm5
4894; SSE2-NEXT:    por %xmm5, %xmm2
4895; SSE2-NEXT:    movdqa %xmm7, %xmm4
4896; SSE2-NEXT:    pxor %xmm8, %xmm4
4897; SSE2-NEXT:    pxor %xmm3, %xmm8
4898; SSE2-NEXT:    movdqa %xmm8, %xmm5
4899; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4900; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4901; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4902; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4903; SSE2-NEXT:    pand %xmm6, %xmm4
4904; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4905; SSE2-NEXT:    por %xmm4, %xmm5
4906; SSE2-NEXT:    pand %xmm5, %xmm3
4907; SSE2-NEXT:    pandn %xmm7, %xmm5
4908; SSE2-NEXT:    por %xmm5, %xmm3
4909; SSE2-NEXT:    retq
4910;
4911; SSE4-LABEL: test124:
4912; SSE4:       # %bb.0: # %entry
4913; SSE4-NEXT:    movdqa %xmm0, %xmm8
4914; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4915; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4916; SSE4-NEXT:    movdqa %xmm1, %xmm0
4917; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4918; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4919; SSE4-NEXT:    movdqa %xmm2, %xmm0
4920; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4921; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4922; SSE4-NEXT:    movdqa %xmm3, %xmm0
4923; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4924; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4925; SSE4-NEXT:    movapd %xmm4, %xmm0
4926; SSE4-NEXT:    movapd %xmm5, %xmm1
4927; SSE4-NEXT:    movapd %xmm6, %xmm2
4928; SSE4-NEXT:    movapd %xmm7, %xmm3
4929; SSE4-NEXT:    retq
4930;
4931; AVX1-LABEL: test124:
4932; AVX1:       # %bb.0: # %entry
4933; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4934; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4935; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4936; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4937; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4938; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4939; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4940; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4941; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4942; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4943; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4944; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4945; AVX1-NEXT:    retq
4946;
4947; AVX2-LABEL: test124:
4948; AVX2:       # %bb.0: # %entry
4949; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4950; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4951; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4952; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4953; AVX2-NEXT:    retq
4954;
4955; AVX512-LABEL: test124:
4956; AVX512:       # %bb.0: # %entry
4957; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4958; AVX512-NEXT:    retq
4959entry:
4960  %cmp = icmp sge <8 x i64> %a, %b
4961  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4962  ret <8 x i64> %sel
4963}
4964
4965define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
4966; SSE2-LABEL: test125:
4967; SSE2:       # %bb.0: # %entry
4968; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
4969; SSE2-NEXT:    movdqa %xmm0, %xmm9
4970; SSE2-NEXT:    pxor %xmm8, %xmm9
4971; SSE2-NEXT:    movdqa %xmm4, %xmm10
4972; SSE2-NEXT:    pxor %xmm8, %xmm10
4973; SSE2-NEXT:    movdqa %xmm10, %xmm11
4974; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4975; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4976; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4977; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4978; SSE2-NEXT:    pand %xmm12, %xmm9
4979; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4980; SSE2-NEXT:    por %xmm9, %xmm10
4981; SSE2-NEXT:    pand %xmm10, %xmm0
4982; SSE2-NEXT:    pandn %xmm4, %xmm10
4983; SSE2-NEXT:    por %xmm10, %xmm0
4984; SSE2-NEXT:    movdqa %xmm1, %xmm4
4985; SSE2-NEXT:    pxor %xmm8, %xmm4
4986; SSE2-NEXT:    movdqa %xmm5, %xmm9
4987; SSE2-NEXT:    pxor %xmm8, %xmm9
4988; SSE2-NEXT:    movdqa %xmm9, %xmm10
4989; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
4990; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4991; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
4992; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
4993; SSE2-NEXT:    pand %xmm11, %xmm4
4994; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4995; SSE2-NEXT:    por %xmm4, %xmm9
4996; SSE2-NEXT:    pand %xmm9, %xmm1
4997; SSE2-NEXT:    pandn %xmm5, %xmm9
4998; SSE2-NEXT:    por %xmm9, %xmm1
4999; SSE2-NEXT:    movdqa %xmm2, %xmm4
5000; SSE2-NEXT:    pxor %xmm8, %xmm4
5001; SSE2-NEXT:    movdqa %xmm6, %xmm5
5002; SSE2-NEXT:    pxor %xmm8, %xmm5
5003; SSE2-NEXT:    movdqa %xmm5, %xmm9
5004; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5005; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5006; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5007; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5008; SSE2-NEXT:    pand %xmm10, %xmm4
5009; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5010; SSE2-NEXT:    por %xmm4, %xmm5
5011; SSE2-NEXT:    pand %xmm5, %xmm2
5012; SSE2-NEXT:    pandn %xmm6, %xmm5
5013; SSE2-NEXT:    por %xmm5, %xmm2
5014; SSE2-NEXT:    movdqa %xmm3, %xmm4
5015; SSE2-NEXT:    pxor %xmm8, %xmm4
5016; SSE2-NEXT:    pxor %xmm7, %xmm8
5017; SSE2-NEXT:    movdqa %xmm8, %xmm5
5018; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5019; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5020; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5021; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5022; SSE2-NEXT:    pand %xmm6, %xmm4
5023; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5024; SSE2-NEXT:    por %xmm4, %xmm5
5025; SSE2-NEXT:    pand %xmm5, %xmm3
5026; SSE2-NEXT:    pandn %xmm7, %xmm5
5027; SSE2-NEXT:    por %xmm5, %xmm3
5028; SSE2-NEXT:    retq
5029;
5030; SSE4-LABEL: test125:
5031; SSE4:       # %bb.0: # %entry
5032; SSE4-NEXT:    movdqa %xmm0, %xmm9
5033; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5034; SSE4-NEXT:    movdqa %xmm0, %xmm10
5035; SSE4-NEXT:    pxor %xmm8, %xmm10
5036; SSE4-NEXT:    movdqa %xmm4, %xmm0
5037; SSE4-NEXT:    pxor %xmm8, %xmm0
5038; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5039; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5040; SSE4-NEXT:    movdqa %xmm1, %xmm9
5041; SSE4-NEXT:    pxor %xmm8, %xmm9
5042; SSE4-NEXT:    movdqa %xmm5, %xmm0
5043; SSE4-NEXT:    pxor %xmm8, %xmm0
5044; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5045; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5046; SSE4-NEXT:    movdqa %xmm2, %xmm1
5047; SSE4-NEXT:    pxor %xmm8, %xmm1
5048; SSE4-NEXT:    movdqa %xmm6, %xmm0
5049; SSE4-NEXT:    pxor %xmm8, %xmm0
5050; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5051; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5052; SSE4-NEXT:    movdqa %xmm3, %xmm0
5053; SSE4-NEXT:    pxor %xmm8, %xmm0
5054; SSE4-NEXT:    pxor %xmm7, %xmm8
5055; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5056; SSE4-NEXT:    movdqa %xmm8, %xmm0
5057; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5058; SSE4-NEXT:    movapd %xmm4, %xmm0
5059; SSE4-NEXT:    movapd %xmm5, %xmm1
5060; SSE4-NEXT:    movapd %xmm6, %xmm2
5061; SSE4-NEXT:    movapd %xmm7, %xmm3
5062; SSE4-NEXT:    retq
5063;
5064; AVX1-LABEL: test125:
5065; AVX1:       # %bb.0: # %entry
5066; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5067; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5068; AVX1-NEXT:    # xmm5 = mem[0,0]
5069; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5070; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5071; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5072; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5073; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5074; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5075; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5076; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5077; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5078; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5079; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5080; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5081; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5082; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5083; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5084; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5085; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5086; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5087; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5088; AVX1-NEXT:    retq
5089;
5090; AVX2-LABEL: test125:
5091; AVX2:       # %bb.0: # %entry
5092; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5093; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5094; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5095; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5096; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5097; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5098; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5099; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5100; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5101; AVX2-NEXT:    retq
5102;
5103; AVX512-LABEL: test125:
5104; AVX512:       # %bb.0: # %entry
5105; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5106; AVX512-NEXT:    retq
5107entry:
5108  %cmp = icmp ult <8 x i64> %a, %b
5109  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5110  ret <8 x i64> %sel
5111}
5112
5113define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5114; SSE2-LABEL: test126:
5115; SSE2:       # %bb.0: # %entry
5116; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5117; SSE2-NEXT:    movdqa %xmm0, %xmm9
5118; SSE2-NEXT:    pxor %xmm8, %xmm9
5119; SSE2-NEXT:    movdqa %xmm4, %xmm10
5120; SSE2-NEXT:    pxor %xmm8, %xmm10
5121; SSE2-NEXT:    movdqa %xmm10, %xmm11
5122; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5123; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5124; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5125; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5126; SSE2-NEXT:    pand %xmm12, %xmm9
5127; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5128; SSE2-NEXT:    por %xmm9, %xmm10
5129; SSE2-NEXT:    pand %xmm10, %xmm0
5130; SSE2-NEXT:    pandn %xmm4, %xmm10
5131; SSE2-NEXT:    por %xmm10, %xmm0
5132; SSE2-NEXT:    movdqa %xmm1, %xmm4
5133; SSE2-NEXT:    pxor %xmm8, %xmm4
5134; SSE2-NEXT:    movdqa %xmm5, %xmm9
5135; SSE2-NEXT:    pxor %xmm8, %xmm9
5136; SSE2-NEXT:    movdqa %xmm9, %xmm10
5137; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
5138; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5139; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
5140; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
5141; SSE2-NEXT:    pand %xmm11, %xmm4
5142; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5143; SSE2-NEXT:    por %xmm4, %xmm9
5144; SSE2-NEXT:    pand %xmm9, %xmm1
5145; SSE2-NEXT:    pandn %xmm5, %xmm9
5146; SSE2-NEXT:    por %xmm9, %xmm1
5147; SSE2-NEXT:    movdqa %xmm2, %xmm4
5148; SSE2-NEXT:    pxor %xmm8, %xmm4
5149; SSE2-NEXT:    movdqa %xmm6, %xmm5
5150; SSE2-NEXT:    pxor %xmm8, %xmm5
5151; SSE2-NEXT:    movdqa %xmm5, %xmm9
5152; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5153; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5154; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5155; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5156; SSE2-NEXT:    pand %xmm10, %xmm4
5157; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5158; SSE2-NEXT:    por %xmm4, %xmm5
5159; SSE2-NEXT:    pand %xmm5, %xmm2
5160; SSE2-NEXT:    pandn %xmm6, %xmm5
5161; SSE2-NEXT:    por %xmm5, %xmm2
5162; SSE2-NEXT:    movdqa %xmm3, %xmm4
5163; SSE2-NEXT:    pxor %xmm8, %xmm4
5164; SSE2-NEXT:    pxor %xmm7, %xmm8
5165; SSE2-NEXT:    movdqa %xmm8, %xmm5
5166; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5167; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5168; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5169; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5170; SSE2-NEXT:    pand %xmm6, %xmm4
5171; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5172; SSE2-NEXT:    por %xmm4, %xmm5
5173; SSE2-NEXT:    pand %xmm5, %xmm3
5174; SSE2-NEXT:    pandn %xmm7, %xmm5
5175; SSE2-NEXT:    por %xmm5, %xmm3
5176; SSE2-NEXT:    retq
5177;
5178; SSE4-LABEL: test126:
5179; SSE4:       # %bb.0: # %entry
5180; SSE4-NEXT:    movdqa %xmm0, %xmm9
5181; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5182; SSE4-NEXT:    movdqa %xmm0, %xmm10
5183; SSE4-NEXT:    pxor %xmm8, %xmm10
5184; SSE4-NEXT:    movdqa %xmm4, %xmm0
5185; SSE4-NEXT:    pxor %xmm8, %xmm0
5186; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5187; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5188; SSE4-NEXT:    movdqa %xmm1, %xmm9
5189; SSE4-NEXT:    pxor %xmm8, %xmm9
5190; SSE4-NEXT:    movdqa %xmm5, %xmm0
5191; SSE4-NEXT:    pxor %xmm8, %xmm0
5192; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5193; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5194; SSE4-NEXT:    movdqa %xmm2, %xmm1
5195; SSE4-NEXT:    pxor %xmm8, %xmm1
5196; SSE4-NEXT:    movdqa %xmm6, %xmm0
5197; SSE4-NEXT:    pxor %xmm8, %xmm0
5198; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5199; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5200; SSE4-NEXT:    movdqa %xmm3, %xmm0
5201; SSE4-NEXT:    pxor %xmm8, %xmm0
5202; SSE4-NEXT:    pxor %xmm7, %xmm8
5203; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5204; SSE4-NEXT:    movdqa %xmm8, %xmm0
5205; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5206; SSE4-NEXT:    movapd %xmm4, %xmm0
5207; SSE4-NEXT:    movapd %xmm5, %xmm1
5208; SSE4-NEXT:    movapd %xmm6, %xmm2
5209; SSE4-NEXT:    movapd %xmm7, %xmm3
5210; SSE4-NEXT:    retq
5211;
5212; AVX1-LABEL: test126:
5213; AVX1:       # %bb.0: # %entry
5214; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5215; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5216; AVX1-NEXT:    # xmm5 = mem[0,0]
5217; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5218; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5219; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5220; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5221; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5222; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5223; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5224; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5225; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5226; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5227; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5228; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5229; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5230; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5231; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5232; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5233; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5234; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5235; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5236; AVX1-NEXT:    retq
5237;
5238; AVX2-LABEL: test126:
5239; AVX2:       # %bb.0: # %entry
5240; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5241; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5242; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5243; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5244; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5245; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5246; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5247; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5248; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5249; AVX2-NEXT:    retq
5250;
5251; AVX512-LABEL: test126:
5252; AVX512:       # %bb.0: # %entry
5253; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5254; AVX512-NEXT:    retq
5255entry:
5256  %cmp = icmp ule <8 x i64> %a, %b
5257  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5258  ret <8 x i64> %sel
5259}
5260
5261define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5262; SSE2-LABEL: test127:
5263; SSE2:       # %bb.0: # %entry
5264; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5265; SSE2-NEXT:    movdqa %xmm4, %xmm9
5266; SSE2-NEXT:    pxor %xmm8, %xmm9
5267; SSE2-NEXT:    movdqa %xmm0, %xmm10
5268; SSE2-NEXT:    pxor %xmm8, %xmm10
5269; SSE2-NEXT:    movdqa %xmm10, %xmm11
5270; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5271; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5272; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5273; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5274; SSE2-NEXT:    pand %xmm12, %xmm9
5275; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5276; SSE2-NEXT:    por %xmm9, %xmm10
5277; SSE2-NEXT:    pand %xmm10, %xmm0
5278; SSE2-NEXT:    pandn %xmm4, %xmm10
5279; SSE2-NEXT:    por %xmm10, %xmm0
5280; SSE2-NEXT:    movdqa %xmm5, %xmm4
5281; SSE2-NEXT:    pxor %xmm8, %xmm4
5282; SSE2-NEXT:    movdqa %xmm1, %xmm9
5283; SSE2-NEXT:    pxor %xmm8, %xmm9
5284; SSE2-NEXT:    movdqa %xmm9, %xmm10
5285; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
5286; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5287; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
5288; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
5289; SSE2-NEXT:    pand %xmm11, %xmm4
5290; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5291; SSE2-NEXT:    por %xmm4, %xmm9
5292; SSE2-NEXT:    pand %xmm9, %xmm1
5293; SSE2-NEXT:    pandn %xmm5, %xmm9
5294; SSE2-NEXT:    por %xmm9, %xmm1
5295; SSE2-NEXT:    movdqa %xmm6, %xmm4
5296; SSE2-NEXT:    pxor %xmm8, %xmm4
5297; SSE2-NEXT:    movdqa %xmm2, %xmm5
5298; SSE2-NEXT:    pxor %xmm8, %xmm5
5299; SSE2-NEXT:    movdqa %xmm5, %xmm9
5300; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5301; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5302; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5303; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5304; SSE2-NEXT:    pand %xmm10, %xmm4
5305; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5306; SSE2-NEXT:    por %xmm4, %xmm5
5307; SSE2-NEXT:    pand %xmm5, %xmm2
5308; SSE2-NEXT:    pandn %xmm6, %xmm5
5309; SSE2-NEXT:    por %xmm5, %xmm2
5310; SSE2-NEXT:    movdqa %xmm7, %xmm4
5311; SSE2-NEXT:    pxor %xmm8, %xmm4
5312; SSE2-NEXT:    pxor %xmm3, %xmm8
5313; SSE2-NEXT:    movdqa %xmm8, %xmm5
5314; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5315; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5316; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5317; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5318; SSE2-NEXT:    pand %xmm6, %xmm4
5319; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5320; SSE2-NEXT:    por %xmm4, %xmm5
5321; SSE2-NEXT:    pand %xmm5, %xmm3
5322; SSE2-NEXT:    pandn %xmm7, %xmm5
5323; SSE2-NEXT:    por %xmm5, %xmm3
5324; SSE2-NEXT:    retq
5325;
5326; SSE4-LABEL: test127:
5327; SSE4:       # %bb.0: # %entry
5328; SSE4-NEXT:    movdqa %xmm0, %xmm9
5329; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5330; SSE4-NEXT:    movdqa %xmm4, %xmm10
5331; SSE4-NEXT:    pxor %xmm8, %xmm10
5332; SSE4-NEXT:    pxor %xmm8, %xmm0
5333; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5334; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5335; SSE4-NEXT:    movdqa %xmm5, %xmm9
5336; SSE4-NEXT:    pxor %xmm8, %xmm9
5337; SSE4-NEXT:    movdqa %xmm1, %xmm0
5338; SSE4-NEXT:    pxor %xmm8, %xmm0
5339; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5340; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5341; SSE4-NEXT:    movdqa %xmm6, %xmm1
5342; SSE4-NEXT:    pxor %xmm8, %xmm1
5343; SSE4-NEXT:    movdqa %xmm2, %xmm0
5344; SSE4-NEXT:    pxor %xmm8, %xmm0
5345; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5346; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5347; SSE4-NEXT:    movdqa %xmm7, %xmm0
5348; SSE4-NEXT:    pxor %xmm8, %xmm0
5349; SSE4-NEXT:    pxor %xmm3, %xmm8
5350; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5351; SSE4-NEXT:    movdqa %xmm8, %xmm0
5352; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5353; SSE4-NEXT:    movapd %xmm4, %xmm0
5354; SSE4-NEXT:    movapd %xmm5, %xmm1
5355; SSE4-NEXT:    movapd %xmm6, %xmm2
5356; SSE4-NEXT:    movapd %xmm7, %xmm3
5357; SSE4-NEXT:    retq
5358;
5359; AVX1-LABEL: test127:
5360; AVX1:       # %bb.0: # %entry
5361; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5362; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5363; AVX1-NEXT:    # xmm5 = mem[0,0]
5364; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5365; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5366; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5367; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5368; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5369; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5370; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5371; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5372; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5373; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5374; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5375; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5376; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5377; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5378; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5379; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5380; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5381; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5382; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5383; AVX1-NEXT:    retq
5384;
5385; AVX2-LABEL: test127:
5386; AVX2:       # %bb.0: # %entry
5387; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5388; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5389; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5390; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5391; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5392; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5393; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5394; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5395; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5396; AVX2-NEXT:    retq
5397;
5398; AVX512-LABEL: test127:
5399; AVX512:       # %bb.0: # %entry
5400; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5401; AVX512-NEXT:    retq
5402entry:
5403  %cmp = icmp ugt <8 x i64> %a, %b
5404  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5405  ret <8 x i64> %sel
5406}
5407
5408define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5409; SSE2-LABEL: test128:
5410; SSE2:       # %bb.0: # %entry
5411; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5412; SSE2-NEXT:    movdqa %xmm4, %xmm9
5413; SSE2-NEXT:    pxor %xmm8, %xmm9
5414; SSE2-NEXT:    movdqa %xmm0, %xmm10
5415; SSE2-NEXT:    pxor %xmm8, %xmm10
5416; SSE2-NEXT:    movdqa %xmm10, %xmm11
5417; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5418; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5419; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5420; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5421; SSE2-NEXT:    pand %xmm12, %xmm9
5422; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5423; SSE2-NEXT:    por %xmm9, %xmm10
5424; SSE2-NEXT:    pand %xmm10, %xmm0
5425; SSE2-NEXT:    pandn %xmm4, %xmm10
5426; SSE2-NEXT:    por %xmm10, %xmm0
5427; SSE2-NEXT:    movdqa %xmm5, %xmm4
5428; SSE2-NEXT:    pxor %xmm8, %xmm4
5429; SSE2-NEXT:    movdqa %xmm1, %xmm9
5430; SSE2-NEXT:    pxor %xmm8, %xmm9
5431; SSE2-NEXT:    movdqa %xmm9, %xmm10
5432; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
5433; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5434; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
5435; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
5436; SSE2-NEXT:    pand %xmm11, %xmm4
5437; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5438; SSE2-NEXT:    por %xmm4, %xmm9
5439; SSE2-NEXT:    pand %xmm9, %xmm1
5440; SSE2-NEXT:    pandn %xmm5, %xmm9
5441; SSE2-NEXT:    por %xmm9, %xmm1
5442; SSE2-NEXT:    movdqa %xmm6, %xmm4
5443; SSE2-NEXT:    pxor %xmm8, %xmm4
5444; SSE2-NEXT:    movdqa %xmm2, %xmm5
5445; SSE2-NEXT:    pxor %xmm8, %xmm5
5446; SSE2-NEXT:    movdqa %xmm5, %xmm9
5447; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5448; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5449; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5450; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5451; SSE2-NEXT:    pand %xmm10, %xmm4
5452; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5453; SSE2-NEXT:    por %xmm4, %xmm5
5454; SSE2-NEXT:    pand %xmm5, %xmm2
5455; SSE2-NEXT:    pandn %xmm6, %xmm5
5456; SSE2-NEXT:    por %xmm5, %xmm2
5457; SSE2-NEXT:    movdqa %xmm7, %xmm4
5458; SSE2-NEXT:    pxor %xmm8, %xmm4
5459; SSE2-NEXT:    pxor %xmm3, %xmm8
5460; SSE2-NEXT:    movdqa %xmm8, %xmm5
5461; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5462; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5463; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5464; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5465; SSE2-NEXT:    pand %xmm6, %xmm4
5466; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5467; SSE2-NEXT:    por %xmm4, %xmm5
5468; SSE2-NEXT:    pand %xmm5, %xmm3
5469; SSE2-NEXT:    pandn %xmm7, %xmm5
5470; SSE2-NEXT:    por %xmm5, %xmm3
5471; SSE2-NEXT:    retq
5472;
5473; SSE4-LABEL: test128:
5474; SSE4:       # %bb.0: # %entry
5475; SSE4-NEXT:    movdqa %xmm0, %xmm9
5476; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5477; SSE4-NEXT:    movdqa %xmm4, %xmm10
5478; SSE4-NEXT:    pxor %xmm8, %xmm10
5479; SSE4-NEXT:    pxor %xmm8, %xmm0
5480; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5481; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5482; SSE4-NEXT:    movdqa %xmm5, %xmm9
5483; SSE4-NEXT:    pxor %xmm8, %xmm9
5484; SSE4-NEXT:    movdqa %xmm1, %xmm0
5485; SSE4-NEXT:    pxor %xmm8, %xmm0
5486; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5487; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5488; SSE4-NEXT:    movdqa %xmm6, %xmm1
5489; SSE4-NEXT:    pxor %xmm8, %xmm1
5490; SSE4-NEXT:    movdqa %xmm2, %xmm0
5491; SSE4-NEXT:    pxor %xmm8, %xmm0
5492; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5493; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5494; SSE4-NEXT:    movdqa %xmm7, %xmm0
5495; SSE4-NEXT:    pxor %xmm8, %xmm0
5496; SSE4-NEXT:    pxor %xmm3, %xmm8
5497; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5498; SSE4-NEXT:    movdqa %xmm8, %xmm0
5499; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5500; SSE4-NEXT:    movapd %xmm4, %xmm0
5501; SSE4-NEXT:    movapd %xmm5, %xmm1
5502; SSE4-NEXT:    movapd %xmm6, %xmm2
5503; SSE4-NEXT:    movapd %xmm7, %xmm3
5504; SSE4-NEXT:    retq
5505;
5506; AVX1-LABEL: test128:
5507; AVX1:       # %bb.0: # %entry
5508; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5509; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5510; AVX1-NEXT:    # xmm5 = mem[0,0]
5511; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5512; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5513; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5514; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5515; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5516; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5517; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5518; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5519; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5520; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5521; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5522; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5523; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5524; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5525; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5526; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5527; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5528; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5529; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5530; AVX1-NEXT:    retq
5531;
5532; AVX2-LABEL: test128:
5533; AVX2:       # %bb.0: # %entry
5534; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5535; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5536; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5537; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5538; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5539; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5540; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5541; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5542; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5543; AVX2-NEXT:    retq
5544;
5545; AVX512-LABEL: test128:
5546; AVX512:       # %bb.0: # %entry
5547; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5548; AVX512-NEXT:    retq
5549entry:
5550  %cmp = icmp uge <8 x i64> %a, %b
5551  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5552  ret <8 x i64> %sel
5553}
5554
5555define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5556; SSE2-LABEL: test129:
5557; SSE2:       # %bb.0: # %entry
5558; SSE2-NEXT:    movdqa %xmm0, %xmm8
5559; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5560; SSE2-NEXT:    pand %xmm8, %xmm0
5561; SSE2-NEXT:    pandn %xmm4, %xmm8
5562; SSE2-NEXT:    por %xmm8, %xmm0
5563; SSE2-NEXT:    movdqa %xmm1, %xmm4
5564; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5565; SSE2-NEXT:    pand %xmm4, %xmm1
5566; SSE2-NEXT:    pandn %xmm5, %xmm4
5567; SSE2-NEXT:    por %xmm4, %xmm1
5568; SSE2-NEXT:    movdqa %xmm2, %xmm4
5569; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
5570; SSE2-NEXT:    pand %xmm4, %xmm2
5571; SSE2-NEXT:    pandn %xmm6, %xmm4
5572; SSE2-NEXT:    por %xmm4, %xmm2
5573; SSE2-NEXT:    movdqa %xmm3, %xmm4
5574; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
5575; SSE2-NEXT:    pand %xmm4, %xmm3
5576; SSE2-NEXT:    pandn %xmm7, %xmm4
5577; SSE2-NEXT:    por %xmm4, %xmm3
5578; SSE2-NEXT:    retq
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; AVX512F-LABEL: test129:
5609; AVX512F:       # %bb.0: # %entry
5610; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5611; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5612; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
5613; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
5614; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5615; AVX512F-NEXT:    retq
5616;
5617; AVX512BW-LABEL: test129:
5618; AVX512BW:       # %bb.0: # %entry
5619; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5620; AVX512BW-NEXT:    retq
5621entry:
5622  %cmp = icmp slt <64 x i8> %a, %b
5623  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5624  ret <64 x i8> %sel
5625}
5626
5627define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
5628; SSE2-LABEL: test130:
5629; SSE2:       # %bb.0: # %entry
5630; SSE2-NEXT:    movdqa %xmm0, %xmm8
5631; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5632; SSE2-NEXT:    pand %xmm8, %xmm0
5633; SSE2-NEXT:    pandn %xmm4, %xmm8
5634; SSE2-NEXT:    por %xmm8, %xmm0
5635; SSE2-NEXT:    movdqa %xmm1, %xmm4
5636; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5637; SSE2-NEXT:    pand %xmm4, %xmm1
5638; SSE2-NEXT:    pandn %xmm5, %xmm4
5639; SSE2-NEXT:    por %xmm4, %xmm1
5640; SSE2-NEXT:    movdqa %xmm2, %xmm4
5641; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
5642; SSE2-NEXT:    pand %xmm4, %xmm2
5643; SSE2-NEXT:    pandn %xmm6, %xmm4
5644; SSE2-NEXT:    por %xmm4, %xmm2
5645; SSE2-NEXT:    movdqa %xmm3, %xmm4
5646; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
5647; SSE2-NEXT:    pand %xmm4, %xmm3
5648; SSE2-NEXT:    pandn %xmm7, %xmm4
5649; SSE2-NEXT:    por %xmm4, %xmm3
5650; SSE2-NEXT:    retq
5651;
5652; SSE4-LABEL: test130:
5653; SSE4:       # %bb.0: # %entry
5654; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5655; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5656; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5657; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5658; SSE4-NEXT:    retq
5659;
5660; AVX1-LABEL: test130:
5661; AVX1:       # %bb.0: # %entry
5662; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5663; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5664; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5665; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5666; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5667; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5668; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5669; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5670; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5671; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5672; AVX1-NEXT:    retq
5673;
5674; AVX2-LABEL: test130:
5675; AVX2:       # %bb.0: # %entry
5676; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5677; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5678; AVX2-NEXT:    retq
5679;
5680; AVX512F-LABEL: test130:
5681; AVX512F:       # %bb.0: # %entry
5682; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5683; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5684; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
5685; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
5686; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5687; AVX512F-NEXT:    retq
5688;
5689; AVX512BW-LABEL: test130:
5690; AVX512BW:       # %bb.0: # %entry
5691; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5692; AVX512BW-NEXT:    retq
5693entry:
5694  %cmp = icmp sle <64 x i8> %a, %b
5695  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5696  ret <64 x i8> %sel
5697}
5698
5699define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
5700; SSE2-LABEL: test131:
5701; SSE2:       # %bb.0: # %entry
5702; SSE2-NEXT:    movdqa %xmm4, %xmm8
5703; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5704; SSE2-NEXT:    pand %xmm8, %xmm0
5705; SSE2-NEXT:    pandn %xmm4, %xmm8
5706; SSE2-NEXT:    por %xmm8, %xmm0
5707; SSE2-NEXT:    movdqa %xmm5, %xmm4
5708; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5709; SSE2-NEXT:    pand %xmm4, %xmm1
5710; SSE2-NEXT:    pandn %xmm5, %xmm4
5711; SSE2-NEXT:    por %xmm4, %xmm1
5712; SSE2-NEXT:    movdqa %xmm6, %xmm4
5713; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5714; SSE2-NEXT:    pand %xmm4, %xmm2
5715; SSE2-NEXT:    pandn %xmm6, %xmm4
5716; SSE2-NEXT:    por %xmm4, %xmm2
5717; SSE2-NEXT:    movdqa %xmm7, %xmm4
5718; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5719; SSE2-NEXT:    pand %xmm4, %xmm3
5720; SSE2-NEXT:    pandn %xmm7, %xmm4
5721; SSE2-NEXT:    por %xmm4, %xmm3
5722; SSE2-NEXT:    retq
5723;
5724; SSE4-LABEL: test131:
5725; SSE4:       # %bb.0: # %entry
5726; SSE4-NEXT:    pminsb %xmm4, %xmm0
5727; SSE4-NEXT:    pminsb %xmm5, %xmm1
5728; SSE4-NEXT:    pminsb %xmm6, %xmm2
5729; SSE4-NEXT:    pminsb %xmm7, %xmm3
5730; SSE4-NEXT:    retq
5731;
5732; AVX1-LABEL: test131:
5733; AVX1:       # %bb.0: # %entry
5734; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5735; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5736; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5737; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5738; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5739; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5740; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5741; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5742; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5743; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5744; AVX1-NEXT:    retq
5745;
5746; AVX2-LABEL: test131:
5747; AVX2:       # %bb.0: # %entry
5748; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5749; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5750; AVX2-NEXT:    retq
5751;
5752; AVX512F-LABEL: test131:
5753; AVX512F:       # %bb.0: # %entry
5754; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5755; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5756; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
5757; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
5758; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5759; AVX512F-NEXT:    retq
5760;
5761; AVX512BW-LABEL: test131:
5762; AVX512BW:       # %bb.0: # %entry
5763; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5764; AVX512BW-NEXT:    retq
5765entry:
5766  %cmp = icmp sgt <64 x i8> %a, %b
5767  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5768  ret <64 x i8> %sel
5769}
5770
5771define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
5772; SSE2-LABEL: test132:
5773; SSE2:       # %bb.0: # %entry
5774; SSE2-NEXT:    movdqa %xmm4, %xmm8
5775; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5776; SSE2-NEXT:    pand %xmm8, %xmm0
5777; SSE2-NEXT:    pandn %xmm4, %xmm8
5778; SSE2-NEXT:    por %xmm8, %xmm0
5779; SSE2-NEXT:    movdqa %xmm5, %xmm4
5780; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5781; SSE2-NEXT:    pand %xmm4, %xmm1
5782; SSE2-NEXT:    pandn %xmm5, %xmm4
5783; SSE2-NEXT:    por %xmm4, %xmm1
5784; SSE2-NEXT:    movdqa %xmm6, %xmm4
5785; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5786; SSE2-NEXT:    pand %xmm4, %xmm2
5787; SSE2-NEXT:    pandn %xmm6, %xmm4
5788; SSE2-NEXT:    por %xmm4, %xmm2
5789; SSE2-NEXT:    movdqa %xmm7, %xmm4
5790; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5791; SSE2-NEXT:    pand %xmm4, %xmm3
5792; SSE2-NEXT:    pandn %xmm7, %xmm4
5793; SSE2-NEXT:    por %xmm4, %xmm3
5794; SSE2-NEXT:    retq
5795;
5796; SSE4-LABEL: test132:
5797; SSE4:       # %bb.0: # %entry
5798; SSE4-NEXT:    pminsb %xmm4, %xmm0
5799; SSE4-NEXT:    pminsb %xmm5, %xmm1
5800; SSE4-NEXT:    pminsb %xmm6, %xmm2
5801; SSE4-NEXT:    pminsb %xmm7, %xmm3
5802; SSE4-NEXT:    retq
5803;
5804; AVX1-LABEL: test132:
5805; AVX1:       # %bb.0: # %entry
5806; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5807; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5808; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5809; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5810; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5811; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5812; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5813; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5814; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5815; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5816; AVX1-NEXT:    retq
5817;
5818; AVX2-LABEL: test132:
5819; AVX2:       # %bb.0: # %entry
5820; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5821; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5822; AVX2-NEXT:    retq
5823;
5824; AVX512F-LABEL: test132:
5825; AVX512F:       # %bb.0: # %entry
5826; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5827; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5828; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
5829; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
5830; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5831; AVX512F-NEXT:    retq
5832;
5833; AVX512BW-LABEL: test132:
5834; AVX512BW:       # %bb.0: # %entry
5835; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5836; AVX512BW-NEXT:    retq
5837entry:
5838  %cmp = icmp sge <64 x i8> %a, %b
5839  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5840  ret <64 x i8> %sel
5841}
5842
5843define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
5844; SSE-LABEL: test133:
5845; SSE:       # %bb.0: # %entry
5846; SSE-NEXT:    pmaxub %xmm4, %xmm0
5847; SSE-NEXT:    pmaxub %xmm5, %xmm1
5848; SSE-NEXT:    pmaxub %xmm6, %xmm2
5849; SSE-NEXT:    pmaxub %xmm7, %xmm3
5850; SSE-NEXT:    retq
5851;
5852; AVX1-LABEL: test133:
5853; AVX1:       # %bb.0: # %entry
5854; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5855; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5856; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5857; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5858; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5859; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5860; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5861; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5862; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5863; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5864; AVX1-NEXT:    retq
5865;
5866; AVX2-LABEL: test133:
5867; AVX2:       # %bb.0: # %entry
5868; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5869; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5870; AVX2-NEXT:    retq
5871;
5872; AVX512F-LABEL: test133:
5873; AVX512F:       # %bb.0: # %entry
5874; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5875; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5876; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
5877; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
5878; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5879; AVX512F-NEXT:    retq
5880;
5881; AVX512BW-LABEL: test133:
5882; AVX512BW:       # %bb.0: # %entry
5883; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5884; AVX512BW-NEXT:    retq
5885entry:
5886  %cmp = icmp ult <64 x i8> %a, %b
5887  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5888  ret <64 x i8> %sel
5889}
5890
5891define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
5892; SSE-LABEL: test134:
5893; SSE:       # %bb.0: # %entry
5894; SSE-NEXT:    pmaxub %xmm4, %xmm0
5895; SSE-NEXT:    pmaxub %xmm5, %xmm1
5896; SSE-NEXT:    pmaxub %xmm6, %xmm2
5897; SSE-NEXT:    pmaxub %xmm7, %xmm3
5898; SSE-NEXT:    retq
5899;
5900; AVX1-LABEL: test134:
5901; AVX1:       # %bb.0: # %entry
5902; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5903; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5904; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5905; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5906; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5907; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5908; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5909; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5910; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5911; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5912; AVX1-NEXT:    retq
5913;
5914; AVX2-LABEL: test134:
5915; AVX2:       # %bb.0: # %entry
5916; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5917; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5918; AVX2-NEXT:    retq
5919;
5920; AVX512F-LABEL: test134:
5921; AVX512F:       # %bb.0: # %entry
5922; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5923; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5924; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
5925; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
5926; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5927; AVX512F-NEXT:    retq
5928;
5929; AVX512BW-LABEL: test134:
5930; AVX512BW:       # %bb.0: # %entry
5931; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5932; AVX512BW-NEXT:    retq
5933entry:
5934  %cmp = icmp ule <64 x i8> %a, %b
5935  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5936  ret <64 x i8> %sel
5937}
5938
5939define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
5940; SSE-LABEL: test135:
5941; SSE:       # %bb.0: # %entry
5942; SSE-NEXT:    pminub %xmm4, %xmm0
5943; SSE-NEXT:    pminub %xmm5, %xmm1
5944; SSE-NEXT:    pminub %xmm6, %xmm2
5945; SSE-NEXT:    pminub %xmm7, %xmm3
5946; SSE-NEXT:    retq
5947;
5948; AVX1-LABEL: test135:
5949; AVX1:       # %bb.0: # %entry
5950; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5951; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5952; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
5953; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
5954; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5955; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5956; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5957; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
5958; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
5959; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5960; AVX1-NEXT:    retq
5961;
5962; AVX2-LABEL: test135:
5963; AVX2:       # %bb.0: # %entry
5964; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
5965; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
5966; AVX2-NEXT:    retq
5967;
5968; AVX512F-LABEL: test135:
5969; AVX512F:       # %bb.0: # %entry
5970; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5971; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5972; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
5973; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
5974; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5975; AVX512F-NEXT:    retq
5976;
5977; AVX512BW-LABEL: test135:
5978; AVX512BW:       # %bb.0: # %entry
5979; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
5980; AVX512BW-NEXT:    retq
5981entry:
5982  %cmp = icmp ugt <64 x i8> %a, %b
5983  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5984  ret <64 x i8> %sel
5985}
5986
5987define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
5988; SSE-LABEL: test136:
5989; SSE:       # %bb.0: # %entry
5990; SSE-NEXT:    pminub %xmm4, %xmm0
5991; SSE-NEXT:    pminub %xmm5, %xmm1
5992; SSE-NEXT:    pminub %xmm6, %xmm2
5993; SSE-NEXT:    pminub %xmm7, %xmm3
5994; SSE-NEXT:    retq
5995;
5996; AVX1-LABEL: test136:
5997; AVX1:       # %bb.0: # %entry
5998; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5999; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6000; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
6001; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
6002; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6003; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6004; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6005; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
6006; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
6007; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6008; AVX1-NEXT:    retq
6009;
6010; AVX2-LABEL: test136:
6011; AVX2:       # %bb.0: # %entry
6012; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
6013; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
6014; AVX2-NEXT:    retq
6015;
6016; AVX512F-LABEL: test136:
6017; AVX512F:       # %bb.0: # %entry
6018; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6019; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6020; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
6021; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
6022; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6023; AVX512F-NEXT:    retq
6024;
6025; AVX512BW-LABEL: test136:
6026; AVX512BW:       # %bb.0: # %entry
6027; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
6028; AVX512BW-NEXT:    retq
6029entry:
6030  %cmp = icmp uge <64 x i8> %a, %b
6031  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6032  ret <64 x i8> %sel
6033}
6034
6035define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
6036; SSE-LABEL: test137:
6037; SSE:       # %bb.0: # %entry
6038; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6039; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6040; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6041; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6042; SSE-NEXT:    retq
6043;
6044; AVX1-LABEL: test137:
6045; AVX1:       # %bb.0: # %entry
6046; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6047; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6048; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6049; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6050; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6051; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6052; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6053; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6054; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6055; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6056; AVX1-NEXT:    retq
6057;
6058; AVX2-LABEL: test137:
6059; AVX2:       # %bb.0: # %entry
6060; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6061; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6062; AVX2-NEXT:    retq
6063;
6064; AVX512F-LABEL: test137:
6065; AVX512F:       # %bb.0: # %entry
6066; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6067; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6068; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
6069; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
6070; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6071; AVX512F-NEXT:    retq
6072;
6073; AVX512BW-LABEL: test137:
6074; AVX512BW:       # %bb.0: # %entry
6075; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6076; AVX512BW-NEXT:    retq
6077entry:
6078  %cmp = icmp slt <32 x i16> %a, %b
6079  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6080  ret <32 x i16> %sel
6081}
6082
6083define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
6084; SSE-LABEL: test138:
6085; SSE:       # %bb.0: # %entry
6086; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6087; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6088; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6089; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6090; SSE-NEXT:    retq
6091;
6092; AVX1-LABEL: test138:
6093; AVX1:       # %bb.0: # %entry
6094; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6095; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6096; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6097; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6098; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6099; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6100; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6101; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6102; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6103; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6104; AVX1-NEXT:    retq
6105;
6106; AVX2-LABEL: test138:
6107; AVX2:       # %bb.0: # %entry
6108; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6109; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6110; AVX2-NEXT:    retq
6111;
6112; AVX512F-LABEL: test138:
6113; AVX512F:       # %bb.0: # %entry
6114; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6115; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6116; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
6117; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
6118; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6119; AVX512F-NEXT:    retq
6120;
6121; AVX512BW-LABEL: test138:
6122; AVX512BW:       # %bb.0: # %entry
6123; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6124; AVX512BW-NEXT:    retq
6125entry:
6126  %cmp = icmp sle <32 x i16> %a, %b
6127  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6128  ret <32 x i16> %sel
6129}
6130
6131define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6132; SSE-LABEL: test139:
6133; SSE:       # %bb.0: # %entry
6134; SSE-NEXT:    pminsw %xmm4, %xmm0
6135; SSE-NEXT:    pminsw %xmm5, %xmm1
6136; SSE-NEXT:    pminsw %xmm6, %xmm2
6137; SSE-NEXT:    pminsw %xmm7, %xmm3
6138; SSE-NEXT:    retq
6139;
6140; AVX1-LABEL: test139:
6141; AVX1:       # %bb.0: # %entry
6142; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6143; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6144; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6145; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6146; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6147; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6148; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6149; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6150; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6151; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6152; AVX1-NEXT:    retq
6153;
6154; AVX2-LABEL: test139:
6155; AVX2:       # %bb.0: # %entry
6156; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6157; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6158; AVX2-NEXT:    retq
6159;
6160; AVX512F-LABEL: test139:
6161; AVX512F:       # %bb.0: # %entry
6162; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6163; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6164; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
6165; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
6166; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6167; AVX512F-NEXT:    retq
6168;
6169; AVX512BW-LABEL: test139:
6170; AVX512BW:       # %bb.0: # %entry
6171; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6172; AVX512BW-NEXT:    retq
6173entry:
6174  %cmp = icmp sgt <32 x i16> %a, %b
6175  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6176  ret <32 x i16> %sel
6177}
6178
6179define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6180; SSE-LABEL: test140:
6181; SSE:       # %bb.0: # %entry
6182; SSE-NEXT:    pminsw %xmm4, %xmm0
6183; SSE-NEXT:    pminsw %xmm5, %xmm1
6184; SSE-NEXT:    pminsw %xmm6, %xmm2
6185; SSE-NEXT:    pminsw %xmm7, %xmm3
6186; SSE-NEXT:    retq
6187;
6188; AVX1-LABEL: test140:
6189; AVX1:       # %bb.0: # %entry
6190; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6191; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6192; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6193; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6194; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6195; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6196; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6197; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6198; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6199; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6200; AVX1-NEXT:    retq
6201;
6202; AVX2-LABEL: test140:
6203; AVX2:       # %bb.0: # %entry
6204; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6205; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6206; AVX2-NEXT:    retq
6207;
6208; AVX512F-LABEL: test140:
6209; AVX512F:       # %bb.0: # %entry
6210; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6211; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6212; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
6213; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
6214; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6215; AVX512F-NEXT:    retq
6216;
6217; AVX512BW-LABEL: test140:
6218; AVX512BW:       # %bb.0: # %entry
6219; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6220; AVX512BW-NEXT:    retq
6221entry:
6222  %cmp = icmp sge <32 x i16> %a, %b
6223  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6224  ret <32 x i16> %sel
6225}
6226
6227define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6228; SSE2-LABEL: test141:
6229; SSE2:       # %bb.0: # %entry
6230; SSE2-NEXT:    psubusw %xmm0, %xmm4
6231; SSE2-NEXT:    paddw %xmm4, %xmm0
6232; SSE2-NEXT:    psubusw %xmm1, %xmm5
6233; SSE2-NEXT:    paddw %xmm5, %xmm1
6234; SSE2-NEXT:    psubusw %xmm2, %xmm6
6235; SSE2-NEXT:    paddw %xmm6, %xmm2
6236; SSE2-NEXT:    psubusw %xmm3, %xmm7
6237; SSE2-NEXT:    paddw %xmm7, %xmm3
6238; SSE2-NEXT:    retq
6239;
6240; SSE4-LABEL: test141:
6241; SSE4:       # %bb.0: # %entry
6242; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6243; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6244; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6245; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6246; SSE4-NEXT:    retq
6247;
6248; AVX1-LABEL: test141:
6249; AVX1:       # %bb.0: # %entry
6250; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6251; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6252; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6253; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6254; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6255; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6256; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6257; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6258; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6259; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6260; AVX1-NEXT:    retq
6261;
6262; AVX2-LABEL: test141:
6263; AVX2:       # %bb.0: # %entry
6264; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6265; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6266; AVX2-NEXT:    retq
6267;
6268; AVX512F-LABEL: test141:
6269; AVX512F:       # %bb.0: # %entry
6270; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6271; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6272; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
6273; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
6274; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6275; AVX512F-NEXT:    retq
6276;
6277; AVX512BW-LABEL: test141:
6278; AVX512BW:       # %bb.0: # %entry
6279; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6280; AVX512BW-NEXT:    retq
6281entry:
6282  %cmp = icmp ult <32 x i16> %a, %b
6283  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6284  ret <32 x i16> %sel
6285}
6286
6287define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6288; SSE2-LABEL: test142:
6289; SSE2:       # %bb.0: # %entry
6290; SSE2-NEXT:    psubusw %xmm0, %xmm4
6291; SSE2-NEXT:    paddw %xmm4, %xmm0
6292; SSE2-NEXT:    psubusw %xmm1, %xmm5
6293; SSE2-NEXT:    paddw %xmm5, %xmm1
6294; SSE2-NEXT:    psubusw %xmm2, %xmm6
6295; SSE2-NEXT:    paddw %xmm6, %xmm2
6296; SSE2-NEXT:    psubusw %xmm3, %xmm7
6297; SSE2-NEXT:    paddw %xmm7, %xmm3
6298; SSE2-NEXT:    retq
6299;
6300; SSE4-LABEL: test142:
6301; SSE4:       # %bb.0: # %entry
6302; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6303; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6304; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6305; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6306; SSE4-NEXT:    retq
6307;
6308; AVX1-LABEL: test142:
6309; AVX1:       # %bb.0: # %entry
6310; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6311; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6312; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6313; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6314; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6315; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6316; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6317; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6318; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6319; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6320; AVX1-NEXT:    retq
6321;
6322; AVX2-LABEL: test142:
6323; AVX2:       # %bb.0: # %entry
6324; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6325; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6326; AVX2-NEXT:    retq
6327;
6328; AVX512F-LABEL: test142:
6329; AVX512F:       # %bb.0: # %entry
6330; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6331; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6332; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
6333; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
6334; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6335; AVX512F-NEXT:    retq
6336;
6337; AVX512BW-LABEL: test142:
6338; AVX512BW:       # %bb.0: # %entry
6339; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6340; AVX512BW-NEXT:    retq
6341entry:
6342  %cmp = icmp ule <32 x i16> %a, %b
6343  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6344  ret <32 x i16> %sel
6345}
6346
6347define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6348; SSE2-LABEL: test143:
6349; SSE2:       # %bb.0: # %entry
6350; SSE2-NEXT:    movdqa %xmm0, %xmm8
6351; SSE2-NEXT:    psubusw %xmm4, %xmm8
6352; SSE2-NEXT:    psubw %xmm8, %xmm0
6353; SSE2-NEXT:    movdqa %xmm1, %xmm4
6354; SSE2-NEXT:    psubusw %xmm5, %xmm4
6355; SSE2-NEXT:    psubw %xmm4, %xmm1
6356; SSE2-NEXT:    movdqa %xmm2, %xmm4
6357; SSE2-NEXT:    psubusw %xmm6, %xmm4
6358; SSE2-NEXT:    psubw %xmm4, %xmm2
6359; SSE2-NEXT:    movdqa %xmm3, %xmm4
6360; SSE2-NEXT:    psubusw %xmm7, %xmm4
6361; SSE2-NEXT:    psubw %xmm4, %xmm3
6362; SSE2-NEXT:    retq
6363;
6364; SSE4-LABEL: test143:
6365; SSE4:       # %bb.0: # %entry
6366; SSE4-NEXT:    pminuw %xmm4, %xmm0
6367; SSE4-NEXT:    pminuw %xmm5, %xmm1
6368; SSE4-NEXT:    pminuw %xmm6, %xmm2
6369; SSE4-NEXT:    pminuw %xmm7, %xmm3
6370; SSE4-NEXT:    retq
6371;
6372; AVX1-LABEL: test143:
6373; AVX1:       # %bb.0: # %entry
6374; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6375; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6376; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6377; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6378; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6379; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6380; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6381; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6382; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6383; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6384; AVX1-NEXT:    retq
6385;
6386; AVX2-LABEL: test143:
6387; AVX2:       # %bb.0: # %entry
6388; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6389; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6390; AVX2-NEXT:    retq
6391;
6392; AVX512F-LABEL: test143:
6393; AVX512F:       # %bb.0: # %entry
6394; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6395; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6396; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
6397; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
6398; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6399; AVX512F-NEXT:    retq
6400;
6401; AVX512BW-LABEL: test143:
6402; AVX512BW:       # %bb.0: # %entry
6403; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6404; AVX512BW-NEXT:    retq
6405entry:
6406  %cmp = icmp ugt <32 x i16> %a, %b
6407  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6408  ret <32 x i16> %sel
6409}
6410
6411define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6412; SSE2-LABEL: test144:
6413; SSE2:       # %bb.0: # %entry
6414; SSE2-NEXT:    movdqa %xmm0, %xmm8
6415; SSE2-NEXT:    psubusw %xmm4, %xmm8
6416; SSE2-NEXT:    psubw %xmm8, %xmm0
6417; SSE2-NEXT:    movdqa %xmm1, %xmm4
6418; SSE2-NEXT:    psubusw %xmm5, %xmm4
6419; SSE2-NEXT:    psubw %xmm4, %xmm1
6420; SSE2-NEXT:    movdqa %xmm2, %xmm4
6421; SSE2-NEXT:    psubusw %xmm6, %xmm4
6422; SSE2-NEXT:    psubw %xmm4, %xmm2
6423; SSE2-NEXT:    movdqa %xmm3, %xmm4
6424; SSE2-NEXT:    psubusw %xmm7, %xmm4
6425; SSE2-NEXT:    psubw %xmm4, %xmm3
6426; SSE2-NEXT:    retq
6427;
6428; SSE4-LABEL: test144:
6429; SSE4:       # %bb.0: # %entry
6430; SSE4-NEXT:    pminuw %xmm4, %xmm0
6431; SSE4-NEXT:    pminuw %xmm5, %xmm1
6432; SSE4-NEXT:    pminuw %xmm6, %xmm2
6433; SSE4-NEXT:    pminuw %xmm7, %xmm3
6434; SSE4-NEXT:    retq
6435;
6436; AVX1-LABEL: test144:
6437; AVX1:       # %bb.0: # %entry
6438; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6439; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6440; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6441; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6442; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6443; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6444; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6445; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6446; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6447; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6448; AVX1-NEXT:    retq
6449;
6450; AVX2-LABEL: test144:
6451; AVX2:       # %bb.0: # %entry
6452; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6453; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6454; AVX2-NEXT:    retq
6455;
6456; AVX512F-LABEL: test144:
6457; AVX512F:       # %bb.0: # %entry
6458; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6459; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6460; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
6461; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
6462; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6463; AVX512F-NEXT:    retq
6464;
6465; AVX512BW-LABEL: test144:
6466; AVX512BW:       # %bb.0: # %entry
6467; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6468; AVX512BW-NEXT:    retq
6469entry:
6470  %cmp = icmp uge <32 x i16> %a, %b
6471  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6472  ret <32 x i16> %sel
6473}
6474
6475define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6476; SSE2-LABEL: test145:
6477; SSE2:       # %bb.0: # %entry
6478; SSE2-NEXT:    movdqa %xmm0, %xmm8
6479; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6480; SSE2-NEXT:    pand %xmm8, %xmm0
6481; SSE2-NEXT:    pandn %xmm4, %xmm8
6482; SSE2-NEXT:    por %xmm8, %xmm0
6483; SSE2-NEXT:    movdqa %xmm1, %xmm4
6484; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6485; SSE2-NEXT:    pand %xmm4, %xmm1
6486; SSE2-NEXT:    pandn %xmm5, %xmm4
6487; SSE2-NEXT:    por %xmm4, %xmm1
6488; SSE2-NEXT:    movdqa %xmm2, %xmm4
6489; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
6490; SSE2-NEXT:    pand %xmm4, %xmm2
6491; SSE2-NEXT:    pandn %xmm6, %xmm4
6492; SSE2-NEXT:    por %xmm4, %xmm2
6493; SSE2-NEXT:    movdqa %xmm3, %xmm4
6494; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
6495; SSE2-NEXT:    pand %xmm4, %xmm3
6496; SSE2-NEXT:    pandn %xmm7, %xmm4
6497; SSE2-NEXT:    por %xmm4, %xmm3
6498; SSE2-NEXT:    retq
6499;
6500; SSE4-LABEL: test145:
6501; SSE4:       # %bb.0: # %entry
6502; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6503; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6504; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6505; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6506; SSE4-NEXT:    retq
6507;
6508; AVX1-LABEL: test145:
6509; AVX1:       # %bb.0: # %entry
6510; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6511; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6512; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6513; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6514; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6515; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6516; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6517; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6518; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6519; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6520; AVX1-NEXT:    retq
6521;
6522; AVX2-LABEL: test145:
6523; AVX2:       # %bb.0: # %entry
6524; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6525; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6526; AVX2-NEXT:    retq
6527;
6528; AVX512-LABEL: test145:
6529; AVX512:       # %bb.0: # %entry
6530; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6531; AVX512-NEXT:    retq
6532entry:
6533  %cmp = icmp slt <16 x i32> %a, %b
6534  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6535  ret <16 x i32> %sel
6536}
6537
6538define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6539; SSE2-LABEL: test146:
6540; SSE2:       # %bb.0: # %entry
6541; SSE2-NEXT:    movdqa %xmm0, %xmm8
6542; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6543; SSE2-NEXT:    pand %xmm8, %xmm0
6544; SSE2-NEXT:    pandn %xmm4, %xmm8
6545; SSE2-NEXT:    por %xmm8, %xmm0
6546; SSE2-NEXT:    movdqa %xmm1, %xmm4
6547; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6548; SSE2-NEXT:    pand %xmm4, %xmm1
6549; SSE2-NEXT:    pandn %xmm5, %xmm4
6550; SSE2-NEXT:    por %xmm4, %xmm1
6551; SSE2-NEXT:    movdqa %xmm2, %xmm4
6552; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
6553; SSE2-NEXT:    pand %xmm4, %xmm2
6554; SSE2-NEXT:    pandn %xmm6, %xmm4
6555; SSE2-NEXT:    por %xmm4, %xmm2
6556; SSE2-NEXT:    movdqa %xmm3, %xmm4
6557; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
6558; SSE2-NEXT:    pand %xmm4, %xmm3
6559; SSE2-NEXT:    pandn %xmm7, %xmm4
6560; SSE2-NEXT:    por %xmm4, %xmm3
6561; SSE2-NEXT:    retq
6562;
6563; SSE4-LABEL: test146:
6564; SSE4:       # %bb.0: # %entry
6565; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6566; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6567; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6568; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6569; SSE4-NEXT:    retq
6570;
6571; AVX1-LABEL: test146:
6572; AVX1:       # %bb.0: # %entry
6573; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6574; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6575; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6576; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6577; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6578; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6579; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6580; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6581; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6582; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6583; AVX1-NEXT:    retq
6584;
6585; AVX2-LABEL: test146:
6586; AVX2:       # %bb.0: # %entry
6587; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6588; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6589; AVX2-NEXT:    retq
6590;
6591; AVX512-LABEL: test146:
6592; AVX512:       # %bb.0: # %entry
6593; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6594; AVX512-NEXT:    retq
6595entry:
6596  %cmp = icmp sle <16 x i32> %a, %b
6597  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6598  ret <16 x i32> %sel
6599}
6600
6601define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
6602; SSE2-LABEL: test147:
6603; SSE2:       # %bb.0: # %entry
6604; SSE2-NEXT:    movdqa %xmm4, %xmm8
6605; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6606; SSE2-NEXT:    pand %xmm8, %xmm0
6607; SSE2-NEXT:    pandn %xmm4, %xmm8
6608; SSE2-NEXT:    por %xmm8, %xmm0
6609; SSE2-NEXT:    movdqa %xmm5, %xmm4
6610; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6611; SSE2-NEXT:    pand %xmm4, %xmm1
6612; SSE2-NEXT:    pandn %xmm5, %xmm4
6613; SSE2-NEXT:    por %xmm4, %xmm1
6614; SSE2-NEXT:    movdqa %xmm6, %xmm4
6615; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6616; SSE2-NEXT:    pand %xmm4, %xmm2
6617; SSE2-NEXT:    pandn %xmm6, %xmm4
6618; SSE2-NEXT:    por %xmm4, %xmm2
6619; SSE2-NEXT:    movdqa %xmm7, %xmm4
6620; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6621; SSE2-NEXT:    pand %xmm4, %xmm3
6622; SSE2-NEXT:    pandn %xmm7, %xmm4
6623; SSE2-NEXT:    por %xmm4, %xmm3
6624; SSE2-NEXT:    retq
6625;
6626; SSE4-LABEL: test147:
6627; SSE4:       # %bb.0: # %entry
6628; SSE4-NEXT:    pminsd %xmm4, %xmm0
6629; SSE4-NEXT:    pminsd %xmm5, %xmm1
6630; SSE4-NEXT:    pminsd %xmm6, %xmm2
6631; SSE4-NEXT:    pminsd %xmm7, %xmm3
6632; SSE4-NEXT:    retq
6633;
6634; AVX1-LABEL: test147:
6635; AVX1:       # %bb.0: # %entry
6636; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6637; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6638; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6639; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6640; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6641; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6642; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6643; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6644; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6645; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6646; AVX1-NEXT:    retq
6647;
6648; AVX2-LABEL: test147:
6649; AVX2:       # %bb.0: # %entry
6650; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6651; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6652; AVX2-NEXT:    retq
6653;
6654; AVX512-LABEL: test147:
6655; AVX512:       # %bb.0: # %entry
6656; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6657; AVX512-NEXT:    retq
6658entry:
6659  %cmp = icmp sgt <16 x i32> %a, %b
6660  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6661  ret <16 x i32> %sel
6662}
6663
6664define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
6665; SSE2-LABEL: test148:
6666; SSE2:       # %bb.0: # %entry
6667; SSE2-NEXT:    movdqa %xmm4, %xmm8
6668; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6669; SSE2-NEXT:    pand %xmm8, %xmm0
6670; SSE2-NEXT:    pandn %xmm4, %xmm8
6671; SSE2-NEXT:    por %xmm8, %xmm0
6672; SSE2-NEXT:    movdqa %xmm5, %xmm4
6673; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6674; SSE2-NEXT:    pand %xmm4, %xmm1
6675; SSE2-NEXT:    pandn %xmm5, %xmm4
6676; SSE2-NEXT:    por %xmm4, %xmm1
6677; SSE2-NEXT:    movdqa %xmm6, %xmm4
6678; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6679; SSE2-NEXT:    pand %xmm4, %xmm2
6680; SSE2-NEXT:    pandn %xmm6, %xmm4
6681; SSE2-NEXT:    por %xmm4, %xmm2
6682; SSE2-NEXT:    movdqa %xmm7, %xmm4
6683; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6684; SSE2-NEXT:    pand %xmm4, %xmm3
6685; SSE2-NEXT:    pandn %xmm7, %xmm4
6686; SSE2-NEXT:    por %xmm4, %xmm3
6687; SSE2-NEXT:    retq
6688;
6689; SSE4-LABEL: test148:
6690; SSE4:       # %bb.0: # %entry
6691; SSE4-NEXT:    pminsd %xmm4, %xmm0
6692; SSE4-NEXT:    pminsd %xmm5, %xmm1
6693; SSE4-NEXT:    pminsd %xmm6, %xmm2
6694; SSE4-NEXT:    pminsd %xmm7, %xmm3
6695; SSE4-NEXT:    retq
6696;
6697; AVX1-LABEL: test148:
6698; AVX1:       # %bb.0: # %entry
6699; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6700; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6701; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6702; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6703; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6704; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6705; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6706; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6707; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6708; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6709; AVX1-NEXT:    retq
6710;
6711; AVX2-LABEL: test148:
6712; AVX2:       # %bb.0: # %entry
6713; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6714; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6715; AVX2-NEXT:    retq
6716;
6717; AVX512-LABEL: test148:
6718; AVX512:       # %bb.0: # %entry
6719; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6720; AVX512-NEXT:    retq
6721entry:
6722  %cmp = icmp sge <16 x i32> %a, %b
6723  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6724  ret <16 x i32> %sel
6725}
6726
6727define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
6728; SSE2-LABEL: test149:
6729; SSE2:       # %bb.0: # %entry
6730; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6731; SSE2-NEXT:    movdqa %xmm4, %xmm9
6732; SSE2-NEXT:    pxor %xmm8, %xmm9
6733; SSE2-NEXT:    movdqa %xmm0, %xmm10
6734; SSE2-NEXT:    pxor %xmm8, %xmm10
6735; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6736; SSE2-NEXT:    pand %xmm10, %xmm0
6737; SSE2-NEXT:    pandn %xmm4, %xmm10
6738; SSE2-NEXT:    por %xmm10, %xmm0
6739; SSE2-NEXT:    movdqa %xmm5, %xmm4
6740; SSE2-NEXT:    pxor %xmm8, %xmm4
6741; SSE2-NEXT:    movdqa %xmm1, %xmm9
6742; SSE2-NEXT:    pxor %xmm8, %xmm9
6743; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6744; SSE2-NEXT:    pand %xmm9, %xmm1
6745; SSE2-NEXT:    pandn %xmm5, %xmm9
6746; SSE2-NEXT:    por %xmm9, %xmm1
6747; SSE2-NEXT:    movdqa %xmm6, %xmm4
6748; SSE2-NEXT:    pxor %xmm8, %xmm4
6749; SSE2-NEXT:    movdqa %xmm2, %xmm5
6750; SSE2-NEXT:    pxor %xmm8, %xmm5
6751; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6752; SSE2-NEXT:    pand %xmm5, %xmm2
6753; SSE2-NEXT:    pandn %xmm6, %xmm5
6754; SSE2-NEXT:    por %xmm5, %xmm2
6755; SSE2-NEXT:    movdqa %xmm7, %xmm4
6756; SSE2-NEXT:    pxor %xmm8, %xmm4
6757; SSE2-NEXT:    pxor %xmm3, %xmm8
6758; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6759; SSE2-NEXT:    pand %xmm8, %xmm3
6760; SSE2-NEXT:    pandn %xmm7, %xmm8
6761; SSE2-NEXT:    por %xmm8, %xmm3
6762; SSE2-NEXT:    retq
6763;
6764; SSE4-LABEL: test149:
6765; SSE4:       # %bb.0: # %entry
6766; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6767; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6768; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6769; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6770; SSE4-NEXT:    retq
6771;
6772; AVX1-LABEL: test149:
6773; AVX1:       # %bb.0: # %entry
6774; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6775; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6776; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6777; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6778; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6779; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6780; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6781; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6782; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6783; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6784; AVX1-NEXT:    retq
6785;
6786; AVX2-LABEL: test149:
6787; AVX2:       # %bb.0: # %entry
6788; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6789; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6790; AVX2-NEXT:    retq
6791;
6792; AVX512-LABEL: test149:
6793; AVX512:       # %bb.0: # %entry
6794; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6795; AVX512-NEXT:    retq
6796entry:
6797  %cmp = icmp ult <16 x i32> %a, %b
6798  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6799  ret <16 x i32> %sel
6800}
6801
6802define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
6803; SSE2-LABEL: test150:
6804; SSE2:       # %bb.0: # %entry
6805; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6806; SSE2-NEXT:    movdqa %xmm4, %xmm9
6807; SSE2-NEXT:    pxor %xmm8, %xmm9
6808; SSE2-NEXT:    movdqa %xmm0, %xmm10
6809; SSE2-NEXT:    pxor %xmm8, %xmm10
6810; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6811; SSE2-NEXT:    pand %xmm10, %xmm0
6812; SSE2-NEXT:    pandn %xmm4, %xmm10
6813; SSE2-NEXT:    por %xmm10, %xmm0
6814; SSE2-NEXT:    movdqa %xmm5, %xmm4
6815; SSE2-NEXT:    pxor %xmm8, %xmm4
6816; SSE2-NEXT:    movdqa %xmm1, %xmm9
6817; SSE2-NEXT:    pxor %xmm8, %xmm9
6818; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6819; SSE2-NEXT:    pand %xmm9, %xmm1
6820; SSE2-NEXT:    pandn %xmm5, %xmm9
6821; SSE2-NEXT:    por %xmm9, %xmm1
6822; SSE2-NEXT:    movdqa %xmm6, %xmm4
6823; SSE2-NEXT:    pxor %xmm8, %xmm4
6824; SSE2-NEXT:    movdqa %xmm2, %xmm5
6825; SSE2-NEXT:    pxor %xmm8, %xmm5
6826; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6827; SSE2-NEXT:    pand %xmm5, %xmm2
6828; SSE2-NEXT:    pandn %xmm6, %xmm5
6829; SSE2-NEXT:    por %xmm5, %xmm2
6830; SSE2-NEXT:    movdqa %xmm7, %xmm4
6831; SSE2-NEXT:    pxor %xmm8, %xmm4
6832; SSE2-NEXT:    pxor %xmm3, %xmm8
6833; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6834; SSE2-NEXT:    pand %xmm8, %xmm3
6835; SSE2-NEXT:    pandn %xmm7, %xmm8
6836; SSE2-NEXT:    por %xmm8, %xmm3
6837; SSE2-NEXT:    retq
6838;
6839; SSE4-LABEL: test150:
6840; SSE4:       # %bb.0: # %entry
6841; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6842; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6843; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6844; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6845; SSE4-NEXT:    retq
6846;
6847; AVX1-LABEL: test150:
6848; AVX1:       # %bb.0: # %entry
6849; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6850; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6851; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6852; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6853; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6854; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6855; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6856; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6857; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6858; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6859; AVX1-NEXT:    retq
6860;
6861; AVX2-LABEL: test150:
6862; AVX2:       # %bb.0: # %entry
6863; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6864; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6865; AVX2-NEXT:    retq
6866;
6867; AVX512-LABEL: test150:
6868; AVX512:       # %bb.0: # %entry
6869; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6870; AVX512-NEXT:    retq
6871entry:
6872  %cmp = icmp ule <16 x i32> %a, %b
6873  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6874  ret <16 x i32> %sel
6875}
6876
6877define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
6878; SSE2-LABEL: test151:
6879; SSE2:       # %bb.0: # %entry
6880; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6881; SSE2-NEXT:    movdqa %xmm0, %xmm9
6882; SSE2-NEXT:    pxor %xmm8, %xmm9
6883; SSE2-NEXT:    movdqa %xmm4, %xmm10
6884; SSE2-NEXT:    pxor %xmm8, %xmm10
6885; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6886; SSE2-NEXT:    pand %xmm10, %xmm0
6887; SSE2-NEXT:    pandn %xmm4, %xmm10
6888; SSE2-NEXT:    por %xmm10, %xmm0
6889; SSE2-NEXT:    movdqa %xmm1, %xmm4
6890; SSE2-NEXT:    pxor %xmm8, %xmm4
6891; SSE2-NEXT:    movdqa %xmm5, %xmm9
6892; SSE2-NEXT:    pxor %xmm8, %xmm9
6893; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6894; SSE2-NEXT:    pand %xmm9, %xmm1
6895; SSE2-NEXT:    pandn %xmm5, %xmm9
6896; SSE2-NEXT:    por %xmm9, %xmm1
6897; SSE2-NEXT:    movdqa %xmm2, %xmm4
6898; SSE2-NEXT:    pxor %xmm8, %xmm4
6899; SSE2-NEXT:    movdqa %xmm6, %xmm5
6900; SSE2-NEXT:    pxor %xmm8, %xmm5
6901; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6902; SSE2-NEXT:    pand %xmm5, %xmm2
6903; SSE2-NEXT:    pandn %xmm6, %xmm5
6904; SSE2-NEXT:    por %xmm5, %xmm2
6905; SSE2-NEXT:    movdqa %xmm3, %xmm4
6906; SSE2-NEXT:    pxor %xmm8, %xmm4
6907; SSE2-NEXT:    pxor %xmm7, %xmm8
6908; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6909; SSE2-NEXT:    pand %xmm8, %xmm3
6910; SSE2-NEXT:    pandn %xmm7, %xmm8
6911; SSE2-NEXT:    por %xmm8, %xmm3
6912; SSE2-NEXT:    retq
6913;
6914; SSE4-LABEL: test151:
6915; SSE4:       # %bb.0: # %entry
6916; SSE4-NEXT:    pminud %xmm4, %xmm0
6917; SSE4-NEXT:    pminud %xmm5, %xmm1
6918; SSE4-NEXT:    pminud %xmm6, %xmm2
6919; SSE4-NEXT:    pminud %xmm7, %xmm3
6920; SSE4-NEXT:    retq
6921;
6922; AVX1-LABEL: test151:
6923; AVX1:       # %bb.0: # %entry
6924; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6925; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6926; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
6927; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
6928; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6929; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6930; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6931; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
6932; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
6933; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6934; AVX1-NEXT:    retq
6935;
6936; AVX2-LABEL: test151:
6937; AVX2:       # %bb.0: # %entry
6938; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
6939; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
6940; AVX2-NEXT:    retq
6941;
6942; AVX512-LABEL: test151:
6943; AVX512:       # %bb.0: # %entry
6944; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
6945; AVX512-NEXT:    retq
6946entry:
6947  %cmp = icmp ugt <16 x i32> %a, %b
6948  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6949  ret <16 x i32> %sel
6950}
6951
6952define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
6953; SSE2-LABEL: test152:
6954; SSE2:       # %bb.0: # %entry
6955; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6956; SSE2-NEXT:    movdqa %xmm0, %xmm9
6957; SSE2-NEXT:    pxor %xmm8, %xmm9
6958; SSE2-NEXT:    movdqa %xmm4, %xmm10
6959; SSE2-NEXT:    pxor %xmm8, %xmm10
6960; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6961; SSE2-NEXT:    pand %xmm10, %xmm0
6962; SSE2-NEXT:    pandn %xmm4, %xmm10
6963; SSE2-NEXT:    por %xmm10, %xmm0
6964; SSE2-NEXT:    movdqa %xmm1, %xmm4
6965; SSE2-NEXT:    pxor %xmm8, %xmm4
6966; SSE2-NEXT:    movdqa %xmm5, %xmm9
6967; SSE2-NEXT:    pxor %xmm8, %xmm9
6968; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6969; SSE2-NEXT:    pand %xmm9, %xmm1
6970; SSE2-NEXT:    pandn %xmm5, %xmm9
6971; SSE2-NEXT:    por %xmm9, %xmm1
6972; SSE2-NEXT:    movdqa %xmm2, %xmm4
6973; SSE2-NEXT:    pxor %xmm8, %xmm4
6974; SSE2-NEXT:    movdqa %xmm6, %xmm5
6975; SSE2-NEXT:    pxor %xmm8, %xmm5
6976; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6977; SSE2-NEXT:    pand %xmm5, %xmm2
6978; SSE2-NEXT:    pandn %xmm6, %xmm5
6979; SSE2-NEXT:    por %xmm5, %xmm2
6980; SSE2-NEXT:    movdqa %xmm3, %xmm4
6981; SSE2-NEXT:    pxor %xmm8, %xmm4
6982; SSE2-NEXT:    pxor %xmm7, %xmm8
6983; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6984; SSE2-NEXT:    pand %xmm8, %xmm3
6985; SSE2-NEXT:    pandn %xmm7, %xmm8
6986; SSE2-NEXT:    por %xmm8, %xmm3
6987; SSE2-NEXT:    retq
6988;
6989; SSE4-LABEL: test152:
6990; SSE4:       # %bb.0: # %entry
6991; SSE4-NEXT:    pminud %xmm4, %xmm0
6992; SSE4-NEXT:    pminud %xmm5, %xmm1
6993; SSE4-NEXT:    pminud %xmm6, %xmm2
6994; SSE4-NEXT:    pminud %xmm7, %xmm3
6995; SSE4-NEXT:    retq
6996;
6997; AVX1-LABEL: test152:
6998; AVX1:       # %bb.0: # %entry
6999; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7000; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7001; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
7002; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
7003; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7004; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7005; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7006; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
7007; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
7008; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7009; AVX1-NEXT:    retq
7010;
7011; AVX2-LABEL: test152:
7012; AVX2:       # %bb.0: # %entry
7013; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
7014; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
7015; AVX2-NEXT:    retq
7016;
7017; AVX512-LABEL: test152:
7018; AVX512:       # %bb.0: # %entry
7019; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
7020; AVX512-NEXT:    retq
7021entry:
7022  %cmp = icmp uge <16 x i32> %a, %b
7023  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7024  ret <16 x i32> %sel
7025}
7026
7027; -----------------------
7028
7029define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
7030; SSE2-LABEL: test153:
7031; SSE2:       # %bb.0: # %entry
7032; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7033; SSE2-NEXT:    movdqa %xmm4, %xmm9
7034; SSE2-NEXT:    pxor %xmm8, %xmm9
7035; SSE2-NEXT:    movdqa %xmm0, %xmm10
7036; SSE2-NEXT:    pxor %xmm8, %xmm10
7037; SSE2-NEXT:    movdqa %xmm10, %xmm11
7038; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7039; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7040; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7041; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7042; SSE2-NEXT:    pand %xmm12, %xmm9
7043; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7044; SSE2-NEXT:    por %xmm9, %xmm10
7045; SSE2-NEXT:    pand %xmm10, %xmm0
7046; SSE2-NEXT:    pandn %xmm4, %xmm10
7047; SSE2-NEXT:    por %xmm10, %xmm0
7048; SSE2-NEXT:    movdqa %xmm5, %xmm4
7049; SSE2-NEXT:    pxor %xmm8, %xmm4
7050; SSE2-NEXT:    movdqa %xmm1, %xmm9
7051; SSE2-NEXT:    pxor %xmm8, %xmm9
7052; SSE2-NEXT:    movdqa %xmm9, %xmm10
7053; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7054; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7055; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7056; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7057; SSE2-NEXT:    pand %xmm11, %xmm4
7058; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7059; SSE2-NEXT:    por %xmm4, %xmm9
7060; SSE2-NEXT:    pand %xmm9, %xmm1
7061; SSE2-NEXT:    pandn %xmm5, %xmm9
7062; SSE2-NEXT:    por %xmm9, %xmm1
7063; SSE2-NEXT:    movdqa %xmm6, %xmm4
7064; SSE2-NEXT:    pxor %xmm8, %xmm4
7065; SSE2-NEXT:    movdqa %xmm2, %xmm5
7066; SSE2-NEXT:    pxor %xmm8, %xmm5
7067; SSE2-NEXT:    movdqa %xmm5, %xmm9
7068; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7069; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7070; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7071; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7072; SSE2-NEXT:    pand %xmm10, %xmm4
7073; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7074; SSE2-NEXT:    por %xmm4, %xmm5
7075; SSE2-NEXT:    pand %xmm5, %xmm2
7076; SSE2-NEXT:    pandn %xmm6, %xmm5
7077; SSE2-NEXT:    por %xmm5, %xmm2
7078; SSE2-NEXT:    movdqa %xmm7, %xmm4
7079; SSE2-NEXT:    pxor %xmm8, %xmm4
7080; SSE2-NEXT:    pxor %xmm3, %xmm8
7081; SSE2-NEXT:    movdqa %xmm8, %xmm5
7082; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7083; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7084; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7085; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7086; SSE2-NEXT:    pand %xmm6, %xmm4
7087; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7088; SSE2-NEXT:    por %xmm4, %xmm5
7089; SSE2-NEXT:    pand %xmm5, %xmm3
7090; SSE2-NEXT:    pandn %xmm7, %xmm5
7091; SSE2-NEXT:    por %xmm5, %xmm3
7092; SSE2-NEXT:    retq
7093;
7094; SSE4-LABEL: test153:
7095; SSE4:       # %bb.0: # %entry
7096; SSE4-NEXT:    movdqa %xmm0, %xmm8
7097; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7098; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
7099; SSE4-NEXT:    movdqa %xmm1, %xmm0
7100; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7101; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7102; SSE4-NEXT:    movdqa %xmm2, %xmm0
7103; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7104; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7105; SSE4-NEXT:    movdqa %xmm3, %xmm0
7106; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
7107; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7108; SSE4-NEXT:    movapd %xmm4, %xmm0
7109; SSE4-NEXT:    movapd %xmm5, %xmm1
7110; SSE4-NEXT:    movapd %xmm6, %xmm2
7111; SSE4-NEXT:    movapd %xmm7, %xmm3
7112; SSE4-NEXT:    retq
7113;
7114; AVX1-LABEL: test153:
7115; AVX1:       # %bb.0: # %entry
7116; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7117; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7118; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7119; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7120; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7121; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7122; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7123; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7124; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7125; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7126; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7127; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7128; AVX1-NEXT:    retq
7129;
7130; AVX2-LABEL: test153:
7131; AVX2:       # %bb.0: # %entry
7132; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7133; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7134; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7135; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7136; AVX2-NEXT:    retq
7137;
7138; AVX512-LABEL: test153:
7139; AVX512:       # %bb.0: # %entry
7140; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7141; AVX512-NEXT:    retq
7142entry:
7143  %cmp = icmp slt <8 x i64> %a, %b
7144  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7145  ret <8 x i64> %sel
7146}
7147
7148define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7149; SSE2-LABEL: test154:
7150; SSE2:       # %bb.0: # %entry
7151; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7152; SSE2-NEXT:    movdqa %xmm4, %xmm9
7153; SSE2-NEXT:    pxor %xmm8, %xmm9
7154; SSE2-NEXT:    movdqa %xmm0, %xmm10
7155; SSE2-NEXT:    pxor %xmm8, %xmm10
7156; SSE2-NEXT:    movdqa %xmm10, %xmm11
7157; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7158; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7159; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7160; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7161; SSE2-NEXT:    pand %xmm12, %xmm9
7162; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7163; SSE2-NEXT:    por %xmm9, %xmm10
7164; SSE2-NEXT:    pand %xmm10, %xmm0
7165; SSE2-NEXT:    pandn %xmm4, %xmm10
7166; SSE2-NEXT:    por %xmm10, %xmm0
7167; SSE2-NEXT:    movdqa %xmm5, %xmm4
7168; SSE2-NEXT:    pxor %xmm8, %xmm4
7169; SSE2-NEXT:    movdqa %xmm1, %xmm9
7170; SSE2-NEXT:    pxor %xmm8, %xmm9
7171; SSE2-NEXT:    movdqa %xmm9, %xmm10
7172; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7173; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7174; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7175; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7176; SSE2-NEXT:    pand %xmm11, %xmm4
7177; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7178; SSE2-NEXT:    por %xmm4, %xmm9
7179; SSE2-NEXT:    pand %xmm9, %xmm1
7180; SSE2-NEXT:    pandn %xmm5, %xmm9
7181; SSE2-NEXT:    por %xmm9, %xmm1
7182; SSE2-NEXT:    movdqa %xmm6, %xmm4
7183; SSE2-NEXT:    pxor %xmm8, %xmm4
7184; SSE2-NEXT:    movdqa %xmm2, %xmm5
7185; SSE2-NEXT:    pxor %xmm8, %xmm5
7186; SSE2-NEXT:    movdqa %xmm5, %xmm9
7187; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7188; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7189; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7190; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7191; SSE2-NEXT:    pand %xmm10, %xmm4
7192; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7193; SSE2-NEXT:    por %xmm4, %xmm5
7194; SSE2-NEXT:    pand %xmm5, %xmm2
7195; SSE2-NEXT:    pandn %xmm6, %xmm5
7196; SSE2-NEXT:    por %xmm5, %xmm2
7197; SSE2-NEXT:    movdqa %xmm7, %xmm4
7198; SSE2-NEXT:    pxor %xmm8, %xmm4
7199; SSE2-NEXT:    pxor %xmm3, %xmm8
7200; SSE2-NEXT:    movdqa %xmm8, %xmm5
7201; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7202; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7203; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7204; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7205; SSE2-NEXT:    pand %xmm6, %xmm4
7206; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7207; SSE2-NEXT:    por %xmm4, %xmm5
7208; SSE2-NEXT:    pand %xmm5, %xmm3
7209; SSE2-NEXT:    pandn %xmm7, %xmm5
7210; SSE2-NEXT:    por %xmm5, %xmm3
7211; SSE2-NEXT:    retq
7212;
7213; SSE4-LABEL: test154:
7214; SSE4:       # %bb.0: # %entry
7215; SSE4-NEXT:    movdqa %xmm0, %xmm8
7216; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7217; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
7218; SSE4-NEXT:    movdqa %xmm1, %xmm0
7219; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7220; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7221; SSE4-NEXT:    movdqa %xmm2, %xmm0
7222; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7223; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7224; SSE4-NEXT:    movdqa %xmm3, %xmm0
7225; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
7226; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7227; SSE4-NEXT:    movapd %xmm4, %xmm0
7228; SSE4-NEXT:    movapd %xmm5, %xmm1
7229; SSE4-NEXT:    movapd %xmm6, %xmm2
7230; SSE4-NEXT:    movapd %xmm7, %xmm3
7231; SSE4-NEXT:    retq
7232;
7233; AVX1-LABEL: test154:
7234; AVX1:       # %bb.0: # %entry
7235; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7236; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7237; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7238; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7239; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7240; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7241; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7242; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7243; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7244; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7245; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7246; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7247; AVX1-NEXT:    retq
7248;
7249; AVX2-LABEL: test154:
7250; AVX2:       # %bb.0: # %entry
7251; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7252; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7253; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7254; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7255; AVX2-NEXT:    retq
7256;
7257; AVX512-LABEL: test154:
7258; AVX512:       # %bb.0: # %entry
7259; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7260; AVX512-NEXT:    retq
7261entry:
7262  %cmp = icmp sle <8 x i64> %a, %b
7263  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7264  ret <8 x i64> %sel
7265}
7266
7267define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7268; SSE2-LABEL: test155:
7269; SSE2:       # %bb.0: # %entry
7270; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7271; SSE2-NEXT:    movdqa %xmm0, %xmm9
7272; SSE2-NEXT:    pxor %xmm8, %xmm9
7273; SSE2-NEXT:    movdqa %xmm4, %xmm10
7274; SSE2-NEXT:    pxor %xmm8, %xmm10
7275; SSE2-NEXT:    movdqa %xmm10, %xmm11
7276; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7277; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7278; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7279; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7280; SSE2-NEXT:    pand %xmm12, %xmm9
7281; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7282; SSE2-NEXT:    por %xmm9, %xmm10
7283; SSE2-NEXT:    pand %xmm10, %xmm0
7284; SSE2-NEXT:    pandn %xmm4, %xmm10
7285; SSE2-NEXT:    por %xmm10, %xmm0
7286; SSE2-NEXT:    movdqa %xmm1, %xmm4
7287; SSE2-NEXT:    pxor %xmm8, %xmm4
7288; SSE2-NEXT:    movdqa %xmm5, %xmm9
7289; SSE2-NEXT:    pxor %xmm8, %xmm9
7290; SSE2-NEXT:    movdqa %xmm9, %xmm10
7291; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7292; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7293; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7294; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7295; SSE2-NEXT:    pand %xmm11, %xmm4
7296; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7297; SSE2-NEXT:    por %xmm4, %xmm9
7298; SSE2-NEXT:    pand %xmm9, %xmm1
7299; SSE2-NEXT:    pandn %xmm5, %xmm9
7300; SSE2-NEXT:    por %xmm9, %xmm1
7301; SSE2-NEXT:    movdqa %xmm2, %xmm4
7302; SSE2-NEXT:    pxor %xmm8, %xmm4
7303; SSE2-NEXT:    movdqa %xmm6, %xmm5
7304; SSE2-NEXT:    pxor %xmm8, %xmm5
7305; SSE2-NEXT:    movdqa %xmm5, %xmm9
7306; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7307; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7308; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7309; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7310; SSE2-NEXT:    pand %xmm10, %xmm4
7311; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7312; SSE2-NEXT:    por %xmm4, %xmm5
7313; SSE2-NEXT:    pand %xmm5, %xmm2
7314; SSE2-NEXT:    pandn %xmm6, %xmm5
7315; SSE2-NEXT:    por %xmm5, %xmm2
7316; SSE2-NEXT:    movdqa %xmm3, %xmm4
7317; SSE2-NEXT:    pxor %xmm8, %xmm4
7318; SSE2-NEXT:    pxor %xmm7, %xmm8
7319; SSE2-NEXT:    movdqa %xmm8, %xmm5
7320; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7321; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7322; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7323; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7324; SSE2-NEXT:    pand %xmm6, %xmm4
7325; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7326; SSE2-NEXT:    por %xmm4, %xmm5
7327; SSE2-NEXT:    pand %xmm5, %xmm3
7328; SSE2-NEXT:    pandn %xmm7, %xmm5
7329; SSE2-NEXT:    por %xmm5, %xmm3
7330; SSE2-NEXT:    retq
7331;
7332; SSE4-LABEL: test155:
7333; SSE4:       # %bb.0: # %entry
7334; SSE4-NEXT:    movdqa %xmm0, %xmm8
7335; SSE4-NEXT:    movdqa %xmm4, %xmm0
7336; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7337; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
7338; SSE4-NEXT:    movdqa %xmm5, %xmm0
7339; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7340; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7341; SSE4-NEXT:    movdqa %xmm6, %xmm0
7342; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7343; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7344; SSE4-NEXT:    movdqa %xmm7, %xmm0
7345; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7346; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7347; SSE4-NEXT:    movapd %xmm4, %xmm0
7348; SSE4-NEXT:    movapd %xmm5, %xmm1
7349; SSE4-NEXT:    movapd %xmm6, %xmm2
7350; SSE4-NEXT:    movapd %xmm7, %xmm3
7351; SSE4-NEXT:    retq
7352;
7353; AVX1-LABEL: test155:
7354; AVX1:       # %bb.0: # %entry
7355; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7356; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
7357; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7358; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
7359; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7360; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7361; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7362; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7363; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7364; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
7365; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7366; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7367; AVX1-NEXT:    retq
7368;
7369; AVX2-LABEL: test155:
7370; AVX2:       # %bb.0: # %entry
7371; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
7372; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7373; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
7374; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7375; AVX2-NEXT:    retq
7376;
7377; AVX512-LABEL: test155:
7378; AVX512:       # %bb.0: # %entry
7379; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7380; AVX512-NEXT:    retq
7381entry:
7382  %cmp = icmp sgt <8 x i64> %a, %b
7383  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7384  ret <8 x i64> %sel
7385}
7386
7387define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7388; SSE2-LABEL: test156:
7389; SSE2:       # %bb.0: # %entry
7390; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7391; SSE2-NEXT:    movdqa %xmm4, %xmm9
7392; SSE2-NEXT:    pxor %xmm8, %xmm9
7393; SSE2-NEXT:    movdqa %xmm0, %xmm10
7394; SSE2-NEXT:    pxor %xmm8, %xmm10
7395; SSE2-NEXT:    movdqa %xmm10, %xmm11
7396; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7397; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7398; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7399; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7400; SSE2-NEXT:    pand %xmm12, %xmm9
7401; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7402; SSE2-NEXT:    por %xmm9, %xmm10
7403; SSE2-NEXT:    pand %xmm10, %xmm0
7404; SSE2-NEXT:    pandn %xmm4, %xmm10
7405; SSE2-NEXT:    por %xmm10, %xmm0
7406; SSE2-NEXT:    movdqa %xmm5, %xmm4
7407; SSE2-NEXT:    pxor %xmm8, %xmm4
7408; SSE2-NEXT:    movdqa %xmm1, %xmm9
7409; SSE2-NEXT:    pxor %xmm8, %xmm9
7410; SSE2-NEXT:    movdqa %xmm9, %xmm10
7411; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7412; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7413; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7414; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7415; SSE2-NEXT:    pand %xmm11, %xmm4
7416; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7417; SSE2-NEXT:    por %xmm4, %xmm9
7418; SSE2-NEXT:    pand %xmm9, %xmm1
7419; SSE2-NEXT:    pandn %xmm5, %xmm9
7420; SSE2-NEXT:    por %xmm9, %xmm1
7421; SSE2-NEXT:    movdqa %xmm6, %xmm4
7422; SSE2-NEXT:    pxor %xmm8, %xmm4
7423; SSE2-NEXT:    movdqa %xmm2, %xmm5
7424; SSE2-NEXT:    pxor %xmm8, %xmm5
7425; SSE2-NEXT:    movdqa %xmm5, %xmm9
7426; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7427; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7428; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7429; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7430; SSE2-NEXT:    pand %xmm10, %xmm4
7431; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7432; SSE2-NEXT:    por %xmm4, %xmm5
7433; SSE2-NEXT:    pand %xmm5, %xmm2
7434; SSE2-NEXT:    pandn %xmm6, %xmm5
7435; SSE2-NEXT:    por %xmm5, %xmm2
7436; SSE2-NEXT:    movdqa %xmm7, %xmm4
7437; SSE2-NEXT:    pxor %xmm8, %xmm4
7438; SSE2-NEXT:    pxor %xmm3, %xmm8
7439; SSE2-NEXT:    movdqa %xmm8, %xmm5
7440; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7441; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7442; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7443; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7444; SSE2-NEXT:    pand %xmm6, %xmm4
7445; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7446; SSE2-NEXT:    por %xmm4, %xmm5
7447; SSE2-NEXT:    pand %xmm5, %xmm3
7448; SSE2-NEXT:    pandn %xmm7, %xmm5
7449; SSE2-NEXT:    por %xmm5, %xmm3
7450; SSE2-NEXT:    retq
7451;
7452; SSE4-LABEL: test156:
7453; SSE4:       # %bb.0: # %entry
7454; SSE4-NEXT:    movdqa %xmm0, %xmm9
7455; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7456; SSE4-NEXT:    movdqa %xmm4, %xmm10
7457; SSE4-NEXT:    pxor %xmm8, %xmm10
7458; SSE4-NEXT:    pxor %xmm8, %xmm0
7459; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7460; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7461; SSE4-NEXT:    movdqa %xmm5, %xmm9
7462; SSE4-NEXT:    pxor %xmm8, %xmm9
7463; SSE4-NEXT:    movdqa %xmm1, %xmm0
7464; SSE4-NEXT:    pxor %xmm8, %xmm0
7465; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7466; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7467; SSE4-NEXT:    movdqa %xmm6, %xmm1
7468; SSE4-NEXT:    pxor %xmm8, %xmm1
7469; SSE4-NEXT:    movdqa %xmm2, %xmm0
7470; SSE4-NEXT:    pxor %xmm8, %xmm0
7471; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7472; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7473; SSE4-NEXT:    movdqa %xmm7, %xmm0
7474; SSE4-NEXT:    pxor %xmm8, %xmm0
7475; SSE4-NEXT:    pxor %xmm3, %xmm8
7476; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7477; SSE4-NEXT:    movdqa %xmm8, %xmm0
7478; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7479; SSE4-NEXT:    movapd %xmm4, %xmm0
7480; SSE4-NEXT:    movapd %xmm5, %xmm1
7481; SSE4-NEXT:    movapd %xmm6, %xmm2
7482; SSE4-NEXT:    movapd %xmm7, %xmm3
7483; SSE4-NEXT:    retq
7484;
7485; AVX1-LABEL: test156:
7486; AVX1:       # %bb.0: # %entry
7487; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7488; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7489; AVX1-NEXT:    # xmm5 = mem[0,0]
7490; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7491; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7492; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7493; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7494; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
7495; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
7496; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7497; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7498; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7499; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7500; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7501; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7502; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7503; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7504; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
7505; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
7506; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7507; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7508; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7509; AVX1-NEXT:    retq
7510;
7511; AVX2-LABEL: test156:
7512; AVX2:       # %bb.0: # %entry
7513; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7514; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
7515; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
7516; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7517; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7518; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
7519; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
7520; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7521; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7522; AVX2-NEXT:    retq
7523;
7524; AVX512-LABEL: test156:
7525; AVX512:       # %bb.0: # %entry
7526; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
7527; AVX512-NEXT:    retq
7528entry:
7529  %cmp = icmp ule <8 x i64> %a, %b
7530  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7531  ret <8 x i64> %sel
7532}
7533
7534define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
7535; SSE2-LABEL: test159:
7536; SSE2:       # %bb.0: # %entry
7537; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7538; SSE2-NEXT:    movdqa %xmm0, %xmm9
7539; SSE2-NEXT:    pxor %xmm8, %xmm9
7540; SSE2-NEXT:    movdqa %xmm4, %xmm10
7541; SSE2-NEXT:    pxor %xmm8, %xmm10
7542; SSE2-NEXT:    movdqa %xmm10, %xmm11
7543; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7544; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7545; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7546; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7547; SSE2-NEXT:    pand %xmm12, %xmm9
7548; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7549; SSE2-NEXT:    por %xmm9, %xmm10
7550; SSE2-NEXT:    pand %xmm10, %xmm0
7551; SSE2-NEXT:    pandn %xmm4, %xmm10
7552; SSE2-NEXT:    por %xmm10, %xmm0
7553; SSE2-NEXT:    movdqa %xmm1, %xmm4
7554; SSE2-NEXT:    pxor %xmm8, %xmm4
7555; SSE2-NEXT:    movdqa %xmm5, %xmm9
7556; SSE2-NEXT:    pxor %xmm8, %xmm9
7557; SSE2-NEXT:    movdqa %xmm9, %xmm10
7558; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7559; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7560; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7561; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7562; SSE2-NEXT:    pand %xmm11, %xmm4
7563; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7564; SSE2-NEXT:    por %xmm4, %xmm9
7565; SSE2-NEXT:    pand %xmm9, %xmm1
7566; SSE2-NEXT:    pandn %xmm5, %xmm9
7567; SSE2-NEXT:    por %xmm9, %xmm1
7568; SSE2-NEXT:    movdqa %xmm2, %xmm4
7569; SSE2-NEXT:    pxor %xmm8, %xmm4
7570; SSE2-NEXT:    movdqa %xmm6, %xmm5
7571; SSE2-NEXT:    pxor %xmm8, %xmm5
7572; SSE2-NEXT:    movdqa %xmm5, %xmm9
7573; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7574; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7575; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7576; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7577; SSE2-NEXT:    pand %xmm10, %xmm4
7578; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7579; SSE2-NEXT:    por %xmm4, %xmm5
7580; SSE2-NEXT:    pand %xmm5, %xmm2
7581; SSE2-NEXT:    pandn %xmm6, %xmm5
7582; SSE2-NEXT:    por %xmm5, %xmm2
7583; SSE2-NEXT:    movdqa %xmm3, %xmm4
7584; SSE2-NEXT:    pxor %xmm8, %xmm4
7585; SSE2-NEXT:    pxor %xmm7, %xmm8
7586; SSE2-NEXT:    movdqa %xmm8, %xmm5
7587; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7588; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7589; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7590; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7591; SSE2-NEXT:    pand %xmm6, %xmm4
7592; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7593; SSE2-NEXT:    por %xmm4, %xmm5
7594; SSE2-NEXT:    pand %xmm5, %xmm3
7595; SSE2-NEXT:    pandn %xmm7, %xmm5
7596; SSE2-NEXT:    por %xmm5, %xmm3
7597; SSE2-NEXT:    retq
7598;
7599; SSE4-LABEL: test159:
7600; SSE4:       # %bb.0: # %entry
7601; SSE4-NEXT:    movdqa %xmm0, %xmm9
7602; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7603; SSE4-NEXT:    movdqa %xmm0, %xmm10
7604; SSE4-NEXT:    pxor %xmm8, %xmm10
7605; SSE4-NEXT:    movdqa %xmm4, %xmm0
7606; SSE4-NEXT:    pxor %xmm8, %xmm0
7607; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7608; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7609; SSE4-NEXT:    movdqa %xmm1, %xmm9
7610; SSE4-NEXT:    pxor %xmm8, %xmm9
7611; SSE4-NEXT:    movdqa %xmm5, %xmm0
7612; SSE4-NEXT:    pxor %xmm8, %xmm0
7613; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7614; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7615; SSE4-NEXT:    movdqa %xmm2, %xmm1
7616; SSE4-NEXT:    pxor %xmm8, %xmm1
7617; SSE4-NEXT:    movdqa %xmm6, %xmm0
7618; SSE4-NEXT:    pxor %xmm8, %xmm0
7619; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7620; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7621; SSE4-NEXT:    movdqa %xmm3, %xmm0
7622; SSE4-NEXT:    pxor %xmm8, %xmm0
7623; SSE4-NEXT:    pxor %xmm7, %xmm8
7624; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7625; SSE4-NEXT:    movdqa %xmm8, %xmm0
7626; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7627; SSE4-NEXT:    movapd %xmm4, %xmm0
7628; SSE4-NEXT:    movapd %xmm5, %xmm1
7629; SSE4-NEXT:    movapd %xmm6, %xmm2
7630; SSE4-NEXT:    movapd %xmm7, %xmm3
7631; SSE4-NEXT:    retq
7632;
7633; AVX1-LABEL: test159:
7634; AVX1:       # %bb.0: # %entry
7635; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7636; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7637; AVX1-NEXT:    # xmm5 = mem[0,0]
7638; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7639; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7640; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7641; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7642; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7643; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7644; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7645; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7646; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7647; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7648; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7649; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7650; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7651; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7652; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7653; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7654; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7655; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7656; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7657; AVX1-NEXT:    retq
7658;
7659; AVX2-LABEL: test159:
7660; AVX2:       # %bb.0: # %entry
7661; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7662; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7663; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7664; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7665; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7666; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7667; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7668; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7669; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7670; AVX2-NEXT:    retq
7671;
7672; AVX512-LABEL: test159:
7673; AVX512:       # %bb.0: # %entry
7674; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7675; AVX512-NEXT:    retq
7676entry:
7677  %cmp = icmp ugt <8 x i64> %a, %b
7678  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7679  ret <8 x i64> %sel
7680}
7681
7682define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
7683; SSE2-LABEL: test160:
7684; SSE2:       # %bb.0: # %entry
7685; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7686; SSE2-NEXT:    movdqa %xmm0, %xmm9
7687; SSE2-NEXT:    pxor %xmm8, %xmm9
7688; SSE2-NEXT:    movdqa %xmm4, %xmm10
7689; SSE2-NEXT:    pxor %xmm8, %xmm10
7690; SSE2-NEXT:    movdqa %xmm10, %xmm11
7691; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7692; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7693; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7694; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7695; SSE2-NEXT:    pand %xmm12, %xmm9
7696; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7697; SSE2-NEXT:    por %xmm9, %xmm10
7698; SSE2-NEXT:    pand %xmm10, %xmm0
7699; SSE2-NEXT:    pandn %xmm4, %xmm10
7700; SSE2-NEXT:    por %xmm10, %xmm0
7701; SSE2-NEXT:    movdqa %xmm1, %xmm4
7702; SSE2-NEXT:    pxor %xmm8, %xmm4
7703; SSE2-NEXT:    movdqa %xmm5, %xmm9
7704; SSE2-NEXT:    pxor %xmm8, %xmm9
7705; SSE2-NEXT:    movdqa %xmm9, %xmm10
7706; SSE2-NEXT:    pcmpgtd %xmm4, %xmm10
7707; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7708; SSE2-NEXT:    pcmpeqd %xmm4, %xmm9
7709; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm9[1,1,3,3]
7710; SSE2-NEXT:    pand %xmm11, %xmm4
7711; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7712; SSE2-NEXT:    por %xmm4, %xmm9
7713; SSE2-NEXT:    pand %xmm9, %xmm1
7714; SSE2-NEXT:    pandn %xmm5, %xmm9
7715; SSE2-NEXT:    por %xmm9, %xmm1
7716; SSE2-NEXT:    movdqa %xmm2, %xmm4
7717; SSE2-NEXT:    pxor %xmm8, %xmm4
7718; SSE2-NEXT:    movdqa %xmm6, %xmm5
7719; SSE2-NEXT:    pxor %xmm8, %xmm5
7720; SSE2-NEXT:    movdqa %xmm5, %xmm9
7721; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7722; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7723; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7724; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7725; SSE2-NEXT:    pand %xmm10, %xmm4
7726; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7727; SSE2-NEXT:    por %xmm4, %xmm5
7728; SSE2-NEXT:    pand %xmm5, %xmm2
7729; SSE2-NEXT:    pandn %xmm6, %xmm5
7730; SSE2-NEXT:    por %xmm5, %xmm2
7731; SSE2-NEXT:    movdqa %xmm3, %xmm4
7732; SSE2-NEXT:    pxor %xmm8, %xmm4
7733; SSE2-NEXT:    pxor %xmm7, %xmm8
7734; SSE2-NEXT:    movdqa %xmm8, %xmm5
7735; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7736; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7737; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7738; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7739; SSE2-NEXT:    pand %xmm6, %xmm4
7740; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7741; SSE2-NEXT:    por %xmm4, %xmm5
7742; SSE2-NEXT:    pand %xmm5, %xmm3
7743; SSE2-NEXT:    pandn %xmm7, %xmm5
7744; SSE2-NEXT:    por %xmm5, %xmm3
7745; SSE2-NEXT:    retq
7746;
7747; SSE4-LABEL: test160:
7748; SSE4:       # %bb.0: # %entry
7749; SSE4-NEXT:    movdqa %xmm0, %xmm9
7750; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7751; SSE4-NEXT:    movdqa %xmm0, %xmm10
7752; SSE4-NEXT:    pxor %xmm8, %xmm10
7753; SSE4-NEXT:    movdqa %xmm4, %xmm0
7754; SSE4-NEXT:    pxor %xmm8, %xmm0
7755; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7756; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7757; SSE4-NEXT:    movdqa %xmm1, %xmm9
7758; SSE4-NEXT:    pxor %xmm8, %xmm9
7759; SSE4-NEXT:    movdqa %xmm5, %xmm0
7760; SSE4-NEXT:    pxor %xmm8, %xmm0
7761; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7762; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7763; SSE4-NEXT:    movdqa %xmm2, %xmm1
7764; SSE4-NEXT:    pxor %xmm8, %xmm1
7765; SSE4-NEXT:    movdqa %xmm6, %xmm0
7766; SSE4-NEXT:    pxor %xmm8, %xmm0
7767; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7768; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7769; SSE4-NEXT:    movdqa %xmm3, %xmm0
7770; SSE4-NEXT:    pxor %xmm8, %xmm0
7771; SSE4-NEXT:    pxor %xmm7, %xmm8
7772; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7773; SSE4-NEXT:    movdqa %xmm8, %xmm0
7774; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7775; SSE4-NEXT:    movapd %xmm4, %xmm0
7776; SSE4-NEXT:    movapd %xmm5, %xmm1
7777; SSE4-NEXT:    movapd %xmm6, %xmm2
7778; SSE4-NEXT:    movapd %xmm7, %xmm3
7779; SSE4-NEXT:    retq
7780;
7781; AVX1-LABEL: test160:
7782; AVX1:       # %bb.0: # %entry
7783; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7784; AVX1-NEXT:    vmovddup {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7785; AVX1-NEXT:    # xmm5 = mem[0,0]
7786; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7787; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7788; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7789; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7790; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7791; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7792; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7793; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7794; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7795; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7796; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7797; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7798; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7799; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7800; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7801; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7802; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7803; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7804; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7805; AVX1-NEXT:    retq
7806;
7807; AVX2-LABEL: test160:
7808; AVX2:       # %bb.0: # %entry
7809; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7810; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7811; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7812; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7813; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7814; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7815; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7816; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7817; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7818; AVX2-NEXT:    retq
7819;
7820; AVX512-LABEL: test160:
7821; AVX512:       # %bb.0: # %entry
7822; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7823; AVX512-NEXT:    retq
7824entry:
7825  %cmp = icmp uge <8 x i64> %a, %b
7826  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7827  ret <8 x i64> %sel
7828}
7829
7830define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
7831; SSE2-LABEL: test161:
7832; SSE2:       # %bb.0: # %entry
7833; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7834; SSE2-NEXT:    movdqa %xmm0, %xmm5
7835; SSE2-NEXT:    pxor %xmm4, %xmm5
7836; SSE2-NEXT:    movdqa %xmm2, %xmm6
7837; SSE2-NEXT:    pxor %xmm4, %xmm6
7838; SSE2-NEXT:    movdqa %xmm6, %xmm7
7839; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7840; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7841; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7842; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7843; SSE2-NEXT:    pand %xmm8, %xmm5
7844; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7845; SSE2-NEXT:    por %xmm5, %xmm6
7846; SSE2-NEXT:    pand %xmm6, %xmm0
7847; SSE2-NEXT:    pandn %xmm2, %xmm6
7848; SSE2-NEXT:    por %xmm6, %xmm0
7849; SSE2-NEXT:    movdqa %xmm1, %xmm2
7850; SSE2-NEXT:    pxor %xmm4, %xmm2
7851; SSE2-NEXT:    pxor %xmm3, %xmm4
7852; SSE2-NEXT:    movdqa %xmm4, %xmm5
7853; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7854; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7855; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7856; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7857; SSE2-NEXT:    pand %xmm6, %xmm2
7858; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7859; SSE2-NEXT:    por %xmm2, %xmm4
7860; SSE2-NEXT:    pand %xmm4, %xmm1
7861; SSE2-NEXT:    pandn %xmm3, %xmm4
7862; SSE2-NEXT:    por %xmm4, %xmm1
7863; SSE2-NEXT:    retq
7864;
7865; SSE4-LABEL: test161:
7866; SSE4:       # %bb.0: # %entry
7867; SSE4-NEXT:    movdqa %xmm0, %xmm4
7868; SSE4-NEXT:    movdqa %xmm2, %xmm0
7869; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7870; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7871; SSE4-NEXT:    movdqa %xmm3, %xmm0
7872; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7873; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7874; SSE4-NEXT:    movapd %xmm2, %xmm0
7875; SSE4-NEXT:    movapd %xmm3, %xmm1
7876; SSE4-NEXT:    retq
7877;
7878; AVX1-LABEL: test161:
7879; AVX1:       # %bb.0: # %entry
7880; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7881; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7882; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7883; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7884; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7885; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7886; AVX1-NEXT:    retq
7887;
7888; AVX2-LABEL: test161:
7889; AVX2:       # %bb.0: # %entry
7890; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7891; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7892; AVX2-NEXT:    retq
7893;
7894; AVX512F-LABEL: test161:
7895; AVX512F:       # %bb.0: # %entry
7896; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
7897; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7898; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7899; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
7900; AVX512F-NEXT:    retq
7901;
7902; AVX512BW-LABEL: test161:
7903; AVX512BW:       # %bb.0: # %entry
7904; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7905; AVX512BW-NEXT:    retq
7906entry:
7907  %cmp = icmp slt <4 x i64> %a, %b
7908  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7909  ret <4 x i64> %sel
7910}
7911
7912define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
7913; SSE2-LABEL: test162:
7914; SSE2:       # %bb.0: # %entry
7915; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7916; SSE2-NEXT:    movdqa %xmm0, %xmm5
7917; SSE2-NEXT:    pxor %xmm4, %xmm5
7918; SSE2-NEXT:    movdqa %xmm2, %xmm6
7919; SSE2-NEXT:    pxor %xmm4, %xmm6
7920; SSE2-NEXT:    movdqa %xmm6, %xmm7
7921; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7922; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7923; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7924; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7925; SSE2-NEXT:    pand %xmm8, %xmm5
7926; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7927; SSE2-NEXT:    por %xmm5, %xmm6
7928; SSE2-NEXT:    pand %xmm6, %xmm0
7929; SSE2-NEXT:    pandn %xmm2, %xmm6
7930; SSE2-NEXT:    por %xmm6, %xmm0
7931; SSE2-NEXT:    movdqa %xmm1, %xmm2
7932; SSE2-NEXT:    pxor %xmm4, %xmm2
7933; SSE2-NEXT:    pxor %xmm3, %xmm4
7934; SSE2-NEXT:    movdqa %xmm4, %xmm5
7935; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7936; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7937; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7938; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7939; SSE2-NEXT:    pand %xmm6, %xmm2
7940; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7941; SSE2-NEXT:    por %xmm2, %xmm4
7942; SSE2-NEXT:    pand %xmm4, %xmm1
7943; SSE2-NEXT:    pandn %xmm3, %xmm4
7944; SSE2-NEXT:    por %xmm4, %xmm1
7945; SSE2-NEXT:    retq
7946;
7947; SSE4-LABEL: test162:
7948; SSE4:       # %bb.0: # %entry
7949; SSE4-NEXT:    movdqa %xmm0, %xmm4
7950; SSE4-NEXT:    movdqa %xmm2, %xmm0
7951; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7952; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7953; SSE4-NEXT:    movdqa %xmm3, %xmm0
7954; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7955; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7956; SSE4-NEXT:    movapd %xmm2, %xmm0
7957; SSE4-NEXT:    movapd %xmm3, %xmm1
7958; SSE4-NEXT:    retq
7959;
7960; AVX1-LABEL: test162:
7961; AVX1:       # %bb.0: # %entry
7962; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7963; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7964; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7965; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7966; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7967; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7968; AVX1-NEXT:    retq
7969;
7970; AVX2-LABEL: test162:
7971; AVX2:       # %bb.0: # %entry
7972; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7973; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7974; AVX2-NEXT:    retq
7975;
7976; AVX512F-LABEL: test162:
7977; AVX512F:       # %bb.0: # %entry
7978; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
7979; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7980; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7981; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
7982; AVX512F-NEXT:    retq
7983;
7984; AVX512BW-LABEL: test162:
7985; AVX512BW:       # %bb.0: # %entry
7986; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7987; AVX512BW-NEXT:    retq
7988entry:
7989  %cmp = icmp sle <4 x i64> %a, %b
7990  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7991  ret <4 x i64> %sel
7992}
7993
7994define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
7995; SSE2-LABEL: test163:
7996; SSE2:       # %bb.0: # %entry
7997; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7998; SSE2-NEXT:    movdqa %xmm2, %xmm5
7999; SSE2-NEXT:    pxor %xmm4, %xmm5
8000; SSE2-NEXT:    movdqa %xmm0, %xmm6
8001; SSE2-NEXT:    pxor %xmm4, %xmm6
8002; SSE2-NEXT:    movdqa %xmm6, %xmm7
8003; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8004; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8005; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8006; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8007; SSE2-NEXT:    pand %xmm8, %xmm5
8008; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8009; SSE2-NEXT:    por %xmm5, %xmm6
8010; SSE2-NEXT:    pand %xmm6, %xmm0
8011; SSE2-NEXT:    pandn %xmm2, %xmm6
8012; SSE2-NEXT:    por %xmm6, %xmm0
8013; SSE2-NEXT:    movdqa %xmm3, %xmm2
8014; SSE2-NEXT:    pxor %xmm4, %xmm2
8015; SSE2-NEXT:    pxor %xmm1, %xmm4
8016; SSE2-NEXT:    movdqa %xmm4, %xmm5
8017; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8018; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8019; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8020; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8021; SSE2-NEXT:    pand %xmm6, %xmm2
8022; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8023; SSE2-NEXT:    por %xmm2, %xmm4
8024; SSE2-NEXT:    pand %xmm4, %xmm1
8025; SSE2-NEXT:    pandn %xmm3, %xmm4
8026; SSE2-NEXT:    por %xmm4, %xmm1
8027; SSE2-NEXT:    retq
8028;
8029; SSE4-LABEL: test163:
8030; SSE4:       # %bb.0: # %entry
8031; SSE4-NEXT:    movdqa %xmm0, %xmm4
8032; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8033; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8034; SSE4-NEXT:    movdqa %xmm1, %xmm0
8035; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8036; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8037; SSE4-NEXT:    movapd %xmm2, %xmm0
8038; SSE4-NEXT:    movapd %xmm3, %xmm1
8039; SSE4-NEXT:    retq
8040;
8041; AVX1-LABEL: test163:
8042; AVX1:       # %bb.0: # %entry
8043; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8044; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8045; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8046; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8047; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8048; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8049; AVX1-NEXT:    retq
8050;
8051; AVX2-LABEL: test163:
8052; AVX2:       # %bb.0: # %entry
8053; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8054; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8055; AVX2-NEXT:    retq
8056;
8057; AVX512F-LABEL: test163:
8058; AVX512F:       # %bb.0: # %entry
8059; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8060; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8061; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8062; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8063; AVX512F-NEXT:    retq
8064;
8065; AVX512BW-LABEL: test163:
8066; AVX512BW:       # %bb.0: # %entry
8067; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8068; AVX512BW-NEXT:    retq
8069entry:
8070  %cmp = icmp sgt <4 x i64> %a, %b
8071  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8072  ret <4 x i64> %sel
8073}
8074
8075define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
8076; SSE2-LABEL: test164:
8077; SSE2:       # %bb.0: # %entry
8078; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8079; SSE2-NEXT:    movdqa %xmm2, %xmm5
8080; SSE2-NEXT:    pxor %xmm4, %xmm5
8081; SSE2-NEXT:    movdqa %xmm0, %xmm6
8082; SSE2-NEXT:    pxor %xmm4, %xmm6
8083; SSE2-NEXT:    movdqa %xmm6, %xmm7
8084; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8085; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8086; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8087; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8088; SSE2-NEXT:    pand %xmm8, %xmm5
8089; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8090; SSE2-NEXT:    por %xmm5, %xmm6
8091; SSE2-NEXT:    pand %xmm6, %xmm0
8092; SSE2-NEXT:    pandn %xmm2, %xmm6
8093; SSE2-NEXT:    por %xmm6, %xmm0
8094; SSE2-NEXT:    movdqa %xmm3, %xmm2
8095; SSE2-NEXT:    pxor %xmm4, %xmm2
8096; SSE2-NEXT:    pxor %xmm1, %xmm4
8097; SSE2-NEXT:    movdqa %xmm4, %xmm5
8098; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8099; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8100; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8101; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8102; SSE2-NEXT:    pand %xmm6, %xmm2
8103; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8104; SSE2-NEXT:    por %xmm2, %xmm4
8105; SSE2-NEXT:    pand %xmm4, %xmm1
8106; SSE2-NEXT:    pandn %xmm3, %xmm4
8107; SSE2-NEXT:    por %xmm4, %xmm1
8108; SSE2-NEXT:    retq
8109;
8110; SSE4-LABEL: test164:
8111; SSE4:       # %bb.0: # %entry
8112; SSE4-NEXT:    movdqa %xmm0, %xmm4
8113; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8114; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8115; SSE4-NEXT:    movdqa %xmm1, %xmm0
8116; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8117; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8118; SSE4-NEXT:    movapd %xmm2, %xmm0
8119; SSE4-NEXT:    movapd %xmm3, %xmm1
8120; SSE4-NEXT:    retq
8121;
8122; AVX1-LABEL: test164:
8123; AVX1:       # %bb.0: # %entry
8124; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8125; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8126; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8127; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8128; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8129; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8130; AVX1-NEXT:    retq
8131;
8132; AVX2-LABEL: test164:
8133; AVX2:       # %bb.0: # %entry
8134; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8135; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8136; AVX2-NEXT:    retq
8137;
8138; AVX512F-LABEL: test164:
8139; AVX512F:       # %bb.0: # %entry
8140; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8141; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8142; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8143; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8144; AVX512F-NEXT:    retq
8145;
8146; AVX512BW-LABEL: test164:
8147; AVX512BW:       # %bb.0: # %entry
8148; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8149; AVX512BW-NEXT:    retq
8150entry:
8151  %cmp = icmp sge <4 x i64> %a, %b
8152  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8153  ret <4 x i64> %sel
8154}
8155
8156define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
8157; SSE2-LABEL: test165:
8158; SSE2:       # %bb.0: # %entry
8159; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8160; SSE2-NEXT:    movdqa %xmm0, %xmm5
8161; SSE2-NEXT:    pxor %xmm4, %xmm5
8162; SSE2-NEXT:    movdqa %xmm2, %xmm6
8163; SSE2-NEXT:    pxor %xmm4, %xmm6
8164; SSE2-NEXT:    movdqa %xmm6, %xmm7
8165; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8166; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8167; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8168; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8169; SSE2-NEXT:    pand %xmm8, %xmm5
8170; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8171; SSE2-NEXT:    por %xmm5, %xmm6
8172; SSE2-NEXT:    pand %xmm6, %xmm0
8173; SSE2-NEXT:    pandn %xmm2, %xmm6
8174; SSE2-NEXT:    por %xmm6, %xmm0
8175; SSE2-NEXT:    movdqa %xmm1, %xmm2
8176; SSE2-NEXT:    pxor %xmm4, %xmm2
8177; SSE2-NEXT:    pxor %xmm3, %xmm4
8178; SSE2-NEXT:    movdqa %xmm4, %xmm5
8179; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8180; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8181; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8182; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8183; SSE2-NEXT:    pand %xmm6, %xmm2
8184; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8185; SSE2-NEXT:    por %xmm2, %xmm4
8186; SSE2-NEXT:    pand %xmm4, %xmm1
8187; SSE2-NEXT:    pandn %xmm3, %xmm4
8188; SSE2-NEXT:    por %xmm4, %xmm1
8189; SSE2-NEXT:    retq
8190;
8191; SSE4-LABEL: test165:
8192; SSE4:       # %bb.0: # %entry
8193; SSE4-NEXT:    movdqa %xmm0, %xmm4
8194; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8195; SSE4-NEXT:    movdqa %xmm0, %xmm6
8196; SSE4-NEXT:    pxor %xmm5, %xmm6
8197; SSE4-NEXT:    movdqa %xmm2, %xmm0
8198; SSE4-NEXT:    pxor %xmm5, %xmm0
8199; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8200; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8201; SSE4-NEXT:    movdqa %xmm1, %xmm0
8202; SSE4-NEXT:    pxor %xmm5, %xmm0
8203; SSE4-NEXT:    pxor %xmm3, %xmm5
8204; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8205; SSE4-NEXT:    movdqa %xmm5, %xmm0
8206; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8207; SSE4-NEXT:    movapd %xmm2, %xmm0
8208; SSE4-NEXT:    movapd %xmm3, %xmm1
8209; SSE4-NEXT:    retq
8210;
8211; AVX1-LABEL: test165:
8212; AVX1:       # %bb.0: # %entry
8213; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8214; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8215; AVX1-NEXT:    # xmm3 = mem[0,0]
8216; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8217; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8218; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8219; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8220; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8221; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8222; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8223; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8224; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8225; AVX1-NEXT:    retq
8226;
8227; AVX2-LABEL: test165:
8228; AVX2:       # %bb.0: # %entry
8229; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8230; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8231; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8232; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8233; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8234; AVX2-NEXT:    retq
8235;
8236; AVX512F-LABEL: test165:
8237; AVX512F:       # %bb.0: # %entry
8238; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8239; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8240; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8241; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8242; AVX512F-NEXT:    retq
8243;
8244; AVX512BW-LABEL: test165:
8245; AVX512BW:       # %bb.0: # %entry
8246; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8247; AVX512BW-NEXT:    retq
8248entry:
8249  %cmp = icmp ult <4 x i64> %a, %b
8250  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8251  ret <4 x i64> %sel
8252}
8253
8254define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
8255; SSE2-LABEL: test166:
8256; SSE2:       # %bb.0: # %entry
8257; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8258; SSE2-NEXT:    movdqa %xmm0, %xmm5
8259; SSE2-NEXT:    pxor %xmm4, %xmm5
8260; SSE2-NEXT:    movdqa %xmm2, %xmm6
8261; SSE2-NEXT:    pxor %xmm4, %xmm6
8262; SSE2-NEXT:    movdqa %xmm6, %xmm7
8263; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8264; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8265; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8266; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8267; SSE2-NEXT:    pand %xmm8, %xmm5
8268; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8269; SSE2-NEXT:    por %xmm5, %xmm6
8270; SSE2-NEXT:    pand %xmm6, %xmm0
8271; SSE2-NEXT:    pandn %xmm2, %xmm6
8272; SSE2-NEXT:    por %xmm6, %xmm0
8273; SSE2-NEXT:    movdqa %xmm1, %xmm2
8274; SSE2-NEXT:    pxor %xmm4, %xmm2
8275; SSE2-NEXT:    pxor %xmm3, %xmm4
8276; SSE2-NEXT:    movdqa %xmm4, %xmm5
8277; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8278; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8279; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8280; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8281; SSE2-NEXT:    pand %xmm6, %xmm2
8282; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8283; SSE2-NEXT:    por %xmm2, %xmm4
8284; SSE2-NEXT:    pand %xmm4, %xmm1
8285; SSE2-NEXT:    pandn %xmm3, %xmm4
8286; SSE2-NEXT:    por %xmm4, %xmm1
8287; SSE2-NEXT:    retq
8288;
8289; SSE4-LABEL: test166:
8290; SSE4:       # %bb.0: # %entry
8291; SSE4-NEXT:    movdqa %xmm0, %xmm4
8292; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8293; SSE4-NEXT:    movdqa %xmm0, %xmm6
8294; SSE4-NEXT:    pxor %xmm5, %xmm6
8295; SSE4-NEXT:    movdqa %xmm2, %xmm0
8296; SSE4-NEXT:    pxor %xmm5, %xmm0
8297; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8298; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8299; SSE4-NEXT:    movdqa %xmm1, %xmm0
8300; SSE4-NEXT:    pxor %xmm5, %xmm0
8301; SSE4-NEXT:    pxor %xmm3, %xmm5
8302; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8303; SSE4-NEXT:    movdqa %xmm5, %xmm0
8304; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8305; SSE4-NEXT:    movapd %xmm2, %xmm0
8306; SSE4-NEXT:    movapd %xmm3, %xmm1
8307; SSE4-NEXT:    retq
8308;
8309; AVX1-LABEL: test166:
8310; AVX1:       # %bb.0: # %entry
8311; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8312; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8313; AVX1-NEXT:    # xmm3 = mem[0,0]
8314; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8315; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8316; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8317; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8318; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8319; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8320; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8321; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8322; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8323; AVX1-NEXT:    retq
8324;
8325; AVX2-LABEL: test166:
8326; AVX2:       # %bb.0: # %entry
8327; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8328; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8329; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8330; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8331; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8332; AVX2-NEXT:    retq
8333;
8334; AVX512F-LABEL: test166:
8335; AVX512F:       # %bb.0: # %entry
8336; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8337; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8338; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8339; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8340; AVX512F-NEXT:    retq
8341;
8342; AVX512BW-LABEL: test166:
8343; AVX512BW:       # %bb.0: # %entry
8344; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8345; AVX512BW-NEXT:    retq
8346entry:
8347  %cmp = icmp ule <4 x i64> %a, %b
8348  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8349  ret <4 x i64> %sel
8350}
8351
8352define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
8353; SSE2-LABEL: test167:
8354; SSE2:       # %bb.0: # %entry
8355; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8356; SSE2-NEXT:    movdqa %xmm2, %xmm5
8357; SSE2-NEXT:    pxor %xmm4, %xmm5
8358; SSE2-NEXT:    movdqa %xmm0, %xmm6
8359; SSE2-NEXT:    pxor %xmm4, %xmm6
8360; SSE2-NEXT:    movdqa %xmm6, %xmm7
8361; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8362; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8363; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8364; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8365; SSE2-NEXT:    pand %xmm8, %xmm5
8366; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8367; SSE2-NEXT:    por %xmm5, %xmm6
8368; SSE2-NEXT:    pand %xmm6, %xmm0
8369; SSE2-NEXT:    pandn %xmm2, %xmm6
8370; SSE2-NEXT:    por %xmm6, %xmm0
8371; SSE2-NEXT:    movdqa %xmm3, %xmm2
8372; SSE2-NEXT:    pxor %xmm4, %xmm2
8373; SSE2-NEXT:    pxor %xmm1, %xmm4
8374; SSE2-NEXT:    movdqa %xmm4, %xmm5
8375; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8376; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8377; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8378; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8379; SSE2-NEXT:    pand %xmm6, %xmm2
8380; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8381; SSE2-NEXT:    por %xmm2, %xmm4
8382; SSE2-NEXT:    pand %xmm4, %xmm1
8383; SSE2-NEXT:    pandn %xmm3, %xmm4
8384; SSE2-NEXT:    por %xmm4, %xmm1
8385; SSE2-NEXT:    retq
8386;
8387; SSE4-LABEL: test167:
8388; SSE4:       # %bb.0: # %entry
8389; SSE4-NEXT:    movdqa %xmm0, %xmm4
8390; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8391; SSE4-NEXT:    movdqa %xmm2, %xmm6
8392; SSE4-NEXT:    pxor %xmm5, %xmm6
8393; SSE4-NEXT:    pxor %xmm5, %xmm0
8394; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8395; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8396; SSE4-NEXT:    movdqa %xmm3, %xmm0
8397; SSE4-NEXT:    pxor %xmm5, %xmm0
8398; SSE4-NEXT:    pxor %xmm1, %xmm5
8399; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8400; SSE4-NEXT:    movdqa %xmm5, %xmm0
8401; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8402; SSE4-NEXT:    movapd %xmm2, %xmm0
8403; SSE4-NEXT:    movapd %xmm3, %xmm1
8404; SSE4-NEXT:    retq
8405;
8406; AVX1-LABEL: test167:
8407; AVX1:       # %bb.0: # %entry
8408; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8409; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8410; AVX1-NEXT:    # xmm3 = mem[0,0]
8411; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8412; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8413; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8414; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8415; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8416; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8417; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8418; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8419; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8420; AVX1-NEXT:    retq
8421;
8422; AVX2-LABEL: test167:
8423; AVX2:       # %bb.0: # %entry
8424; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8425; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8426; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8427; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8428; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8429; AVX2-NEXT:    retq
8430;
8431; AVX512F-LABEL: test167:
8432; AVX512F:       # %bb.0: # %entry
8433; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8434; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8435; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8436; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8437; AVX512F-NEXT:    retq
8438;
8439; AVX512BW-LABEL: test167:
8440; AVX512BW:       # %bb.0: # %entry
8441; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8442; AVX512BW-NEXT:    retq
8443entry:
8444  %cmp = icmp ugt <4 x i64> %a, %b
8445  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8446  ret <4 x i64> %sel
8447}
8448
8449define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
8450; SSE2-LABEL: test168:
8451; SSE2:       # %bb.0: # %entry
8452; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8453; SSE2-NEXT:    movdqa %xmm2, %xmm5
8454; SSE2-NEXT:    pxor %xmm4, %xmm5
8455; SSE2-NEXT:    movdqa %xmm0, %xmm6
8456; SSE2-NEXT:    pxor %xmm4, %xmm6
8457; SSE2-NEXT:    movdqa %xmm6, %xmm7
8458; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8459; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8460; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8461; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8462; SSE2-NEXT:    pand %xmm8, %xmm5
8463; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8464; SSE2-NEXT:    por %xmm5, %xmm6
8465; SSE2-NEXT:    pand %xmm6, %xmm0
8466; SSE2-NEXT:    pandn %xmm2, %xmm6
8467; SSE2-NEXT:    por %xmm6, %xmm0
8468; SSE2-NEXT:    movdqa %xmm3, %xmm2
8469; SSE2-NEXT:    pxor %xmm4, %xmm2
8470; SSE2-NEXT:    pxor %xmm1, %xmm4
8471; SSE2-NEXT:    movdqa %xmm4, %xmm5
8472; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8473; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8474; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8475; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8476; SSE2-NEXT:    pand %xmm6, %xmm2
8477; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8478; SSE2-NEXT:    por %xmm2, %xmm4
8479; SSE2-NEXT:    pand %xmm4, %xmm1
8480; SSE2-NEXT:    pandn %xmm3, %xmm4
8481; SSE2-NEXT:    por %xmm4, %xmm1
8482; SSE2-NEXT:    retq
8483;
8484; SSE4-LABEL: test168:
8485; SSE4:       # %bb.0: # %entry
8486; SSE4-NEXT:    movdqa %xmm0, %xmm4
8487; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8488; SSE4-NEXT:    movdqa %xmm2, %xmm6
8489; SSE4-NEXT:    pxor %xmm5, %xmm6
8490; SSE4-NEXT:    pxor %xmm5, %xmm0
8491; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8492; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8493; SSE4-NEXT:    movdqa %xmm3, %xmm0
8494; SSE4-NEXT:    pxor %xmm5, %xmm0
8495; SSE4-NEXT:    pxor %xmm1, %xmm5
8496; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8497; SSE4-NEXT:    movdqa %xmm5, %xmm0
8498; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8499; SSE4-NEXT:    movapd %xmm2, %xmm0
8500; SSE4-NEXT:    movapd %xmm3, %xmm1
8501; SSE4-NEXT:    retq
8502;
8503; AVX1-LABEL: test168:
8504; AVX1:       # %bb.0: # %entry
8505; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8506; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8507; AVX1-NEXT:    # xmm3 = mem[0,0]
8508; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8509; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8510; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8511; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8512; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8513; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8514; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8515; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8516; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8517; AVX1-NEXT:    retq
8518;
8519; AVX2-LABEL: test168:
8520; AVX2:       # %bb.0: # %entry
8521; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8522; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8523; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8524; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8525; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8526; AVX2-NEXT:    retq
8527;
8528; AVX512F-LABEL: test168:
8529; AVX512F:       # %bb.0: # %entry
8530; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8531; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8532; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8533; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8534; AVX512F-NEXT:    retq
8535;
8536; AVX512BW-LABEL: test168:
8537; AVX512BW:       # %bb.0: # %entry
8538; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8539; AVX512BW-NEXT:    retq
8540entry:
8541  %cmp = icmp uge <4 x i64> %a, %b
8542  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8543  ret <4 x i64> %sel
8544}
8545
8546define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
8547; SSE2-LABEL: test169:
8548; SSE2:       # %bb.0: # %entry
8549; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8550; SSE2-NEXT:    movdqa %xmm2, %xmm5
8551; SSE2-NEXT:    pxor %xmm4, %xmm5
8552; SSE2-NEXT:    movdqa %xmm0, %xmm6
8553; SSE2-NEXT:    pxor %xmm4, %xmm6
8554; SSE2-NEXT:    movdqa %xmm6, %xmm7
8555; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8556; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8557; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8558; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8559; SSE2-NEXT:    pand %xmm8, %xmm5
8560; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8561; SSE2-NEXT:    por %xmm5, %xmm6
8562; SSE2-NEXT:    pand %xmm6, %xmm0
8563; SSE2-NEXT:    pandn %xmm2, %xmm6
8564; SSE2-NEXT:    por %xmm6, %xmm0
8565; SSE2-NEXT:    movdqa %xmm3, %xmm2
8566; SSE2-NEXT:    pxor %xmm4, %xmm2
8567; SSE2-NEXT:    pxor %xmm1, %xmm4
8568; SSE2-NEXT:    movdqa %xmm4, %xmm5
8569; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8570; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8571; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8572; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8573; SSE2-NEXT:    pand %xmm6, %xmm2
8574; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8575; SSE2-NEXT:    por %xmm2, %xmm4
8576; SSE2-NEXT:    pand %xmm4, %xmm1
8577; SSE2-NEXT:    pandn %xmm3, %xmm4
8578; SSE2-NEXT:    por %xmm4, %xmm1
8579; SSE2-NEXT:    retq
8580;
8581; SSE4-LABEL: test169:
8582; SSE4:       # %bb.0: # %entry
8583; SSE4-NEXT:    movdqa %xmm0, %xmm4
8584; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8585; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8586; SSE4-NEXT:    movdqa %xmm1, %xmm0
8587; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8588; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8589; SSE4-NEXT:    movapd %xmm2, %xmm0
8590; SSE4-NEXT:    movapd %xmm3, %xmm1
8591; SSE4-NEXT:    retq
8592;
8593; AVX1-LABEL: test169:
8594; AVX1:       # %bb.0: # %entry
8595; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8596; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8597; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8598; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8599; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8600; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8601; AVX1-NEXT:    retq
8602;
8603; AVX2-LABEL: test169:
8604; AVX2:       # %bb.0: # %entry
8605; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8606; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8607; AVX2-NEXT:    retq
8608;
8609; AVX512F-LABEL: test169:
8610; AVX512F:       # %bb.0: # %entry
8611; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8612; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8613; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8614; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8615; AVX512F-NEXT:    retq
8616;
8617; AVX512BW-LABEL: test169:
8618; AVX512BW:       # %bb.0: # %entry
8619; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8620; AVX512BW-NEXT:    retq
8621entry:
8622  %cmp = icmp slt <4 x i64> %a, %b
8623  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8624  ret <4 x i64> %sel
8625}
8626
8627define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
8628; SSE2-LABEL: test170:
8629; SSE2:       # %bb.0: # %entry
8630; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8631; SSE2-NEXT:    movdqa %xmm2, %xmm5
8632; SSE2-NEXT:    pxor %xmm4, %xmm5
8633; SSE2-NEXT:    movdqa %xmm0, %xmm6
8634; SSE2-NEXT:    pxor %xmm4, %xmm6
8635; SSE2-NEXT:    movdqa %xmm6, %xmm7
8636; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8637; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8638; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8639; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8640; SSE2-NEXT:    pand %xmm8, %xmm5
8641; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8642; SSE2-NEXT:    por %xmm5, %xmm6
8643; SSE2-NEXT:    pand %xmm6, %xmm0
8644; SSE2-NEXT:    pandn %xmm2, %xmm6
8645; SSE2-NEXT:    por %xmm6, %xmm0
8646; SSE2-NEXT:    movdqa %xmm3, %xmm2
8647; SSE2-NEXT:    pxor %xmm4, %xmm2
8648; SSE2-NEXT:    pxor %xmm1, %xmm4
8649; SSE2-NEXT:    movdqa %xmm4, %xmm5
8650; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8651; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8652; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8653; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8654; SSE2-NEXT:    pand %xmm6, %xmm2
8655; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8656; SSE2-NEXT:    por %xmm2, %xmm4
8657; SSE2-NEXT:    pand %xmm4, %xmm1
8658; SSE2-NEXT:    pandn %xmm3, %xmm4
8659; SSE2-NEXT:    por %xmm4, %xmm1
8660; SSE2-NEXT:    retq
8661;
8662; SSE4-LABEL: test170:
8663; SSE4:       # %bb.0: # %entry
8664; SSE4-NEXT:    movdqa %xmm0, %xmm4
8665; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8666; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8667; SSE4-NEXT:    movdqa %xmm1, %xmm0
8668; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8669; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8670; SSE4-NEXT:    movapd %xmm2, %xmm0
8671; SSE4-NEXT:    movapd %xmm3, %xmm1
8672; SSE4-NEXT:    retq
8673;
8674; AVX1-LABEL: test170:
8675; AVX1:       # %bb.0: # %entry
8676; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8677; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8678; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8679; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8680; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8681; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8682; AVX1-NEXT:    retq
8683;
8684; AVX2-LABEL: test170:
8685; AVX2:       # %bb.0: # %entry
8686; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8687; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8688; AVX2-NEXT:    retq
8689;
8690; AVX512F-LABEL: test170:
8691; AVX512F:       # %bb.0: # %entry
8692; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8693; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8694; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8695; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8696; AVX512F-NEXT:    retq
8697;
8698; AVX512BW-LABEL: test170:
8699; AVX512BW:       # %bb.0: # %entry
8700; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8701; AVX512BW-NEXT:    retq
8702entry:
8703  %cmp = icmp sle <4 x i64> %a, %b
8704  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8705  ret <4 x i64> %sel
8706}
8707
8708define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
8709; SSE2-LABEL: test171:
8710; SSE2:       # %bb.0: # %entry
8711; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8712; SSE2-NEXT:    movdqa %xmm0, %xmm5
8713; SSE2-NEXT:    pxor %xmm4, %xmm5
8714; SSE2-NEXT:    movdqa %xmm2, %xmm6
8715; SSE2-NEXT:    pxor %xmm4, %xmm6
8716; SSE2-NEXT:    movdqa %xmm6, %xmm7
8717; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8718; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8719; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8720; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8721; SSE2-NEXT:    pand %xmm8, %xmm5
8722; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8723; SSE2-NEXT:    por %xmm5, %xmm6
8724; SSE2-NEXT:    pand %xmm6, %xmm0
8725; SSE2-NEXT:    pandn %xmm2, %xmm6
8726; SSE2-NEXT:    por %xmm6, %xmm0
8727; SSE2-NEXT:    movdqa %xmm1, %xmm2
8728; SSE2-NEXT:    pxor %xmm4, %xmm2
8729; SSE2-NEXT:    pxor %xmm3, %xmm4
8730; SSE2-NEXT:    movdqa %xmm4, %xmm5
8731; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8732; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8733; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8734; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8735; SSE2-NEXT:    pand %xmm6, %xmm2
8736; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8737; SSE2-NEXT:    por %xmm2, %xmm4
8738; SSE2-NEXT:    pand %xmm4, %xmm1
8739; SSE2-NEXT:    pandn %xmm3, %xmm4
8740; SSE2-NEXT:    por %xmm4, %xmm1
8741; SSE2-NEXT:    retq
8742;
8743; SSE4-LABEL: test171:
8744; SSE4:       # %bb.0: # %entry
8745; SSE4-NEXT:    movdqa %xmm0, %xmm4
8746; SSE4-NEXT:    movdqa %xmm2, %xmm0
8747; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8748; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8749; SSE4-NEXT:    movdqa %xmm3, %xmm0
8750; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8751; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8752; SSE4-NEXT:    movapd %xmm2, %xmm0
8753; SSE4-NEXT:    movapd %xmm3, %xmm1
8754; SSE4-NEXT:    retq
8755;
8756; AVX1-LABEL: test171:
8757; AVX1:       # %bb.0: # %entry
8758; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8759; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8760; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8761; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8762; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8763; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8764; AVX1-NEXT:    retq
8765;
8766; AVX2-LABEL: test171:
8767; AVX2:       # %bb.0: # %entry
8768; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8769; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8770; AVX2-NEXT:    retq
8771;
8772; AVX512F-LABEL: test171:
8773; AVX512F:       # %bb.0: # %entry
8774; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8775; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8776; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8777; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8778; AVX512F-NEXT:    retq
8779;
8780; AVX512BW-LABEL: test171:
8781; AVX512BW:       # %bb.0: # %entry
8782; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8783; AVX512BW-NEXT:    retq
8784entry:
8785  %cmp = icmp sgt <4 x i64> %a, %b
8786  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8787  ret <4 x i64> %sel
8788}
8789
8790define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
8791; SSE2-LABEL: test172:
8792; SSE2:       # %bb.0: # %entry
8793; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8794; SSE2-NEXT:    movdqa %xmm0, %xmm5
8795; SSE2-NEXT:    pxor %xmm4, %xmm5
8796; SSE2-NEXT:    movdqa %xmm2, %xmm6
8797; SSE2-NEXT:    pxor %xmm4, %xmm6
8798; SSE2-NEXT:    movdqa %xmm6, %xmm7
8799; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8800; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8801; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8802; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8803; SSE2-NEXT:    pand %xmm8, %xmm5
8804; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8805; SSE2-NEXT:    por %xmm5, %xmm6
8806; SSE2-NEXT:    pand %xmm6, %xmm0
8807; SSE2-NEXT:    pandn %xmm2, %xmm6
8808; SSE2-NEXT:    por %xmm6, %xmm0
8809; SSE2-NEXT:    movdqa %xmm1, %xmm2
8810; SSE2-NEXT:    pxor %xmm4, %xmm2
8811; SSE2-NEXT:    pxor %xmm3, %xmm4
8812; SSE2-NEXT:    movdqa %xmm4, %xmm5
8813; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8814; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8815; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8816; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8817; SSE2-NEXT:    pand %xmm6, %xmm2
8818; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8819; SSE2-NEXT:    por %xmm2, %xmm4
8820; SSE2-NEXT:    pand %xmm4, %xmm1
8821; SSE2-NEXT:    pandn %xmm3, %xmm4
8822; SSE2-NEXT:    por %xmm4, %xmm1
8823; SSE2-NEXT:    retq
8824;
8825; SSE4-LABEL: test172:
8826; SSE4:       # %bb.0: # %entry
8827; SSE4-NEXT:    movdqa %xmm0, %xmm4
8828; SSE4-NEXT:    movdqa %xmm2, %xmm0
8829; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8830; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8831; SSE4-NEXT:    movdqa %xmm3, %xmm0
8832; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8833; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8834; SSE4-NEXT:    movapd %xmm2, %xmm0
8835; SSE4-NEXT:    movapd %xmm3, %xmm1
8836; SSE4-NEXT:    retq
8837;
8838; AVX1-LABEL: test172:
8839; AVX1:       # %bb.0: # %entry
8840; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8841; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8842; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8843; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8844; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8845; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8846; AVX1-NEXT:    retq
8847;
8848; AVX2-LABEL: test172:
8849; AVX2:       # %bb.0: # %entry
8850; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8851; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8852; AVX2-NEXT:    retq
8853;
8854; AVX512F-LABEL: test172:
8855; AVX512F:       # %bb.0: # %entry
8856; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8857; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8858; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8859; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8860; AVX512F-NEXT:    retq
8861;
8862; AVX512BW-LABEL: test172:
8863; AVX512BW:       # %bb.0: # %entry
8864; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8865; AVX512BW-NEXT:    retq
8866entry:
8867  %cmp = icmp sge <4 x i64> %a, %b
8868  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8869  ret <4 x i64> %sel
8870}
8871
8872define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
8873; SSE2-LABEL: test173:
8874; SSE2:       # %bb.0: # %entry
8875; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8876; SSE2-NEXT:    movdqa %xmm2, %xmm5
8877; SSE2-NEXT:    pxor %xmm4, %xmm5
8878; SSE2-NEXT:    movdqa %xmm0, %xmm6
8879; SSE2-NEXT:    pxor %xmm4, %xmm6
8880; SSE2-NEXT:    movdqa %xmm6, %xmm7
8881; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8882; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8883; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8884; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8885; SSE2-NEXT:    pand %xmm8, %xmm5
8886; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8887; SSE2-NEXT:    por %xmm5, %xmm6
8888; SSE2-NEXT:    pand %xmm6, %xmm0
8889; SSE2-NEXT:    pandn %xmm2, %xmm6
8890; SSE2-NEXT:    por %xmm6, %xmm0
8891; SSE2-NEXT:    movdqa %xmm3, %xmm2
8892; SSE2-NEXT:    pxor %xmm4, %xmm2
8893; SSE2-NEXT:    pxor %xmm1, %xmm4
8894; SSE2-NEXT:    movdqa %xmm4, %xmm5
8895; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8896; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8897; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8898; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8899; SSE2-NEXT:    pand %xmm6, %xmm2
8900; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8901; SSE2-NEXT:    por %xmm2, %xmm4
8902; SSE2-NEXT:    pand %xmm4, %xmm1
8903; SSE2-NEXT:    pandn %xmm3, %xmm4
8904; SSE2-NEXT:    por %xmm4, %xmm1
8905; SSE2-NEXT:    retq
8906;
8907; SSE4-LABEL: test173:
8908; SSE4:       # %bb.0: # %entry
8909; SSE4-NEXT:    movdqa %xmm0, %xmm4
8910; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8911; SSE4-NEXT:    movdqa %xmm2, %xmm6
8912; SSE4-NEXT:    pxor %xmm5, %xmm6
8913; SSE4-NEXT:    pxor %xmm5, %xmm0
8914; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8915; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8916; SSE4-NEXT:    movdqa %xmm3, %xmm0
8917; SSE4-NEXT:    pxor %xmm5, %xmm0
8918; SSE4-NEXT:    pxor %xmm1, %xmm5
8919; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8920; SSE4-NEXT:    movdqa %xmm5, %xmm0
8921; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8922; SSE4-NEXT:    movapd %xmm2, %xmm0
8923; SSE4-NEXT:    movapd %xmm3, %xmm1
8924; SSE4-NEXT:    retq
8925;
8926; AVX1-LABEL: test173:
8927; AVX1:       # %bb.0: # %entry
8928; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8929; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8930; AVX1-NEXT:    # xmm3 = mem[0,0]
8931; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8932; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8933; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8934; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8935; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8936; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8937; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8938; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8939; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8940; AVX1-NEXT:    retq
8941;
8942; AVX2-LABEL: test173:
8943; AVX2:       # %bb.0: # %entry
8944; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8945; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8946; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8947; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8948; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8949; AVX2-NEXT:    retq
8950;
8951; AVX512F-LABEL: test173:
8952; AVX512F:       # %bb.0: # %entry
8953; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8954; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8955; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8956; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8957; AVX512F-NEXT:    retq
8958;
8959; AVX512BW-LABEL: test173:
8960; AVX512BW:       # %bb.0: # %entry
8961; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8962; AVX512BW-NEXT:    retq
8963entry:
8964  %cmp = icmp ult <4 x i64> %a, %b
8965  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8966  ret <4 x i64> %sel
8967}
8968
8969define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
8970; SSE2-LABEL: test174:
8971; SSE2:       # %bb.0: # %entry
8972; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8973; SSE2-NEXT:    movdqa %xmm2, %xmm5
8974; SSE2-NEXT:    pxor %xmm4, %xmm5
8975; SSE2-NEXT:    movdqa %xmm0, %xmm6
8976; SSE2-NEXT:    pxor %xmm4, %xmm6
8977; SSE2-NEXT:    movdqa %xmm6, %xmm7
8978; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8979; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8980; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8981; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8982; SSE2-NEXT:    pand %xmm8, %xmm5
8983; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8984; SSE2-NEXT:    por %xmm5, %xmm6
8985; SSE2-NEXT:    pand %xmm6, %xmm0
8986; SSE2-NEXT:    pandn %xmm2, %xmm6
8987; SSE2-NEXT:    por %xmm6, %xmm0
8988; SSE2-NEXT:    movdqa %xmm3, %xmm2
8989; SSE2-NEXT:    pxor %xmm4, %xmm2
8990; SSE2-NEXT:    pxor %xmm1, %xmm4
8991; SSE2-NEXT:    movdqa %xmm4, %xmm5
8992; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8993; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8994; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8995; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8996; SSE2-NEXT:    pand %xmm6, %xmm2
8997; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8998; SSE2-NEXT:    por %xmm2, %xmm4
8999; SSE2-NEXT:    pand %xmm4, %xmm1
9000; SSE2-NEXT:    pandn %xmm3, %xmm4
9001; SSE2-NEXT:    por %xmm4, %xmm1
9002; SSE2-NEXT:    retq
9003;
9004; SSE4-LABEL: test174:
9005; SSE4:       # %bb.0: # %entry
9006; SSE4-NEXT:    movdqa %xmm0, %xmm4
9007; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9008; SSE4-NEXT:    movdqa %xmm2, %xmm6
9009; SSE4-NEXT:    pxor %xmm5, %xmm6
9010; SSE4-NEXT:    pxor %xmm5, %xmm0
9011; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9012; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9013; SSE4-NEXT:    movdqa %xmm3, %xmm0
9014; SSE4-NEXT:    pxor %xmm5, %xmm0
9015; SSE4-NEXT:    pxor %xmm1, %xmm5
9016; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9017; SSE4-NEXT:    movdqa %xmm5, %xmm0
9018; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9019; SSE4-NEXT:    movapd %xmm2, %xmm0
9020; SSE4-NEXT:    movapd %xmm3, %xmm1
9021; SSE4-NEXT:    retq
9022;
9023; AVX1-LABEL: test174:
9024; AVX1:       # %bb.0: # %entry
9025; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9026; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9027; AVX1-NEXT:    # xmm3 = mem[0,0]
9028; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9029; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9030; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9031; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9032; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
9033; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
9034; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9035; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9036; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9037; AVX1-NEXT:    retq
9038;
9039; AVX2-LABEL: test174:
9040; AVX2:       # %bb.0: # %entry
9041; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9042; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9043; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9044; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9045; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9046; AVX2-NEXT:    retq
9047;
9048; AVX512F-LABEL: test174:
9049; AVX512F:       # %bb.0: # %entry
9050; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9051; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9052; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9053; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9054; AVX512F-NEXT:    retq
9055;
9056; AVX512BW-LABEL: test174:
9057; AVX512BW:       # %bb.0: # %entry
9058; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9059; AVX512BW-NEXT:    retq
9060entry:
9061  %cmp = icmp ule <4 x i64> %a, %b
9062  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9063  ret <4 x i64> %sel
9064}
9065
9066define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
9067; SSE2-LABEL: test175:
9068; SSE2:       # %bb.0: # %entry
9069; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9070; SSE2-NEXT:    movdqa %xmm0, %xmm5
9071; SSE2-NEXT:    pxor %xmm4, %xmm5
9072; SSE2-NEXT:    movdqa %xmm2, %xmm6
9073; SSE2-NEXT:    pxor %xmm4, %xmm6
9074; SSE2-NEXT:    movdqa %xmm6, %xmm7
9075; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9076; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9077; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9078; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9079; SSE2-NEXT:    pand %xmm8, %xmm5
9080; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9081; SSE2-NEXT:    por %xmm5, %xmm6
9082; SSE2-NEXT:    pand %xmm6, %xmm0
9083; SSE2-NEXT:    pandn %xmm2, %xmm6
9084; SSE2-NEXT:    por %xmm6, %xmm0
9085; SSE2-NEXT:    movdqa %xmm1, %xmm2
9086; SSE2-NEXT:    pxor %xmm4, %xmm2
9087; SSE2-NEXT:    pxor %xmm3, %xmm4
9088; SSE2-NEXT:    movdqa %xmm4, %xmm5
9089; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9090; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9091; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9092; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9093; SSE2-NEXT:    pand %xmm6, %xmm2
9094; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9095; SSE2-NEXT:    por %xmm2, %xmm4
9096; SSE2-NEXT:    pand %xmm4, %xmm1
9097; SSE2-NEXT:    pandn %xmm3, %xmm4
9098; SSE2-NEXT:    por %xmm4, %xmm1
9099; SSE2-NEXT:    retq
9100;
9101; SSE4-LABEL: test175:
9102; SSE4:       # %bb.0: # %entry
9103; SSE4-NEXT:    movdqa %xmm0, %xmm4
9104; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9105; SSE4-NEXT:    movdqa %xmm0, %xmm6
9106; SSE4-NEXT:    pxor %xmm5, %xmm6
9107; SSE4-NEXT:    movdqa %xmm2, %xmm0
9108; SSE4-NEXT:    pxor %xmm5, %xmm0
9109; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9110; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9111; SSE4-NEXT:    movdqa %xmm1, %xmm0
9112; SSE4-NEXT:    pxor %xmm5, %xmm0
9113; SSE4-NEXT:    pxor %xmm3, %xmm5
9114; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9115; SSE4-NEXT:    movdqa %xmm5, %xmm0
9116; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9117; SSE4-NEXT:    movapd %xmm2, %xmm0
9118; SSE4-NEXT:    movapd %xmm3, %xmm1
9119; SSE4-NEXT:    retq
9120;
9121; AVX1-LABEL: test175:
9122; AVX1:       # %bb.0: # %entry
9123; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9124; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9125; AVX1-NEXT:    # xmm3 = mem[0,0]
9126; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9127; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9128; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9129; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9130; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9131; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9132; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9133; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9134; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9135; AVX1-NEXT:    retq
9136;
9137; AVX2-LABEL: test175:
9138; AVX2:       # %bb.0: # %entry
9139; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9140; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9141; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9142; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9143; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9144; AVX2-NEXT:    retq
9145;
9146; AVX512F-LABEL: test175:
9147; AVX512F:       # %bb.0: # %entry
9148; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9149; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9150; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9151; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9152; AVX512F-NEXT:    retq
9153;
9154; AVX512BW-LABEL: test175:
9155; AVX512BW:       # %bb.0: # %entry
9156; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9157; AVX512BW-NEXT:    retq
9158entry:
9159  %cmp = icmp ugt <4 x i64> %a, %b
9160  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9161  ret <4 x i64> %sel
9162}
9163
9164define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
9165; SSE2-LABEL: test176:
9166; SSE2:       # %bb.0: # %entry
9167; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9168; SSE2-NEXT:    movdqa %xmm0, %xmm5
9169; SSE2-NEXT:    pxor %xmm4, %xmm5
9170; SSE2-NEXT:    movdqa %xmm2, %xmm6
9171; SSE2-NEXT:    pxor %xmm4, %xmm6
9172; SSE2-NEXT:    movdqa %xmm6, %xmm7
9173; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9174; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9175; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9176; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9177; SSE2-NEXT:    pand %xmm8, %xmm5
9178; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9179; SSE2-NEXT:    por %xmm5, %xmm6
9180; SSE2-NEXT:    pand %xmm6, %xmm0
9181; SSE2-NEXT:    pandn %xmm2, %xmm6
9182; SSE2-NEXT:    por %xmm6, %xmm0
9183; SSE2-NEXT:    movdqa %xmm1, %xmm2
9184; SSE2-NEXT:    pxor %xmm4, %xmm2
9185; SSE2-NEXT:    pxor %xmm3, %xmm4
9186; SSE2-NEXT:    movdqa %xmm4, %xmm5
9187; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9188; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9189; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9190; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9191; SSE2-NEXT:    pand %xmm6, %xmm2
9192; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9193; SSE2-NEXT:    por %xmm2, %xmm4
9194; SSE2-NEXT:    pand %xmm4, %xmm1
9195; SSE2-NEXT:    pandn %xmm3, %xmm4
9196; SSE2-NEXT:    por %xmm4, %xmm1
9197; SSE2-NEXT:    retq
9198;
9199; SSE4-LABEL: test176:
9200; SSE4:       # %bb.0: # %entry
9201; SSE4-NEXT:    movdqa %xmm0, %xmm4
9202; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9203; SSE4-NEXT:    movdqa %xmm0, %xmm6
9204; SSE4-NEXT:    pxor %xmm5, %xmm6
9205; SSE4-NEXT:    movdqa %xmm2, %xmm0
9206; SSE4-NEXT:    pxor %xmm5, %xmm0
9207; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9208; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9209; SSE4-NEXT:    movdqa %xmm1, %xmm0
9210; SSE4-NEXT:    pxor %xmm5, %xmm0
9211; SSE4-NEXT:    pxor %xmm3, %xmm5
9212; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9213; SSE4-NEXT:    movdqa %xmm5, %xmm0
9214; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9215; SSE4-NEXT:    movapd %xmm2, %xmm0
9216; SSE4-NEXT:    movapd %xmm3, %xmm1
9217; SSE4-NEXT:    retq
9218;
9219; AVX1-LABEL: test176:
9220; AVX1:       # %bb.0: # %entry
9221; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9222; AVX1-NEXT:    vmovddup {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9223; AVX1-NEXT:    # xmm3 = mem[0,0]
9224; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9225; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9226; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9227; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9228; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9229; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9230; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9231; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9232; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9233; AVX1-NEXT:    retq
9234;
9235; AVX2-LABEL: test176:
9236; AVX2:       # %bb.0: # %entry
9237; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9238; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9239; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9240; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9241; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9242; AVX2-NEXT:    retq
9243;
9244; AVX512F-LABEL: test176:
9245; AVX512F:       # %bb.0: # %entry
9246; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9247; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9248; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9249; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9250; AVX512F-NEXT:    retq
9251;
9252; AVX512BW-LABEL: test176:
9253; AVX512BW:       # %bb.0: # %entry
9254; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9255; AVX512BW-NEXT:    retq
9256entry:
9257  %cmp = icmp uge <4 x i64> %a, %b
9258  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9259  ret <4 x i64> %sel
9260}
9261
9262define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
9263; SSE2-LABEL: test177:
9264; SSE2:       # %bb.0: # %entry
9265; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9266; SSE2-NEXT:    movdqa %xmm0, %xmm3
9267; SSE2-NEXT:    pxor %xmm2, %xmm3
9268; SSE2-NEXT:    pxor %xmm1, %xmm2
9269; SSE2-NEXT:    movdqa %xmm2, %xmm4
9270; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9271; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9272; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9273; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9274; SSE2-NEXT:    pand %xmm5, %xmm2
9275; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9276; SSE2-NEXT:    por %xmm2, %xmm3
9277; SSE2-NEXT:    pand %xmm3, %xmm0
9278; SSE2-NEXT:    pandn %xmm1, %xmm3
9279; SSE2-NEXT:    por %xmm3, %xmm0
9280; SSE2-NEXT:    retq
9281;
9282; SSE4-LABEL: test177:
9283; SSE4:       # %bb.0: # %entry
9284; SSE4-NEXT:    movdqa %xmm0, %xmm2
9285; SSE4-NEXT:    movdqa %xmm1, %xmm0
9286; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9287; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9288; SSE4-NEXT:    movapd %xmm1, %xmm0
9289; SSE4-NEXT:    retq
9290;
9291; AVX1-LABEL: test177:
9292; AVX1:       # %bb.0: # %entry
9293; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9294; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9295; AVX1-NEXT:    retq
9296;
9297; AVX2-LABEL: test177:
9298; AVX2:       # %bb.0: # %entry
9299; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9300; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9301; AVX2-NEXT:    retq
9302;
9303; AVX512F-LABEL: test177:
9304; AVX512F:       # %bb.0: # %entry
9305; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9306; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9307; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9308; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9309; AVX512F-NEXT:    retq
9310;
9311; AVX512BW-LABEL: test177:
9312; AVX512BW:       # %bb.0: # %entry
9313; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9314; AVX512BW-NEXT:    retq
9315entry:
9316  %cmp = icmp slt <2 x i64> %a, %b
9317  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9318  ret <2 x i64> %sel
9319}
9320
9321define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
9322; SSE2-LABEL: test178:
9323; SSE2:       # %bb.0: # %entry
9324; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9325; SSE2-NEXT:    movdqa %xmm0, %xmm3
9326; SSE2-NEXT:    pxor %xmm2, %xmm3
9327; SSE2-NEXT:    pxor %xmm1, %xmm2
9328; SSE2-NEXT:    movdqa %xmm2, %xmm4
9329; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9330; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9331; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9332; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9333; SSE2-NEXT:    pand %xmm5, %xmm2
9334; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9335; SSE2-NEXT:    por %xmm2, %xmm3
9336; SSE2-NEXT:    pand %xmm3, %xmm0
9337; SSE2-NEXT:    pandn %xmm1, %xmm3
9338; SSE2-NEXT:    por %xmm3, %xmm0
9339; SSE2-NEXT:    retq
9340;
9341; SSE4-LABEL: test178:
9342; SSE4:       # %bb.0: # %entry
9343; SSE4-NEXT:    movdqa %xmm0, %xmm2
9344; SSE4-NEXT:    movdqa %xmm1, %xmm0
9345; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9346; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9347; SSE4-NEXT:    movapd %xmm1, %xmm0
9348; SSE4-NEXT:    retq
9349;
9350; AVX1-LABEL: test178:
9351; AVX1:       # %bb.0: # %entry
9352; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9353; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9354; AVX1-NEXT:    retq
9355;
9356; AVX2-LABEL: test178:
9357; AVX2:       # %bb.0: # %entry
9358; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9359; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9360; AVX2-NEXT:    retq
9361;
9362; AVX512F-LABEL: test178:
9363; AVX512F:       # %bb.0: # %entry
9364; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9365; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9366; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9367; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9368; AVX512F-NEXT:    retq
9369;
9370; AVX512BW-LABEL: test178:
9371; AVX512BW:       # %bb.0: # %entry
9372; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9373; AVX512BW-NEXT:    retq
9374entry:
9375  %cmp = icmp sle <2 x i64> %a, %b
9376  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9377  ret <2 x i64> %sel
9378}
9379
9380define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
9381; SSE2-LABEL: test179:
9382; SSE2:       # %bb.0: # %entry
9383; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9384; SSE2-NEXT:    movdqa %xmm1, %xmm3
9385; SSE2-NEXT:    pxor %xmm2, %xmm3
9386; SSE2-NEXT:    pxor %xmm0, %xmm2
9387; SSE2-NEXT:    movdqa %xmm2, %xmm4
9388; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9389; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9390; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9391; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9392; SSE2-NEXT:    pand %xmm5, %xmm2
9393; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9394; SSE2-NEXT:    por %xmm2, %xmm3
9395; SSE2-NEXT:    pand %xmm3, %xmm0
9396; SSE2-NEXT:    pandn %xmm1, %xmm3
9397; SSE2-NEXT:    por %xmm3, %xmm0
9398; SSE2-NEXT:    retq
9399;
9400; SSE4-LABEL: test179:
9401; SSE4:       # %bb.0: # %entry
9402; SSE4-NEXT:    movdqa %xmm0, %xmm2
9403; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9404; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9405; SSE4-NEXT:    movapd %xmm1, %xmm0
9406; SSE4-NEXT:    retq
9407;
9408; AVX1-LABEL: test179:
9409; AVX1:       # %bb.0: # %entry
9410; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9411; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9412; AVX1-NEXT:    retq
9413;
9414; AVX2-LABEL: test179:
9415; AVX2:       # %bb.0: # %entry
9416; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9417; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9418; AVX2-NEXT:    retq
9419;
9420; AVX512F-LABEL: test179:
9421; AVX512F:       # %bb.0: # %entry
9422; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9423; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9424; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9425; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9426; AVX512F-NEXT:    retq
9427;
9428; AVX512BW-LABEL: test179:
9429; AVX512BW:       # %bb.0: # %entry
9430; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9431; AVX512BW-NEXT:    retq
9432entry:
9433  %cmp = icmp sgt <2 x i64> %a, %b
9434  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9435  ret <2 x i64> %sel
9436}
9437
9438define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
9439; SSE2-LABEL: test180:
9440; SSE2:       # %bb.0: # %entry
9441; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9442; SSE2-NEXT:    movdqa %xmm1, %xmm3
9443; SSE2-NEXT:    pxor %xmm2, %xmm3
9444; SSE2-NEXT:    pxor %xmm0, %xmm2
9445; SSE2-NEXT:    movdqa %xmm2, %xmm4
9446; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9447; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9448; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9449; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9450; SSE2-NEXT:    pand %xmm5, %xmm2
9451; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9452; SSE2-NEXT:    por %xmm2, %xmm3
9453; SSE2-NEXT:    pand %xmm3, %xmm0
9454; SSE2-NEXT:    pandn %xmm1, %xmm3
9455; SSE2-NEXT:    por %xmm3, %xmm0
9456; SSE2-NEXT:    retq
9457;
9458; SSE4-LABEL: test180:
9459; SSE4:       # %bb.0: # %entry
9460; SSE4-NEXT:    movdqa %xmm0, %xmm2
9461; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9462; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9463; SSE4-NEXT:    movapd %xmm1, %xmm0
9464; SSE4-NEXT:    retq
9465;
9466; AVX1-LABEL: test180:
9467; AVX1:       # %bb.0: # %entry
9468; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9469; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9470; AVX1-NEXT:    retq
9471;
9472; AVX2-LABEL: test180:
9473; AVX2:       # %bb.0: # %entry
9474; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9475; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9476; AVX2-NEXT:    retq
9477;
9478; AVX512F-LABEL: test180:
9479; AVX512F:       # %bb.0: # %entry
9480; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9481; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9482; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9483; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9484; AVX512F-NEXT:    retq
9485;
9486; AVX512BW-LABEL: test180:
9487; AVX512BW:       # %bb.0: # %entry
9488; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9489; AVX512BW-NEXT:    retq
9490entry:
9491  %cmp = icmp sge <2 x i64> %a, %b
9492  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9493  ret <2 x i64> %sel
9494}
9495
9496define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
9497; SSE2-LABEL: test181:
9498; SSE2:       # %bb.0: # %entry
9499; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9500; SSE2-NEXT:    movdqa %xmm0, %xmm3
9501; SSE2-NEXT:    pxor %xmm2, %xmm3
9502; SSE2-NEXT:    pxor %xmm1, %xmm2
9503; SSE2-NEXT:    movdqa %xmm2, %xmm4
9504; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9505; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9506; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9507; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9508; SSE2-NEXT:    pand %xmm5, %xmm2
9509; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9510; SSE2-NEXT:    por %xmm2, %xmm3
9511; SSE2-NEXT:    pand %xmm3, %xmm0
9512; SSE2-NEXT:    pandn %xmm1, %xmm3
9513; SSE2-NEXT:    por %xmm3, %xmm0
9514; SSE2-NEXT:    retq
9515;
9516; SSE4-LABEL: test181:
9517; SSE4:       # %bb.0: # %entry
9518; SSE4-NEXT:    movdqa %xmm0, %xmm2
9519; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9520; SSE4-NEXT:    movdqa %xmm2, %xmm3
9521; SSE4-NEXT:    pxor %xmm0, %xmm3
9522; SSE4-NEXT:    pxor %xmm1, %xmm0
9523; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9524; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9525; SSE4-NEXT:    movapd %xmm1, %xmm0
9526; SSE4-NEXT:    retq
9527;
9528; AVX1-LABEL: test181:
9529; AVX1:       # %bb.0: # %entry
9530; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9531; AVX1-NEXT:    # xmm2 = mem[0,0]
9532; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9533; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9534; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9535; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9536; AVX1-NEXT:    retq
9537;
9538; AVX2-LABEL: test181:
9539; AVX2:       # %bb.0: # %entry
9540; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9541; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9542; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9543; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9544; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9545; AVX2-NEXT:    retq
9546;
9547; AVX512F-LABEL: test181:
9548; AVX512F:       # %bb.0: # %entry
9549; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9550; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9551; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9552; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9553; AVX512F-NEXT:    retq
9554;
9555; AVX512BW-LABEL: test181:
9556; AVX512BW:       # %bb.0: # %entry
9557; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9558; AVX512BW-NEXT:    retq
9559entry:
9560  %cmp = icmp ult <2 x i64> %a, %b
9561  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9562  ret <2 x i64> %sel
9563}
9564
9565define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
9566; SSE2-LABEL: test182:
9567; SSE2:       # %bb.0: # %entry
9568; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9569; SSE2-NEXT:    movdqa %xmm0, %xmm3
9570; SSE2-NEXT:    pxor %xmm2, %xmm3
9571; SSE2-NEXT:    pxor %xmm1, %xmm2
9572; SSE2-NEXT:    movdqa %xmm2, %xmm4
9573; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9574; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9575; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9576; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9577; SSE2-NEXT:    pand %xmm5, %xmm2
9578; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9579; SSE2-NEXT:    por %xmm2, %xmm3
9580; SSE2-NEXT:    pand %xmm3, %xmm0
9581; SSE2-NEXT:    pandn %xmm1, %xmm3
9582; SSE2-NEXT:    por %xmm3, %xmm0
9583; SSE2-NEXT:    retq
9584;
9585; SSE4-LABEL: test182:
9586; SSE4:       # %bb.0: # %entry
9587; SSE4-NEXT:    movdqa %xmm0, %xmm2
9588; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9589; SSE4-NEXT:    movdqa %xmm2, %xmm3
9590; SSE4-NEXT:    pxor %xmm0, %xmm3
9591; SSE4-NEXT:    pxor %xmm1, %xmm0
9592; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9593; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9594; SSE4-NEXT:    movapd %xmm1, %xmm0
9595; SSE4-NEXT:    retq
9596;
9597; AVX1-LABEL: test182:
9598; AVX1:       # %bb.0: # %entry
9599; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9600; AVX1-NEXT:    # xmm2 = mem[0,0]
9601; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9602; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9603; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9604; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9605; AVX1-NEXT:    retq
9606;
9607; AVX2-LABEL: test182:
9608; AVX2:       # %bb.0: # %entry
9609; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9610; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9611; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9612; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9613; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9614; AVX2-NEXT:    retq
9615;
9616; AVX512F-LABEL: test182:
9617; AVX512F:       # %bb.0: # %entry
9618; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9619; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9620; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9621; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9622; AVX512F-NEXT:    retq
9623;
9624; AVX512BW-LABEL: test182:
9625; AVX512BW:       # %bb.0: # %entry
9626; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9627; AVX512BW-NEXT:    retq
9628entry:
9629  %cmp = icmp ule <2 x i64> %a, %b
9630  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9631  ret <2 x i64> %sel
9632}
9633
9634define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
9635; SSE2-LABEL: test183:
9636; SSE2:       # %bb.0: # %entry
9637; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9638; SSE2-NEXT:    movdqa %xmm1, %xmm3
9639; SSE2-NEXT:    pxor %xmm2, %xmm3
9640; SSE2-NEXT:    pxor %xmm0, %xmm2
9641; SSE2-NEXT:    movdqa %xmm2, %xmm4
9642; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9643; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9644; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9645; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9646; SSE2-NEXT:    pand %xmm5, %xmm2
9647; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9648; SSE2-NEXT:    por %xmm2, %xmm3
9649; SSE2-NEXT:    pand %xmm3, %xmm0
9650; SSE2-NEXT:    pandn %xmm1, %xmm3
9651; SSE2-NEXT:    por %xmm3, %xmm0
9652; SSE2-NEXT:    retq
9653;
9654; SSE4-LABEL: test183:
9655; SSE4:       # %bb.0: # %entry
9656; SSE4-NEXT:    movdqa %xmm0, %xmm2
9657; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9658; SSE4-NEXT:    movdqa %xmm1, %xmm3
9659; SSE4-NEXT:    pxor %xmm0, %xmm3
9660; SSE4-NEXT:    pxor %xmm2, %xmm0
9661; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9662; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9663; SSE4-NEXT:    movapd %xmm1, %xmm0
9664; SSE4-NEXT:    retq
9665;
9666; AVX1-LABEL: test183:
9667; AVX1:       # %bb.0: # %entry
9668; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9669; AVX1-NEXT:    # xmm2 = mem[0,0]
9670; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9671; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9672; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9673; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9674; AVX1-NEXT:    retq
9675;
9676; AVX2-LABEL: test183:
9677; AVX2:       # %bb.0: # %entry
9678; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9679; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9680; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9681; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9682; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9683; AVX2-NEXT:    retq
9684;
9685; AVX512F-LABEL: test183:
9686; AVX512F:       # %bb.0: # %entry
9687; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9688; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9689; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9690; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9691; AVX512F-NEXT:    retq
9692;
9693; AVX512BW-LABEL: test183:
9694; AVX512BW:       # %bb.0: # %entry
9695; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9696; AVX512BW-NEXT:    retq
9697entry:
9698  %cmp = icmp ugt <2 x i64> %a, %b
9699  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9700  ret <2 x i64> %sel
9701}
9702
9703define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
9704; SSE2-LABEL: test184:
9705; SSE2:       # %bb.0: # %entry
9706; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9707; SSE2-NEXT:    movdqa %xmm1, %xmm3
9708; SSE2-NEXT:    pxor %xmm2, %xmm3
9709; SSE2-NEXT:    pxor %xmm0, %xmm2
9710; SSE2-NEXT:    movdqa %xmm2, %xmm4
9711; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9712; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9713; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9714; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9715; SSE2-NEXT:    pand %xmm5, %xmm2
9716; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9717; SSE2-NEXT:    por %xmm2, %xmm3
9718; SSE2-NEXT:    pand %xmm3, %xmm0
9719; SSE2-NEXT:    pandn %xmm1, %xmm3
9720; SSE2-NEXT:    por %xmm3, %xmm0
9721; SSE2-NEXT:    retq
9722;
9723; SSE4-LABEL: test184:
9724; SSE4:       # %bb.0: # %entry
9725; SSE4-NEXT:    movdqa %xmm0, %xmm2
9726; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9727; SSE4-NEXT:    movdqa %xmm1, %xmm3
9728; SSE4-NEXT:    pxor %xmm0, %xmm3
9729; SSE4-NEXT:    pxor %xmm2, %xmm0
9730; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9731; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9732; SSE4-NEXT:    movapd %xmm1, %xmm0
9733; SSE4-NEXT:    retq
9734;
9735; AVX1-LABEL: test184:
9736; AVX1:       # %bb.0: # %entry
9737; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9738; AVX1-NEXT:    # xmm2 = mem[0,0]
9739; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9740; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9741; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9742; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9743; AVX1-NEXT:    retq
9744;
9745; AVX2-LABEL: test184:
9746; AVX2:       # %bb.0: # %entry
9747; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9748; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9749; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9750; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9751; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9752; AVX2-NEXT:    retq
9753;
9754; AVX512F-LABEL: test184:
9755; AVX512F:       # %bb.0: # %entry
9756; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9757; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9758; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9759; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9760; AVX512F-NEXT:    retq
9761;
9762; AVX512BW-LABEL: test184:
9763; AVX512BW:       # %bb.0: # %entry
9764; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9765; AVX512BW-NEXT:    retq
9766entry:
9767  %cmp = icmp uge <2 x i64> %a, %b
9768  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9769  ret <2 x i64> %sel
9770}
9771
9772define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
9773; SSE2-LABEL: test185:
9774; SSE2:       # %bb.0: # %entry
9775; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9776; SSE2-NEXT:    movdqa %xmm1, %xmm3
9777; SSE2-NEXT:    pxor %xmm2, %xmm3
9778; SSE2-NEXT:    pxor %xmm0, %xmm2
9779; SSE2-NEXT:    movdqa %xmm2, %xmm4
9780; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9781; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9782; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9783; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9784; SSE2-NEXT:    pand %xmm5, %xmm2
9785; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9786; SSE2-NEXT:    por %xmm2, %xmm3
9787; SSE2-NEXT:    pand %xmm3, %xmm0
9788; SSE2-NEXT:    pandn %xmm1, %xmm3
9789; SSE2-NEXT:    por %xmm3, %xmm0
9790; SSE2-NEXT:    retq
9791;
9792; SSE4-LABEL: test185:
9793; SSE4:       # %bb.0: # %entry
9794; SSE4-NEXT:    movdqa %xmm0, %xmm2
9795; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9796; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9797; SSE4-NEXT:    movapd %xmm1, %xmm0
9798; SSE4-NEXT:    retq
9799;
9800; AVX1-LABEL: test185:
9801; AVX1:       # %bb.0: # %entry
9802; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9803; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9804; AVX1-NEXT:    retq
9805;
9806; AVX2-LABEL: test185:
9807; AVX2:       # %bb.0: # %entry
9808; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9809; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9810; AVX2-NEXT:    retq
9811;
9812; AVX512F-LABEL: test185:
9813; AVX512F:       # %bb.0: # %entry
9814; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9815; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9816; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9817; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9818; AVX512F-NEXT:    retq
9819;
9820; AVX512BW-LABEL: test185:
9821; AVX512BW:       # %bb.0: # %entry
9822; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9823; AVX512BW-NEXT:    retq
9824entry:
9825  %cmp = icmp slt <2 x i64> %a, %b
9826  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9827  ret <2 x i64> %sel
9828}
9829
9830define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
9831; SSE2-LABEL: test186:
9832; SSE2:       # %bb.0: # %entry
9833; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9834; SSE2-NEXT:    movdqa %xmm1, %xmm3
9835; SSE2-NEXT:    pxor %xmm2, %xmm3
9836; SSE2-NEXT:    pxor %xmm0, %xmm2
9837; SSE2-NEXT:    movdqa %xmm2, %xmm4
9838; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9839; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9840; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9841; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9842; SSE2-NEXT:    pand %xmm5, %xmm2
9843; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9844; SSE2-NEXT:    por %xmm2, %xmm3
9845; SSE2-NEXT:    pand %xmm3, %xmm0
9846; SSE2-NEXT:    pandn %xmm1, %xmm3
9847; SSE2-NEXT:    por %xmm3, %xmm0
9848; SSE2-NEXT:    retq
9849;
9850; SSE4-LABEL: test186:
9851; SSE4:       # %bb.0: # %entry
9852; SSE4-NEXT:    movdqa %xmm0, %xmm2
9853; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9854; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9855; SSE4-NEXT:    movapd %xmm1, %xmm0
9856; SSE4-NEXT:    retq
9857;
9858; AVX1-LABEL: test186:
9859; AVX1:       # %bb.0: # %entry
9860; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9861; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9862; AVX1-NEXT:    retq
9863;
9864; AVX2-LABEL: test186:
9865; AVX2:       # %bb.0: # %entry
9866; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9867; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9868; AVX2-NEXT:    retq
9869;
9870; AVX512F-LABEL: test186:
9871; AVX512F:       # %bb.0: # %entry
9872; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9873; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9874; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9875; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9876; AVX512F-NEXT:    retq
9877;
9878; AVX512BW-LABEL: test186:
9879; AVX512BW:       # %bb.0: # %entry
9880; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9881; AVX512BW-NEXT:    retq
9882entry:
9883  %cmp = icmp sle <2 x i64> %a, %b
9884  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9885  ret <2 x i64> %sel
9886}
9887
9888define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
9889; SSE2-LABEL: test187:
9890; SSE2:       # %bb.0: # %entry
9891; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9892; SSE2-NEXT:    movdqa %xmm0, %xmm3
9893; SSE2-NEXT:    pxor %xmm2, %xmm3
9894; SSE2-NEXT:    pxor %xmm1, %xmm2
9895; SSE2-NEXT:    movdqa %xmm2, %xmm4
9896; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9897; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9898; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9899; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9900; SSE2-NEXT:    pand %xmm5, %xmm2
9901; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9902; SSE2-NEXT:    por %xmm2, %xmm3
9903; SSE2-NEXT:    pand %xmm3, %xmm0
9904; SSE2-NEXT:    pandn %xmm1, %xmm3
9905; SSE2-NEXT:    por %xmm3, %xmm0
9906; SSE2-NEXT:    retq
9907;
9908; SSE4-LABEL: test187:
9909; SSE4:       # %bb.0: # %entry
9910; SSE4-NEXT:    movdqa %xmm0, %xmm2
9911; SSE4-NEXT:    movdqa %xmm1, %xmm0
9912; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9913; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9914; SSE4-NEXT:    movapd %xmm1, %xmm0
9915; SSE4-NEXT:    retq
9916;
9917; AVX1-LABEL: test187:
9918; AVX1:       # %bb.0: # %entry
9919; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9920; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9921; AVX1-NEXT:    retq
9922;
9923; AVX2-LABEL: test187:
9924; AVX2:       # %bb.0: # %entry
9925; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9926; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9927; AVX2-NEXT:    retq
9928;
9929; AVX512F-LABEL: test187:
9930; AVX512F:       # %bb.0: # %entry
9931; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9932; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9933; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9934; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9935; AVX512F-NEXT:    retq
9936;
9937; AVX512BW-LABEL: test187:
9938; AVX512BW:       # %bb.0: # %entry
9939; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9940; AVX512BW-NEXT:    retq
9941entry:
9942  %cmp = icmp sgt <2 x i64> %a, %b
9943  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9944  ret <2 x i64> %sel
9945}
9946
9947define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
9948; SSE2-LABEL: test188:
9949; SSE2:       # %bb.0: # %entry
9950; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9951; SSE2-NEXT:    movdqa %xmm0, %xmm3
9952; SSE2-NEXT:    pxor %xmm2, %xmm3
9953; SSE2-NEXT:    pxor %xmm1, %xmm2
9954; SSE2-NEXT:    movdqa %xmm2, %xmm4
9955; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9956; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9957; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9958; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9959; SSE2-NEXT:    pand %xmm5, %xmm2
9960; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9961; SSE2-NEXT:    por %xmm2, %xmm3
9962; SSE2-NEXT:    pand %xmm3, %xmm0
9963; SSE2-NEXT:    pandn %xmm1, %xmm3
9964; SSE2-NEXT:    por %xmm3, %xmm0
9965; SSE2-NEXT:    retq
9966;
9967; SSE4-LABEL: test188:
9968; SSE4:       # %bb.0: # %entry
9969; SSE4-NEXT:    movdqa %xmm0, %xmm2
9970; SSE4-NEXT:    movdqa %xmm1, %xmm0
9971; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9972; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9973; SSE4-NEXT:    movapd %xmm1, %xmm0
9974; SSE4-NEXT:    retq
9975;
9976; AVX1-LABEL: test188:
9977; AVX1:       # %bb.0: # %entry
9978; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9979; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9980; AVX1-NEXT:    retq
9981;
9982; AVX2-LABEL: test188:
9983; AVX2:       # %bb.0: # %entry
9984; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9985; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9986; AVX2-NEXT:    retq
9987;
9988; AVX512F-LABEL: test188:
9989; AVX512F:       # %bb.0: # %entry
9990; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9991; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9992; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9993; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9994; AVX512F-NEXT:    retq
9995;
9996; AVX512BW-LABEL: test188:
9997; AVX512BW:       # %bb.0: # %entry
9998; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9999; AVX512BW-NEXT:    retq
10000entry:
10001  %cmp = icmp sge <2 x i64> %a, %b
10002  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10003  ret <2 x i64> %sel
10004}
10005
10006define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
10007; SSE2-LABEL: test189:
10008; SSE2:       # %bb.0: # %entry
10009; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10010; SSE2-NEXT:    movdqa %xmm1, %xmm3
10011; SSE2-NEXT:    pxor %xmm2, %xmm3
10012; SSE2-NEXT:    pxor %xmm0, %xmm2
10013; SSE2-NEXT:    movdqa %xmm2, %xmm4
10014; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10015; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10016; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10017; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10018; SSE2-NEXT:    pand %xmm5, %xmm2
10019; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10020; SSE2-NEXT:    por %xmm2, %xmm3
10021; SSE2-NEXT:    pand %xmm3, %xmm0
10022; SSE2-NEXT:    pandn %xmm1, %xmm3
10023; SSE2-NEXT:    por %xmm3, %xmm0
10024; SSE2-NEXT:    retq
10025;
10026; SSE4-LABEL: test189:
10027; SSE4:       # %bb.0: # %entry
10028; SSE4-NEXT:    movdqa %xmm0, %xmm2
10029; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10030; SSE4-NEXT:    movdqa %xmm1, %xmm3
10031; SSE4-NEXT:    pxor %xmm0, %xmm3
10032; SSE4-NEXT:    pxor %xmm2, %xmm0
10033; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10034; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10035; SSE4-NEXT:    movapd %xmm1, %xmm0
10036; SSE4-NEXT:    retq
10037;
10038; AVX1-LABEL: test189:
10039; AVX1:       # %bb.0: # %entry
10040; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10041; AVX1-NEXT:    # xmm2 = mem[0,0]
10042; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10043; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10044; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10045; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10046; AVX1-NEXT:    retq
10047;
10048; AVX2-LABEL: test189:
10049; AVX2:       # %bb.0: # %entry
10050; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10051; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10052; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10053; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10054; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10055; AVX2-NEXT:    retq
10056;
10057; AVX512F-LABEL: test189:
10058; AVX512F:       # %bb.0: # %entry
10059; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10060; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10061; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
10062; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10063; AVX512F-NEXT:    retq
10064;
10065; AVX512BW-LABEL: test189:
10066; AVX512BW:       # %bb.0: # %entry
10067; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10068; AVX512BW-NEXT:    retq
10069entry:
10070  %cmp = icmp ult <2 x i64> %a, %b
10071  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10072  ret <2 x i64> %sel
10073}
10074
10075define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
10076; SSE2-LABEL: test190:
10077; SSE2:       # %bb.0: # %entry
10078; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10079; SSE2-NEXT:    movdqa %xmm1, %xmm3
10080; SSE2-NEXT:    pxor %xmm2, %xmm3
10081; SSE2-NEXT:    pxor %xmm0, %xmm2
10082; SSE2-NEXT:    movdqa %xmm2, %xmm4
10083; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10084; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10085; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10086; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10087; SSE2-NEXT:    pand %xmm5, %xmm2
10088; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10089; SSE2-NEXT:    por %xmm2, %xmm3
10090; SSE2-NEXT:    pand %xmm3, %xmm0
10091; SSE2-NEXT:    pandn %xmm1, %xmm3
10092; SSE2-NEXT:    por %xmm3, %xmm0
10093; SSE2-NEXT:    retq
10094;
10095; SSE4-LABEL: test190:
10096; SSE4:       # %bb.0: # %entry
10097; SSE4-NEXT:    movdqa %xmm0, %xmm2
10098; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10099; SSE4-NEXT:    movdqa %xmm1, %xmm3
10100; SSE4-NEXT:    pxor %xmm0, %xmm3
10101; SSE4-NEXT:    pxor %xmm2, %xmm0
10102; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10103; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10104; SSE4-NEXT:    movapd %xmm1, %xmm0
10105; SSE4-NEXT:    retq
10106;
10107; AVX1-LABEL: test190:
10108; AVX1:       # %bb.0: # %entry
10109; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10110; AVX1-NEXT:    # xmm2 = mem[0,0]
10111; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10112; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10113; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10114; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10115; AVX1-NEXT:    retq
10116;
10117; AVX2-LABEL: test190:
10118; AVX2:       # %bb.0: # %entry
10119; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10120; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10121; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10122; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10123; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10124; AVX2-NEXT:    retq
10125;
10126; AVX512F-LABEL: test190:
10127; AVX512F:       # %bb.0: # %entry
10128; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10129; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10130; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
10131; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10132; AVX512F-NEXT:    retq
10133;
10134; AVX512BW-LABEL: test190:
10135; AVX512BW:       # %bb.0: # %entry
10136; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10137; AVX512BW-NEXT:    retq
10138entry:
10139  %cmp = icmp ule <2 x i64> %a, %b
10140  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10141  ret <2 x i64> %sel
10142}
10143
10144define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
10145; SSE2-LABEL: test191:
10146; SSE2:       # %bb.0: # %entry
10147; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10148; SSE2-NEXT:    movdqa %xmm0, %xmm3
10149; SSE2-NEXT:    pxor %xmm2, %xmm3
10150; SSE2-NEXT:    pxor %xmm1, %xmm2
10151; SSE2-NEXT:    movdqa %xmm2, %xmm4
10152; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10153; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10154; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10155; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10156; SSE2-NEXT:    pand %xmm5, %xmm2
10157; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10158; SSE2-NEXT:    por %xmm2, %xmm3
10159; SSE2-NEXT:    pand %xmm3, %xmm0
10160; SSE2-NEXT:    pandn %xmm1, %xmm3
10161; SSE2-NEXT:    por %xmm3, %xmm0
10162; SSE2-NEXT:    retq
10163;
10164; SSE4-LABEL: test191:
10165; SSE4:       # %bb.0: # %entry
10166; SSE4-NEXT:    movdqa %xmm0, %xmm2
10167; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10168; SSE4-NEXT:    movdqa %xmm2, %xmm3
10169; SSE4-NEXT:    pxor %xmm0, %xmm3
10170; SSE4-NEXT:    pxor %xmm1, %xmm0
10171; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10172; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10173; SSE4-NEXT:    movapd %xmm1, %xmm0
10174; SSE4-NEXT:    retq
10175;
10176; AVX1-LABEL: test191:
10177; AVX1:       # %bb.0: # %entry
10178; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10179; AVX1-NEXT:    # xmm2 = mem[0,0]
10180; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10181; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10182; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10183; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10184; AVX1-NEXT:    retq
10185;
10186; AVX2-LABEL: test191:
10187; AVX2:       # %bb.0: # %entry
10188; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10189; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10190; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10191; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10192; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10193; AVX2-NEXT:    retq
10194;
10195; AVX512F-LABEL: test191:
10196; AVX512F:       # %bb.0: # %entry
10197; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10198; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10199; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
10200; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10201; AVX512F-NEXT:    retq
10202;
10203; AVX512BW-LABEL: test191:
10204; AVX512BW:       # %bb.0: # %entry
10205; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10206; AVX512BW-NEXT:    retq
10207entry:
10208  %cmp = icmp ugt <2 x i64> %a, %b
10209  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10210  ret <2 x i64> %sel
10211}
10212
10213define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
10214; SSE2-LABEL: test192:
10215; SSE2:       # %bb.0: # %entry
10216; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10217; SSE2-NEXT:    movdqa %xmm0, %xmm3
10218; SSE2-NEXT:    pxor %xmm2, %xmm3
10219; SSE2-NEXT:    pxor %xmm1, %xmm2
10220; SSE2-NEXT:    movdqa %xmm2, %xmm4
10221; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10222; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10223; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10224; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10225; SSE2-NEXT:    pand %xmm5, %xmm2
10226; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10227; SSE2-NEXT:    por %xmm2, %xmm3
10228; SSE2-NEXT:    pand %xmm3, %xmm0
10229; SSE2-NEXT:    pandn %xmm1, %xmm3
10230; SSE2-NEXT:    por %xmm3, %xmm0
10231; SSE2-NEXT:    retq
10232;
10233; SSE4-LABEL: test192:
10234; SSE4:       # %bb.0: # %entry
10235; SSE4-NEXT:    movdqa %xmm0, %xmm2
10236; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10237; SSE4-NEXT:    movdqa %xmm2, %xmm3
10238; SSE4-NEXT:    pxor %xmm0, %xmm3
10239; SSE4-NEXT:    pxor %xmm1, %xmm0
10240; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10241; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10242; SSE4-NEXT:    movapd %xmm1, %xmm0
10243; SSE4-NEXT:    retq
10244;
10245; AVX1-LABEL: test192:
10246; AVX1:       # %bb.0: # %entry
10247; AVX1-NEXT:    vmovddup {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10248; AVX1-NEXT:    # xmm2 = mem[0,0]
10249; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10250; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10251; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10252; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10253; AVX1-NEXT:    retq
10254;
10255; AVX2-LABEL: test192:
10256; AVX2:       # %bb.0: # %entry
10257; AVX2-NEXT:    vpbroadcastq {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10258; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10259; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10260; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10261; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10262; AVX2-NEXT:    retq
10263;
10264; AVX512F-LABEL: test192:
10265; AVX512F:       # %bb.0: # %entry
10266; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10267; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10268; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
10269; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10270; AVX512F-NEXT:    retq
10271;
10272; AVX512BW-LABEL: test192:
10273; AVX512BW:       # %bb.0: # %entry
10274; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10275; AVX512BW-NEXT:    retq
10276entry:
10277  %cmp = icmp uge <2 x i64> %a, %b
10278  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10279  ret <2 x i64> %sel
10280}
10281
10282; comparisons for smin/smax patterns can be reused
10283define <8 x i64> @concat_smin_smax(<4 x i64> %a0, <4 x i64> %a1) {
10284; SSE2-LABEL: concat_smin_smax:
10285; SSE2:       # %bb.0:
10286; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648]
10287; SSE2-NEXT:    movdqa %xmm0, %xmm4
10288; SSE2-NEXT:    pxor %xmm6, %xmm4
10289; SSE2-NEXT:    movdqa %xmm2, %xmm5
10290; SSE2-NEXT:    pxor %xmm6, %xmm5
10291; SSE2-NEXT:    movdqa %xmm5, %xmm7
10292; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
10293; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
10294; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
10295; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
10296; SSE2-NEXT:    pand %xmm8, %xmm4
10297; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
10298; SSE2-NEXT:    por %xmm4, %xmm5
10299; SSE2-NEXT:    movdqa %xmm5, %xmm7
10300; SSE2-NEXT:    pandn %xmm2, %xmm7
10301; SSE2-NEXT:    movdqa %xmm0, %xmm4
10302; SSE2-NEXT:    pand %xmm5, %xmm4
10303; SSE2-NEXT:    por %xmm7, %xmm4
10304; SSE2-NEXT:    movdqa %xmm1, %xmm7
10305; SSE2-NEXT:    pxor %xmm6, %xmm7
10306; SSE2-NEXT:    pxor %xmm3, %xmm6
10307; SSE2-NEXT:    movdqa %xmm6, %xmm8
10308; SSE2-NEXT:    pcmpgtd %xmm7, %xmm8
10309; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm8[0,0,2,2]
10310; SSE2-NEXT:    pcmpeqd %xmm7, %xmm6
10311; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
10312; SSE2-NEXT:    pand %xmm9, %xmm6
10313; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm8[1,1,3,3]
10314; SSE2-NEXT:    por %xmm6, %xmm7
10315; SSE2-NEXT:    movdqa %xmm7, %xmm6
10316; SSE2-NEXT:    pandn %xmm3, %xmm6
10317; SSE2-NEXT:    movdqa %xmm7, %xmm8
10318; SSE2-NEXT:    pandn %xmm1, %xmm8
10319; SSE2-NEXT:    pand %xmm7, %xmm1
10320; SSE2-NEXT:    por %xmm6, %xmm1
10321; SSE2-NEXT:    pand %xmm5, %xmm2
10322; SSE2-NEXT:    pandn %xmm0, %xmm5
10323; SSE2-NEXT:    por %xmm5, %xmm2
10324; SSE2-NEXT:    pand %xmm7, %xmm3
10325; SSE2-NEXT:    por %xmm8, %xmm3
10326; SSE2-NEXT:    movdqa %xmm4, %xmm0
10327; SSE2-NEXT:    retq
10328;
10329; SSE4-LABEL: concat_smin_smax:
10330; SSE4:       # %bb.0:
10331; SSE4-NEXT:    movdqa %xmm1, %xmm4
10332; SSE4-NEXT:    movdqa %xmm0, %xmm5
10333; SSE4-NEXT:    movdqa %xmm2, %xmm8
10334; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
10335; SSE4-NEXT:    movdqa %xmm2, %xmm6
10336; SSE4-NEXT:    movdqa %xmm8, %xmm0
10337; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm6
10338; SSE4-NEXT:    movdqa %xmm3, %xmm7
10339; SSE4-NEXT:    pcmpgtq %xmm1, %xmm7
10340; SSE4-NEXT:    movdqa %xmm3, %xmm1
10341; SSE4-NEXT:    movdqa %xmm7, %xmm0
10342; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm1
10343; SSE4-NEXT:    movdqa %xmm8, %xmm0
10344; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm5
10345; SSE4-NEXT:    movdqa %xmm7, %xmm0
10346; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm4
10347; SSE4-NEXT:    movapd %xmm6, %xmm0
10348; SSE4-NEXT:    movapd %xmm5, %xmm2
10349; SSE4-NEXT:    movapd %xmm4, %xmm3
10350; SSE4-NEXT:    retq
10351;
10352; AVX1-LABEL: concat_smin_smax:
10353; AVX1:       # %bb.0:
10354; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10355; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
10356; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
10357; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
10358; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm2, %ymm3
10359; AVX1-NEXT:    vblendvpd %ymm3, %ymm1, %ymm0, %ymm2
10360; AVX1-NEXT:    vblendvpd %ymm3, %ymm0, %ymm1, %ymm1
10361; AVX1-NEXT:    vmovapd %ymm2, %ymm0
10362; AVX1-NEXT:    retq
10363;
10364; AVX2-LABEL: concat_smin_smax:
10365; AVX2:       # %bb.0:
10366; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm3
10367; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm0, %ymm2
10368; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm1, %ymm1
10369; AVX2-NEXT:    vmovapd %ymm2, %ymm0
10370; AVX2-NEXT:    retq
10371;
10372; AVX512F-LABEL: concat_smin_smax:
10373; AVX512F:       # %bb.0:
10374; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
10375; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10376; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm2
10377; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
10378; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
10379; AVX512F-NEXT:    retq
10380;
10381; AVX512BW-LABEL: concat_smin_smax:
10382; AVX512BW:       # %bb.0:
10383; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm2
10384; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
10385; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
10386; AVX512BW-NEXT:    retq
10387  %cmp = icmp slt <4 x i64> %a0, %a1
10388  %min = select <4 x i1> %cmp, <4 x i64> %a0, <4 x i64> %a1
10389  %max = select <4 x i1> %cmp, <4 x i64> %a1, <4 x i64> %a0
10390  %res = shufflevector <4 x i64> %min, <4 x i64> %max, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
10391  ret <8 x i64> %res
10392}
10393