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 %xmm0, %xmm2
67; SSE2-NEXT:    movdqa %xmm2, %xmm0
68; SSE2-NEXT:    retq
69;
70; SSE4-LABEL: test3:
71; SSE4:       # %bb.0: # %entry
72; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
73; SSE4-NEXT:    retq
74;
75; AVX-LABEL: test3:
76; AVX:       # %bb.0: # %entry
77; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
78; AVX-NEXT:    retq
79entry:
80  %cmp = icmp sgt <16 x i8> %a, %b
81  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
82  ret <16 x i8> %sel
83}
84
85define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
86; SSE2-LABEL: test4:
87; SSE2:       # %bb.0: # %entry
88; SSE2-NEXT:    movdqa %xmm0, %xmm2
89; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
90; SSE2-NEXT:    pand %xmm2, %xmm0
91; SSE2-NEXT:    pandn %xmm1, %xmm2
92; SSE2-NEXT:    por %xmm0, %xmm2
93; SSE2-NEXT:    movdqa %xmm2, %xmm0
94; SSE2-NEXT:    retq
95;
96; SSE4-LABEL: test4:
97; SSE4:       # %bb.0: # %entry
98; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
99; SSE4-NEXT:    retq
100;
101; AVX-LABEL: test4:
102; AVX:       # %bb.0: # %entry
103; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
104; AVX-NEXT:    retq
105entry:
106  %cmp = icmp sge <16 x i8> %a, %b
107  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
108  ret <16 x i8> %sel
109}
110
111define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
112; SSE-LABEL: test5:
113; SSE:       # %bb.0: # %entry
114; SSE-NEXT:    pminub %xmm1, %xmm0
115; SSE-NEXT:    retq
116;
117; AVX-LABEL: test5:
118; AVX:       # %bb.0: # %entry
119; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
120; AVX-NEXT:    retq
121entry:
122  %cmp = icmp ult <16 x i8> %a, %b
123  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
124  ret <16 x i8> %sel
125}
126
127define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
128; SSE-LABEL: test6:
129; SSE:       # %bb.0: # %entry
130; SSE-NEXT:    pminub %xmm1, %xmm0
131; SSE-NEXT:    retq
132;
133; AVX-LABEL: test6:
134; AVX:       # %bb.0: # %entry
135; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
136; AVX-NEXT:    retq
137entry:
138  %cmp = icmp ule <16 x i8> %a, %b
139  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
140  ret <16 x i8> %sel
141}
142
143define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
144; SSE-LABEL: test7:
145; SSE:       # %bb.0: # %entry
146; SSE-NEXT:    pmaxub %xmm1, %xmm0
147; SSE-NEXT:    retq
148;
149; AVX-LABEL: test7:
150; AVX:       # %bb.0: # %entry
151; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
152; AVX-NEXT:    retq
153entry:
154  %cmp = icmp ugt <16 x i8> %a, %b
155  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
156  ret <16 x i8> %sel
157}
158
159define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
160; SSE-LABEL: test8:
161; SSE:       # %bb.0: # %entry
162; SSE-NEXT:    pmaxub %xmm1, %xmm0
163; SSE-NEXT:    retq
164;
165; AVX-LABEL: test8:
166; AVX:       # %bb.0: # %entry
167; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
168; AVX-NEXT:    retq
169entry:
170  %cmp = icmp uge <16 x i8> %a, %b
171  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
172  ret <16 x i8> %sel
173}
174
175define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
176; SSE-LABEL: test9:
177; SSE:       # %bb.0: # %entry
178; SSE-NEXT:    pminsw %xmm1, %xmm0
179; SSE-NEXT:    retq
180;
181; AVX-LABEL: test9:
182; AVX:       # %bb.0: # %entry
183; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
184; AVX-NEXT:    retq
185entry:
186  %cmp = icmp slt <8 x i16> %a, %b
187  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
188  ret <8 x i16> %sel
189}
190
191define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
192; SSE-LABEL: test10:
193; SSE:       # %bb.0: # %entry
194; SSE-NEXT:    pminsw %xmm1, %xmm0
195; SSE-NEXT:    retq
196;
197; AVX-LABEL: test10:
198; AVX:       # %bb.0: # %entry
199; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
200; AVX-NEXT:    retq
201entry:
202  %cmp = icmp sle <8 x i16> %a, %b
203  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
204  ret <8 x i16> %sel
205}
206
207define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
208; SSE-LABEL: test11:
209; SSE:       # %bb.0: # %entry
210; SSE-NEXT:    pmaxsw %xmm1, %xmm0
211; SSE-NEXT:    retq
212;
213; AVX-LABEL: test11:
214; AVX:       # %bb.0: # %entry
215; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
216; AVX-NEXT:    retq
217entry:
218  %cmp = icmp sgt <8 x i16> %a, %b
219  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
220  ret <8 x i16> %sel
221}
222
223define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
224; SSE-LABEL: test12:
225; SSE:       # %bb.0: # %entry
226; SSE-NEXT:    pmaxsw %xmm1, %xmm0
227; SSE-NEXT:    retq
228;
229; AVX-LABEL: test12:
230; AVX:       # %bb.0: # %entry
231; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
232; AVX-NEXT:    retq
233entry:
234  %cmp = icmp sge <8 x i16> %a, %b
235  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
236  ret <8 x i16> %sel
237}
238
239define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
240; SSE2-LABEL: test13:
241; SSE2:       # %bb.0: # %entry
242; SSE2-NEXT:    movdqa %xmm0, %xmm2
243; SSE2-NEXT:    psubusw %xmm1, %xmm2
244; SSE2-NEXT:    psubw %xmm2, %xmm0
245; SSE2-NEXT:    retq
246;
247; SSE4-LABEL: test13:
248; SSE4:       # %bb.0: # %entry
249; SSE4-NEXT:    pminuw %xmm1, %xmm0
250; SSE4-NEXT:    retq
251;
252; AVX-LABEL: test13:
253; AVX:       # %bb.0: # %entry
254; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
255; AVX-NEXT:    retq
256entry:
257  %cmp = icmp ult <8 x i16> %a, %b
258  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
259  ret <8 x i16> %sel
260}
261
262define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
263; SSE2-LABEL: test14:
264; SSE2:       # %bb.0: # %entry
265; SSE2-NEXT:    movdqa %xmm0, %xmm2
266; SSE2-NEXT:    psubusw %xmm1, %xmm2
267; SSE2-NEXT:    psubw %xmm2, %xmm0
268; SSE2-NEXT:    retq
269;
270; SSE4-LABEL: test14:
271; SSE4:       # %bb.0: # %entry
272; SSE4-NEXT:    pminuw %xmm1, %xmm0
273; SSE4-NEXT:    retq
274;
275; AVX-LABEL: test14:
276; AVX:       # %bb.0: # %entry
277; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
278; AVX-NEXT:    retq
279entry:
280  %cmp = icmp ule <8 x i16> %a, %b
281  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
282  ret <8 x i16> %sel
283}
284
285define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
286; SSE2-LABEL: test15:
287; SSE2:       # %bb.0: # %entry
288; SSE2-NEXT:    psubusw %xmm0, %xmm1
289; SSE2-NEXT:    paddw %xmm1, %xmm0
290; SSE2-NEXT:    retq
291;
292; SSE4-LABEL: test15:
293; SSE4:       # %bb.0: # %entry
294; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
295; SSE4-NEXT:    retq
296;
297; AVX-LABEL: test15:
298; AVX:       # %bb.0: # %entry
299; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
300; AVX-NEXT:    retq
301entry:
302  %cmp = icmp ugt <8 x i16> %a, %b
303  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
304  ret <8 x i16> %sel
305}
306
307define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
308; SSE2-LABEL: test16:
309; SSE2:       # %bb.0: # %entry
310; SSE2-NEXT:    psubusw %xmm0, %xmm1
311; SSE2-NEXT:    paddw %xmm1, %xmm0
312; SSE2-NEXT:    retq
313;
314; SSE4-LABEL: test16:
315; SSE4:       # %bb.0: # %entry
316; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
317; SSE4-NEXT:    retq
318;
319; AVX-LABEL: test16:
320; AVX:       # %bb.0: # %entry
321; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
322; AVX-NEXT:    retq
323entry:
324  %cmp = icmp uge <8 x i16> %a, %b
325  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
326  ret <8 x i16> %sel
327}
328
329define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
330; SSE2-LABEL: test17:
331; SSE2:       # %bb.0: # %entry
332; SSE2-NEXT:    movdqa %xmm1, %xmm2
333; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
334; SSE2-NEXT:    pand %xmm2, %xmm0
335; SSE2-NEXT:    pandn %xmm1, %xmm2
336; SSE2-NEXT:    por %xmm2, %xmm0
337; SSE2-NEXT:    retq
338;
339; SSE4-LABEL: test17:
340; SSE4:       # %bb.0: # %entry
341; SSE4-NEXT:    pminsd %xmm1, %xmm0
342; SSE4-NEXT:    retq
343;
344; AVX-LABEL: test17:
345; AVX:       # %bb.0: # %entry
346; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
347; AVX-NEXT:    retq
348entry:
349  %cmp = icmp slt <4 x i32> %a, %b
350  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
351  ret <4 x i32> %sel
352}
353
354define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
355; SSE2-LABEL: test18:
356; SSE2:       # %bb.0: # %entry
357; SSE2-NEXT:    movdqa %xmm1, %xmm2
358; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
359; SSE2-NEXT:    pand %xmm2, %xmm0
360; SSE2-NEXT:    pandn %xmm1, %xmm2
361; SSE2-NEXT:    por %xmm2, %xmm0
362; SSE2-NEXT:    retq
363;
364; SSE4-LABEL: test18:
365; SSE4:       # %bb.0: # %entry
366; SSE4-NEXT:    pminsd %xmm1, %xmm0
367; SSE4-NEXT:    retq
368;
369; AVX-LABEL: test18:
370; AVX:       # %bb.0: # %entry
371; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
372; AVX-NEXT:    retq
373entry:
374  %cmp = icmp sle <4 x i32> %a, %b
375  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
376  ret <4 x i32> %sel
377}
378
379define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
380; SSE2-LABEL: test19:
381; SSE2:       # %bb.0: # %entry
382; SSE2-NEXT:    movdqa %xmm0, %xmm2
383; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
384; SSE2-NEXT:    pand %xmm2, %xmm0
385; SSE2-NEXT:    pandn %xmm1, %xmm2
386; SSE2-NEXT:    por %xmm0, %xmm2
387; SSE2-NEXT:    movdqa %xmm2, %xmm0
388; SSE2-NEXT:    retq
389;
390; SSE4-LABEL: test19:
391; SSE4:       # %bb.0: # %entry
392; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
393; SSE4-NEXT:    retq
394;
395; AVX-LABEL: test19:
396; AVX:       # %bb.0: # %entry
397; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
398; AVX-NEXT:    retq
399entry:
400  %cmp = icmp sgt <4 x i32> %a, %b
401  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
402  ret <4 x i32> %sel
403}
404
405define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
406; SSE2-LABEL: test20:
407; SSE2:       # %bb.0: # %entry
408; SSE2-NEXT:    movdqa %xmm0, %xmm2
409; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
410; SSE2-NEXT:    pand %xmm2, %xmm0
411; SSE2-NEXT:    pandn %xmm1, %xmm2
412; SSE2-NEXT:    por %xmm0, %xmm2
413; SSE2-NEXT:    movdqa %xmm2, %xmm0
414; SSE2-NEXT:    retq
415;
416; SSE4-LABEL: test20:
417; SSE4:       # %bb.0: # %entry
418; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
419; SSE4-NEXT:    retq
420;
421; AVX-LABEL: test20:
422; AVX:       # %bb.0: # %entry
423; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
424; AVX-NEXT:    retq
425entry:
426  %cmp = icmp sge <4 x i32> %a, %b
427  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
428  ret <4 x i32> %sel
429}
430
431define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
432; SSE2-LABEL: test21:
433; SSE2:       # %bb.0: # %entry
434; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
435; SSE2-NEXT:    movdqa %xmm0, %xmm3
436; SSE2-NEXT:    pxor %xmm2, %xmm3
437; SSE2-NEXT:    pxor %xmm1, %xmm2
438; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
439; SSE2-NEXT:    pand %xmm2, %xmm0
440; SSE2-NEXT:    pandn %xmm1, %xmm2
441; SSE2-NEXT:    por %xmm2, %xmm0
442; SSE2-NEXT:    retq
443;
444; SSE4-LABEL: test21:
445; SSE4:       # %bb.0: # %entry
446; SSE4-NEXT:    pminud %xmm1, %xmm0
447; SSE4-NEXT:    retq
448;
449; AVX-LABEL: test21:
450; AVX:       # %bb.0: # %entry
451; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
452; AVX-NEXT:    retq
453entry:
454  %cmp = icmp ult <4 x i32> %a, %b
455  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
456  ret <4 x i32> %sel
457}
458
459define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
460; SSE2-LABEL: test22:
461; SSE2:       # %bb.0: # %entry
462; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
463; SSE2-NEXT:    movdqa %xmm0, %xmm3
464; SSE2-NEXT:    pxor %xmm2, %xmm3
465; SSE2-NEXT:    pxor %xmm1, %xmm2
466; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
467; SSE2-NEXT:    pand %xmm2, %xmm0
468; SSE2-NEXT:    pandn %xmm1, %xmm2
469; SSE2-NEXT:    por %xmm2, %xmm0
470; SSE2-NEXT:    retq
471;
472; SSE4-LABEL: test22:
473; SSE4:       # %bb.0: # %entry
474; SSE4-NEXT:    pminud %xmm1, %xmm0
475; SSE4-NEXT:    retq
476;
477; AVX-LABEL: test22:
478; AVX:       # %bb.0: # %entry
479; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
480; AVX-NEXT:    retq
481entry:
482  %cmp = icmp ule <4 x i32> %a, %b
483  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
484  ret <4 x i32> %sel
485}
486
487define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
488; SSE2-LABEL: test23:
489; SSE2:       # %bb.0: # %entry
490; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
491; SSE2-NEXT:    movdqa %xmm1, %xmm3
492; SSE2-NEXT:    pxor %xmm2, %xmm3
493; SSE2-NEXT:    pxor %xmm0, %xmm2
494; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
495; SSE2-NEXT:    pand %xmm2, %xmm0
496; SSE2-NEXT:    pandn %xmm1, %xmm2
497; SSE2-NEXT:    por %xmm2, %xmm0
498; SSE2-NEXT:    retq
499;
500; SSE4-LABEL: test23:
501; SSE4:       # %bb.0: # %entry
502; SSE4-NEXT:    pmaxud %xmm1, %xmm0
503; SSE4-NEXT:    retq
504;
505; AVX-LABEL: test23:
506; AVX:       # %bb.0: # %entry
507; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
508; AVX-NEXT:    retq
509entry:
510  %cmp = icmp ugt <4 x i32> %a, %b
511  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
512  ret <4 x i32> %sel
513}
514
515define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
516; SSE2-LABEL: test24:
517; SSE2:       # %bb.0: # %entry
518; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
519; SSE2-NEXT:    movdqa %xmm1, %xmm3
520; SSE2-NEXT:    pxor %xmm2, %xmm3
521; SSE2-NEXT:    pxor %xmm0, %xmm2
522; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
523; SSE2-NEXT:    pand %xmm2, %xmm0
524; SSE2-NEXT:    pandn %xmm1, %xmm2
525; SSE2-NEXT:    por %xmm2, %xmm0
526; SSE2-NEXT:    retq
527;
528; SSE4-LABEL: test24:
529; SSE4:       # %bb.0: # %entry
530; SSE4-NEXT:    pmaxud %xmm1, %xmm0
531; SSE4-NEXT:    retq
532;
533; AVX-LABEL: test24:
534; AVX:       # %bb.0: # %entry
535; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
536; AVX-NEXT:    retq
537entry:
538  %cmp = icmp uge <4 x i32> %a, %b
539  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
540  ret <4 x i32> %sel
541}
542
543define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
544; SSE2-LABEL: test25:
545; SSE2:       # %bb.0: # %entry
546; SSE2-NEXT:    movdqa %xmm2, %xmm4
547; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
548; SSE2-NEXT:    pand %xmm4, %xmm0
549; SSE2-NEXT:    pandn %xmm2, %xmm4
550; SSE2-NEXT:    por %xmm4, %xmm0
551; SSE2-NEXT:    movdqa %xmm3, %xmm2
552; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
553; SSE2-NEXT:    pand %xmm2, %xmm1
554; SSE2-NEXT:    pandn %xmm3, %xmm2
555; SSE2-NEXT:    por %xmm2, %xmm1
556; SSE2-NEXT:    retq
557;
558; SSE4-LABEL: test25:
559; SSE4:       # %bb.0: # %entry
560; SSE4-NEXT:    pminsb %xmm2, %xmm0
561; SSE4-NEXT:    pminsb %xmm3, %xmm1
562; SSE4-NEXT:    retq
563;
564; AVX1-LABEL: test25:
565; AVX1:       # %bb.0: # %entry
566; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
567; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
568; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
569; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
570; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
571; AVX1-NEXT:    retq
572;
573; AVX2-LABEL: test25:
574; AVX2:       # %bb.0: # %entry
575; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
576; AVX2-NEXT:    retq
577;
578; AVX512-LABEL: test25:
579; AVX512:       # %bb.0: # %entry
580; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
581; AVX512-NEXT:    retq
582entry:
583  %cmp = icmp slt <32 x i8> %a, %b
584  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
585  ret <32 x i8> %sel
586}
587
588define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
589; SSE2-LABEL: test26:
590; SSE2:       # %bb.0: # %entry
591; SSE2-NEXT:    movdqa %xmm2, %xmm4
592; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
593; SSE2-NEXT:    pand %xmm4, %xmm0
594; SSE2-NEXT:    pandn %xmm2, %xmm4
595; SSE2-NEXT:    por %xmm4, %xmm0
596; SSE2-NEXT:    movdqa %xmm3, %xmm2
597; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
598; SSE2-NEXT:    pand %xmm2, %xmm1
599; SSE2-NEXT:    pandn %xmm3, %xmm2
600; SSE2-NEXT:    por %xmm2, %xmm1
601; SSE2-NEXT:    retq
602;
603; SSE4-LABEL: test26:
604; SSE4:       # %bb.0: # %entry
605; SSE4-NEXT:    pminsb %xmm2, %xmm0
606; SSE4-NEXT:    pminsb %xmm3, %xmm1
607; SSE4-NEXT:    retq
608;
609; AVX1-LABEL: test26:
610; AVX1:       # %bb.0: # %entry
611; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
612; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
613; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
614; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
615; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
616; AVX1-NEXT:    retq
617;
618; AVX2-LABEL: test26:
619; AVX2:       # %bb.0: # %entry
620; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
621; AVX2-NEXT:    retq
622;
623; AVX512-LABEL: test26:
624; AVX512:       # %bb.0: # %entry
625; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
626; AVX512-NEXT:    retq
627entry:
628  %cmp = icmp sle <32 x i8> %a, %b
629  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
630  ret <32 x i8> %sel
631}
632
633define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
634; SSE2-LABEL: test27:
635; SSE2:       # %bb.0: # %entry
636; SSE2-NEXT:    movdqa %xmm0, %xmm4
637; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
638; SSE2-NEXT:    pand %xmm4, %xmm0
639; SSE2-NEXT:    pandn %xmm2, %xmm4
640; SSE2-NEXT:    por %xmm0, %xmm4
641; SSE2-NEXT:    movdqa %xmm1, %xmm2
642; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
643; SSE2-NEXT:    pand %xmm2, %xmm1
644; SSE2-NEXT:    pandn %xmm3, %xmm2
645; SSE2-NEXT:    por %xmm1, %xmm2
646; SSE2-NEXT:    movdqa %xmm4, %xmm0
647; SSE2-NEXT:    movdqa %xmm2, %xmm1
648; SSE2-NEXT:    retq
649;
650; SSE4-LABEL: test27:
651; SSE4:       # %bb.0: # %entry
652; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
653; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
654; SSE4-NEXT:    retq
655;
656; AVX1-LABEL: test27:
657; AVX1:       # %bb.0: # %entry
658; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
659; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
660; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
661; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
662; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
663; AVX1-NEXT:    retq
664;
665; AVX2-LABEL: test27:
666; AVX2:       # %bb.0: # %entry
667; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
668; AVX2-NEXT:    retq
669;
670; AVX512-LABEL: test27:
671; AVX512:       # %bb.0: # %entry
672; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
673; AVX512-NEXT:    retq
674entry:
675  %cmp = icmp sgt <32 x i8> %a, %b
676  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
677  ret <32 x i8> %sel
678}
679
680define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
681; SSE2-LABEL: test28:
682; SSE2:       # %bb.0: # %entry
683; SSE2-NEXT:    movdqa %xmm0, %xmm4
684; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
685; SSE2-NEXT:    pand %xmm4, %xmm0
686; SSE2-NEXT:    pandn %xmm2, %xmm4
687; SSE2-NEXT:    por %xmm0, %xmm4
688; SSE2-NEXT:    movdqa %xmm1, %xmm2
689; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
690; SSE2-NEXT:    pand %xmm2, %xmm1
691; SSE2-NEXT:    pandn %xmm3, %xmm2
692; SSE2-NEXT:    por %xmm1, %xmm2
693; SSE2-NEXT:    movdqa %xmm4, %xmm0
694; SSE2-NEXT:    movdqa %xmm2, %xmm1
695; SSE2-NEXT:    retq
696;
697; SSE4-LABEL: test28:
698; SSE4:       # %bb.0: # %entry
699; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
700; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
701; SSE4-NEXT:    retq
702;
703; AVX1-LABEL: test28:
704; AVX1:       # %bb.0: # %entry
705; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
706; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
707; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
708; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
709; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
710; AVX1-NEXT:    retq
711;
712; AVX2-LABEL: test28:
713; AVX2:       # %bb.0: # %entry
714; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
715; AVX2-NEXT:    retq
716;
717; AVX512-LABEL: test28:
718; AVX512:       # %bb.0: # %entry
719; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
720; AVX512-NEXT:    retq
721entry:
722  %cmp = icmp sge <32 x i8> %a, %b
723  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
724  ret <32 x i8> %sel
725}
726
727define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
728; SSE-LABEL: test29:
729; SSE:       # %bb.0: # %entry
730; SSE-NEXT:    pminub %xmm2, %xmm0
731; SSE-NEXT:    pminub %xmm3, %xmm1
732; SSE-NEXT:    retq
733;
734; AVX1-LABEL: test29:
735; AVX1:       # %bb.0: # %entry
736; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
737; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
738; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
739; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
740; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
741; AVX1-NEXT:    retq
742;
743; AVX2-LABEL: test29:
744; AVX2:       # %bb.0: # %entry
745; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
746; AVX2-NEXT:    retq
747;
748; AVX512-LABEL: test29:
749; AVX512:       # %bb.0: # %entry
750; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
751; AVX512-NEXT:    retq
752entry:
753  %cmp = icmp ult <32 x i8> %a, %b
754  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
755  ret <32 x i8> %sel
756}
757
758define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
759; SSE-LABEL: test30:
760; SSE:       # %bb.0: # %entry
761; SSE-NEXT:    pminub %xmm2, %xmm0
762; SSE-NEXT:    pminub %xmm3, %xmm1
763; SSE-NEXT:    retq
764;
765; AVX1-LABEL: test30:
766; AVX1:       # %bb.0: # %entry
767; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
768; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
769; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
770; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
771; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
772; AVX1-NEXT:    retq
773;
774; AVX2-LABEL: test30:
775; AVX2:       # %bb.0: # %entry
776; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
777; AVX2-NEXT:    retq
778;
779; AVX512-LABEL: test30:
780; AVX512:       # %bb.0: # %entry
781; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
782; AVX512-NEXT:    retq
783entry:
784  %cmp = icmp ule <32 x i8> %a, %b
785  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
786  ret <32 x i8> %sel
787}
788
789define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
790; SSE-LABEL: test31:
791; SSE:       # %bb.0: # %entry
792; SSE-NEXT:    pmaxub %xmm2, %xmm0
793; SSE-NEXT:    pmaxub %xmm3, %xmm1
794; SSE-NEXT:    retq
795;
796; AVX1-LABEL: test31:
797; AVX1:       # %bb.0: # %entry
798; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
799; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
800; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
801; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
802; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
803; AVX1-NEXT:    retq
804;
805; AVX2-LABEL: test31:
806; AVX2:       # %bb.0: # %entry
807; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
808; AVX2-NEXT:    retq
809;
810; AVX512-LABEL: test31:
811; AVX512:       # %bb.0: # %entry
812; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
813; AVX512-NEXT:    retq
814entry:
815  %cmp = icmp ugt <32 x i8> %a, %b
816  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
817  ret <32 x i8> %sel
818}
819
820define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
821; SSE-LABEL: test32:
822; SSE:       # %bb.0: # %entry
823; SSE-NEXT:    pmaxub %xmm2, %xmm0
824; SSE-NEXT:    pmaxub %xmm3, %xmm1
825; SSE-NEXT:    retq
826;
827; AVX1-LABEL: test32:
828; AVX1:       # %bb.0: # %entry
829; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
830; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
831; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
832; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
833; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
834; AVX1-NEXT:    retq
835;
836; AVX2-LABEL: test32:
837; AVX2:       # %bb.0: # %entry
838; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
839; AVX2-NEXT:    retq
840;
841; AVX512-LABEL: test32:
842; AVX512:       # %bb.0: # %entry
843; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
844; AVX512-NEXT:    retq
845entry:
846  %cmp = icmp uge <32 x i8> %a, %b
847  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
848  ret <32 x i8> %sel
849}
850
851define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
852; SSE-LABEL: test33:
853; SSE:       # %bb.0: # %entry
854; SSE-NEXT:    pminsw %xmm2, %xmm0
855; SSE-NEXT:    pminsw %xmm3, %xmm1
856; SSE-NEXT:    retq
857;
858; AVX1-LABEL: test33:
859; AVX1:       # %bb.0: # %entry
860; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
861; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
862; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
863; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
864; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
865; AVX1-NEXT:    retq
866;
867; AVX2-LABEL: test33:
868; AVX2:       # %bb.0: # %entry
869; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
870; AVX2-NEXT:    retq
871;
872; AVX512-LABEL: test33:
873; AVX512:       # %bb.0: # %entry
874; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
875; AVX512-NEXT:    retq
876entry:
877  %cmp = icmp slt <16 x i16> %a, %b
878  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
879  ret <16 x i16> %sel
880}
881
882define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
883; SSE-LABEL: test34:
884; SSE:       # %bb.0: # %entry
885; SSE-NEXT:    pminsw %xmm2, %xmm0
886; SSE-NEXT:    pminsw %xmm3, %xmm1
887; SSE-NEXT:    retq
888;
889; AVX1-LABEL: test34:
890; AVX1:       # %bb.0: # %entry
891; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
892; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
893; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
894; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
895; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
896; AVX1-NEXT:    retq
897;
898; AVX2-LABEL: test34:
899; AVX2:       # %bb.0: # %entry
900; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
901; AVX2-NEXT:    retq
902;
903; AVX512-LABEL: test34:
904; AVX512:       # %bb.0: # %entry
905; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
906; AVX512-NEXT:    retq
907entry:
908  %cmp = icmp sle <16 x i16> %a, %b
909  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
910  ret <16 x i16> %sel
911}
912
913define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
914; SSE-LABEL: test35:
915; SSE:       # %bb.0: # %entry
916; SSE-NEXT:    pmaxsw %xmm2, %xmm0
917; SSE-NEXT:    pmaxsw %xmm3, %xmm1
918; SSE-NEXT:    retq
919;
920; AVX1-LABEL: test35:
921; AVX1:       # %bb.0: # %entry
922; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
923; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
924; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
925; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
926; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
927; AVX1-NEXT:    retq
928;
929; AVX2-LABEL: test35:
930; AVX2:       # %bb.0: # %entry
931; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
932; AVX2-NEXT:    retq
933;
934; AVX512-LABEL: test35:
935; AVX512:       # %bb.0: # %entry
936; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
937; AVX512-NEXT:    retq
938entry:
939  %cmp = icmp sgt <16 x i16> %a, %b
940  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
941  ret <16 x i16> %sel
942}
943
944define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
945; SSE-LABEL: test36:
946; SSE:       # %bb.0: # %entry
947; SSE-NEXT:    pmaxsw %xmm2, %xmm0
948; SSE-NEXT:    pmaxsw %xmm3, %xmm1
949; SSE-NEXT:    retq
950;
951; AVX1-LABEL: test36:
952; AVX1:       # %bb.0: # %entry
953; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
954; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
955; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
956; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
957; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
958; AVX1-NEXT:    retq
959;
960; AVX2-LABEL: test36:
961; AVX2:       # %bb.0: # %entry
962; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
963; AVX2-NEXT:    retq
964;
965; AVX512-LABEL: test36:
966; AVX512:       # %bb.0: # %entry
967; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
968; AVX512-NEXT:    retq
969entry:
970  %cmp = icmp sge <16 x i16> %a, %b
971  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
972  ret <16 x i16> %sel
973}
974
975define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
976; SSE2-LABEL: test37:
977; SSE2:       # %bb.0: # %entry
978; SSE2-NEXT:    movdqa %xmm0, %xmm4
979; SSE2-NEXT:    psubusw %xmm2, %xmm4
980; SSE2-NEXT:    psubw %xmm4, %xmm0
981; SSE2-NEXT:    movdqa %xmm1, %xmm2
982; SSE2-NEXT:    psubusw %xmm3, %xmm2
983; SSE2-NEXT:    psubw %xmm2, %xmm1
984; SSE2-NEXT:    retq
985;
986; SSE4-LABEL: test37:
987; SSE4:       # %bb.0: # %entry
988; SSE4-NEXT:    pminuw %xmm2, %xmm0
989; SSE4-NEXT:    pminuw %xmm3, %xmm1
990; SSE4-NEXT:    retq
991;
992; AVX1-LABEL: test37:
993; AVX1:       # %bb.0: # %entry
994; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
995; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
996; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
997; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
998; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
999; AVX1-NEXT:    retq
1000;
1001; AVX2-LABEL: test37:
1002; AVX2:       # %bb.0: # %entry
1003; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1004; AVX2-NEXT:    retq
1005;
1006; AVX512-LABEL: test37:
1007; AVX512:       # %bb.0: # %entry
1008; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1009; AVX512-NEXT:    retq
1010entry:
1011  %cmp = icmp ult <16 x i16> %a, %b
1012  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1013  ret <16 x i16> %sel
1014}
1015
1016define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1017; SSE2-LABEL: test38:
1018; SSE2:       # %bb.0: # %entry
1019; SSE2-NEXT:    movdqa %xmm0, %xmm4
1020; SSE2-NEXT:    psubusw %xmm2, %xmm4
1021; SSE2-NEXT:    psubw %xmm4, %xmm0
1022; SSE2-NEXT:    movdqa %xmm1, %xmm2
1023; SSE2-NEXT:    psubusw %xmm3, %xmm2
1024; SSE2-NEXT:    psubw %xmm2, %xmm1
1025; SSE2-NEXT:    retq
1026;
1027; SSE4-LABEL: test38:
1028; SSE4:       # %bb.0: # %entry
1029; SSE4-NEXT:    pminuw %xmm2, %xmm0
1030; SSE4-NEXT:    pminuw %xmm3, %xmm1
1031; SSE4-NEXT:    retq
1032;
1033; AVX1-LABEL: test38:
1034; AVX1:       # %bb.0: # %entry
1035; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1036; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1037; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1038; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1039; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1040; AVX1-NEXT:    retq
1041;
1042; AVX2-LABEL: test38:
1043; AVX2:       # %bb.0: # %entry
1044; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1045; AVX2-NEXT:    retq
1046;
1047; AVX512-LABEL: test38:
1048; AVX512:       # %bb.0: # %entry
1049; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1050; AVX512-NEXT:    retq
1051entry:
1052  %cmp = icmp ule <16 x i16> %a, %b
1053  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1054  ret <16 x i16> %sel
1055}
1056
1057define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1058; SSE2-LABEL: test39:
1059; SSE2:       # %bb.0: # %entry
1060; SSE2-NEXT:    psubusw %xmm0, %xmm2
1061; SSE2-NEXT:    paddw %xmm2, %xmm0
1062; SSE2-NEXT:    psubusw %xmm1, %xmm3
1063; SSE2-NEXT:    paddw %xmm3, %xmm1
1064; SSE2-NEXT:    retq
1065;
1066; SSE4-LABEL: test39:
1067; SSE4:       # %bb.0: # %entry
1068; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1069; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1070; SSE4-NEXT:    retq
1071;
1072; AVX1-LABEL: test39:
1073; AVX1:       # %bb.0: # %entry
1074; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1075; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1076; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1077; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1078; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1079; AVX1-NEXT:    retq
1080;
1081; AVX2-LABEL: test39:
1082; AVX2:       # %bb.0: # %entry
1083; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1084; AVX2-NEXT:    retq
1085;
1086; AVX512-LABEL: test39:
1087; AVX512:       # %bb.0: # %entry
1088; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1089; AVX512-NEXT:    retq
1090entry:
1091  %cmp = icmp ugt <16 x i16> %a, %b
1092  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1093  ret <16 x i16> %sel
1094}
1095
1096define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1097; SSE2-LABEL: test40:
1098; SSE2:       # %bb.0: # %entry
1099; SSE2-NEXT:    psubusw %xmm0, %xmm2
1100; SSE2-NEXT:    paddw %xmm2, %xmm0
1101; SSE2-NEXT:    psubusw %xmm1, %xmm3
1102; SSE2-NEXT:    paddw %xmm3, %xmm1
1103; SSE2-NEXT:    retq
1104;
1105; SSE4-LABEL: test40:
1106; SSE4:       # %bb.0: # %entry
1107; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1108; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1109; SSE4-NEXT:    retq
1110;
1111; AVX1-LABEL: test40:
1112; AVX1:       # %bb.0: # %entry
1113; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1114; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1115; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1116; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1117; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1118; AVX1-NEXT:    retq
1119;
1120; AVX2-LABEL: test40:
1121; AVX2:       # %bb.0: # %entry
1122; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1123; AVX2-NEXT:    retq
1124;
1125; AVX512-LABEL: test40:
1126; AVX512:       # %bb.0: # %entry
1127; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1128; AVX512-NEXT:    retq
1129entry:
1130  %cmp = icmp uge <16 x i16> %a, %b
1131  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1132  ret <16 x i16> %sel
1133}
1134
1135define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1136; SSE2-LABEL: test41:
1137; SSE2:       # %bb.0: # %entry
1138; SSE2-NEXT:    movdqa %xmm2, %xmm4
1139; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1140; SSE2-NEXT:    pand %xmm4, %xmm0
1141; SSE2-NEXT:    pandn %xmm2, %xmm4
1142; SSE2-NEXT:    por %xmm4, %xmm0
1143; SSE2-NEXT:    movdqa %xmm3, %xmm2
1144; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1145; SSE2-NEXT:    pand %xmm2, %xmm1
1146; SSE2-NEXT:    pandn %xmm3, %xmm2
1147; SSE2-NEXT:    por %xmm2, %xmm1
1148; SSE2-NEXT:    retq
1149;
1150; SSE4-LABEL: test41:
1151; SSE4:       # %bb.0: # %entry
1152; SSE4-NEXT:    pminsd %xmm2, %xmm0
1153; SSE4-NEXT:    pminsd %xmm3, %xmm1
1154; SSE4-NEXT:    retq
1155;
1156; AVX1-LABEL: test41:
1157; AVX1:       # %bb.0: # %entry
1158; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1159; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1160; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1161; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1162; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1163; AVX1-NEXT:    retq
1164;
1165; AVX2-LABEL: test41:
1166; AVX2:       # %bb.0: # %entry
1167; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1168; AVX2-NEXT:    retq
1169;
1170; AVX512-LABEL: test41:
1171; AVX512:       # %bb.0: # %entry
1172; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1173; AVX512-NEXT:    retq
1174entry:
1175  %cmp = icmp slt <8 x i32> %a, %b
1176  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1177  ret <8 x i32> %sel
1178}
1179
1180define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1181; SSE2-LABEL: test42:
1182; SSE2:       # %bb.0: # %entry
1183; SSE2-NEXT:    movdqa %xmm2, %xmm4
1184; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1185; SSE2-NEXT:    pand %xmm4, %xmm0
1186; SSE2-NEXT:    pandn %xmm2, %xmm4
1187; SSE2-NEXT:    por %xmm4, %xmm0
1188; SSE2-NEXT:    movdqa %xmm3, %xmm2
1189; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1190; SSE2-NEXT:    pand %xmm2, %xmm1
1191; SSE2-NEXT:    pandn %xmm3, %xmm2
1192; SSE2-NEXT:    por %xmm2, %xmm1
1193; SSE2-NEXT:    retq
1194;
1195; SSE4-LABEL: test42:
1196; SSE4:       # %bb.0: # %entry
1197; SSE4-NEXT:    pminsd %xmm2, %xmm0
1198; SSE4-NEXT:    pminsd %xmm3, %xmm1
1199; SSE4-NEXT:    retq
1200;
1201; AVX1-LABEL: test42:
1202; AVX1:       # %bb.0: # %entry
1203; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1204; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1205; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1206; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1207; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1208; AVX1-NEXT:    retq
1209;
1210; AVX2-LABEL: test42:
1211; AVX2:       # %bb.0: # %entry
1212; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1213; AVX2-NEXT:    retq
1214;
1215; AVX512-LABEL: test42:
1216; AVX512:       # %bb.0: # %entry
1217; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1218; AVX512-NEXT:    retq
1219entry:
1220  %cmp = icmp sle <8 x i32> %a, %b
1221  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1222  ret <8 x i32> %sel
1223}
1224
1225define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1226; SSE2-LABEL: test43:
1227; SSE2:       # %bb.0: # %entry
1228; SSE2-NEXT:    movdqa %xmm0, %xmm4
1229; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1230; SSE2-NEXT:    pand %xmm4, %xmm0
1231; SSE2-NEXT:    pandn %xmm2, %xmm4
1232; SSE2-NEXT:    por %xmm0, %xmm4
1233; SSE2-NEXT:    movdqa %xmm1, %xmm2
1234; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1235; SSE2-NEXT:    pand %xmm2, %xmm1
1236; SSE2-NEXT:    pandn %xmm3, %xmm2
1237; SSE2-NEXT:    por %xmm1, %xmm2
1238; SSE2-NEXT:    movdqa %xmm4, %xmm0
1239; SSE2-NEXT:    movdqa %xmm2, %xmm1
1240; SSE2-NEXT:    retq
1241;
1242; SSE4-LABEL: test43:
1243; SSE4:       # %bb.0: # %entry
1244; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1245; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1246; SSE4-NEXT:    retq
1247;
1248; AVX1-LABEL: test43:
1249; AVX1:       # %bb.0: # %entry
1250; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1251; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1252; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1253; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1254; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1255; AVX1-NEXT:    retq
1256;
1257; AVX2-LABEL: test43:
1258; AVX2:       # %bb.0: # %entry
1259; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1260; AVX2-NEXT:    retq
1261;
1262; AVX512-LABEL: test43:
1263; AVX512:       # %bb.0: # %entry
1264; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1265; AVX512-NEXT:    retq
1266entry:
1267  %cmp = icmp sgt <8 x i32> %a, %b
1268  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1269  ret <8 x i32> %sel
1270}
1271
1272define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1273; SSE2-LABEL: test44:
1274; SSE2:       # %bb.0: # %entry
1275; SSE2-NEXT:    movdqa %xmm0, %xmm4
1276; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1277; SSE2-NEXT:    pand %xmm4, %xmm0
1278; SSE2-NEXT:    pandn %xmm2, %xmm4
1279; SSE2-NEXT:    por %xmm0, %xmm4
1280; SSE2-NEXT:    movdqa %xmm1, %xmm2
1281; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1282; SSE2-NEXT:    pand %xmm2, %xmm1
1283; SSE2-NEXT:    pandn %xmm3, %xmm2
1284; SSE2-NEXT:    por %xmm1, %xmm2
1285; SSE2-NEXT:    movdqa %xmm4, %xmm0
1286; SSE2-NEXT:    movdqa %xmm2, %xmm1
1287; SSE2-NEXT:    retq
1288;
1289; SSE4-LABEL: test44:
1290; SSE4:       # %bb.0: # %entry
1291; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1292; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1293; SSE4-NEXT:    retq
1294;
1295; AVX1-LABEL: test44:
1296; AVX1:       # %bb.0: # %entry
1297; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1298; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1299; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1300; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1301; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1302; AVX1-NEXT:    retq
1303;
1304; AVX2-LABEL: test44:
1305; AVX2:       # %bb.0: # %entry
1306; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1307; AVX2-NEXT:    retq
1308;
1309; AVX512-LABEL: test44:
1310; AVX512:       # %bb.0: # %entry
1311; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1312; AVX512-NEXT:    retq
1313entry:
1314  %cmp = icmp sge <8 x i32> %a, %b
1315  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1316  ret <8 x i32> %sel
1317}
1318
1319define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1320; SSE2-LABEL: test45:
1321; SSE2:       # %bb.0: # %entry
1322; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1323; SSE2-NEXT:    movdqa %xmm0, %xmm5
1324; SSE2-NEXT:    pxor %xmm4, %xmm5
1325; SSE2-NEXT:    movdqa %xmm2, %xmm6
1326; SSE2-NEXT:    pxor %xmm4, %xmm6
1327; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1328; SSE2-NEXT:    pand %xmm6, %xmm0
1329; SSE2-NEXT:    pandn %xmm2, %xmm6
1330; SSE2-NEXT:    por %xmm6, %xmm0
1331; SSE2-NEXT:    movdqa %xmm1, %xmm2
1332; SSE2-NEXT:    pxor %xmm4, %xmm2
1333; SSE2-NEXT:    pxor %xmm3, %xmm4
1334; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1335; SSE2-NEXT:    pand %xmm4, %xmm1
1336; SSE2-NEXT:    pandn %xmm3, %xmm4
1337; SSE2-NEXT:    por %xmm4, %xmm1
1338; SSE2-NEXT:    retq
1339;
1340; SSE4-LABEL: test45:
1341; SSE4:       # %bb.0: # %entry
1342; SSE4-NEXT:    pminud %xmm2, %xmm0
1343; SSE4-NEXT:    pminud %xmm3, %xmm1
1344; SSE4-NEXT:    retq
1345;
1346; AVX1-LABEL: test45:
1347; AVX1:       # %bb.0: # %entry
1348; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1349; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1350; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1351; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1352; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1353; AVX1-NEXT:    retq
1354;
1355; AVX2-LABEL: test45:
1356; AVX2:       # %bb.0: # %entry
1357; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1358; AVX2-NEXT:    retq
1359;
1360; AVX512-LABEL: test45:
1361; AVX512:       # %bb.0: # %entry
1362; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1363; AVX512-NEXT:    retq
1364entry:
1365  %cmp = icmp ult <8 x i32> %a, %b
1366  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1367  ret <8 x i32> %sel
1368}
1369
1370define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1371; SSE2-LABEL: test46:
1372; SSE2:       # %bb.0: # %entry
1373; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1374; SSE2-NEXT:    movdqa %xmm0, %xmm5
1375; SSE2-NEXT:    pxor %xmm4, %xmm5
1376; SSE2-NEXT:    movdqa %xmm2, %xmm6
1377; SSE2-NEXT:    pxor %xmm4, %xmm6
1378; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1379; SSE2-NEXT:    pand %xmm6, %xmm0
1380; SSE2-NEXT:    pandn %xmm2, %xmm6
1381; SSE2-NEXT:    por %xmm6, %xmm0
1382; SSE2-NEXT:    movdqa %xmm1, %xmm2
1383; SSE2-NEXT:    pxor %xmm4, %xmm2
1384; SSE2-NEXT:    pxor %xmm3, %xmm4
1385; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1386; SSE2-NEXT:    pand %xmm4, %xmm1
1387; SSE2-NEXT:    pandn %xmm3, %xmm4
1388; SSE2-NEXT:    por %xmm4, %xmm1
1389; SSE2-NEXT:    retq
1390;
1391; SSE4-LABEL: test46:
1392; SSE4:       # %bb.0: # %entry
1393; SSE4-NEXT:    pminud %xmm2, %xmm0
1394; SSE4-NEXT:    pminud %xmm3, %xmm1
1395; SSE4-NEXT:    retq
1396;
1397; AVX1-LABEL: test46:
1398; AVX1:       # %bb.0: # %entry
1399; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1400; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1401; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1402; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1403; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1404; AVX1-NEXT:    retq
1405;
1406; AVX2-LABEL: test46:
1407; AVX2:       # %bb.0: # %entry
1408; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1409; AVX2-NEXT:    retq
1410;
1411; AVX512-LABEL: test46:
1412; AVX512:       # %bb.0: # %entry
1413; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1414; AVX512-NEXT:    retq
1415entry:
1416  %cmp = icmp ule <8 x i32> %a, %b
1417  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1418  ret <8 x i32> %sel
1419}
1420
1421define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1422; SSE2-LABEL: test47:
1423; SSE2:       # %bb.0: # %entry
1424; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1425; SSE2-NEXT:    movdqa %xmm2, %xmm6
1426; SSE2-NEXT:    pxor %xmm5, %xmm6
1427; SSE2-NEXT:    movdqa %xmm0, %xmm4
1428; SSE2-NEXT:    pxor %xmm5, %xmm4
1429; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
1430; SSE2-NEXT:    pand %xmm4, %xmm0
1431; SSE2-NEXT:    pandn %xmm2, %xmm4
1432; SSE2-NEXT:    por %xmm0, %xmm4
1433; SSE2-NEXT:    movdqa %xmm3, %xmm0
1434; SSE2-NEXT:    pxor %xmm5, %xmm0
1435; SSE2-NEXT:    pxor %xmm1, %xmm5
1436; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
1437; SSE2-NEXT:    pand %xmm5, %xmm1
1438; SSE2-NEXT:    pandn %xmm3, %xmm5
1439; SSE2-NEXT:    por %xmm5, %xmm1
1440; SSE2-NEXT:    movdqa %xmm4, %xmm0
1441; SSE2-NEXT:    retq
1442;
1443; SSE4-LABEL: test47:
1444; SSE4:       # %bb.0: # %entry
1445; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1446; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1447; SSE4-NEXT:    retq
1448;
1449; AVX1-LABEL: test47:
1450; AVX1:       # %bb.0: # %entry
1451; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1452; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1453; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1454; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1455; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1456; AVX1-NEXT:    retq
1457;
1458; AVX2-LABEL: test47:
1459; AVX2:       # %bb.0: # %entry
1460; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1461; AVX2-NEXT:    retq
1462;
1463; AVX512-LABEL: test47:
1464; AVX512:       # %bb.0: # %entry
1465; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1466; AVX512-NEXT:    retq
1467entry:
1468  %cmp = icmp ugt <8 x i32> %a, %b
1469  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1470  ret <8 x i32> %sel
1471}
1472
1473define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1474; SSE2-LABEL: test48:
1475; SSE2:       # %bb.0: # %entry
1476; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1477; SSE2-NEXT:    movdqa %xmm2, %xmm6
1478; SSE2-NEXT:    pxor %xmm5, %xmm6
1479; SSE2-NEXT:    movdqa %xmm0, %xmm4
1480; SSE2-NEXT:    pxor %xmm5, %xmm4
1481; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
1482; SSE2-NEXT:    pand %xmm4, %xmm0
1483; SSE2-NEXT:    pandn %xmm2, %xmm4
1484; SSE2-NEXT:    por %xmm0, %xmm4
1485; SSE2-NEXT:    movdqa %xmm3, %xmm0
1486; SSE2-NEXT:    pxor %xmm5, %xmm0
1487; SSE2-NEXT:    pxor %xmm1, %xmm5
1488; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
1489; SSE2-NEXT:    pand %xmm5, %xmm1
1490; SSE2-NEXT:    pandn %xmm3, %xmm5
1491; SSE2-NEXT:    por %xmm5, %xmm1
1492; SSE2-NEXT:    movdqa %xmm4, %xmm0
1493; SSE2-NEXT:    retq
1494;
1495; SSE4-LABEL: test48:
1496; SSE4:       # %bb.0: # %entry
1497; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1498; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1499; SSE4-NEXT:    retq
1500;
1501; AVX1-LABEL: test48:
1502; AVX1:       # %bb.0: # %entry
1503; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1504; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1505; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1506; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1507; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1508; AVX1-NEXT:    retq
1509;
1510; AVX2-LABEL: test48:
1511; AVX2:       # %bb.0: # %entry
1512; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1513; AVX2-NEXT:    retq
1514;
1515; AVX512-LABEL: test48:
1516; AVX512:       # %bb.0: # %entry
1517; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1518; AVX512-NEXT:    retq
1519entry:
1520  %cmp = icmp uge <8 x i32> %a, %b
1521  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1522  ret <8 x i32> %sel
1523}
1524
1525define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1526; SSE2-LABEL: test49:
1527; SSE2:       # %bb.0: # %entry
1528; SSE2-NEXT:    movdqa %xmm0, %xmm2
1529; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1530; SSE2-NEXT:    pand %xmm2, %xmm0
1531; SSE2-NEXT:    pandn %xmm1, %xmm2
1532; SSE2-NEXT:    por %xmm0, %xmm2
1533; SSE2-NEXT:    movdqa %xmm2, %xmm0
1534; SSE2-NEXT:    retq
1535;
1536; SSE4-LABEL: test49:
1537; SSE4:       # %bb.0: # %entry
1538; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1539; SSE4-NEXT:    retq
1540;
1541; AVX-LABEL: test49:
1542; AVX:       # %bb.0: # %entry
1543; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1544; AVX-NEXT:    retq
1545entry:
1546  %cmp = icmp slt <16 x i8> %a, %b
1547  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1548  ret <16 x i8> %sel
1549}
1550
1551define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1552; SSE2-LABEL: test50:
1553; SSE2:       # %bb.0: # %entry
1554; SSE2-NEXT:    movdqa %xmm0, %xmm2
1555; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1556; SSE2-NEXT:    pand %xmm2, %xmm0
1557; SSE2-NEXT:    pandn %xmm1, %xmm2
1558; SSE2-NEXT:    por %xmm0, %xmm2
1559; SSE2-NEXT:    movdqa %xmm2, %xmm0
1560; SSE2-NEXT:    retq
1561;
1562; SSE4-LABEL: test50:
1563; SSE4:       # %bb.0: # %entry
1564; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1565; SSE4-NEXT:    retq
1566;
1567; AVX-LABEL: test50:
1568; AVX:       # %bb.0: # %entry
1569; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1570; AVX-NEXT:    retq
1571entry:
1572  %cmp = icmp sle <16 x i8> %a, %b
1573  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1574  ret <16 x i8> %sel
1575}
1576
1577define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1578; SSE2-LABEL: test51:
1579; SSE2:       # %bb.0: # %entry
1580; SSE2-NEXT:    movdqa %xmm1, %xmm2
1581; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1582; SSE2-NEXT:    pand %xmm2, %xmm0
1583; SSE2-NEXT:    pandn %xmm1, %xmm2
1584; SSE2-NEXT:    por %xmm2, %xmm0
1585; SSE2-NEXT:    retq
1586;
1587; SSE4-LABEL: test51:
1588; SSE4:       # %bb.0: # %entry
1589; SSE4-NEXT:    pminsb %xmm1, %xmm0
1590; SSE4-NEXT:    retq
1591;
1592; AVX-LABEL: test51:
1593; AVX:       # %bb.0: # %entry
1594; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1595; AVX-NEXT:    retq
1596entry:
1597  %cmp = icmp sgt <16 x i8> %a, %b
1598  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1599  ret <16 x i8> %sel
1600}
1601
1602define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1603; SSE2-LABEL: test52:
1604; SSE2:       # %bb.0: # %entry
1605; SSE2-NEXT:    movdqa %xmm1, %xmm2
1606; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1607; SSE2-NEXT:    pand %xmm2, %xmm0
1608; SSE2-NEXT:    pandn %xmm1, %xmm2
1609; SSE2-NEXT:    por %xmm2, %xmm0
1610; SSE2-NEXT:    retq
1611;
1612; SSE4-LABEL: test52:
1613; SSE4:       # %bb.0: # %entry
1614; SSE4-NEXT:    pminsb %xmm1, %xmm0
1615; SSE4-NEXT:    retq
1616;
1617; AVX-LABEL: test52:
1618; AVX:       # %bb.0: # %entry
1619; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1620; AVX-NEXT:    retq
1621entry:
1622  %cmp = icmp sge <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> @test53(<16 x i8> %a, <16 x i8> %b) {
1628; SSE-LABEL: test53:
1629; SSE:       # %bb.0: # %entry
1630; SSE-NEXT:    pmaxub %xmm1, %xmm0
1631; SSE-NEXT:    retq
1632;
1633; AVX-LABEL: test53:
1634; AVX:       # %bb.0: # %entry
1635; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1636; AVX-NEXT:    retq
1637entry:
1638  %cmp = icmp ult <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> @test54(<16 x i8> %a, <16 x i8> %b) {
1644; SSE-LABEL: test54:
1645; SSE:       # %bb.0: # %entry
1646; SSE-NEXT:    pmaxub %xmm1, %xmm0
1647; SSE-NEXT:    retq
1648;
1649; AVX-LABEL: test54:
1650; AVX:       # %bb.0: # %entry
1651; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1652; AVX-NEXT:    retq
1653entry:
1654  %cmp = icmp ule <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> @test55(<16 x i8> %a, <16 x i8> %b) {
1660; SSE-LABEL: test55:
1661; SSE:       # %bb.0: # %entry
1662; SSE-NEXT:    pminub %xmm1, %xmm0
1663; SSE-NEXT:    retq
1664;
1665; AVX-LABEL: test55:
1666; AVX:       # %bb.0: # %entry
1667; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1668; AVX-NEXT:    retq
1669entry:
1670  %cmp = icmp ugt <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 <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1676; SSE-LABEL: test56:
1677; SSE:       # %bb.0: # %entry
1678; SSE-NEXT:    pminub %xmm1, %xmm0
1679; SSE-NEXT:    retq
1680;
1681; AVX-LABEL: test56:
1682; AVX:       # %bb.0: # %entry
1683; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1684; AVX-NEXT:    retq
1685entry:
1686  %cmp = icmp uge <16 x i8> %a, %b
1687  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1688  ret <16 x i8> %sel
1689}
1690
1691define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1692; SSE-LABEL: test57:
1693; SSE:       # %bb.0: # %entry
1694; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1695; SSE-NEXT:    retq
1696;
1697; AVX-LABEL: test57:
1698; AVX:       # %bb.0: # %entry
1699; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1700; AVX-NEXT:    retq
1701entry:
1702  %cmp = icmp slt <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> @test58(<8 x i16> %a, <8 x i16> %b) {
1708; SSE-LABEL: test58:
1709; SSE:       # %bb.0: # %entry
1710; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1711; SSE-NEXT:    retq
1712;
1713; AVX-LABEL: test58:
1714; AVX:       # %bb.0: # %entry
1715; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1716; AVX-NEXT:    retq
1717entry:
1718  %cmp = icmp sle <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> @test59(<8 x i16> %a, <8 x i16> %b) {
1724; SSE-LABEL: test59:
1725; SSE:       # %bb.0: # %entry
1726; SSE-NEXT:    pminsw %xmm1, %xmm0
1727; SSE-NEXT:    retq
1728;
1729; AVX-LABEL: test59:
1730; AVX:       # %bb.0: # %entry
1731; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1732; AVX-NEXT:    retq
1733entry:
1734  %cmp = icmp sgt <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> @test60(<8 x i16> %a, <8 x i16> %b) {
1740; SSE-LABEL: test60:
1741; SSE:       # %bb.0: # %entry
1742; SSE-NEXT:    pminsw %xmm1, %xmm0
1743; SSE-NEXT:    retq
1744;
1745; AVX-LABEL: test60:
1746; AVX:       # %bb.0: # %entry
1747; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1748; AVX-NEXT:    retq
1749entry:
1750  %cmp = icmp sge <8 x i16> %a, %b
1751  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1752  ret <8 x i16> %sel
1753}
1754
1755define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1756; SSE2-LABEL: test61:
1757; SSE2:       # %bb.0: # %entry
1758; SSE2-NEXT:    psubusw %xmm0, %xmm1
1759; SSE2-NEXT:    paddw %xmm1, %xmm0
1760; SSE2-NEXT:    retq
1761;
1762; SSE4-LABEL: test61:
1763; SSE4:       # %bb.0: # %entry
1764; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1765; SSE4-NEXT:    retq
1766;
1767; AVX-LABEL: test61:
1768; AVX:       # %bb.0: # %entry
1769; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1770; AVX-NEXT:    retq
1771entry:
1772  %cmp = icmp ult <8 x i16> %a, %b
1773  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1774  ret <8 x i16> %sel
1775}
1776
1777define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1778; SSE2-LABEL: test62:
1779; SSE2:       # %bb.0: # %entry
1780; SSE2-NEXT:    psubusw %xmm0, %xmm1
1781; SSE2-NEXT:    paddw %xmm1, %xmm0
1782; SSE2-NEXT:    retq
1783;
1784; SSE4-LABEL: test62:
1785; SSE4:       # %bb.0: # %entry
1786; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1787; SSE4-NEXT:    retq
1788;
1789; AVX-LABEL: test62:
1790; AVX:       # %bb.0: # %entry
1791; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1792; AVX-NEXT:    retq
1793entry:
1794  %cmp = icmp ule <8 x i16> %a, %b
1795  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1796  ret <8 x i16> %sel
1797}
1798
1799define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1800; SSE2-LABEL: test63:
1801; SSE2:       # %bb.0: # %entry
1802; SSE2-NEXT:    movdqa %xmm0, %xmm2
1803; SSE2-NEXT:    psubusw %xmm1, %xmm2
1804; SSE2-NEXT:    psubw %xmm2, %xmm0
1805; SSE2-NEXT:    retq
1806;
1807; SSE4-LABEL: test63:
1808; SSE4:       # %bb.0: # %entry
1809; SSE4-NEXT:    pminuw %xmm1, %xmm0
1810; SSE4-NEXT:    retq
1811;
1812; AVX-LABEL: test63:
1813; AVX:       # %bb.0: # %entry
1814; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1815; AVX-NEXT:    retq
1816entry:
1817  %cmp = icmp ugt <8 x i16> %a, %b
1818  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1819  ret <8 x i16> %sel
1820}
1821
1822define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1823; SSE2-LABEL: test64:
1824; SSE2:       # %bb.0: # %entry
1825; SSE2-NEXT:    movdqa %xmm0, %xmm2
1826; SSE2-NEXT:    psubusw %xmm1, %xmm2
1827; SSE2-NEXT:    psubw %xmm2, %xmm0
1828; SSE2-NEXT:    retq
1829;
1830; SSE4-LABEL: test64:
1831; SSE4:       # %bb.0: # %entry
1832; SSE4-NEXT:    pminuw %xmm1, %xmm0
1833; SSE4-NEXT:    retq
1834;
1835; AVX-LABEL: test64:
1836; AVX:       # %bb.0: # %entry
1837; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1838; AVX-NEXT:    retq
1839entry:
1840  %cmp = icmp uge <8 x i16> %a, %b
1841  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1842  ret <8 x i16> %sel
1843}
1844
1845define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1846; SSE2-LABEL: test65:
1847; SSE2:       # %bb.0: # %entry
1848; SSE2-NEXT:    movdqa %xmm0, %xmm2
1849; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1850; SSE2-NEXT:    pand %xmm2, %xmm0
1851; SSE2-NEXT:    pandn %xmm1, %xmm2
1852; SSE2-NEXT:    por %xmm0, %xmm2
1853; SSE2-NEXT:    movdqa %xmm2, %xmm0
1854; SSE2-NEXT:    retq
1855;
1856; SSE4-LABEL: test65:
1857; SSE4:       # %bb.0: # %entry
1858; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1859; SSE4-NEXT:    retq
1860;
1861; AVX-LABEL: test65:
1862; AVX:       # %bb.0: # %entry
1863; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1864; AVX-NEXT:    retq
1865entry:
1866  %cmp = icmp slt <4 x i32> %a, %b
1867  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1868  ret <4 x i32> %sel
1869}
1870
1871define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
1872; SSE2-LABEL: test66:
1873; SSE2:       # %bb.0: # %entry
1874; SSE2-NEXT:    movdqa %xmm0, %xmm2
1875; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1876; SSE2-NEXT:    pand %xmm2, %xmm0
1877; SSE2-NEXT:    pandn %xmm1, %xmm2
1878; SSE2-NEXT:    por %xmm0, %xmm2
1879; SSE2-NEXT:    movdqa %xmm2, %xmm0
1880; SSE2-NEXT:    retq
1881;
1882; SSE4-LABEL: test66:
1883; SSE4:       # %bb.0: # %entry
1884; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1885; SSE4-NEXT:    retq
1886;
1887; AVX-LABEL: test66:
1888; AVX:       # %bb.0: # %entry
1889; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1890; AVX-NEXT:    retq
1891entry:
1892  %cmp = icmp sle <4 x i32> %a, %b
1893  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1894  ret <4 x i32> %sel
1895}
1896
1897define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
1898; SSE2-LABEL: test67:
1899; SSE2:       # %bb.0: # %entry
1900; SSE2-NEXT:    movdqa %xmm1, %xmm2
1901; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1902; SSE2-NEXT:    pand %xmm2, %xmm0
1903; SSE2-NEXT:    pandn %xmm1, %xmm2
1904; SSE2-NEXT:    por %xmm2, %xmm0
1905; SSE2-NEXT:    retq
1906;
1907; SSE4-LABEL: test67:
1908; SSE4:       # %bb.0: # %entry
1909; SSE4-NEXT:    pminsd %xmm1, %xmm0
1910; SSE4-NEXT:    retq
1911;
1912; AVX-LABEL: test67:
1913; AVX:       # %bb.0: # %entry
1914; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1915; AVX-NEXT:    retq
1916entry:
1917  %cmp = icmp sgt <4 x i32> %a, %b
1918  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1919  ret <4 x i32> %sel
1920}
1921
1922define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
1923; SSE2-LABEL: test68:
1924; SSE2:       # %bb.0: # %entry
1925; SSE2-NEXT:    movdqa %xmm1, %xmm2
1926; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1927; SSE2-NEXT:    pand %xmm2, %xmm0
1928; SSE2-NEXT:    pandn %xmm1, %xmm2
1929; SSE2-NEXT:    por %xmm2, %xmm0
1930; SSE2-NEXT:    retq
1931;
1932; SSE4-LABEL: test68:
1933; SSE4:       # %bb.0: # %entry
1934; SSE4-NEXT:    pminsd %xmm1, %xmm0
1935; SSE4-NEXT:    retq
1936;
1937; AVX-LABEL: test68:
1938; AVX:       # %bb.0: # %entry
1939; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1940; AVX-NEXT:    retq
1941entry:
1942  %cmp = icmp sge <4 x i32> %a, %b
1943  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1944  ret <4 x i32> %sel
1945}
1946
1947define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
1948; SSE2-LABEL: test69:
1949; SSE2:       # %bb.0: # %entry
1950; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1951; SSE2-NEXT:    movdqa %xmm1, %xmm3
1952; SSE2-NEXT:    pxor %xmm2, %xmm3
1953; SSE2-NEXT:    pxor %xmm0, %xmm2
1954; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1955; SSE2-NEXT:    pand %xmm2, %xmm0
1956; SSE2-NEXT:    pandn %xmm1, %xmm2
1957; SSE2-NEXT:    por %xmm2, %xmm0
1958; SSE2-NEXT:    retq
1959;
1960; SSE4-LABEL: test69:
1961; SSE4:       # %bb.0: # %entry
1962; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1963; SSE4-NEXT:    retq
1964;
1965; AVX-LABEL: test69:
1966; AVX:       # %bb.0: # %entry
1967; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1968; AVX-NEXT:    retq
1969entry:
1970  %cmp = icmp ult <4 x i32> %a, %b
1971  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1972  ret <4 x i32> %sel
1973}
1974
1975define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
1976; SSE2-LABEL: test70:
1977; SSE2:       # %bb.0: # %entry
1978; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1979; SSE2-NEXT:    movdqa %xmm1, %xmm3
1980; SSE2-NEXT:    pxor %xmm2, %xmm3
1981; SSE2-NEXT:    pxor %xmm0, %xmm2
1982; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1983; SSE2-NEXT:    pand %xmm2, %xmm0
1984; SSE2-NEXT:    pandn %xmm1, %xmm2
1985; SSE2-NEXT:    por %xmm2, %xmm0
1986; SSE2-NEXT:    retq
1987;
1988; SSE4-LABEL: test70:
1989; SSE4:       # %bb.0: # %entry
1990; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1991; SSE4-NEXT:    retq
1992;
1993; AVX-LABEL: test70:
1994; AVX:       # %bb.0: # %entry
1995; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1996; AVX-NEXT:    retq
1997entry:
1998  %cmp = icmp ule <4 x i32> %a, %b
1999  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2000  ret <4 x i32> %sel
2001}
2002
2003define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
2004; SSE2-LABEL: test71:
2005; SSE2:       # %bb.0: # %entry
2006; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2007; SSE2-NEXT:    movdqa %xmm0, %xmm3
2008; SSE2-NEXT:    pxor %xmm2, %xmm3
2009; SSE2-NEXT:    pxor %xmm1, %xmm2
2010; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2011; SSE2-NEXT:    pand %xmm2, %xmm0
2012; SSE2-NEXT:    pandn %xmm1, %xmm2
2013; SSE2-NEXT:    por %xmm2, %xmm0
2014; SSE2-NEXT:    retq
2015;
2016; SSE4-LABEL: test71:
2017; SSE4:       # %bb.0: # %entry
2018; SSE4-NEXT:    pminud %xmm1, %xmm0
2019; SSE4-NEXT:    retq
2020;
2021; AVX-LABEL: test71:
2022; AVX:       # %bb.0: # %entry
2023; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2024; AVX-NEXT:    retq
2025entry:
2026  %cmp = icmp ugt <4 x i32> %a, %b
2027  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2028  ret <4 x i32> %sel
2029}
2030
2031define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2032; SSE2-LABEL: test72:
2033; SSE2:       # %bb.0: # %entry
2034; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2035; SSE2-NEXT:    movdqa %xmm0, %xmm3
2036; SSE2-NEXT:    pxor %xmm2, %xmm3
2037; SSE2-NEXT:    pxor %xmm1, %xmm2
2038; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2039; SSE2-NEXT:    pand %xmm2, %xmm0
2040; SSE2-NEXT:    pandn %xmm1, %xmm2
2041; SSE2-NEXT:    por %xmm2, %xmm0
2042; SSE2-NEXT:    retq
2043;
2044; SSE4-LABEL: test72:
2045; SSE4:       # %bb.0: # %entry
2046; SSE4-NEXT:    pminud %xmm1, %xmm0
2047; SSE4-NEXT:    retq
2048;
2049; AVX-LABEL: test72:
2050; AVX:       # %bb.0: # %entry
2051; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2052; AVX-NEXT:    retq
2053entry:
2054  %cmp = icmp uge <4 x i32> %a, %b
2055  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2056  ret <4 x i32> %sel
2057}
2058
2059define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2060; SSE2-LABEL: test73:
2061; SSE2:       # %bb.0: # %entry
2062; SSE2-NEXT:    movdqa %xmm0, %xmm4
2063; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2064; SSE2-NEXT:    pand %xmm4, %xmm0
2065; SSE2-NEXT:    pandn %xmm2, %xmm4
2066; SSE2-NEXT:    por %xmm0, %xmm4
2067; SSE2-NEXT:    movdqa %xmm1, %xmm2
2068; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2069; SSE2-NEXT:    pand %xmm2, %xmm1
2070; SSE2-NEXT:    pandn %xmm3, %xmm2
2071; SSE2-NEXT:    por %xmm1, %xmm2
2072; SSE2-NEXT:    movdqa %xmm4, %xmm0
2073; SSE2-NEXT:    movdqa %xmm2, %xmm1
2074; SSE2-NEXT:    retq
2075;
2076; SSE4-LABEL: test73:
2077; SSE4:       # %bb.0: # %entry
2078; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2079; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2080; SSE4-NEXT:    retq
2081;
2082; AVX1-LABEL: test73:
2083; AVX1:       # %bb.0: # %entry
2084; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2085; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2086; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2087; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2088; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2089; AVX1-NEXT:    retq
2090;
2091; AVX2-LABEL: test73:
2092; AVX2:       # %bb.0: # %entry
2093; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2094; AVX2-NEXT:    retq
2095;
2096; AVX512-LABEL: test73:
2097; AVX512:       # %bb.0: # %entry
2098; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2099; AVX512-NEXT:    retq
2100entry:
2101  %cmp = icmp slt <32 x i8> %a, %b
2102  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2103  ret <32 x i8> %sel
2104}
2105
2106define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2107; SSE2-LABEL: test74:
2108; SSE2:       # %bb.0: # %entry
2109; SSE2-NEXT:    movdqa %xmm0, %xmm4
2110; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2111; SSE2-NEXT:    pand %xmm4, %xmm0
2112; SSE2-NEXT:    pandn %xmm2, %xmm4
2113; SSE2-NEXT:    por %xmm0, %xmm4
2114; SSE2-NEXT:    movdqa %xmm1, %xmm2
2115; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2116; SSE2-NEXT:    pand %xmm2, %xmm1
2117; SSE2-NEXT:    pandn %xmm3, %xmm2
2118; SSE2-NEXT:    por %xmm1, %xmm2
2119; SSE2-NEXT:    movdqa %xmm4, %xmm0
2120; SSE2-NEXT:    movdqa %xmm2, %xmm1
2121; SSE2-NEXT:    retq
2122;
2123; SSE4-LABEL: test74:
2124; SSE4:       # %bb.0: # %entry
2125; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2126; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2127; SSE4-NEXT:    retq
2128;
2129; AVX1-LABEL: test74:
2130; AVX1:       # %bb.0: # %entry
2131; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2132; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2133; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2134; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2135; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2136; AVX1-NEXT:    retq
2137;
2138; AVX2-LABEL: test74:
2139; AVX2:       # %bb.0: # %entry
2140; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2141; AVX2-NEXT:    retq
2142;
2143; AVX512-LABEL: test74:
2144; AVX512:       # %bb.0: # %entry
2145; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2146; AVX512-NEXT:    retq
2147entry:
2148  %cmp = icmp sle <32 x i8> %a, %b
2149  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2150  ret <32 x i8> %sel
2151}
2152
2153define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2154; SSE2-LABEL: test75:
2155; SSE2:       # %bb.0: # %entry
2156; SSE2-NEXT:    movdqa %xmm2, %xmm4
2157; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2158; SSE2-NEXT:    pand %xmm4, %xmm0
2159; SSE2-NEXT:    pandn %xmm2, %xmm4
2160; SSE2-NEXT:    por %xmm4, %xmm0
2161; SSE2-NEXT:    movdqa %xmm3, %xmm2
2162; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2163; SSE2-NEXT:    pand %xmm2, %xmm1
2164; SSE2-NEXT:    pandn %xmm3, %xmm2
2165; SSE2-NEXT:    por %xmm2, %xmm1
2166; SSE2-NEXT:    retq
2167;
2168; SSE4-LABEL: test75:
2169; SSE4:       # %bb.0: # %entry
2170; SSE4-NEXT:    pminsb %xmm2, %xmm0
2171; SSE4-NEXT:    pminsb %xmm3, %xmm1
2172; SSE4-NEXT:    retq
2173;
2174; AVX1-LABEL: test75:
2175; AVX1:       # %bb.0: # %entry
2176; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2177; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2178; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2179; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2180; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2181; AVX1-NEXT:    retq
2182;
2183; AVX2-LABEL: test75:
2184; AVX2:       # %bb.0: # %entry
2185; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2186; AVX2-NEXT:    retq
2187;
2188; AVX512-LABEL: test75:
2189; AVX512:       # %bb.0: # %entry
2190; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2191; AVX512-NEXT:    retq
2192entry:
2193  %cmp = icmp sgt <32 x i8> %a, %b
2194  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2195  ret <32 x i8> %sel
2196}
2197
2198define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2199; SSE2-LABEL: test76:
2200; SSE2:       # %bb.0: # %entry
2201; SSE2-NEXT:    movdqa %xmm2, %xmm4
2202; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2203; SSE2-NEXT:    pand %xmm4, %xmm0
2204; SSE2-NEXT:    pandn %xmm2, %xmm4
2205; SSE2-NEXT:    por %xmm4, %xmm0
2206; SSE2-NEXT:    movdqa %xmm3, %xmm2
2207; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2208; SSE2-NEXT:    pand %xmm2, %xmm1
2209; SSE2-NEXT:    pandn %xmm3, %xmm2
2210; SSE2-NEXT:    por %xmm2, %xmm1
2211; SSE2-NEXT:    retq
2212;
2213; SSE4-LABEL: test76:
2214; SSE4:       # %bb.0: # %entry
2215; SSE4-NEXT:    pminsb %xmm2, %xmm0
2216; SSE4-NEXT:    pminsb %xmm3, %xmm1
2217; SSE4-NEXT:    retq
2218;
2219; AVX1-LABEL: test76:
2220; AVX1:       # %bb.0: # %entry
2221; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2222; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2223; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2224; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2225; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2226; AVX1-NEXT:    retq
2227;
2228; AVX2-LABEL: test76:
2229; AVX2:       # %bb.0: # %entry
2230; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2231; AVX2-NEXT:    retq
2232;
2233; AVX512-LABEL: test76:
2234; AVX512:       # %bb.0: # %entry
2235; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2236; AVX512-NEXT:    retq
2237entry:
2238  %cmp = icmp sge <32 x i8> %a, %b
2239  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2240  ret <32 x i8> %sel
2241}
2242
2243define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2244; SSE-LABEL: test77:
2245; SSE:       # %bb.0: # %entry
2246; SSE-NEXT:    pmaxub %xmm2, %xmm0
2247; SSE-NEXT:    pmaxub %xmm3, %xmm1
2248; SSE-NEXT:    retq
2249;
2250; AVX1-LABEL: test77:
2251; AVX1:       # %bb.0: # %entry
2252; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2253; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2254; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2255; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2256; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2257; AVX1-NEXT:    retq
2258;
2259; AVX2-LABEL: test77:
2260; AVX2:       # %bb.0: # %entry
2261; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2262; AVX2-NEXT:    retq
2263;
2264; AVX512-LABEL: test77:
2265; AVX512:       # %bb.0: # %entry
2266; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2267; AVX512-NEXT:    retq
2268entry:
2269  %cmp = icmp ult <32 x i8> %a, %b
2270  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2271  ret <32 x i8> %sel
2272}
2273
2274define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2275; SSE-LABEL: test78:
2276; SSE:       # %bb.0: # %entry
2277; SSE-NEXT:    pmaxub %xmm2, %xmm0
2278; SSE-NEXT:    pmaxub %xmm3, %xmm1
2279; SSE-NEXT:    retq
2280;
2281; AVX1-LABEL: test78:
2282; AVX1:       # %bb.0: # %entry
2283; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2284; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2285; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2286; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2287; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2288; AVX1-NEXT:    retq
2289;
2290; AVX2-LABEL: test78:
2291; AVX2:       # %bb.0: # %entry
2292; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2293; AVX2-NEXT:    retq
2294;
2295; AVX512-LABEL: test78:
2296; AVX512:       # %bb.0: # %entry
2297; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2298; AVX512-NEXT:    retq
2299entry:
2300  %cmp = icmp ule <32 x i8> %a, %b
2301  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2302  ret <32 x i8> %sel
2303}
2304
2305define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2306; SSE-LABEL: test79:
2307; SSE:       # %bb.0: # %entry
2308; SSE-NEXT:    pminub %xmm2, %xmm0
2309; SSE-NEXT:    pminub %xmm3, %xmm1
2310; SSE-NEXT:    retq
2311;
2312; AVX1-LABEL: test79:
2313; AVX1:       # %bb.0: # %entry
2314; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2315; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2316; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2317; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2318; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2319; AVX1-NEXT:    retq
2320;
2321; AVX2-LABEL: test79:
2322; AVX2:       # %bb.0: # %entry
2323; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2324; AVX2-NEXT:    retq
2325;
2326; AVX512-LABEL: test79:
2327; AVX512:       # %bb.0: # %entry
2328; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2329; AVX512-NEXT:    retq
2330entry:
2331  %cmp = icmp ugt <32 x i8> %a, %b
2332  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2333  ret <32 x i8> %sel
2334}
2335
2336define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2337; SSE-LABEL: test80:
2338; SSE:       # %bb.0: # %entry
2339; SSE-NEXT:    pminub %xmm2, %xmm0
2340; SSE-NEXT:    pminub %xmm3, %xmm1
2341; SSE-NEXT:    retq
2342;
2343; AVX1-LABEL: test80:
2344; AVX1:       # %bb.0: # %entry
2345; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2346; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2347; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2348; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2349; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2350; AVX1-NEXT:    retq
2351;
2352; AVX2-LABEL: test80:
2353; AVX2:       # %bb.0: # %entry
2354; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2355; AVX2-NEXT:    retq
2356;
2357; AVX512-LABEL: test80:
2358; AVX512:       # %bb.0: # %entry
2359; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2360; AVX512-NEXT:    retq
2361entry:
2362  %cmp = icmp uge <32 x i8> %a, %b
2363  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2364  ret <32 x i8> %sel
2365}
2366
2367define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2368; SSE-LABEL: test81:
2369; SSE:       # %bb.0: # %entry
2370; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2371; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2372; SSE-NEXT:    retq
2373;
2374; AVX1-LABEL: test81:
2375; AVX1:       # %bb.0: # %entry
2376; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2377; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2378; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2379; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2380; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2381; AVX1-NEXT:    retq
2382;
2383; AVX2-LABEL: test81:
2384; AVX2:       # %bb.0: # %entry
2385; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2386; AVX2-NEXT:    retq
2387;
2388; AVX512-LABEL: test81:
2389; AVX512:       # %bb.0: # %entry
2390; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2391; AVX512-NEXT:    retq
2392entry:
2393  %cmp = icmp slt <16 x i16> %a, %b
2394  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2395  ret <16 x i16> %sel
2396}
2397
2398define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2399; SSE-LABEL: test82:
2400; SSE:       # %bb.0: # %entry
2401; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2402; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2403; SSE-NEXT:    retq
2404;
2405; AVX1-LABEL: test82:
2406; AVX1:       # %bb.0: # %entry
2407; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2408; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2409; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2410; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2411; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2412; AVX1-NEXT:    retq
2413;
2414; AVX2-LABEL: test82:
2415; AVX2:       # %bb.0: # %entry
2416; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2417; AVX2-NEXT:    retq
2418;
2419; AVX512-LABEL: test82:
2420; AVX512:       # %bb.0: # %entry
2421; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2422; AVX512-NEXT:    retq
2423entry:
2424  %cmp = icmp sle <16 x i16> %a, %b
2425  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2426  ret <16 x i16> %sel
2427}
2428
2429define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2430; SSE-LABEL: test83:
2431; SSE:       # %bb.0: # %entry
2432; SSE-NEXT:    pminsw %xmm2, %xmm0
2433; SSE-NEXT:    pminsw %xmm3, %xmm1
2434; SSE-NEXT:    retq
2435;
2436; AVX1-LABEL: test83:
2437; AVX1:       # %bb.0: # %entry
2438; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2439; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2440; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2441; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2442; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2443; AVX1-NEXT:    retq
2444;
2445; AVX2-LABEL: test83:
2446; AVX2:       # %bb.0: # %entry
2447; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2448; AVX2-NEXT:    retq
2449;
2450; AVX512-LABEL: test83:
2451; AVX512:       # %bb.0: # %entry
2452; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2453; AVX512-NEXT:    retq
2454entry:
2455  %cmp = icmp sgt <16 x i16> %a, %b
2456  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2457  ret <16 x i16> %sel
2458}
2459
2460define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2461; SSE-LABEL: test84:
2462; SSE:       # %bb.0: # %entry
2463; SSE-NEXT:    pminsw %xmm2, %xmm0
2464; SSE-NEXT:    pminsw %xmm3, %xmm1
2465; SSE-NEXT:    retq
2466;
2467; AVX1-LABEL: test84:
2468; AVX1:       # %bb.0: # %entry
2469; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2470; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2471; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2472; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2473; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2474; AVX1-NEXT:    retq
2475;
2476; AVX2-LABEL: test84:
2477; AVX2:       # %bb.0: # %entry
2478; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2479; AVX2-NEXT:    retq
2480;
2481; AVX512-LABEL: test84:
2482; AVX512:       # %bb.0: # %entry
2483; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2484; AVX512-NEXT:    retq
2485entry:
2486  %cmp = icmp sge <16 x i16> %a, %b
2487  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2488  ret <16 x i16> %sel
2489}
2490
2491define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2492; SSE2-LABEL: test85:
2493; SSE2:       # %bb.0: # %entry
2494; SSE2-NEXT:    psubusw %xmm0, %xmm2
2495; SSE2-NEXT:    paddw %xmm2, %xmm0
2496; SSE2-NEXT:    psubusw %xmm1, %xmm3
2497; SSE2-NEXT:    paddw %xmm3, %xmm1
2498; SSE2-NEXT:    retq
2499;
2500; SSE4-LABEL: test85:
2501; SSE4:       # %bb.0: # %entry
2502; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2503; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2504; SSE4-NEXT:    retq
2505;
2506; AVX1-LABEL: test85:
2507; AVX1:       # %bb.0: # %entry
2508; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2509; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2510; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2511; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2512; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2513; AVX1-NEXT:    retq
2514;
2515; AVX2-LABEL: test85:
2516; AVX2:       # %bb.0: # %entry
2517; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2518; AVX2-NEXT:    retq
2519;
2520; AVX512-LABEL: test85:
2521; AVX512:       # %bb.0: # %entry
2522; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2523; AVX512-NEXT:    retq
2524entry:
2525  %cmp = icmp ult <16 x i16> %a, %b
2526  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2527  ret <16 x i16> %sel
2528}
2529
2530define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2531; SSE2-LABEL: test86:
2532; SSE2:       # %bb.0: # %entry
2533; SSE2-NEXT:    psubusw %xmm0, %xmm2
2534; SSE2-NEXT:    paddw %xmm2, %xmm0
2535; SSE2-NEXT:    psubusw %xmm1, %xmm3
2536; SSE2-NEXT:    paddw %xmm3, %xmm1
2537; SSE2-NEXT:    retq
2538;
2539; SSE4-LABEL: test86:
2540; SSE4:       # %bb.0: # %entry
2541; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2542; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2543; SSE4-NEXT:    retq
2544;
2545; AVX1-LABEL: test86:
2546; AVX1:       # %bb.0: # %entry
2547; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2548; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2549; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2550; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2551; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2552; AVX1-NEXT:    retq
2553;
2554; AVX2-LABEL: test86:
2555; AVX2:       # %bb.0: # %entry
2556; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2557; AVX2-NEXT:    retq
2558;
2559; AVX512-LABEL: test86:
2560; AVX512:       # %bb.0: # %entry
2561; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2562; AVX512-NEXT:    retq
2563entry:
2564  %cmp = icmp ule <16 x i16> %a, %b
2565  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2566  ret <16 x i16> %sel
2567}
2568
2569define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2570; SSE2-LABEL: test87:
2571; SSE2:       # %bb.0: # %entry
2572; SSE2-NEXT:    movdqa %xmm0, %xmm4
2573; SSE2-NEXT:    psubusw %xmm2, %xmm4
2574; SSE2-NEXT:    psubw %xmm4, %xmm0
2575; SSE2-NEXT:    movdqa %xmm1, %xmm2
2576; SSE2-NEXT:    psubusw %xmm3, %xmm2
2577; SSE2-NEXT:    psubw %xmm2, %xmm1
2578; SSE2-NEXT:    retq
2579;
2580; SSE4-LABEL: test87:
2581; SSE4:       # %bb.0: # %entry
2582; SSE4-NEXT:    pminuw %xmm2, %xmm0
2583; SSE4-NEXT:    pminuw %xmm3, %xmm1
2584; SSE4-NEXT:    retq
2585;
2586; AVX1-LABEL: test87:
2587; AVX1:       # %bb.0: # %entry
2588; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2589; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2590; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2591; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2592; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2593; AVX1-NEXT:    retq
2594;
2595; AVX2-LABEL: test87:
2596; AVX2:       # %bb.0: # %entry
2597; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2598; AVX2-NEXT:    retq
2599;
2600; AVX512-LABEL: test87:
2601; AVX512:       # %bb.0: # %entry
2602; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2603; AVX512-NEXT:    retq
2604entry:
2605  %cmp = icmp ugt <16 x i16> %a, %b
2606  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2607  ret <16 x i16> %sel
2608}
2609
2610define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2611; SSE2-LABEL: test88:
2612; SSE2:       # %bb.0: # %entry
2613; SSE2-NEXT:    movdqa %xmm0, %xmm4
2614; SSE2-NEXT:    psubusw %xmm2, %xmm4
2615; SSE2-NEXT:    psubw %xmm4, %xmm0
2616; SSE2-NEXT:    movdqa %xmm1, %xmm2
2617; SSE2-NEXT:    psubusw %xmm3, %xmm2
2618; SSE2-NEXT:    psubw %xmm2, %xmm1
2619; SSE2-NEXT:    retq
2620;
2621; SSE4-LABEL: test88:
2622; SSE4:       # %bb.0: # %entry
2623; SSE4-NEXT:    pminuw %xmm2, %xmm0
2624; SSE4-NEXT:    pminuw %xmm3, %xmm1
2625; SSE4-NEXT:    retq
2626;
2627; AVX1-LABEL: test88:
2628; AVX1:       # %bb.0: # %entry
2629; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2630; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2631; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2632; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2633; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2634; AVX1-NEXT:    retq
2635;
2636; AVX2-LABEL: test88:
2637; AVX2:       # %bb.0: # %entry
2638; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2639; AVX2-NEXT:    retq
2640;
2641; AVX512-LABEL: test88:
2642; AVX512:       # %bb.0: # %entry
2643; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2644; AVX512-NEXT:    retq
2645entry:
2646  %cmp = icmp uge <16 x i16> %a, %b
2647  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2648  ret <16 x i16> %sel
2649}
2650
2651define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2652; SSE2-LABEL: test89:
2653; SSE2:       # %bb.0: # %entry
2654; SSE2-NEXT:    movdqa %xmm0, %xmm4
2655; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2656; SSE2-NEXT:    pand %xmm4, %xmm0
2657; SSE2-NEXT:    pandn %xmm2, %xmm4
2658; SSE2-NEXT:    por %xmm0, %xmm4
2659; SSE2-NEXT:    movdqa %xmm1, %xmm2
2660; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2661; SSE2-NEXT:    pand %xmm2, %xmm1
2662; SSE2-NEXT:    pandn %xmm3, %xmm2
2663; SSE2-NEXT:    por %xmm1, %xmm2
2664; SSE2-NEXT:    movdqa %xmm4, %xmm0
2665; SSE2-NEXT:    movdqa %xmm2, %xmm1
2666; SSE2-NEXT:    retq
2667;
2668; SSE4-LABEL: test89:
2669; SSE4:       # %bb.0: # %entry
2670; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2671; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2672; SSE4-NEXT:    retq
2673;
2674; AVX1-LABEL: test89:
2675; AVX1:       # %bb.0: # %entry
2676; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2677; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2678; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2679; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2680; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2681; AVX1-NEXT:    retq
2682;
2683; AVX2-LABEL: test89:
2684; AVX2:       # %bb.0: # %entry
2685; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2686; AVX2-NEXT:    retq
2687;
2688; AVX512-LABEL: test89:
2689; AVX512:       # %bb.0: # %entry
2690; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2691; AVX512-NEXT:    retq
2692entry:
2693  %cmp = icmp slt <8 x i32> %a, %b
2694  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2695  ret <8 x i32> %sel
2696}
2697
2698define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2699; SSE2-LABEL: test90:
2700; SSE2:       # %bb.0: # %entry
2701; SSE2-NEXT:    movdqa %xmm0, %xmm4
2702; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2703; SSE2-NEXT:    pand %xmm4, %xmm0
2704; SSE2-NEXT:    pandn %xmm2, %xmm4
2705; SSE2-NEXT:    por %xmm0, %xmm4
2706; SSE2-NEXT:    movdqa %xmm1, %xmm2
2707; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2708; SSE2-NEXT:    pand %xmm2, %xmm1
2709; SSE2-NEXT:    pandn %xmm3, %xmm2
2710; SSE2-NEXT:    por %xmm1, %xmm2
2711; SSE2-NEXT:    movdqa %xmm4, %xmm0
2712; SSE2-NEXT:    movdqa %xmm2, %xmm1
2713; SSE2-NEXT:    retq
2714;
2715; SSE4-LABEL: test90:
2716; SSE4:       # %bb.0: # %entry
2717; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2718; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2719; SSE4-NEXT:    retq
2720;
2721; AVX1-LABEL: test90:
2722; AVX1:       # %bb.0: # %entry
2723; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2724; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2725; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2726; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2727; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2728; AVX1-NEXT:    retq
2729;
2730; AVX2-LABEL: test90:
2731; AVX2:       # %bb.0: # %entry
2732; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2733; AVX2-NEXT:    retq
2734;
2735; AVX512-LABEL: test90:
2736; AVX512:       # %bb.0: # %entry
2737; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2738; AVX512-NEXT:    retq
2739entry:
2740  %cmp = icmp sle <8 x i32> %a, %b
2741  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2742  ret <8 x i32> %sel
2743}
2744
2745define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2746; SSE2-LABEL: test91:
2747; SSE2:       # %bb.0: # %entry
2748; SSE2-NEXT:    movdqa %xmm2, %xmm4
2749; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2750; SSE2-NEXT:    pand %xmm4, %xmm0
2751; SSE2-NEXT:    pandn %xmm2, %xmm4
2752; SSE2-NEXT:    por %xmm4, %xmm0
2753; SSE2-NEXT:    movdqa %xmm3, %xmm2
2754; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2755; SSE2-NEXT:    pand %xmm2, %xmm1
2756; SSE2-NEXT:    pandn %xmm3, %xmm2
2757; SSE2-NEXT:    por %xmm2, %xmm1
2758; SSE2-NEXT:    retq
2759;
2760; SSE4-LABEL: test91:
2761; SSE4:       # %bb.0: # %entry
2762; SSE4-NEXT:    pminsd %xmm2, %xmm0
2763; SSE4-NEXT:    pminsd %xmm3, %xmm1
2764; SSE4-NEXT:    retq
2765;
2766; AVX1-LABEL: test91:
2767; AVX1:       # %bb.0: # %entry
2768; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2769; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2770; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2771; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2772; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2773; AVX1-NEXT:    retq
2774;
2775; AVX2-LABEL: test91:
2776; AVX2:       # %bb.0: # %entry
2777; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2778; AVX2-NEXT:    retq
2779;
2780; AVX512-LABEL: test91:
2781; AVX512:       # %bb.0: # %entry
2782; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2783; AVX512-NEXT:    retq
2784entry:
2785  %cmp = icmp sgt <8 x i32> %a, %b
2786  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2787  ret <8 x i32> %sel
2788}
2789
2790define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
2791; SSE2-LABEL: test92:
2792; SSE2:       # %bb.0: # %entry
2793; SSE2-NEXT:    movdqa %xmm2, %xmm4
2794; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2795; SSE2-NEXT:    pand %xmm4, %xmm0
2796; SSE2-NEXT:    pandn %xmm2, %xmm4
2797; SSE2-NEXT:    por %xmm4, %xmm0
2798; SSE2-NEXT:    movdqa %xmm3, %xmm2
2799; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2800; SSE2-NEXT:    pand %xmm2, %xmm1
2801; SSE2-NEXT:    pandn %xmm3, %xmm2
2802; SSE2-NEXT:    por %xmm2, %xmm1
2803; SSE2-NEXT:    retq
2804;
2805; SSE4-LABEL: test92:
2806; SSE4:       # %bb.0: # %entry
2807; SSE4-NEXT:    pminsd %xmm2, %xmm0
2808; SSE4-NEXT:    pminsd %xmm3, %xmm1
2809; SSE4-NEXT:    retq
2810;
2811; AVX1-LABEL: test92:
2812; AVX1:       # %bb.0: # %entry
2813; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2814; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2815; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2816; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2817; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2818; AVX1-NEXT:    retq
2819;
2820; AVX2-LABEL: test92:
2821; AVX2:       # %bb.0: # %entry
2822; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2823; AVX2-NEXT:    retq
2824;
2825; AVX512-LABEL: test92:
2826; AVX512:       # %bb.0: # %entry
2827; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2828; AVX512-NEXT:    retq
2829entry:
2830  %cmp = icmp sge <8 x i32> %a, %b
2831  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2832  ret <8 x i32> %sel
2833}
2834
2835define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
2836; SSE2-LABEL: test93:
2837; SSE2:       # %bb.0: # %entry
2838; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
2839; SSE2-NEXT:    movdqa %xmm2, %xmm6
2840; SSE2-NEXT:    pxor %xmm5, %xmm6
2841; SSE2-NEXT:    movdqa %xmm0, %xmm4
2842; SSE2-NEXT:    pxor %xmm5, %xmm4
2843; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
2844; SSE2-NEXT:    pand %xmm4, %xmm0
2845; SSE2-NEXT:    pandn %xmm2, %xmm4
2846; SSE2-NEXT:    por %xmm0, %xmm4
2847; SSE2-NEXT:    movdqa %xmm3, %xmm0
2848; SSE2-NEXT:    pxor %xmm5, %xmm0
2849; SSE2-NEXT:    pxor %xmm1, %xmm5
2850; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
2851; SSE2-NEXT:    pand %xmm5, %xmm1
2852; SSE2-NEXT:    pandn %xmm3, %xmm5
2853; SSE2-NEXT:    por %xmm5, %xmm1
2854; SSE2-NEXT:    movdqa %xmm4, %xmm0
2855; SSE2-NEXT:    retq
2856;
2857; SSE4-LABEL: test93:
2858; SSE4:       # %bb.0: # %entry
2859; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2860; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2861; SSE4-NEXT:    retq
2862;
2863; AVX1-LABEL: test93:
2864; AVX1:       # %bb.0: # %entry
2865; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2866; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2867; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2868; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2869; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2870; AVX1-NEXT:    retq
2871;
2872; AVX2-LABEL: test93:
2873; AVX2:       # %bb.0: # %entry
2874; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2875; AVX2-NEXT:    retq
2876;
2877; AVX512-LABEL: test93:
2878; AVX512:       # %bb.0: # %entry
2879; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2880; AVX512-NEXT:    retq
2881entry:
2882  %cmp = icmp ult <8 x i32> %a, %b
2883  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2884  ret <8 x i32> %sel
2885}
2886
2887define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
2888; SSE2-LABEL: test94:
2889; SSE2:       # %bb.0: # %entry
2890; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
2891; SSE2-NEXT:    movdqa %xmm2, %xmm6
2892; SSE2-NEXT:    pxor %xmm5, %xmm6
2893; SSE2-NEXT:    movdqa %xmm0, %xmm4
2894; SSE2-NEXT:    pxor %xmm5, %xmm4
2895; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
2896; SSE2-NEXT:    pand %xmm4, %xmm0
2897; SSE2-NEXT:    pandn %xmm2, %xmm4
2898; SSE2-NEXT:    por %xmm0, %xmm4
2899; SSE2-NEXT:    movdqa %xmm3, %xmm0
2900; SSE2-NEXT:    pxor %xmm5, %xmm0
2901; SSE2-NEXT:    pxor %xmm1, %xmm5
2902; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
2903; SSE2-NEXT:    pand %xmm5, %xmm1
2904; SSE2-NEXT:    pandn %xmm3, %xmm5
2905; SSE2-NEXT:    por %xmm5, %xmm1
2906; SSE2-NEXT:    movdqa %xmm4, %xmm0
2907; SSE2-NEXT:    retq
2908;
2909; SSE4-LABEL: test94:
2910; SSE4:       # %bb.0: # %entry
2911; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2912; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2913; SSE4-NEXT:    retq
2914;
2915; AVX1-LABEL: test94:
2916; AVX1:       # %bb.0: # %entry
2917; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2918; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2919; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2920; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2921; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2922; AVX1-NEXT:    retq
2923;
2924; AVX2-LABEL: test94:
2925; AVX2:       # %bb.0: # %entry
2926; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2927; AVX2-NEXT:    retq
2928;
2929; AVX512-LABEL: test94:
2930; AVX512:       # %bb.0: # %entry
2931; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2932; AVX512-NEXT:    retq
2933entry:
2934  %cmp = icmp ule <8 x i32> %a, %b
2935  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2936  ret <8 x i32> %sel
2937}
2938
2939define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
2940; SSE2-LABEL: test95:
2941; SSE2:       # %bb.0: # %entry
2942; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2943; SSE2-NEXT:    movdqa %xmm0, %xmm5
2944; SSE2-NEXT:    pxor %xmm4, %xmm5
2945; SSE2-NEXT:    movdqa %xmm2, %xmm6
2946; SSE2-NEXT:    pxor %xmm4, %xmm6
2947; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2948; SSE2-NEXT:    pand %xmm6, %xmm0
2949; SSE2-NEXT:    pandn %xmm2, %xmm6
2950; SSE2-NEXT:    por %xmm6, %xmm0
2951; SSE2-NEXT:    movdqa %xmm1, %xmm2
2952; SSE2-NEXT:    pxor %xmm4, %xmm2
2953; SSE2-NEXT:    pxor %xmm3, %xmm4
2954; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2955; SSE2-NEXT:    pand %xmm4, %xmm1
2956; SSE2-NEXT:    pandn %xmm3, %xmm4
2957; SSE2-NEXT:    por %xmm4, %xmm1
2958; SSE2-NEXT:    retq
2959;
2960; SSE4-LABEL: test95:
2961; SSE4:       # %bb.0: # %entry
2962; SSE4-NEXT:    pminud %xmm2, %xmm0
2963; SSE4-NEXT:    pminud %xmm3, %xmm1
2964; SSE4-NEXT:    retq
2965;
2966; AVX1-LABEL: test95:
2967; AVX1:       # %bb.0: # %entry
2968; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2969; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2970; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
2971; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2972; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2973; AVX1-NEXT:    retq
2974;
2975; AVX2-LABEL: test95:
2976; AVX2:       # %bb.0: # %entry
2977; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
2978; AVX2-NEXT:    retq
2979;
2980; AVX512-LABEL: test95:
2981; AVX512:       # %bb.0: # %entry
2982; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
2983; AVX512-NEXT:    retq
2984entry:
2985  %cmp = icmp ugt <8 x i32> %a, %b
2986  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2987  ret <8 x i32> %sel
2988}
2989
2990define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
2991; SSE2-LABEL: test96:
2992; SSE2:       # %bb.0: # %entry
2993; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2994; SSE2-NEXT:    movdqa %xmm0, %xmm5
2995; SSE2-NEXT:    pxor %xmm4, %xmm5
2996; SSE2-NEXT:    movdqa %xmm2, %xmm6
2997; SSE2-NEXT:    pxor %xmm4, %xmm6
2998; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2999; SSE2-NEXT:    pand %xmm6, %xmm0
3000; SSE2-NEXT:    pandn %xmm2, %xmm6
3001; SSE2-NEXT:    por %xmm6, %xmm0
3002; SSE2-NEXT:    movdqa %xmm1, %xmm2
3003; SSE2-NEXT:    pxor %xmm4, %xmm2
3004; SSE2-NEXT:    pxor %xmm3, %xmm4
3005; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3006; SSE2-NEXT:    pand %xmm4, %xmm1
3007; SSE2-NEXT:    pandn %xmm3, %xmm4
3008; SSE2-NEXT:    por %xmm4, %xmm1
3009; SSE2-NEXT:    retq
3010;
3011; SSE4-LABEL: test96:
3012; SSE4:       # %bb.0: # %entry
3013; SSE4-NEXT:    pminud %xmm2, %xmm0
3014; SSE4-NEXT:    pminud %xmm3, %xmm1
3015; SSE4-NEXT:    retq
3016;
3017; AVX1-LABEL: test96:
3018; AVX1:       # %bb.0: # %entry
3019; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3020; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3021; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
3022; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
3023; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3024; AVX1-NEXT:    retq
3025;
3026; AVX2-LABEL: test96:
3027; AVX2:       # %bb.0: # %entry
3028; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3029; AVX2-NEXT:    retq
3030;
3031; AVX512-LABEL: test96:
3032; AVX512:       # %bb.0: # %entry
3033; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3034; AVX512-NEXT:    retq
3035entry:
3036  %cmp = icmp uge <8 x i32> %a, %b
3037  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3038  ret <8 x i32> %sel
3039}
3040
3041; ----------------------------
3042
3043define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3044; SSE2-LABEL: test97:
3045; SSE2:       # %bb.0: # %entry
3046; SSE2-NEXT:    movdqa %xmm4, %xmm8
3047; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3048; SSE2-NEXT:    pand %xmm8, %xmm0
3049; SSE2-NEXT:    pandn %xmm4, %xmm8
3050; SSE2-NEXT:    por %xmm8, %xmm0
3051; SSE2-NEXT:    movdqa %xmm5, %xmm4
3052; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3053; SSE2-NEXT:    pand %xmm4, %xmm1
3054; SSE2-NEXT:    pandn %xmm5, %xmm4
3055; SSE2-NEXT:    por %xmm4, %xmm1
3056; SSE2-NEXT:    movdqa %xmm6, %xmm4
3057; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3058; SSE2-NEXT:    pand %xmm4, %xmm2
3059; SSE2-NEXT:    pandn %xmm6, %xmm4
3060; SSE2-NEXT:    por %xmm4, %xmm2
3061; SSE2-NEXT:    movdqa %xmm7, %xmm4
3062; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3063; SSE2-NEXT:    pand %xmm4, %xmm3
3064; SSE2-NEXT:    pandn %xmm7, %xmm4
3065; SSE2-NEXT:    por %xmm4, %xmm3
3066; SSE2-NEXT:    retq
3067;
3068; SSE4-LABEL: test97:
3069; SSE4:       # %bb.0: # %entry
3070; SSE4-NEXT:    pminsb %xmm4, %xmm0
3071; SSE4-NEXT:    pminsb %xmm5, %xmm1
3072; SSE4-NEXT:    pminsb %xmm6, %xmm2
3073; SSE4-NEXT:    pminsb %xmm7, %xmm3
3074; SSE4-NEXT:    retq
3075;
3076; AVX1-LABEL: test97:
3077; AVX1:       # %bb.0: # %entry
3078; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3079; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3080; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3081; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3082; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3083; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3084; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3085; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3086; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3087; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3088; AVX1-NEXT:    retq
3089;
3090; AVX2-LABEL: test97:
3091; AVX2:       # %bb.0: # %entry
3092; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3093; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3094; AVX2-NEXT:    retq
3095;
3096; AVX512F-LABEL: test97:
3097; AVX512F:       # %bb.0: # %entry
3098; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3099; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3100; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
3101; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
3102; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3103; AVX512F-NEXT:    retq
3104;
3105; AVX512BW-LABEL: test97:
3106; AVX512BW:       # %bb.0: # %entry
3107; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3108; AVX512BW-NEXT:    retq
3109entry:
3110  %cmp = icmp slt <64 x i8> %a, %b
3111  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3112  ret <64 x i8> %sel
3113}
3114
3115define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3116; SSE2-LABEL: test98:
3117; SSE2:       # %bb.0: # %entry
3118; SSE2-NEXT:    movdqa %xmm4, %xmm8
3119; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3120; SSE2-NEXT:    pand %xmm8, %xmm0
3121; SSE2-NEXT:    pandn %xmm4, %xmm8
3122; SSE2-NEXT:    por %xmm8, %xmm0
3123; SSE2-NEXT:    movdqa %xmm5, %xmm4
3124; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3125; SSE2-NEXT:    pand %xmm4, %xmm1
3126; SSE2-NEXT:    pandn %xmm5, %xmm4
3127; SSE2-NEXT:    por %xmm4, %xmm1
3128; SSE2-NEXT:    movdqa %xmm6, %xmm4
3129; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3130; SSE2-NEXT:    pand %xmm4, %xmm2
3131; SSE2-NEXT:    pandn %xmm6, %xmm4
3132; SSE2-NEXT:    por %xmm4, %xmm2
3133; SSE2-NEXT:    movdqa %xmm7, %xmm4
3134; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3135; SSE2-NEXT:    pand %xmm4, %xmm3
3136; SSE2-NEXT:    pandn %xmm7, %xmm4
3137; SSE2-NEXT:    por %xmm4, %xmm3
3138; SSE2-NEXT:    retq
3139;
3140; SSE4-LABEL: test98:
3141; SSE4:       # %bb.0: # %entry
3142; SSE4-NEXT:    pminsb %xmm4, %xmm0
3143; SSE4-NEXT:    pminsb %xmm5, %xmm1
3144; SSE4-NEXT:    pminsb %xmm6, %xmm2
3145; SSE4-NEXT:    pminsb %xmm7, %xmm3
3146; SSE4-NEXT:    retq
3147;
3148; AVX1-LABEL: test98:
3149; AVX1:       # %bb.0: # %entry
3150; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3151; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3152; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3153; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3154; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3155; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3156; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3157; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3158; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3159; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3160; AVX1-NEXT:    retq
3161;
3162; AVX2-LABEL: test98:
3163; AVX2:       # %bb.0: # %entry
3164; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3165; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3166; AVX2-NEXT:    retq
3167;
3168; AVX512F-LABEL: test98:
3169; AVX512F:       # %bb.0: # %entry
3170; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3171; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3172; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
3173; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
3174; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3175; AVX512F-NEXT:    retq
3176;
3177; AVX512BW-LABEL: test98:
3178; AVX512BW:       # %bb.0: # %entry
3179; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3180; AVX512BW-NEXT:    retq
3181entry:
3182  %cmp = icmp sle <64 x i8> %a, %b
3183  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3184  ret <64 x i8> %sel
3185}
3186
3187define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3188; SSE2-LABEL: test99:
3189; SSE2:       # %bb.0: # %entry
3190; SSE2-NEXT:    movdqa %xmm0, %xmm8
3191; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3192; SSE2-NEXT:    pand %xmm8, %xmm0
3193; SSE2-NEXT:    pandn %xmm4, %xmm8
3194; SSE2-NEXT:    por %xmm0, %xmm8
3195; SSE2-NEXT:    movdqa %xmm1, %xmm4
3196; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3197; SSE2-NEXT:    pand %xmm4, %xmm1
3198; SSE2-NEXT:    pandn %xmm5, %xmm4
3199; SSE2-NEXT:    por %xmm1, %xmm4
3200; SSE2-NEXT:    movdqa %xmm2, %xmm5
3201; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
3202; SSE2-NEXT:    pand %xmm5, %xmm2
3203; SSE2-NEXT:    pandn %xmm6, %xmm5
3204; SSE2-NEXT:    por %xmm2, %xmm5
3205; SSE2-NEXT:    movdqa %xmm3, %xmm6
3206; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
3207; SSE2-NEXT:    pand %xmm6, %xmm3
3208; SSE2-NEXT:    pandn %xmm7, %xmm6
3209; SSE2-NEXT:    por %xmm3, %xmm6
3210; SSE2-NEXT:    movdqa %xmm8, %xmm0
3211; SSE2-NEXT:    movdqa %xmm4, %xmm1
3212; SSE2-NEXT:    movdqa %xmm5, %xmm2
3213; SSE2-NEXT:    movdqa %xmm6, %xmm3
3214; SSE2-NEXT:    retq
3215;
3216; SSE4-LABEL: test99:
3217; SSE4:       # %bb.0: # %entry
3218; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3219; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3220; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3221; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3222; SSE4-NEXT:    retq
3223;
3224; AVX1-LABEL: test99:
3225; AVX1:       # %bb.0: # %entry
3226; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3227; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3228; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3229; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3230; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3231; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3232; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3233; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3234; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3235; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3236; AVX1-NEXT:    retq
3237;
3238; AVX2-LABEL: test99:
3239; AVX2:       # %bb.0: # %entry
3240; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3241; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3242; AVX2-NEXT:    retq
3243;
3244; AVX512F-LABEL: test99:
3245; AVX512F:       # %bb.0: # %entry
3246; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3247; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3248; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
3249; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
3250; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3251; AVX512F-NEXT:    retq
3252;
3253; AVX512BW-LABEL: test99:
3254; AVX512BW:       # %bb.0: # %entry
3255; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3256; AVX512BW-NEXT:    retq
3257entry:
3258  %cmp = icmp sgt <64 x i8> %a, %b
3259  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3260  ret <64 x i8> %sel
3261}
3262
3263define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3264; SSE2-LABEL: test100:
3265; SSE2:       # %bb.0: # %entry
3266; SSE2-NEXT:    movdqa %xmm0, %xmm8
3267; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3268; SSE2-NEXT:    pand %xmm8, %xmm0
3269; SSE2-NEXT:    pandn %xmm4, %xmm8
3270; SSE2-NEXT:    por %xmm0, %xmm8
3271; SSE2-NEXT:    movdqa %xmm1, %xmm4
3272; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3273; SSE2-NEXT:    pand %xmm4, %xmm1
3274; SSE2-NEXT:    pandn %xmm5, %xmm4
3275; SSE2-NEXT:    por %xmm1, %xmm4
3276; SSE2-NEXT:    movdqa %xmm2, %xmm5
3277; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
3278; SSE2-NEXT:    pand %xmm5, %xmm2
3279; SSE2-NEXT:    pandn %xmm6, %xmm5
3280; SSE2-NEXT:    por %xmm2, %xmm5
3281; SSE2-NEXT:    movdqa %xmm3, %xmm6
3282; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
3283; SSE2-NEXT:    pand %xmm6, %xmm3
3284; SSE2-NEXT:    pandn %xmm7, %xmm6
3285; SSE2-NEXT:    por %xmm3, %xmm6
3286; SSE2-NEXT:    movdqa %xmm8, %xmm0
3287; SSE2-NEXT:    movdqa %xmm4, %xmm1
3288; SSE2-NEXT:    movdqa %xmm5, %xmm2
3289; SSE2-NEXT:    movdqa %xmm6, %xmm3
3290; SSE2-NEXT:    retq
3291;
3292; SSE4-LABEL: test100:
3293; SSE4:       # %bb.0: # %entry
3294; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3295; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3296; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3297; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3298; SSE4-NEXT:    retq
3299;
3300; AVX1-LABEL: test100:
3301; AVX1:       # %bb.0: # %entry
3302; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3303; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3304; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3305; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3306; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3307; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3308; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3309; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3310; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3311; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3312; AVX1-NEXT:    retq
3313;
3314; AVX2-LABEL: test100:
3315; AVX2:       # %bb.0: # %entry
3316; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3317; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3318; AVX2-NEXT:    retq
3319;
3320; AVX512F-LABEL: test100:
3321; AVX512F:       # %bb.0: # %entry
3322; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3323; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3324; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
3325; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
3326; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3327; AVX512F-NEXT:    retq
3328;
3329; AVX512BW-LABEL: test100:
3330; AVX512BW:       # %bb.0: # %entry
3331; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3332; AVX512BW-NEXT:    retq
3333entry:
3334  %cmp = icmp sge <64 x i8> %a, %b
3335  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3336  ret <64 x i8> %sel
3337}
3338
3339define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3340; SSE-LABEL: test101:
3341; SSE:       # %bb.0: # %entry
3342; SSE-NEXT:    pminub %xmm4, %xmm0
3343; SSE-NEXT:    pminub %xmm5, %xmm1
3344; SSE-NEXT:    pminub %xmm6, %xmm2
3345; SSE-NEXT:    pminub %xmm7, %xmm3
3346; SSE-NEXT:    retq
3347;
3348; AVX1-LABEL: test101:
3349; AVX1:       # %bb.0: # %entry
3350; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3351; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3352; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3353; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3354; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3355; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3356; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3357; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3358; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3359; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3360; AVX1-NEXT:    retq
3361;
3362; AVX2-LABEL: test101:
3363; AVX2:       # %bb.0: # %entry
3364; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3365; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3366; AVX2-NEXT:    retq
3367;
3368; AVX512F-LABEL: test101:
3369; AVX512F:       # %bb.0: # %entry
3370; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3371; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3372; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
3373; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
3374; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3375; AVX512F-NEXT:    retq
3376;
3377; AVX512BW-LABEL: test101:
3378; AVX512BW:       # %bb.0: # %entry
3379; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3380; AVX512BW-NEXT:    retq
3381entry:
3382  %cmp = icmp ult <64 x i8> %a, %b
3383  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3384  ret <64 x i8> %sel
3385}
3386
3387define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3388; SSE-LABEL: test102:
3389; SSE:       # %bb.0: # %entry
3390; SSE-NEXT:    pminub %xmm4, %xmm0
3391; SSE-NEXT:    pminub %xmm5, %xmm1
3392; SSE-NEXT:    pminub %xmm6, %xmm2
3393; SSE-NEXT:    pminub %xmm7, %xmm3
3394; SSE-NEXT:    retq
3395;
3396; AVX1-LABEL: test102:
3397; AVX1:       # %bb.0: # %entry
3398; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3399; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3400; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3401; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3402; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3403; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3404; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3405; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3406; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3407; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3408; AVX1-NEXT:    retq
3409;
3410; AVX2-LABEL: test102:
3411; AVX2:       # %bb.0: # %entry
3412; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3413; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3414; AVX2-NEXT:    retq
3415;
3416; AVX512F-LABEL: test102:
3417; AVX512F:       # %bb.0: # %entry
3418; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3419; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3420; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
3421; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
3422; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3423; AVX512F-NEXT:    retq
3424;
3425; AVX512BW-LABEL: test102:
3426; AVX512BW:       # %bb.0: # %entry
3427; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3428; AVX512BW-NEXT:    retq
3429entry:
3430  %cmp = icmp ule <64 x i8> %a, %b
3431  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3432  ret <64 x i8> %sel
3433}
3434
3435define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3436; SSE-LABEL: test103:
3437; SSE:       # %bb.0: # %entry
3438; SSE-NEXT:    pmaxub %xmm4, %xmm0
3439; SSE-NEXT:    pmaxub %xmm5, %xmm1
3440; SSE-NEXT:    pmaxub %xmm6, %xmm2
3441; SSE-NEXT:    pmaxub %xmm7, %xmm3
3442; SSE-NEXT:    retq
3443;
3444; AVX1-LABEL: test103:
3445; AVX1:       # %bb.0: # %entry
3446; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3447; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3448; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3449; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3450; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3451; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3452; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3453; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3454; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3455; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3456; AVX1-NEXT:    retq
3457;
3458; AVX2-LABEL: test103:
3459; AVX2:       # %bb.0: # %entry
3460; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3461; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3462; AVX2-NEXT:    retq
3463;
3464; AVX512F-LABEL: test103:
3465; AVX512F:       # %bb.0: # %entry
3466; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3467; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3468; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
3469; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
3470; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3471; AVX512F-NEXT:    retq
3472;
3473; AVX512BW-LABEL: test103:
3474; AVX512BW:       # %bb.0: # %entry
3475; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3476; AVX512BW-NEXT:    retq
3477entry:
3478  %cmp = icmp ugt <64 x i8> %a, %b
3479  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3480  ret <64 x i8> %sel
3481}
3482
3483define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3484; SSE-LABEL: test104:
3485; SSE:       # %bb.0: # %entry
3486; SSE-NEXT:    pmaxub %xmm4, %xmm0
3487; SSE-NEXT:    pmaxub %xmm5, %xmm1
3488; SSE-NEXT:    pmaxub %xmm6, %xmm2
3489; SSE-NEXT:    pmaxub %xmm7, %xmm3
3490; SSE-NEXT:    retq
3491;
3492; AVX1-LABEL: test104:
3493; AVX1:       # %bb.0: # %entry
3494; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3495; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3496; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3497; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3498; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3499; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3500; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3501; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3502; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3503; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3504; AVX1-NEXT:    retq
3505;
3506; AVX2-LABEL: test104:
3507; AVX2:       # %bb.0: # %entry
3508; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3509; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3510; AVX2-NEXT:    retq
3511;
3512; AVX512F-LABEL: test104:
3513; AVX512F:       # %bb.0: # %entry
3514; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3515; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3516; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
3517; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
3518; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3519; AVX512F-NEXT:    retq
3520;
3521; AVX512BW-LABEL: test104:
3522; AVX512BW:       # %bb.0: # %entry
3523; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3524; AVX512BW-NEXT:    retq
3525entry:
3526  %cmp = icmp uge <64 x i8> %a, %b
3527  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3528  ret <64 x i8> %sel
3529}
3530
3531define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3532; SSE-LABEL: test105:
3533; SSE:       # %bb.0: # %entry
3534; SSE-NEXT:    pminsw %xmm4, %xmm0
3535; SSE-NEXT:    pminsw %xmm5, %xmm1
3536; SSE-NEXT:    pminsw %xmm6, %xmm2
3537; SSE-NEXT:    pminsw %xmm7, %xmm3
3538; SSE-NEXT:    retq
3539;
3540; AVX1-LABEL: test105:
3541; AVX1:       # %bb.0: # %entry
3542; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3543; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3544; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3545; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3546; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3547; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3548; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3549; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3550; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3551; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3552; AVX1-NEXT:    retq
3553;
3554; AVX2-LABEL: test105:
3555; AVX2:       # %bb.0: # %entry
3556; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3557; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3558; AVX2-NEXT:    retq
3559;
3560; AVX512F-LABEL: test105:
3561; AVX512F:       # %bb.0: # %entry
3562; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3563; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3564; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
3565; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
3566; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3567; AVX512F-NEXT:    retq
3568;
3569; AVX512BW-LABEL: test105:
3570; AVX512BW:       # %bb.0: # %entry
3571; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3572; AVX512BW-NEXT:    retq
3573entry:
3574  %cmp = icmp slt <32 x i16> %a, %b
3575  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3576  ret <32 x i16> %sel
3577}
3578
3579define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3580; SSE-LABEL: test106:
3581; SSE:       # %bb.0: # %entry
3582; SSE-NEXT:    pminsw %xmm4, %xmm0
3583; SSE-NEXT:    pminsw %xmm5, %xmm1
3584; SSE-NEXT:    pminsw %xmm6, %xmm2
3585; SSE-NEXT:    pminsw %xmm7, %xmm3
3586; SSE-NEXT:    retq
3587;
3588; AVX1-LABEL: test106:
3589; AVX1:       # %bb.0: # %entry
3590; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3591; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3592; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3593; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3594; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3595; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3596; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3597; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3598; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3599; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3600; AVX1-NEXT:    retq
3601;
3602; AVX2-LABEL: test106:
3603; AVX2:       # %bb.0: # %entry
3604; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3605; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3606; AVX2-NEXT:    retq
3607;
3608; AVX512F-LABEL: test106:
3609; AVX512F:       # %bb.0: # %entry
3610; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3611; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3612; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
3613; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
3614; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3615; AVX512F-NEXT:    retq
3616;
3617; AVX512BW-LABEL: test106:
3618; AVX512BW:       # %bb.0: # %entry
3619; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3620; AVX512BW-NEXT:    retq
3621entry:
3622  %cmp = icmp sle <32 x i16> %a, %b
3623  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3624  ret <32 x i16> %sel
3625}
3626
3627define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3628; SSE-LABEL: test107:
3629; SSE:       # %bb.0: # %entry
3630; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3631; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3632; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3633; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3634; SSE-NEXT:    retq
3635;
3636; AVX1-LABEL: test107:
3637; AVX1:       # %bb.0: # %entry
3638; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3639; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3640; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3641; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3642; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3643; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3644; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3645; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3646; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3647; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3648; AVX1-NEXT:    retq
3649;
3650; AVX2-LABEL: test107:
3651; AVX2:       # %bb.0: # %entry
3652; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3653; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3654; AVX2-NEXT:    retq
3655;
3656; AVX512F-LABEL: test107:
3657; AVX512F:       # %bb.0: # %entry
3658; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3659; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3660; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
3661; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3662; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3663; AVX512F-NEXT:    retq
3664;
3665; AVX512BW-LABEL: test107:
3666; AVX512BW:       # %bb.0: # %entry
3667; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3668; AVX512BW-NEXT:    retq
3669entry:
3670  %cmp = icmp sgt <32 x i16> %a, %b
3671  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3672  ret <32 x i16> %sel
3673}
3674
3675define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3676; SSE-LABEL: test108:
3677; SSE:       # %bb.0: # %entry
3678; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3679; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3680; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3681; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3682; SSE-NEXT:    retq
3683;
3684; AVX1-LABEL: test108:
3685; AVX1:       # %bb.0: # %entry
3686; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3687; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3688; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3689; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3690; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3691; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3692; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3693; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3694; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3695; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3696; AVX1-NEXT:    retq
3697;
3698; AVX2-LABEL: test108:
3699; AVX2:       # %bb.0: # %entry
3700; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3701; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3702; AVX2-NEXT:    retq
3703;
3704; AVX512F-LABEL: test108:
3705; AVX512F:       # %bb.0: # %entry
3706; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3707; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3708; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
3709; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3710; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3711; AVX512F-NEXT:    retq
3712;
3713; AVX512BW-LABEL: test108:
3714; AVX512BW:       # %bb.0: # %entry
3715; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3716; AVX512BW-NEXT:    retq
3717entry:
3718  %cmp = icmp sge <32 x i16> %a, %b
3719  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3720  ret <32 x i16> %sel
3721}
3722
3723define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3724; SSE2-LABEL: test109:
3725; SSE2:       # %bb.0: # %entry
3726; SSE2-NEXT:    movdqa %xmm0, %xmm8
3727; SSE2-NEXT:    psubusw %xmm4, %xmm8
3728; SSE2-NEXT:    psubw %xmm8, %xmm0
3729; SSE2-NEXT:    movdqa %xmm1, %xmm4
3730; SSE2-NEXT:    psubusw %xmm5, %xmm4
3731; SSE2-NEXT:    psubw %xmm4, %xmm1
3732; SSE2-NEXT:    movdqa %xmm2, %xmm4
3733; SSE2-NEXT:    psubusw %xmm6, %xmm4
3734; SSE2-NEXT:    psubw %xmm4, %xmm2
3735; SSE2-NEXT:    movdqa %xmm3, %xmm4
3736; SSE2-NEXT:    psubusw %xmm7, %xmm4
3737; SSE2-NEXT:    psubw %xmm4, %xmm3
3738; SSE2-NEXT:    retq
3739;
3740; SSE4-LABEL: test109:
3741; SSE4:       # %bb.0: # %entry
3742; SSE4-NEXT:    pminuw %xmm4, %xmm0
3743; SSE4-NEXT:    pminuw %xmm5, %xmm1
3744; SSE4-NEXT:    pminuw %xmm6, %xmm2
3745; SSE4-NEXT:    pminuw %xmm7, %xmm3
3746; SSE4-NEXT:    retq
3747;
3748; AVX1-LABEL: test109:
3749; AVX1:       # %bb.0: # %entry
3750; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3751; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3752; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3753; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3754; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3755; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3756; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3757; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3758; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3759; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3760; AVX1-NEXT:    retq
3761;
3762; AVX2-LABEL: test109:
3763; AVX2:       # %bb.0: # %entry
3764; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3765; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3766; AVX2-NEXT:    retq
3767;
3768; AVX512F-LABEL: test109:
3769; AVX512F:       # %bb.0: # %entry
3770; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3771; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3772; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
3773; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
3774; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3775; AVX512F-NEXT:    retq
3776;
3777; AVX512BW-LABEL: test109:
3778; AVX512BW:       # %bb.0: # %entry
3779; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3780; AVX512BW-NEXT:    retq
3781entry:
3782  %cmp = icmp ult <32 x i16> %a, %b
3783  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3784  ret <32 x i16> %sel
3785}
3786
3787define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3788; SSE2-LABEL: test110:
3789; SSE2:       # %bb.0: # %entry
3790; SSE2-NEXT:    movdqa %xmm0, %xmm8
3791; SSE2-NEXT:    psubusw %xmm4, %xmm8
3792; SSE2-NEXT:    psubw %xmm8, %xmm0
3793; SSE2-NEXT:    movdqa %xmm1, %xmm4
3794; SSE2-NEXT:    psubusw %xmm5, %xmm4
3795; SSE2-NEXT:    psubw %xmm4, %xmm1
3796; SSE2-NEXT:    movdqa %xmm2, %xmm4
3797; SSE2-NEXT:    psubusw %xmm6, %xmm4
3798; SSE2-NEXT:    psubw %xmm4, %xmm2
3799; SSE2-NEXT:    movdqa %xmm3, %xmm4
3800; SSE2-NEXT:    psubusw %xmm7, %xmm4
3801; SSE2-NEXT:    psubw %xmm4, %xmm3
3802; SSE2-NEXT:    retq
3803;
3804; SSE4-LABEL: test110:
3805; SSE4:       # %bb.0: # %entry
3806; SSE4-NEXT:    pminuw %xmm4, %xmm0
3807; SSE4-NEXT:    pminuw %xmm5, %xmm1
3808; SSE4-NEXT:    pminuw %xmm6, %xmm2
3809; SSE4-NEXT:    pminuw %xmm7, %xmm3
3810; SSE4-NEXT:    retq
3811;
3812; AVX1-LABEL: test110:
3813; AVX1:       # %bb.0: # %entry
3814; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3815; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3816; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3817; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3818; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3819; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3820; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3821; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3822; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3823; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3824; AVX1-NEXT:    retq
3825;
3826; AVX2-LABEL: test110:
3827; AVX2:       # %bb.0: # %entry
3828; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3829; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3830; AVX2-NEXT:    retq
3831;
3832; AVX512F-LABEL: test110:
3833; AVX512F:       # %bb.0: # %entry
3834; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3835; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3836; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
3837; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
3838; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3839; AVX512F-NEXT:    retq
3840;
3841; AVX512BW-LABEL: test110:
3842; AVX512BW:       # %bb.0: # %entry
3843; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3844; AVX512BW-NEXT:    retq
3845entry:
3846  %cmp = icmp ule <32 x i16> %a, %b
3847  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3848  ret <32 x i16> %sel
3849}
3850
3851define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
3852; SSE2-LABEL: test111:
3853; SSE2:       # %bb.0: # %entry
3854; SSE2-NEXT:    psubusw %xmm0, %xmm4
3855; SSE2-NEXT:    paddw %xmm4, %xmm0
3856; SSE2-NEXT:    psubusw %xmm1, %xmm5
3857; SSE2-NEXT:    paddw %xmm5, %xmm1
3858; SSE2-NEXT:    psubusw %xmm2, %xmm6
3859; SSE2-NEXT:    paddw %xmm6, %xmm2
3860; SSE2-NEXT:    psubusw %xmm3, %xmm7
3861; SSE2-NEXT:    paddw %xmm7, %xmm3
3862; SSE2-NEXT:    retq
3863;
3864; SSE4-LABEL: test111:
3865; SSE4:       # %bb.0: # %entry
3866; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3867; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3868; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3869; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3870; SSE4-NEXT:    retq
3871;
3872; AVX1-LABEL: test111:
3873; AVX1:       # %bb.0: # %entry
3874; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3875; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3876; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3877; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3878; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3879; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3880; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3881; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3882; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3883; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3884; AVX1-NEXT:    retq
3885;
3886; AVX2-LABEL: test111:
3887; AVX2:       # %bb.0: # %entry
3888; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3889; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3890; AVX2-NEXT:    retq
3891;
3892; AVX512F-LABEL: test111:
3893; AVX512F:       # %bb.0: # %entry
3894; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3895; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3896; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
3897; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
3898; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3899; AVX512F-NEXT:    retq
3900;
3901; AVX512BW-LABEL: test111:
3902; AVX512BW:       # %bb.0: # %entry
3903; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3904; AVX512BW-NEXT:    retq
3905entry:
3906  %cmp = icmp ugt <32 x i16> %a, %b
3907  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3908  ret <32 x i16> %sel
3909}
3910
3911define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
3912; SSE2-LABEL: test112:
3913; SSE2:       # %bb.0: # %entry
3914; SSE2-NEXT:    psubusw %xmm0, %xmm4
3915; SSE2-NEXT:    paddw %xmm4, %xmm0
3916; SSE2-NEXT:    psubusw %xmm1, %xmm5
3917; SSE2-NEXT:    paddw %xmm5, %xmm1
3918; SSE2-NEXT:    psubusw %xmm2, %xmm6
3919; SSE2-NEXT:    paddw %xmm6, %xmm2
3920; SSE2-NEXT:    psubusw %xmm3, %xmm7
3921; SSE2-NEXT:    paddw %xmm7, %xmm3
3922; SSE2-NEXT:    retq
3923;
3924; SSE4-LABEL: test112:
3925; SSE4:       # %bb.0: # %entry
3926; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3927; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3928; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3929; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3930; SSE4-NEXT:    retq
3931;
3932; AVX1-LABEL: test112:
3933; AVX1:       # %bb.0: # %entry
3934; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3935; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3936; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3937; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3938; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3939; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3940; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3941; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3942; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3943; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3944; AVX1-NEXT:    retq
3945;
3946; AVX2-LABEL: test112:
3947; AVX2:       # %bb.0: # %entry
3948; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3949; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3950; AVX2-NEXT:    retq
3951;
3952; AVX512F-LABEL: test112:
3953; AVX512F:       # %bb.0: # %entry
3954; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3955; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3956; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
3957; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
3958; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3959; AVX512F-NEXT:    retq
3960;
3961; AVX512BW-LABEL: test112:
3962; AVX512BW:       # %bb.0: # %entry
3963; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3964; AVX512BW-NEXT:    retq
3965entry:
3966  %cmp = icmp uge <32 x i16> %a, %b
3967  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3968  ret <32 x i16> %sel
3969}
3970
3971define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
3972; SSE2-LABEL: test113:
3973; SSE2:       # %bb.0: # %entry
3974; SSE2-NEXT:    movdqa %xmm4, %xmm8
3975; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
3976; SSE2-NEXT:    pand %xmm8, %xmm0
3977; SSE2-NEXT:    pandn %xmm4, %xmm8
3978; SSE2-NEXT:    por %xmm8, %xmm0
3979; SSE2-NEXT:    movdqa %xmm5, %xmm4
3980; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
3981; SSE2-NEXT:    pand %xmm4, %xmm1
3982; SSE2-NEXT:    pandn %xmm5, %xmm4
3983; SSE2-NEXT:    por %xmm4, %xmm1
3984; SSE2-NEXT:    movdqa %xmm6, %xmm4
3985; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3986; SSE2-NEXT:    pand %xmm4, %xmm2
3987; SSE2-NEXT:    pandn %xmm6, %xmm4
3988; SSE2-NEXT:    por %xmm4, %xmm2
3989; SSE2-NEXT:    movdqa %xmm7, %xmm4
3990; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
3991; SSE2-NEXT:    pand %xmm4, %xmm3
3992; SSE2-NEXT:    pandn %xmm7, %xmm4
3993; SSE2-NEXT:    por %xmm4, %xmm3
3994; SSE2-NEXT:    retq
3995;
3996; SSE4-LABEL: test113:
3997; SSE4:       # %bb.0: # %entry
3998; SSE4-NEXT:    pminsd %xmm4, %xmm0
3999; SSE4-NEXT:    pminsd %xmm5, %xmm1
4000; SSE4-NEXT:    pminsd %xmm6, %xmm2
4001; SSE4-NEXT:    pminsd %xmm7, %xmm3
4002; SSE4-NEXT:    retq
4003;
4004; AVX1-LABEL: test113:
4005; AVX1:       # %bb.0: # %entry
4006; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4007; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4008; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4009; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4010; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4011; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4012; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4013; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4014; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4015; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4016; AVX1-NEXT:    retq
4017;
4018; AVX2-LABEL: test113:
4019; AVX2:       # %bb.0: # %entry
4020; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4021; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4022; AVX2-NEXT:    retq
4023;
4024; AVX512-LABEL: test113:
4025; AVX512:       # %bb.0: # %entry
4026; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4027; AVX512-NEXT:    retq
4028entry:
4029  %cmp = icmp slt <16 x i32> %a, %b
4030  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4031  ret <16 x i32> %sel
4032}
4033
4034define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
4035; SSE2-LABEL: test114:
4036; SSE2:       # %bb.0: # %entry
4037; SSE2-NEXT:    movdqa %xmm4, %xmm8
4038; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
4039; SSE2-NEXT:    pand %xmm8, %xmm0
4040; SSE2-NEXT:    pandn %xmm4, %xmm8
4041; SSE2-NEXT:    por %xmm8, %xmm0
4042; SSE2-NEXT:    movdqa %xmm5, %xmm4
4043; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
4044; SSE2-NEXT:    pand %xmm4, %xmm1
4045; SSE2-NEXT:    pandn %xmm5, %xmm4
4046; SSE2-NEXT:    por %xmm4, %xmm1
4047; SSE2-NEXT:    movdqa %xmm6, %xmm4
4048; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
4049; SSE2-NEXT:    pand %xmm4, %xmm2
4050; SSE2-NEXT:    pandn %xmm6, %xmm4
4051; SSE2-NEXT:    por %xmm4, %xmm2
4052; SSE2-NEXT:    movdqa %xmm7, %xmm4
4053; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
4054; SSE2-NEXT:    pand %xmm4, %xmm3
4055; SSE2-NEXT:    pandn %xmm7, %xmm4
4056; SSE2-NEXT:    por %xmm4, %xmm3
4057; SSE2-NEXT:    retq
4058;
4059; SSE4-LABEL: test114:
4060; SSE4:       # %bb.0: # %entry
4061; SSE4-NEXT:    pminsd %xmm4, %xmm0
4062; SSE4-NEXT:    pminsd %xmm5, %xmm1
4063; SSE4-NEXT:    pminsd %xmm6, %xmm2
4064; SSE4-NEXT:    pminsd %xmm7, %xmm3
4065; SSE4-NEXT:    retq
4066;
4067; AVX1-LABEL: test114:
4068; AVX1:       # %bb.0: # %entry
4069; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4070; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4071; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4072; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4073; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4074; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4075; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4076; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4077; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4078; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4079; AVX1-NEXT:    retq
4080;
4081; AVX2-LABEL: test114:
4082; AVX2:       # %bb.0: # %entry
4083; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4084; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4085; AVX2-NEXT:    retq
4086;
4087; AVX512-LABEL: test114:
4088; AVX512:       # %bb.0: # %entry
4089; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4090; AVX512-NEXT:    retq
4091entry:
4092  %cmp = icmp sle <16 x i32> %a, %b
4093  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4094  ret <16 x i32> %sel
4095}
4096
4097define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4098; SSE2-LABEL: test115:
4099; SSE2:       # %bb.0: # %entry
4100; SSE2-NEXT:    movdqa %xmm0, %xmm8
4101; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4102; SSE2-NEXT:    pand %xmm8, %xmm0
4103; SSE2-NEXT:    pandn %xmm4, %xmm8
4104; SSE2-NEXT:    por %xmm0, %xmm8
4105; SSE2-NEXT:    movdqa %xmm1, %xmm4
4106; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4107; SSE2-NEXT:    pand %xmm4, %xmm1
4108; SSE2-NEXT:    pandn %xmm5, %xmm4
4109; SSE2-NEXT:    por %xmm1, %xmm4
4110; SSE2-NEXT:    movdqa %xmm2, %xmm5
4111; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
4112; SSE2-NEXT:    pand %xmm5, %xmm2
4113; SSE2-NEXT:    pandn %xmm6, %xmm5
4114; SSE2-NEXT:    por %xmm2, %xmm5
4115; SSE2-NEXT:    movdqa %xmm3, %xmm6
4116; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
4117; SSE2-NEXT:    pand %xmm6, %xmm3
4118; SSE2-NEXT:    pandn %xmm7, %xmm6
4119; SSE2-NEXT:    por %xmm3, %xmm6
4120; SSE2-NEXT:    movdqa %xmm8, %xmm0
4121; SSE2-NEXT:    movdqa %xmm4, %xmm1
4122; SSE2-NEXT:    movdqa %xmm5, %xmm2
4123; SSE2-NEXT:    movdqa %xmm6, %xmm3
4124; SSE2-NEXT:    retq
4125;
4126; SSE4-LABEL: test115:
4127; SSE4:       # %bb.0: # %entry
4128; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4129; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4130; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4131; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4132; SSE4-NEXT:    retq
4133;
4134; AVX1-LABEL: test115:
4135; AVX1:       # %bb.0: # %entry
4136; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4137; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4138; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4139; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4140; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4141; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4142; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4143; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4144; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4145; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4146; AVX1-NEXT:    retq
4147;
4148; AVX2-LABEL: test115:
4149; AVX2:       # %bb.0: # %entry
4150; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4151; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4152; AVX2-NEXT:    retq
4153;
4154; AVX512-LABEL: test115:
4155; AVX512:       # %bb.0: # %entry
4156; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4157; AVX512-NEXT:    retq
4158entry:
4159  %cmp = icmp sgt <16 x i32> %a, %b
4160  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4161  ret <16 x i32> %sel
4162}
4163
4164define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4165; SSE2-LABEL: test116:
4166; SSE2:       # %bb.0: # %entry
4167; SSE2-NEXT:    movdqa %xmm0, %xmm8
4168; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4169; SSE2-NEXT:    pand %xmm8, %xmm0
4170; SSE2-NEXT:    pandn %xmm4, %xmm8
4171; SSE2-NEXT:    por %xmm0, %xmm8
4172; SSE2-NEXT:    movdqa %xmm1, %xmm4
4173; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4174; SSE2-NEXT:    pand %xmm4, %xmm1
4175; SSE2-NEXT:    pandn %xmm5, %xmm4
4176; SSE2-NEXT:    por %xmm1, %xmm4
4177; SSE2-NEXT:    movdqa %xmm2, %xmm5
4178; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
4179; SSE2-NEXT:    pand %xmm5, %xmm2
4180; SSE2-NEXT:    pandn %xmm6, %xmm5
4181; SSE2-NEXT:    por %xmm2, %xmm5
4182; SSE2-NEXT:    movdqa %xmm3, %xmm6
4183; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
4184; SSE2-NEXT:    pand %xmm6, %xmm3
4185; SSE2-NEXT:    pandn %xmm7, %xmm6
4186; SSE2-NEXT:    por %xmm3, %xmm6
4187; SSE2-NEXT:    movdqa %xmm8, %xmm0
4188; SSE2-NEXT:    movdqa %xmm4, %xmm1
4189; SSE2-NEXT:    movdqa %xmm5, %xmm2
4190; SSE2-NEXT:    movdqa %xmm6, %xmm3
4191; SSE2-NEXT:    retq
4192;
4193; SSE4-LABEL: test116:
4194; SSE4:       # %bb.0: # %entry
4195; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4196; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4197; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4198; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4199; SSE4-NEXT:    retq
4200;
4201; AVX1-LABEL: test116:
4202; AVX1:       # %bb.0: # %entry
4203; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4204; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4205; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4206; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4207; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4208; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4209; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4210; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4211; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4212; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4213; AVX1-NEXT:    retq
4214;
4215; AVX2-LABEL: test116:
4216; AVX2:       # %bb.0: # %entry
4217; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4218; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4219; AVX2-NEXT:    retq
4220;
4221; AVX512-LABEL: test116:
4222; AVX512:       # %bb.0: # %entry
4223; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4224; AVX512-NEXT:    retq
4225entry:
4226  %cmp = icmp sge <16 x i32> %a, %b
4227  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4228  ret <16 x i32> %sel
4229}
4230
4231define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4232; SSE2-LABEL: test117:
4233; SSE2:       # %bb.0: # %entry
4234; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4235; SSE2-NEXT:    movdqa %xmm0, %xmm9
4236; SSE2-NEXT:    pxor %xmm8, %xmm9
4237; SSE2-NEXT:    movdqa %xmm4, %xmm10
4238; SSE2-NEXT:    pxor %xmm8, %xmm10
4239; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4240; SSE2-NEXT:    pand %xmm10, %xmm0
4241; SSE2-NEXT:    pandn %xmm4, %xmm10
4242; SSE2-NEXT:    por %xmm10, %xmm0
4243; SSE2-NEXT:    movdqa %xmm1, %xmm9
4244; SSE2-NEXT:    pxor %xmm8, %xmm9
4245; SSE2-NEXT:    movdqa %xmm5, %xmm4
4246; SSE2-NEXT:    pxor %xmm8, %xmm4
4247; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4248; SSE2-NEXT:    pand %xmm4, %xmm1
4249; SSE2-NEXT:    pandn %xmm5, %xmm4
4250; SSE2-NEXT:    por %xmm4, %xmm1
4251; SSE2-NEXT:    movdqa %xmm2, %xmm4
4252; SSE2-NEXT:    pxor %xmm8, %xmm4
4253; SSE2-NEXT:    movdqa %xmm6, %xmm5
4254; SSE2-NEXT:    pxor %xmm8, %xmm5
4255; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4256; SSE2-NEXT:    pand %xmm5, %xmm2
4257; SSE2-NEXT:    pandn %xmm6, %xmm5
4258; SSE2-NEXT:    por %xmm5, %xmm2
4259; SSE2-NEXT:    movdqa %xmm3, %xmm4
4260; SSE2-NEXT:    pxor %xmm8, %xmm4
4261; SSE2-NEXT:    pxor %xmm7, %xmm8
4262; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4263; SSE2-NEXT:    pand %xmm8, %xmm3
4264; SSE2-NEXT:    pandn %xmm7, %xmm8
4265; SSE2-NEXT:    por %xmm8, %xmm3
4266; SSE2-NEXT:    retq
4267;
4268; SSE4-LABEL: test117:
4269; SSE4:       # %bb.0: # %entry
4270; SSE4-NEXT:    pminud %xmm4, %xmm0
4271; SSE4-NEXT:    pminud %xmm5, %xmm1
4272; SSE4-NEXT:    pminud %xmm6, %xmm2
4273; SSE4-NEXT:    pminud %xmm7, %xmm3
4274; SSE4-NEXT:    retq
4275;
4276; AVX1-LABEL: test117:
4277; AVX1:       # %bb.0: # %entry
4278; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4279; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4280; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4281; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4282; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4283; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4284; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4285; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4286; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4287; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4288; AVX1-NEXT:    retq
4289;
4290; AVX2-LABEL: test117:
4291; AVX2:       # %bb.0: # %entry
4292; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4293; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4294; AVX2-NEXT:    retq
4295;
4296; AVX512-LABEL: test117:
4297; AVX512:       # %bb.0: # %entry
4298; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4299; AVX512-NEXT:    retq
4300entry:
4301  %cmp = icmp ult <16 x i32> %a, %b
4302  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4303  ret <16 x i32> %sel
4304}
4305
4306define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4307; SSE2-LABEL: test118:
4308; SSE2:       # %bb.0: # %entry
4309; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4310; SSE2-NEXT:    movdqa %xmm0, %xmm9
4311; SSE2-NEXT:    pxor %xmm8, %xmm9
4312; SSE2-NEXT:    movdqa %xmm4, %xmm10
4313; SSE2-NEXT:    pxor %xmm8, %xmm10
4314; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4315; SSE2-NEXT:    pand %xmm10, %xmm0
4316; SSE2-NEXT:    pandn %xmm4, %xmm10
4317; SSE2-NEXT:    por %xmm10, %xmm0
4318; SSE2-NEXT:    movdqa %xmm1, %xmm9
4319; SSE2-NEXT:    pxor %xmm8, %xmm9
4320; SSE2-NEXT:    movdqa %xmm5, %xmm4
4321; SSE2-NEXT:    pxor %xmm8, %xmm4
4322; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4323; SSE2-NEXT:    pand %xmm4, %xmm1
4324; SSE2-NEXT:    pandn %xmm5, %xmm4
4325; SSE2-NEXT:    por %xmm4, %xmm1
4326; SSE2-NEXT:    movdqa %xmm2, %xmm4
4327; SSE2-NEXT:    pxor %xmm8, %xmm4
4328; SSE2-NEXT:    movdqa %xmm6, %xmm5
4329; SSE2-NEXT:    pxor %xmm8, %xmm5
4330; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4331; SSE2-NEXT:    pand %xmm5, %xmm2
4332; SSE2-NEXT:    pandn %xmm6, %xmm5
4333; SSE2-NEXT:    por %xmm5, %xmm2
4334; SSE2-NEXT:    movdqa %xmm3, %xmm4
4335; SSE2-NEXT:    pxor %xmm8, %xmm4
4336; SSE2-NEXT:    pxor %xmm7, %xmm8
4337; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4338; SSE2-NEXT:    pand %xmm8, %xmm3
4339; SSE2-NEXT:    pandn %xmm7, %xmm8
4340; SSE2-NEXT:    por %xmm8, %xmm3
4341; SSE2-NEXT:    retq
4342;
4343; SSE4-LABEL: test118:
4344; SSE4:       # %bb.0: # %entry
4345; SSE4-NEXT:    pminud %xmm4, %xmm0
4346; SSE4-NEXT:    pminud %xmm5, %xmm1
4347; SSE4-NEXT:    pminud %xmm6, %xmm2
4348; SSE4-NEXT:    pminud %xmm7, %xmm3
4349; SSE4-NEXT:    retq
4350;
4351; AVX1-LABEL: test118:
4352; AVX1:       # %bb.0: # %entry
4353; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4354; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4355; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4356; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4357; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4358; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4359; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4360; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4361; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4362; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4363; AVX1-NEXT:    retq
4364;
4365; AVX2-LABEL: test118:
4366; AVX2:       # %bb.0: # %entry
4367; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4368; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4369; AVX2-NEXT:    retq
4370;
4371; AVX512-LABEL: test118:
4372; AVX512:       # %bb.0: # %entry
4373; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4374; AVX512-NEXT:    retq
4375entry:
4376  %cmp = icmp ule <16 x i32> %a, %b
4377  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4378  ret <16 x i32> %sel
4379}
4380
4381define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4382; SSE2-LABEL: test119:
4383; SSE2:       # %bb.0: # %entry
4384; SSE2-NEXT:    movdqa %xmm1, %xmm8
4385; SSE2-NEXT:    movdqa %xmm0, %xmm10
4386; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
4387; SSE2-NEXT:    movdqa %xmm4, %xmm1
4388; SSE2-NEXT:    pxor %xmm9, %xmm1
4389; SSE2-NEXT:    pxor %xmm9, %xmm0
4390; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
4391; SSE2-NEXT:    pand %xmm0, %xmm10
4392; SSE2-NEXT:    pandn %xmm4, %xmm0
4393; SSE2-NEXT:    por %xmm10, %xmm0
4394; SSE2-NEXT:    movdqa %xmm5, %xmm4
4395; SSE2-NEXT:    pxor %xmm9, %xmm4
4396; SSE2-NEXT:    movdqa %xmm8, %xmm1
4397; SSE2-NEXT:    pxor %xmm9, %xmm1
4398; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
4399; SSE2-NEXT:    pand %xmm1, %xmm8
4400; SSE2-NEXT:    pandn %xmm5, %xmm1
4401; SSE2-NEXT:    por %xmm8, %xmm1
4402; SSE2-NEXT:    movdqa %xmm6, %xmm5
4403; SSE2-NEXT:    pxor %xmm9, %xmm5
4404; SSE2-NEXT:    movdqa %xmm2, %xmm4
4405; SSE2-NEXT:    pxor %xmm9, %xmm4
4406; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4407; SSE2-NEXT:    pand %xmm4, %xmm2
4408; SSE2-NEXT:    pandn %xmm6, %xmm4
4409; SSE2-NEXT:    por %xmm2, %xmm4
4410; SSE2-NEXT:    movdqa %xmm7, %xmm2
4411; SSE2-NEXT:    pxor %xmm9, %xmm2
4412; SSE2-NEXT:    pxor %xmm3, %xmm9
4413; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
4414; SSE2-NEXT:    pand %xmm9, %xmm3
4415; SSE2-NEXT:    pandn %xmm7, %xmm9
4416; SSE2-NEXT:    por %xmm9, %xmm3
4417; SSE2-NEXT:    movdqa %xmm4, %xmm2
4418; SSE2-NEXT:    retq
4419;
4420; SSE4-LABEL: test119:
4421; SSE4:       # %bb.0: # %entry
4422; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4423; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4424; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4425; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4426; SSE4-NEXT:    retq
4427;
4428; AVX1-LABEL: test119:
4429; AVX1:       # %bb.0: # %entry
4430; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4431; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4432; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4433; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4434; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4435; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4436; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4437; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4438; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4439; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4440; AVX1-NEXT:    retq
4441;
4442; AVX2-LABEL: test119:
4443; AVX2:       # %bb.0: # %entry
4444; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4445; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4446; AVX2-NEXT:    retq
4447;
4448; AVX512-LABEL: test119:
4449; AVX512:       # %bb.0: # %entry
4450; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4451; AVX512-NEXT:    retq
4452entry:
4453  %cmp = icmp ugt <16 x i32> %a, %b
4454  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4455  ret <16 x i32> %sel
4456}
4457
4458define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4459; SSE2-LABEL: test120:
4460; SSE2:       # %bb.0: # %entry
4461; SSE2-NEXT:    movdqa %xmm1, %xmm8
4462; SSE2-NEXT:    movdqa %xmm0, %xmm10
4463; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
4464; SSE2-NEXT:    movdqa %xmm4, %xmm1
4465; SSE2-NEXT:    pxor %xmm9, %xmm1
4466; SSE2-NEXT:    pxor %xmm9, %xmm0
4467; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
4468; SSE2-NEXT:    pand %xmm0, %xmm10
4469; SSE2-NEXT:    pandn %xmm4, %xmm0
4470; SSE2-NEXT:    por %xmm10, %xmm0
4471; SSE2-NEXT:    movdqa %xmm5, %xmm4
4472; SSE2-NEXT:    pxor %xmm9, %xmm4
4473; SSE2-NEXT:    movdqa %xmm8, %xmm1
4474; SSE2-NEXT:    pxor %xmm9, %xmm1
4475; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
4476; SSE2-NEXT:    pand %xmm1, %xmm8
4477; SSE2-NEXT:    pandn %xmm5, %xmm1
4478; SSE2-NEXT:    por %xmm8, %xmm1
4479; SSE2-NEXT:    movdqa %xmm6, %xmm5
4480; SSE2-NEXT:    pxor %xmm9, %xmm5
4481; SSE2-NEXT:    movdqa %xmm2, %xmm4
4482; SSE2-NEXT:    pxor %xmm9, %xmm4
4483; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4484; SSE2-NEXT:    pand %xmm4, %xmm2
4485; SSE2-NEXT:    pandn %xmm6, %xmm4
4486; SSE2-NEXT:    por %xmm2, %xmm4
4487; SSE2-NEXT:    movdqa %xmm7, %xmm2
4488; SSE2-NEXT:    pxor %xmm9, %xmm2
4489; SSE2-NEXT:    pxor %xmm3, %xmm9
4490; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
4491; SSE2-NEXT:    pand %xmm9, %xmm3
4492; SSE2-NEXT:    pandn %xmm7, %xmm9
4493; SSE2-NEXT:    por %xmm9, %xmm3
4494; SSE2-NEXT:    movdqa %xmm4, %xmm2
4495; SSE2-NEXT:    retq
4496;
4497; SSE4-LABEL: test120:
4498; SSE4:       # %bb.0: # %entry
4499; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4500; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4501; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4502; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4503; SSE4-NEXT:    retq
4504;
4505; AVX1-LABEL: test120:
4506; AVX1:       # %bb.0: # %entry
4507; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4508; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4509; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4510; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4511; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4512; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4513; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4514; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4515; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4516; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4517; AVX1-NEXT:    retq
4518;
4519; AVX2-LABEL: test120:
4520; AVX2:       # %bb.0: # %entry
4521; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4522; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4523; AVX2-NEXT:    retq
4524;
4525; AVX512-LABEL: test120:
4526; AVX512:       # %bb.0: # %entry
4527; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4528; AVX512-NEXT:    retq
4529entry:
4530  %cmp = icmp uge <16 x i32> %a, %b
4531  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4532  ret <16 x i32> %sel
4533}
4534
4535define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4536; SSE2-LABEL: test121:
4537; SSE2:       # %bb.0: # %entry
4538; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4539; SSE2-NEXT:    movdqa %xmm0, %xmm9
4540; SSE2-NEXT:    pxor %xmm8, %xmm9
4541; SSE2-NEXT:    movdqa %xmm4, %xmm10
4542; SSE2-NEXT:    pxor %xmm8, %xmm10
4543; SSE2-NEXT:    movdqa %xmm10, %xmm11
4544; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4545; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4546; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4547; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4548; SSE2-NEXT:    pand %xmm12, %xmm9
4549; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4550; SSE2-NEXT:    por %xmm9, %xmm10
4551; SSE2-NEXT:    pand %xmm10, %xmm0
4552; SSE2-NEXT:    pandn %xmm4, %xmm10
4553; SSE2-NEXT:    por %xmm10, %xmm0
4554; SSE2-NEXT:    movdqa %xmm1, %xmm9
4555; SSE2-NEXT:    pxor %xmm8, %xmm9
4556; SSE2-NEXT:    movdqa %xmm5, %xmm4
4557; SSE2-NEXT:    pxor %xmm8, %xmm4
4558; SSE2-NEXT:    movdqa %xmm4, %xmm10
4559; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4560; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4561; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4562; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4563; SSE2-NEXT:    pand %xmm11, %xmm9
4564; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4565; SSE2-NEXT:    por %xmm9, %xmm4
4566; SSE2-NEXT:    pand %xmm4, %xmm1
4567; SSE2-NEXT:    pandn %xmm5, %xmm4
4568; SSE2-NEXT:    por %xmm4, %xmm1
4569; SSE2-NEXT:    movdqa %xmm2, %xmm4
4570; SSE2-NEXT:    pxor %xmm8, %xmm4
4571; SSE2-NEXT:    movdqa %xmm6, %xmm5
4572; SSE2-NEXT:    pxor %xmm8, %xmm5
4573; SSE2-NEXT:    movdqa %xmm5, %xmm9
4574; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4575; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4576; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4577; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4578; SSE2-NEXT:    pand %xmm10, %xmm4
4579; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4580; SSE2-NEXT:    por %xmm4, %xmm5
4581; SSE2-NEXT:    pand %xmm5, %xmm2
4582; SSE2-NEXT:    pandn %xmm6, %xmm5
4583; SSE2-NEXT:    por %xmm5, %xmm2
4584; SSE2-NEXT:    movdqa %xmm3, %xmm4
4585; SSE2-NEXT:    pxor %xmm8, %xmm4
4586; SSE2-NEXT:    pxor %xmm7, %xmm8
4587; SSE2-NEXT:    movdqa %xmm8, %xmm5
4588; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4589; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4590; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4591; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4592; SSE2-NEXT:    pand %xmm6, %xmm4
4593; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4594; SSE2-NEXT:    por %xmm4, %xmm5
4595; SSE2-NEXT:    pand %xmm5, %xmm3
4596; SSE2-NEXT:    pandn %xmm7, %xmm5
4597; SSE2-NEXT:    por %xmm5, %xmm3
4598; SSE2-NEXT:    retq
4599;
4600; SSE4-LABEL: test121:
4601; SSE4:       # %bb.0: # %entry
4602; SSE4-NEXT:    movdqa %xmm7, %xmm8
4603; SSE4-NEXT:    movdqa %xmm0, %xmm7
4604; SSE4-NEXT:    movdqa %xmm4, %xmm0
4605; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4606; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4607; SSE4-NEXT:    movdqa %xmm5, %xmm0
4608; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4609; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4610; SSE4-NEXT:    movdqa %xmm6, %xmm0
4611; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4612; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4613; SSE4-NEXT:    movdqa %xmm8, %xmm0
4614; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4615; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4616; SSE4-NEXT:    movapd %xmm4, %xmm0
4617; SSE4-NEXT:    movapd %xmm5, %xmm1
4618; SSE4-NEXT:    movapd %xmm6, %xmm2
4619; SSE4-NEXT:    movapd %xmm8, %xmm3
4620; SSE4-NEXT:    retq
4621;
4622; AVX1-LABEL: test121:
4623; AVX1:       # %bb.0: # %entry
4624; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4625; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4626; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4627; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4628; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4629; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4630; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4631; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4632; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4633; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4634; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4635; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4636; AVX1-NEXT:    retq
4637;
4638; AVX2-LABEL: test121:
4639; AVX2:       # %bb.0: # %entry
4640; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4641; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4642; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4643; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4644; AVX2-NEXT:    retq
4645;
4646; AVX512-LABEL: test121:
4647; AVX512:       # %bb.0: # %entry
4648; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4649; AVX512-NEXT:    retq
4650entry:
4651  %cmp = icmp slt <8 x i64> %a, %b
4652  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4653  ret <8 x i64> %sel
4654}
4655
4656define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4657; SSE2-LABEL: test122:
4658; SSE2:       # %bb.0: # %entry
4659; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4660; SSE2-NEXT:    movdqa %xmm0, %xmm9
4661; SSE2-NEXT:    pxor %xmm8, %xmm9
4662; SSE2-NEXT:    movdqa %xmm4, %xmm10
4663; SSE2-NEXT:    pxor %xmm8, %xmm10
4664; SSE2-NEXT:    movdqa %xmm10, %xmm11
4665; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4666; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4667; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4668; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4669; SSE2-NEXT:    pand %xmm12, %xmm9
4670; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4671; SSE2-NEXT:    por %xmm9, %xmm10
4672; SSE2-NEXT:    pand %xmm10, %xmm0
4673; SSE2-NEXT:    pandn %xmm4, %xmm10
4674; SSE2-NEXT:    por %xmm10, %xmm0
4675; SSE2-NEXT:    movdqa %xmm1, %xmm9
4676; SSE2-NEXT:    pxor %xmm8, %xmm9
4677; SSE2-NEXT:    movdqa %xmm5, %xmm4
4678; SSE2-NEXT:    pxor %xmm8, %xmm4
4679; SSE2-NEXT:    movdqa %xmm4, %xmm10
4680; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4681; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4682; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4683; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4684; SSE2-NEXT:    pand %xmm11, %xmm9
4685; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4686; SSE2-NEXT:    por %xmm9, %xmm4
4687; SSE2-NEXT:    pand %xmm4, %xmm1
4688; SSE2-NEXT:    pandn %xmm5, %xmm4
4689; SSE2-NEXT:    por %xmm4, %xmm1
4690; SSE2-NEXT:    movdqa %xmm2, %xmm4
4691; SSE2-NEXT:    pxor %xmm8, %xmm4
4692; SSE2-NEXT:    movdqa %xmm6, %xmm5
4693; SSE2-NEXT:    pxor %xmm8, %xmm5
4694; SSE2-NEXT:    movdqa %xmm5, %xmm9
4695; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4696; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4697; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4698; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4699; SSE2-NEXT:    pand %xmm10, %xmm4
4700; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4701; SSE2-NEXT:    por %xmm4, %xmm5
4702; SSE2-NEXT:    pand %xmm5, %xmm2
4703; SSE2-NEXT:    pandn %xmm6, %xmm5
4704; SSE2-NEXT:    por %xmm5, %xmm2
4705; SSE2-NEXT:    movdqa %xmm3, %xmm4
4706; SSE2-NEXT:    pxor %xmm8, %xmm4
4707; SSE2-NEXT:    pxor %xmm7, %xmm8
4708; SSE2-NEXT:    movdqa %xmm8, %xmm5
4709; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4710; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4711; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4712; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4713; SSE2-NEXT:    pand %xmm6, %xmm4
4714; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4715; SSE2-NEXT:    por %xmm4, %xmm5
4716; SSE2-NEXT:    pand %xmm5, %xmm3
4717; SSE2-NEXT:    pandn %xmm7, %xmm5
4718; SSE2-NEXT:    por %xmm5, %xmm3
4719; SSE2-NEXT:    retq
4720;
4721; SSE4-LABEL: test122:
4722; SSE4:       # %bb.0: # %entry
4723; SSE4-NEXT:    movdqa %xmm7, %xmm8
4724; SSE4-NEXT:    movdqa %xmm0, %xmm7
4725; SSE4-NEXT:    movdqa %xmm4, %xmm0
4726; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4727; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4728; SSE4-NEXT:    movdqa %xmm5, %xmm0
4729; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4730; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4731; SSE4-NEXT:    movdqa %xmm6, %xmm0
4732; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4733; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4734; SSE4-NEXT:    movdqa %xmm8, %xmm0
4735; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4736; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4737; SSE4-NEXT:    movapd %xmm4, %xmm0
4738; SSE4-NEXT:    movapd %xmm5, %xmm1
4739; SSE4-NEXT:    movapd %xmm6, %xmm2
4740; SSE4-NEXT:    movapd %xmm8, %xmm3
4741; SSE4-NEXT:    retq
4742;
4743; AVX1-LABEL: test122:
4744; AVX1:       # %bb.0: # %entry
4745; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4746; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4747; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4748; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4749; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4750; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4751; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4752; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4753; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4754; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4755; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4756; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4757; AVX1-NEXT:    retq
4758;
4759; AVX2-LABEL: test122:
4760; AVX2:       # %bb.0: # %entry
4761; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4762; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4763; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4764; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4765; AVX2-NEXT:    retq
4766;
4767; AVX512-LABEL: test122:
4768; AVX512:       # %bb.0: # %entry
4769; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4770; AVX512-NEXT:    retq
4771entry:
4772  %cmp = icmp sle <8 x i64> %a, %b
4773  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4774  ret <8 x i64> %sel
4775}
4776
4777define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
4778; SSE2-LABEL: test123:
4779; SSE2:       # %bb.0: # %entry
4780; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4781; SSE2-NEXT:    movdqa %xmm4, %xmm9
4782; SSE2-NEXT:    pxor %xmm8, %xmm9
4783; SSE2-NEXT:    movdqa %xmm0, %xmm10
4784; SSE2-NEXT:    pxor %xmm8, %xmm10
4785; SSE2-NEXT:    movdqa %xmm10, %xmm11
4786; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4787; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4788; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4789; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4790; SSE2-NEXT:    pand %xmm12, %xmm9
4791; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4792; SSE2-NEXT:    por %xmm9, %xmm10
4793; SSE2-NEXT:    pand %xmm10, %xmm0
4794; SSE2-NEXT:    pandn %xmm4, %xmm10
4795; SSE2-NEXT:    por %xmm10, %xmm0
4796; SSE2-NEXT:    movdqa %xmm5, %xmm9
4797; SSE2-NEXT:    pxor %xmm8, %xmm9
4798; SSE2-NEXT:    movdqa %xmm1, %xmm4
4799; SSE2-NEXT:    pxor %xmm8, %xmm4
4800; SSE2-NEXT:    movdqa %xmm4, %xmm10
4801; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4802; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4803; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4804; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4805; SSE2-NEXT:    pand %xmm11, %xmm9
4806; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4807; SSE2-NEXT:    por %xmm9, %xmm4
4808; SSE2-NEXT:    pand %xmm4, %xmm1
4809; SSE2-NEXT:    pandn %xmm5, %xmm4
4810; SSE2-NEXT:    por %xmm4, %xmm1
4811; SSE2-NEXT:    movdqa %xmm6, %xmm4
4812; SSE2-NEXT:    pxor %xmm8, %xmm4
4813; SSE2-NEXT:    movdqa %xmm2, %xmm5
4814; SSE2-NEXT:    pxor %xmm8, %xmm5
4815; SSE2-NEXT:    movdqa %xmm5, %xmm9
4816; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4817; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4818; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4819; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4820; SSE2-NEXT:    pand %xmm10, %xmm4
4821; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4822; SSE2-NEXT:    por %xmm4, %xmm5
4823; SSE2-NEXT:    pand %xmm5, %xmm2
4824; SSE2-NEXT:    pandn %xmm6, %xmm5
4825; SSE2-NEXT:    por %xmm5, %xmm2
4826; SSE2-NEXT:    movdqa %xmm7, %xmm4
4827; SSE2-NEXT:    pxor %xmm8, %xmm4
4828; SSE2-NEXT:    pxor %xmm3, %xmm8
4829; SSE2-NEXT:    movdqa %xmm8, %xmm5
4830; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4831; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4832; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4833; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4834; SSE2-NEXT:    pand %xmm6, %xmm4
4835; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4836; SSE2-NEXT:    por %xmm4, %xmm5
4837; SSE2-NEXT:    pand %xmm5, %xmm3
4838; SSE2-NEXT:    pandn %xmm7, %xmm5
4839; SSE2-NEXT:    por %xmm5, %xmm3
4840; SSE2-NEXT:    retq
4841;
4842; SSE4-LABEL: test123:
4843; SSE4:       # %bb.0: # %entry
4844; SSE4-NEXT:    movdqa %xmm7, %xmm8
4845; SSE4-NEXT:    movdqa %xmm0, %xmm7
4846; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4847; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4848; SSE4-NEXT:    movdqa %xmm1, %xmm0
4849; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4850; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4851; SSE4-NEXT:    movdqa %xmm2, %xmm0
4852; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4853; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4854; SSE4-NEXT:    movdqa %xmm3, %xmm0
4855; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4856; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4857; SSE4-NEXT:    movapd %xmm4, %xmm0
4858; SSE4-NEXT:    movapd %xmm5, %xmm1
4859; SSE4-NEXT:    movapd %xmm6, %xmm2
4860; SSE4-NEXT:    movapd %xmm8, %xmm3
4861; SSE4-NEXT:    retq
4862;
4863; AVX1-LABEL: test123:
4864; AVX1:       # %bb.0: # %entry
4865; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4866; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4867; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4868; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4869; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4870; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4871; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4872; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4873; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4874; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4875; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4876; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4877; AVX1-NEXT:    retq
4878;
4879; AVX2-LABEL: test123:
4880; AVX2:       # %bb.0: # %entry
4881; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4882; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4883; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4884; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4885; AVX2-NEXT:    retq
4886;
4887; AVX512-LABEL: test123:
4888; AVX512:       # %bb.0: # %entry
4889; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4890; AVX512-NEXT:    retq
4891entry:
4892  %cmp = icmp sgt <8 x i64> %a, %b
4893  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4894  ret <8 x i64> %sel
4895}
4896
4897define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
4898; SSE2-LABEL: test124:
4899; SSE2:       # %bb.0: # %entry
4900; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4901; SSE2-NEXT:    movdqa %xmm4, %xmm9
4902; SSE2-NEXT:    pxor %xmm8, %xmm9
4903; SSE2-NEXT:    movdqa %xmm0, %xmm10
4904; SSE2-NEXT:    pxor %xmm8, %xmm10
4905; SSE2-NEXT:    movdqa %xmm10, %xmm11
4906; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4907; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4908; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4909; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4910; SSE2-NEXT:    pand %xmm12, %xmm9
4911; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4912; SSE2-NEXT:    por %xmm9, %xmm10
4913; SSE2-NEXT:    pand %xmm10, %xmm0
4914; SSE2-NEXT:    pandn %xmm4, %xmm10
4915; SSE2-NEXT:    por %xmm10, %xmm0
4916; SSE2-NEXT:    movdqa %xmm5, %xmm9
4917; SSE2-NEXT:    pxor %xmm8, %xmm9
4918; SSE2-NEXT:    movdqa %xmm1, %xmm4
4919; SSE2-NEXT:    pxor %xmm8, %xmm4
4920; SSE2-NEXT:    movdqa %xmm4, %xmm10
4921; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4922; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4923; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4924; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4925; SSE2-NEXT:    pand %xmm11, %xmm9
4926; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4927; SSE2-NEXT:    por %xmm9, %xmm4
4928; SSE2-NEXT:    pand %xmm4, %xmm1
4929; SSE2-NEXT:    pandn %xmm5, %xmm4
4930; SSE2-NEXT:    por %xmm4, %xmm1
4931; SSE2-NEXT:    movdqa %xmm6, %xmm4
4932; SSE2-NEXT:    pxor %xmm8, %xmm4
4933; SSE2-NEXT:    movdqa %xmm2, %xmm5
4934; SSE2-NEXT:    pxor %xmm8, %xmm5
4935; SSE2-NEXT:    movdqa %xmm5, %xmm9
4936; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4937; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4938; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4939; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4940; SSE2-NEXT:    pand %xmm10, %xmm4
4941; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4942; SSE2-NEXT:    por %xmm4, %xmm5
4943; SSE2-NEXT:    pand %xmm5, %xmm2
4944; SSE2-NEXT:    pandn %xmm6, %xmm5
4945; SSE2-NEXT:    por %xmm5, %xmm2
4946; SSE2-NEXT:    movdqa %xmm7, %xmm4
4947; SSE2-NEXT:    pxor %xmm8, %xmm4
4948; SSE2-NEXT:    pxor %xmm3, %xmm8
4949; SSE2-NEXT:    movdqa %xmm8, %xmm5
4950; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4951; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4952; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4953; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4954; SSE2-NEXT:    pand %xmm6, %xmm4
4955; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4956; SSE2-NEXT:    por %xmm4, %xmm5
4957; SSE2-NEXT:    pand %xmm5, %xmm3
4958; SSE2-NEXT:    pandn %xmm7, %xmm5
4959; SSE2-NEXT:    por %xmm5, %xmm3
4960; SSE2-NEXT:    retq
4961;
4962; SSE4-LABEL: test124:
4963; SSE4:       # %bb.0: # %entry
4964; SSE4-NEXT:    movdqa %xmm7, %xmm8
4965; SSE4-NEXT:    movdqa %xmm0, %xmm7
4966; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4967; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4968; SSE4-NEXT:    movdqa %xmm1, %xmm0
4969; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4970; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4971; SSE4-NEXT:    movdqa %xmm2, %xmm0
4972; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4973; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4974; SSE4-NEXT:    movdqa %xmm3, %xmm0
4975; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4976; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4977; SSE4-NEXT:    movapd %xmm4, %xmm0
4978; SSE4-NEXT:    movapd %xmm5, %xmm1
4979; SSE4-NEXT:    movapd %xmm6, %xmm2
4980; SSE4-NEXT:    movapd %xmm8, %xmm3
4981; SSE4-NEXT:    retq
4982;
4983; AVX1-LABEL: test124:
4984; AVX1:       # %bb.0: # %entry
4985; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4986; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4987; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4988; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4989; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4990; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4991; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4992; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4993; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4994; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4995; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4996; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4997; AVX1-NEXT:    retq
4998;
4999; AVX2-LABEL: test124:
5000; AVX2:       # %bb.0: # %entry
5001; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
5002; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5003; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
5004; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5005; AVX2-NEXT:    retq
5006;
5007; AVX512-LABEL: test124:
5008; AVX512:       # %bb.0: # %entry
5009; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
5010; AVX512-NEXT:    retq
5011entry:
5012  %cmp = icmp sge <8 x i64> %a, %b
5013  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5014  ret <8 x i64> %sel
5015}
5016
5017define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
5018; SSE2-LABEL: test125:
5019; SSE2:       # %bb.0: # %entry
5020; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5021; SSE2-NEXT:    movdqa %xmm0, %xmm9
5022; SSE2-NEXT:    pxor %xmm8, %xmm9
5023; SSE2-NEXT:    movdqa %xmm4, %xmm10
5024; SSE2-NEXT:    pxor %xmm8, %xmm10
5025; SSE2-NEXT:    movdqa %xmm10, %xmm11
5026; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5027; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5028; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5029; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5030; SSE2-NEXT:    pand %xmm12, %xmm9
5031; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5032; SSE2-NEXT:    por %xmm9, %xmm10
5033; SSE2-NEXT:    pand %xmm10, %xmm0
5034; SSE2-NEXT:    pandn %xmm4, %xmm10
5035; SSE2-NEXT:    por %xmm10, %xmm0
5036; SSE2-NEXT:    movdqa %xmm1, %xmm9
5037; SSE2-NEXT:    pxor %xmm8, %xmm9
5038; SSE2-NEXT:    movdqa %xmm5, %xmm4
5039; SSE2-NEXT:    pxor %xmm8, %xmm4
5040; SSE2-NEXT:    movdqa %xmm4, %xmm10
5041; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5042; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5043; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5044; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5045; SSE2-NEXT:    pand %xmm11, %xmm9
5046; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5047; SSE2-NEXT:    por %xmm9, %xmm4
5048; SSE2-NEXT:    pand %xmm4, %xmm1
5049; SSE2-NEXT:    pandn %xmm5, %xmm4
5050; SSE2-NEXT:    por %xmm4, %xmm1
5051; SSE2-NEXT:    movdqa %xmm2, %xmm4
5052; SSE2-NEXT:    pxor %xmm8, %xmm4
5053; SSE2-NEXT:    movdqa %xmm6, %xmm5
5054; SSE2-NEXT:    pxor %xmm8, %xmm5
5055; SSE2-NEXT:    movdqa %xmm5, %xmm9
5056; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5057; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5058; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5059; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5060; SSE2-NEXT:    pand %xmm10, %xmm4
5061; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5062; SSE2-NEXT:    por %xmm4, %xmm5
5063; SSE2-NEXT:    pand %xmm5, %xmm2
5064; SSE2-NEXT:    pandn %xmm6, %xmm5
5065; SSE2-NEXT:    por %xmm5, %xmm2
5066; SSE2-NEXT:    movdqa %xmm3, %xmm4
5067; SSE2-NEXT:    pxor %xmm8, %xmm4
5068; SSE2-NEXT:    pxor %xmm7, %xmm8
5069; SSE2-NEXT:    movdqa %xmm8, %xmm5
5070; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5071; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5072; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5073; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5074; SSE2-NEXT:    pand %xmm6, %xmm4
5075; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5076; SSE2-NEXT:    por %xmm4, %xmm5
5077; SSE2-NEXT:    pand %xmm5, %xmm3
5078; SSE2-NEXT:    pandn %xmm7, %xmm5
5079; SSE2-NEXT:    por %xmm5, %xmm3
5080; SSE2-NEXT:    retq
5081;
5082; SSE4-LABEL: test125:
5083; SSE4:       # %bb.0: # %entry
5084; SSE4-NEXT:    movdqa %xmm7, %xmm8
5085; SSE4-NEXT:    movdqa %xmm6, %xmm9
5086; SSE4-NEXT:    movdqa %xmm5, %xmm10
5087; SSE4-NEXT:    movdqa %xmm0, %xmm5
5088; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5089; SSE4-NEXT:    movdqa %xmm0, %xmm6
5090; SSE4-NEXT:    pxor %xmm7, %xmm6
5091; SSE4-NEXT:    movdqa %xmm4, %xmm0
5092; SSE4-NEXT:    pxor %xmm7, %xmm0
5093; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
5094; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
5095; SSE4-NEXT:    movdqa %xmm1, %xmm5
5096; SSE4-NEXT:    pxor %xmm7, %xmm5
5097; SSE4-NEXT:    movdqa %xmm10, %xmm0
5098; SSE4-NEXT:    pxor %xmm7, %xmm0
5099; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
5100; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5101; SSE4-NEXT:    movdqa %xmm2, %xmm1
5102; SSE4-NEXT:    pxor %xmm7, %xmm1
5103; SSE4-NEXT:    movdqa %xmm9, %xmm0
5104; SSE4-NEXT:    pxor %xmm7, %xmm0
5105; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5106; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5107; SSE4-NEXT:    movdqa %xmm3, %xmm0
5108; SSE4-NEXT:    pxor %xmm7, %xmm0
5109; SSE4-NEXT:    pxor %xmm8, %xmm7
5110; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5111; SSE4-NEXT:    movdqa %xmm7, %xmm0
5112; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5113; SSE4-NEXT:    movapd %xmm4, %xmm0
5114; SSE4-NEXT:    movapd %xmm10, %xmm1
5115; SSE4-NEXT:    movapd %xmm9, %xmm2
5116; SSE4-NEXT:    movapd %xmm8, %xmm3
5117; SSE4-NEXT:    retq
5118;
5119; AVX1-LABEL: test125:
5120; AVX1:       # %bb.0: # %entry
5121; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5122; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5123; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5124; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5125; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5126; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5127; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5128; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5129; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5130; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5131; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5132; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5133; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5134; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5135; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5136; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5137; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5138; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5139; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5140; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5141; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5142; AVX1-NEXT:    retq
5143;
5144; AVX2-LABEL: test125:
5145; AVX2:       # %bb.0: # %entry
5146; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5147; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5148; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5149; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5150; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5151; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5152; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5153; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5154; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5155; AVX2-NEXT:    retq
5156;
5157; AVX512-LABEL: test125:
5158; AVX512:       # %bb.0: # %entry
5159; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5160; AVX512-NEXT:    retq
5161entry:
5162  %cmp = icmp ult <8 x i64> %a, %b
5163  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5164  ret <8 x i64> %sel
5165}
5166
5167define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5168; SSE2-LABEL: test126:
5169; SSE2:       # %bb.0: # %entry
5170; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5171; SSE2-NEXT:    movdqa %xmm0, %xmm9
5172; SSE2-NEXT:    pxor %xmm8, %xmm9
5173; SSE2-NEXT:    movdqa %xmm4, %xmm10
5174; SSE2-NEXT:    pxor %xmm8, %xmm10
5175; SSE2-NEXT:    movdqa %xmm10, %xmm11
5176; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5177; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5178; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5179; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5180; SSE2-NEXT:    pand %xmm12, %xmm9
5181; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5182; SSE2-NEXT:    por %xmm9, %xmm10
5183; SSE2-NEXT:    pand %xmm10, %xmm0
5184; SSE2-NEXT:    pandn %xmm4, %xmm10
5185; SSE2-NEXT:    por %xmm10, %xmm0
5186; SSE2-NEXT:    movdqa %xmm1, %xmm9
5187; SSE2-NEXT:    pxor %xmm8, %xmm9
5188; SSE2-NEXT:    movdqa %xmm5, %xmm4
5189; SSE2-NEXT:    pxor %xmm8, %xmm4
5190; SSE2-NEXT:    movdqa %xmm4, %xmm10
5191; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5192; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5193; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5194; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5195; SSE2-NEXT:    pand %xmm11, %xmm9
5196; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5197; SSE2-NEXT:    por %xmm9, %xmm4
5198; SSE2-NEXT:    pand %xmm4, %xmm1
5199; SSE2-NEXT:    pandn %xmm5, %xmm4
5200; SSE2-NEXT:    por %xmm4, %xmm1
5201; SSE2-NEXT:    movdqa %xmm2, %xmm4
5202; SSE2-NEXT:    pxor %xmm8, %xmm4
5203; SSE2-NEXT:    movdqa %xmm6, %xmm5
5204; SSE2-NEXT:    pxor %xmm8, %xmm5
5205; SSE2-NEXT:    movdqa %xmm5, %xmm9
5206; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5207; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5208; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5209; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5210; SSE2-NEXT:    pand %xmm10, %xmm4
5211; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5212; SSE2-NEXT:    por %xmm4, %xmm5
5213; SSE2-NEXT:    pand %xmm5, %xmm2
5214; SSE2-NEXT:    pandn %xmm6, %xmm5
5215; SSE2-NEXT:    por %xmm5, %xmm2
5216; SSE2-NEXT:    movdqa %xmm3, %xmm4
5217; SSE2-NEXT:    pxor %xmm8, %xmm4
5218; SSE2-NEXT:    pxor %xmm7, %xmm8
5219; SSE2-NEXT:    movdqa %xmm8, %xmm5
5220; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5221; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5222; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5223; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5224; SSE2-NEXT:    pand %xmm6, %xmm4
5225; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5226; SSE2-NEXT:    por %xmm4, %xmm5
5227; SSE2-NEXT:    pand %xmm5, %xmm3
5228; SSE2-NEXT:    pandn %xmm7, %xmm5
5229; SSE2-NEXT:    por %xmm5, %xmm3
5230; SSE2-NEXT:    retq
5231;
5232; SSE4-LABEL: test126:
5233; SSE4:       # %bb.0: # %entry
5234; SSE4-NEXT:    movdqa %xmm7, %xmm8
5235; SSE4-NEXT:    movdqa %xmm6, %xmm9
5236; SSE4-NEXT:    movdqa %xmm5, %xmm10
5237; SSE4-NEXT:    movdqa %xmm0, %xmm5
5238; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5239; SSE4-NEXT:    movdqa %xmm0, %xmm6
5240; SSE4-NEXT:    pxor %xmm7, %xmm6
5241; SSE4-NEXT:    movdqa %xmm4, %xmm0
5242; SSE4-NEXT:    pxor %xmm7, %xmm0
5243; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
5244; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
5245; SSE4-NEXT:    movdqa %xmm1, %xmm5
5246; SSE4-NEXT:    pxor %xmm7, %xmm5
5247; SSE4-NEXT:    movdqa %xmm10, %xmm0
5248; SSE4-NEXT:    pxor %xmm7, %xmm0
5249; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
5250; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5251; SSE4-NEXT:    movdqa %xmm2, %xmm1
5252; SSE4-NEXT:    pxor %xmm7, %xmm1
5253; SSE4-NEXT:    movdqa %xmm9, %xmm0
5254; SSE4-NEXT:    pxor %xmm7, %xmm0
5255; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5256; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5257; SSE4-NEXT:    movdqa %xmm3, %xmm0
5258; SSE4-NEXT:    pxor %xmm7, %xmm0
5259; SSE4-NEXT:    pxor %xmm8, %xmm7
5260; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5261; SSE4-NEXT:    movdqa %xmm7, %xmm0
5262; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5263; SSE4-NEXT:    movapd %xmm4, %xmm0
5264; SSE4-NEXT:    movapd %xmm10, %xmm1
5265; SSE4-NEXT:    movapd %xmm9, %xmm2
5266; SSE4-NEXT:    movapd %xmm8, %xmm3
5267; SSE4-NEXT:    retq
5268;
5269; AVX1-LABEL: test126:
5270; AVX1:       # %bb.0: # %entry
5271; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5272; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5273; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5274; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5275; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5276; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5277; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5278; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5279; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5280; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5281; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5282; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5283; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5284; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5285; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5286; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5287; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5288; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5289; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5290; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5291; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5292; AVX1-NEXT:    retq
5293;
5294; AVX2-LABEL: test126:
5295; AVX2:       # %bb.0: # %entry
5296; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5297; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5298; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5299; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5300; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5301; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5302; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5303; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5304; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5305; AVX2-NEXT:    retq
5306;
5307; AVX512-LABEL: test126:
5308; AVX512:       # %bb.0: # %entry
5309; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5310; AVX512-NEXT:    retq
5311entry:
5312  %cmp = icmp ule <8 x i64> %a, %b
5313  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5314  ret <8 x i64> %sel
5315}
5316
5317define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5318; SSE2-LABEL: test127:
5319; SSE2:       # %bb.0: # %entry
5320; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5321; SSE2-NEXT:    movdqa %xmm4, %xmm9
5322; SSE2-NEXT:    pxor %xmm8, %xmm9
5323; SSE2-NEXT:    movdqa %xmm0, %xmm10
5324; SSE2-NEXT:    pxor %xmm8, %xmm10
5325; SSE2-NEXT:    movdqa %xmm10, %xmm11
5326; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5327; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5328; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5329; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5330; SSE2-NEXT:    pand %xmm12, %xmm9
5331; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5332; SSE2-NEXT:    por %xmm9, %xmm10
5333; SSE2-NEXT:    pand %xmm10, %xmm0
5334; SSE2-NEXT:    pandn %xmm4, %xmm10
5335; SSE2-NEXT:    por %xmm10, %xmm0
5336; SSE2-NEXT:    movdqa %xmm5, %xmm9
5337; SSE2-NEXT:    pxor %xmm8, %xmm9
5338; SSE2-NEXT:    movdqa %xmm1, %xmm4
5339; SSE2-NEXT:    pxor %xmm8, %xmm4
5340; SSE2-NEXT:    movdqa %xmm4, %xmm10
5341; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5342; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5343; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5344; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5345; SSE2-NEXT:    pand %xmm11, %xmm9
5346; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5347; SSE2-NEXT:    por %xmm9, %xmm4
5348; SSE2-NEXT:    pand %xmm4, %xmm1
5349; SSE2-NEXT:    pandn %xmm5, %xmm4
5350; SSE2-NEXT:    por %xmm4, %xmm1
5351; SSE2-NEXT:    movdqa %xmm6, %xmm4
5352; SSE2-NEXT:    pxor %xmm8, %xmm4
5353; SSE2-NEXT:    movdqa %xmm2, %xmm5
5354; SSE2-NEXT:    pxor %xmm8, %xmm5
5355; SSE2-NEXT:    movdqa %xmm5, %xmm9
5356; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5357; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5358; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5359; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5360; SSE2-NEXT:    pand %xmm10, %xmm4
5361; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5362; SSE2-NEXT:    por %xmm4, %xmm5
5363; SSE2-NEXT:    pand %xmm5, %xmm2
5364; SSE2-NEXT:    pandn %xmm6, %xmm5
5365; SSE2-NEXT:    por %xmm5, %xmm2
5366; SSE2-NEXT:    movdqa %xmm7, %xmm4
5367; SSE2-NEXT:    pxor %xmm8, %xmm4
5368; SSE2-NEXT:    pxor %xmm3, %xmm8
5369; SSE2-NEXT:    movdqa %xmm8, %xmm5
5370; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5371; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5372; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5373; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5374; SSE2-NEXT:    pand %xmm6, %xmm4
5375; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5376; SSE2-NEXT:    por %xmm4, %xmm5
5377; SSE2-NEXT:    pand %xmm5, %xmm3
5378; SSE2-NEXT:    pandn %xmm7, %xmm5
5379; SSE2-NEXT:    por %xmm5, %xmm3
5380; SSE2-NEXT:    retq
5381;
5382; SSE4-LABEL: test127:
5383; SSE4:       # %bb.0: # %entry
5384; SSE4-NEXT:    movdqa %xmm7, %xmm8
5385; SSE4-NEXT:    movdqa %xmm6, %xmm9
5386; SSE4-NEXT:    movdqa %xmm5, %xmm10
5387; SSE4-NEXT:    movdqa %xmm4, %xmm5
5388; SSE4-NEXT:    movdqa %xmm0, %xmm6
5389; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5390; SSE4-NEXT:    pxor %xmm7, %xmm4
5391; SSE4-NEXT:    pxor %xmm7, %xmm0
5392; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5393; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
5394; SSE4-NEXT:    movdqa %xmm10, %xmm4
5395; SSE4-NEXT:    pxor %xmm7, %xmm4
5396; SSE4-NEXT:    movdqa %xmm1, %xmm0
5397; SSE4-NEXT:    pxor %xmm7, %xmm0
5398; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5399; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5400; SSE4-NEXT:    movdqa %xmm9, %xmm1
5401; SSE4-NEXT:    pxor %xmm7, %xmm1
5402; SSE4-NEXT:    movdqa %xmm2, %xmm0
5403; SSE4-NEXT:    pxor %xmm7, %xmm0
5404; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5405; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5406; SSE4-NEXT:    movdqa %xmm8, %xmm0
5407; SSE4-NEXT:    pxor %xmm7, %xmm0
5408; SSE4-NEXT:    pxor %xmm3, %xmm7
5409; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5410; SSE4-NEXT:    movdqa %xmm7, %xmm0
5411; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5412; SSE4-NEXT:    movapd %xmm5, %xmm0
5413; SSE4-NEXT:    movapd %xmm10, %xmm1
5414; SSE4-NEXT:    movapd %xmm9, %xmm2
5415; SSE4-NEXT:    movapd %xmm8, %xmm3
5416; SSE4-NEXT:    retq
5417;
5418; AVX1-LABEL: test127:
5419; AVX1:       # %bb.0: # %entry
5420; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5421; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5422; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5423; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5424; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5425; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5426; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5427; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5428; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5429; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5430; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5431; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5432; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5433; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5434; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5435; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5436; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5437; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5438; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5439; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5440; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5441; AVX1-NEXT:    retq
5442;
5443; AVX2-LABEL: test127:
5444; AVX2:       # %bb.0: # %entry
5445; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5446; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5447; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5448; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5449; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5450; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5451; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5452; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5453; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5454; AVX2-NEXT:    retq
5455;
5456; AVX512-LABEL: test127:
5457; AVX512:       # %bb.0: # %entry
5458; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5459; AVX512-NEXT:    retq
5460entry:
5461  %cmp = icmp ugt <8 x i64> %a, %b
5462  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5463  ret <8 x i64> %sel
5464}
5465
5466define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5467; SSE2-LABEL: test128:
5468; SSE2:       # %bb.0: # %entry
5469; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5470; SSE2-NEXT:    movdqa %xmm4, %xmm9
5471; SSE2-NEXT:    pxor %xmm8, %xmm9
5472; SSE2-NEXT:    movdqa %xmm0, %xmm10
5473; SSE2-NEXT:    pxor %xmm8, %xmm10
5474; SSE2-NEXT:    movdqa %xmm10, %xmm11
5475; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5476; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5477; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5478; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5479; SSE2-NEXT:    pand %xmm12, %xmm9
5480; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5481; SSE2-NEXT:    por %xmm9, %xmm10
5482; SSE2-NEXT:    pand %xmm10, %xmm0
5483; SSE2-NEXT:    pandn %xmm4, %xmm10
5484; SSE2-NEXT:    por %xmm10, %xmm0
5485; SSE2-NEXT:    movdqa %xmm5, %xmm9
5486; SSE2-NEXT:    pxor %xmm8, %xmm9
5487; SSE2-NEXT:    movdqa %xmm1, %xmm4
5488; SSE2-NEXT:    pxor %xmm8, %xmm4
5489; SSE2-NEXT:    movdqa %xmm4, %xmm10
5490; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5491; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5492; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5493; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5494; SSE2-NEXT:    pand %xmm11, %xmm9
5495; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5496; SSE2-NEXT:    por %xmm9, %xmm4
5497; SSE2-NEXT:    pand %xmm4, %xmm1
5498; SSE2-NEXT:    pandn %xmm5, %xmm4
5499; SSE2-NEXT:    por %xmm4, %xmm1
5500; SSE2-NEXT:    movdqa %xmm6, %xmm4
5501; SSE2-NEXT:    pxor %xmm8, %xmm4
5502; SSE2-NEXT:    movdqa %xmm2, %xmm5
5503; SSE2-NEXT:    pxor %xmm8, %xmm5
5504; SSE2-NEXT:    movdqa %xmm5, %xmm9
5505; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5506; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5507; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5508; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5509; SSE2-NEXT:    pand %xmm10, %xmm4
5510; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5511; SSE2-NEXT:    por %xmm4, %xmm5
5512; SSE2-NEXT:    pand %xmm5, %xmm2
5513; SSE2-NEXT:    pandn %xmm6, %xmm5
5514; SSE2-NEXT:    por %xmm5, %xmm2
5515; SSE2-NEXT:    movdqa %xmm7, %xmm4
5516; SSE2-NEXT:    pxor %xmm8, %xmm4
5517; SSE2-NEXT:    pxor %xmm3, %xmm8
5518; SSE2-NEXT:    movdqa %xmm8, %xmm5
5519; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5520; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5521; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5522; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5523; SSE2-NEXT:    pand %xmm6, %xmm4
5524; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5525; SSE2-NEXT:    por %xmm4, %xmm5
5526; SSE2-NEXT:    pand %xmm5, %xmm3
5527; SSE2-NEXT:    pandn %xmm7, %xmm5
5528; SSE2-NEXT:    por %xmm5, %xmm3
5529; SSE2-NEXT:    retq
5530;
5531; SSE4-LABEL: test128:
5532; SSE4:       # %bb.0: # %entry
5533; SSE4-NEXT:    movdqa %xmm7, %xmm8
5534; SSE4-NEXT:    movdqa %xmm6, %xmm9
5535; SSE4-NEXT:    movdqa %xmm5, %xmm10
5536; SSE4-NEXT:    movdqa %xmm4, %xmm5
5537; SSE4-NEXT:    movdqa %xmm0, %xmm6
5538; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5539; SSE4-NEXT:    pxor %xmm7, %xmm4
5540; SSE4-NEXT:    pxor %xmm7, %xmm0
5541; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5542; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
5543; SSE4-NEXT:    movdqa %xmm10, %xmm4
5544; SSE4-NEXT:    pxor %xmm7, %xmm4
5545; SSE4-NEXT:    movdqa %xmm1, %xmm0
5546; SSE4-NEXT:    pxor %xmm7, %xmm0
5547; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5548; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5549; SSE4-NEXT:    movdqa %xmm9, %xmm1
5550; SSE4-NEXT:    pxor %xmm7, %xmm1
5551; SSE4-NEXT:    movdqa %xmm2, %xmm0
5552; SSE4-NEXT:    pxor %xmm7, %xmm0
5553; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5554; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5555; SSE4-NEXT:    movdqa %xmm8, %xmm0
5556; SSE4-NEXT:    pxor %xmm7, %xmm0
5557; SSE4-NEXT:    pxor %xmm3, %xmm7
5558; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5559; SSE4-NEXT:    movdqa %xmm7, %xmm0
5560; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5561; SSE4-NEXT:    movapd %xmm5, %xmm0
5562; SSE4-NEXT:    movapd %xmm10, %xmm1
5563; SSE4-NEXT:    movapd %xmm9, %xmm2
5564; SSE4-NEXT:    movapd %xmm8, %xmm3
5565; SSE4-NEXT:    retq
5566;
5567; AVX1-LABEL: test128:
5568; AVX1:       # %bb.0: # %entry
5569; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5570; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5571; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5572; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5573; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5574; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5575; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5576; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5577; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5578; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5579; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5580; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5581; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5582; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5583; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5584; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5585; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5586; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5587; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5588; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5589; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5590; AVX1-NEXT:    retq
5591;
5592; AVX2-LABEL: test128:
5593; AVX2:       # %bb.0: # %entry
5594; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5595; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5596; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5597; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5598; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5599; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5600; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5601; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5602; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5603; AVX2-NEXT:    retq
5604;
5605; AVX512-LABEL: test128:
5606; AVX512:       # %bb.0: # %entry
5607; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5608; AVX512-NEXT:    retq
5609entry:
5610  %cmp = icmp uge <8 x i64> %a, %b
5611  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5612  ret <8 x i64> %sel
5613}
5614
5615define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5616; SSE2-LABEL: test129:
5617; SSE2:       # %bb.0: # %entry
5618; SSE2-NEXT:    movdqa %xmm0, %xmm8
5619; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5620; SSE2-NEXT:    pand %xmm8, %xmm0
5621; SSE2-NEXT:    pandn %xmm4, %xmm8
5622; SSE2-NEXT:    por %xmm0, %xmm8
5623; SSE2-NEXT:    movdqa %xmm1, %xmm4
5624; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5625; SSE2-NEXT:    pand %xmm4, %xmm1
5626; SSE2-NEXT:    pandn %xmm5, %xmm4
5627; SSE2-NEXT:    por %xmm1, %xmm4
5628; SSE2-NEXT:    movdqa %xmm2, %xmm5
5629; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
5630; SSE2-NEXT:    pand %xmm5, %xmm2
5631; SSE2-NEXT:    pandn %xmm6, %xmm5
5632; SSE2-NEXT:    por %xmm2, %xmm5
5633; SSE2-NEXT:    movdqa %xmm3, %xmm6
5634; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
5635; SSE2-NEXT:    pand %xmm6, %xmm3
5636; SSE2-NEXT:    pandn %xmm7, %xmm6
5637; SSE2-NEXT:    por %xmm3, %xmm6
5638; SSE2-NEXT:    movdqa %xmm8, %xmm0
5639; SSE2-NEXT:    movdqa %xmm4, %xmm1
5640; SSE2-NEXT:    movdqa %xmm5, %xmm2
5641; SSE2-NEXT:    movdqa %xmm6, %xmm3
5642; SSE2-NEXT:    retq
5643;
5644; SSE4-LABEL: test129:
5645; SSE4:       # %bb.0: # %entry
5646; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5647; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5648; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5649; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5650; SSE4-NEXT:    retq
5651;
5652; AVX1-LABEL: test129:
5653; AVX1:       # %bb.0: # %entry
5654; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5655; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5656; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5657; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5658; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5659; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5660; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5661; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5662; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5663; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5664; AVX1-NEXT:    retq
5665;
5666; AVX2-LABEL: test129:
5667; AVX2:       # %bb.0: # %entry
5668; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5669; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5670; AVX2-NEXT:    retq
5671;
5672; AVX512F-LABEL: test129:
5673; AVX512F:       # %bb.0: # %entry
5674; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5675; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5676; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
5677; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
5678; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5679; AVX512F-NEXT:    retq
5680;
5681; AVX512BW-LABEL: test129:
5682; AVX512BW:       # %bb.0: # %entry
5683; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5684; AVX512BW-NEXT:    retq
5685entry:
5686  %cmp = icmp slt <64 x i8> %a, %b
5687  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5688  ret <64 x i8> %sel
5689}
5690
5691define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
5692; SSE2-LABEL: test130:
5693; SSE2:       # %bb.0: # %entry
5694; SSE2-NEXT:    movdqa %xmm0, %xmm8
5695; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5696; SSE2-NEXT:    pand %xmm8, %xmm0
5697; SSE2-NEXT:    pandn %xmm4, %xmm8
5698; SSE2-NEXT:    por %xmm0, %xmm8
5699; SSE2-NEXT:    movdqa %xmm1, %xmm4
5700; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5701; SSE2-NEXT:    pand %xmm4, %xmm1
5702; SSE2-NEXT:    pandn %xmm5, %xmm4
5703; SSE2-NEXT:    por %xmm1, %xmm4
5704; SSE2-NEXT:    movdqa %xmm2, %xmm5
5705; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
5706; SSE2-NEXT:    pand %xmm5, %xmm2
5707; SSE2-NEXT:    pandn %xmm6, %xmm5
5708; SSE2-NEXT:    por %xmm2, %xmm5
5709; SSE2-NEXT:    movdqa %xmm3, %xmm6
5710; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
5711; SSE2-NEXT:    pand %xmm6, %xmm3
5712; SSE2-NEXT:    pandn %xmm7, %xmm6
5713; SSE2-NEXT:    por %xmm3, %xmm6
5714; SSE2-NEXT:    movdqa %xmm8, %xmm0
5715; SSE2-NEXT:    movdqa %xmm4, %xmm1
5716; SSE2-NEXT:    movdqa %xmm5, %xmm2
5717; SSE2-NEXT:    movdqa %xmm6, %xmm3
5718; SSE2-NEXT:    retq
5719;
5720; SSE4-LABEL: test130:
5721; SSE4:       # %bb.0: # %entry
5722; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5723; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5724; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5725; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5726; SSE4-NEXT:    retq
5727;
5728; AVX1-LABEL: test130:
5729; AVX1:       # %bb.0: # %entry
5730; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5731; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5732; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5733; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5734; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5735; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5736; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5737; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5738; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5739; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5740; AVX1-NEXT:    retq
5741;
5742; AVX2-LABEL: test130:
5743; AVX2:       # %bb.0: # %entry
5744; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5745; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5746; AVX2-NEXT:    retq
5747;
5748; AVX512F-LABEL: test130:
5749; AVX512F:       # %bb.0: # %entry
5750; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5751; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5752; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
5753; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
5754; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5755; AVX512F-NEXT:    retq
5756;
5757; AVX512BW-LABEL: test130:
5758; AVX512BW:       # %bb.0: # %entry
5759; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5760; AVX512BW-NEXT:    retq
5761entry:
5762  %cmp = icmp sle <64 x i8> %a, %b
5763  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5764  ret <64 x i8> %sel
5765}
5766
5767define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
5768; SSE2-LABEL: test131:
5769; SSE2:       # %bb.0: # %entry
5770; SSE2-NEXT:    movdqa %xmm4, %xmm8
5771; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5772; SSE2-NEXT:    pand %xmm8, %xmm0
5773; SSE2-NEXT:    pandn %xmm4, %xmm8
5774; SSE2-NEXT:    por %xmm8, %xmm0
5775; SSE2-NEXT:    movdqa %xmm5, %xmm4
5776; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5777; SSE2-NEXT:    pand %xmm4, %xmm1
5778; SSE2-NEXT:    pandn %xmm5, %xmm4
5779; SSE2-NEXT:    por %xmm4, %xmm1
5780; SSE2-NEXT:    movdqa %xmm6, %xmm4
5781; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5782; SSE2-NEXT:    pand %xmm4, %xmm2
5783; SSE2-NEXT:    pandn %xmm6, %xmm4
5784; SSE2-NEXT:    por %xmm4, %xmm2
5785; SSE2-NEXT:    movdqa %xmm7, %xmm4
5786; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5787; SSE2-NEXT:    pand %xmm4, %xmm3
5788; SSE2-NEXT:    pandn %xmm7, %xmm4
5789; SSE2-NEXT:    por %xmm4, %xmm3
5790; SSE2-NEXT:    retq
5791;
5792; SSE4-LABEL: test131:
5793; SSE4:       # %bb.0: # %entry
5794; SSE4-NEXT:    pminsb %xmm4, %xmm0
5795; SSE4-NEXT:    pminsb %xmm5, %xmm1
5796; SSE4-NEXT:    pminsb %xmm6, %xmm2
5797; SSE4-NEXT:    pminsb %xmm7, %xmm3
5798; SSE4-NEXT:    retq
5799;
5800; AVX1-LABEL: test131:
5801; AVX1:       # %bb.0: # %entry
5802; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5803; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5804; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5805; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5806; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5807; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5808; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5809; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5810; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5811; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5812; AVX1-NEXT:    retq
5813;
5814; AVX2-LABEL: test131:
5815; AVX2:       # %bb.0: # %entry
5816; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5817; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5818; AVX2-NEXT:    retq
5819;
5820; AVX512F-LABEL: test131:
5821; AVX512F:       # %bb.0: # %entry
5822; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5823; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5824; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
5825; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
5826; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5827; AVX512F-NEXT:    retq
5828;
5829; AVX512BW-LABEL: test131:
5830; AVX512BW:       # %bb.0: # %entry
5831; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5832; AVX512BW-NEXT:    retq
5833entry:
5834  %cmp = icmp sgt <64 x i8> %a, %b
5835  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5836  ret <64 x i8> %sel
5837}
5838
5839define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
5840; SSE2-LABEL: test132:
5841; SSE2:       # %bb.0: # %entry
5842; SSE2-NEXT:    movdqa %xmm4, %xmm8
5843; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5844; SSE2-NEXT:    pand %xmm8, %xmm0
5845; SSE2-NEXT:    pandn %xmm4, %xmm8
5846; SSE2-NEXT:    por %xmm8, %xmm0
5847; SSE2-NEXT:    movdqa %xmm5, %xmm4
5848; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5849; SSE2-NEXT:    pand %xmm4, %xmm1
5850; SSE2-NEXT:    pandn %xmm5, %xmm4
5851; SSE2-NEXT:    por %xmm4, %xmm1
5852; SSE2-NEXT:    movdqa %xmm6, %xmm4
5853; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5854; SSE2-NEXT:    pand %xmm4, %xmm2
5855; SSE2-NEXT:    pandn %xmm6, %xmm4
5856; SSE2-NEXT:    por %xmm4, %xmm2
5857; SSE2-NEXT:    movdqa %xmm7, %xmm4
5858; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5859; SSE2-NEXT:    pand %xmm4, %xmm3
5860; SSE2-NEXT:    pandn %xmm7, %xmm4
5861; SSE2-NEXT:    por %xmm4, %xmm3
5862; SSE2-NEXT:    retq
5863;
5864; SSE4-LABEL: test132:
5865; SSE4:       # %bb.0: # %entry
5866; SSE4-NEXT:    pminsb %xmm4, %xmm0
5867; SSE4-NEXT:    pminsb %xmm5, %xmm1
5868; SSE4-NEXT:    pminsb %xmm6, %xmm2
5869; SSE4-NEXT:    pminsb %xmm7, %xmm3
5870; SSE4-NEXT:    retq
5871;
5872; AVX1-LABEL: test132:
5873; AVX1:       # %bb.0: # %entry
5874; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5875; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5876; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5877; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5878; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5879; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5880; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5881; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5882; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5883; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5884; AVX1-NEXT:    retq
5885;
5886; AVX2-LABEL: test132:
5887; AVX2:       # %bb.0: # %entry
5888; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5889; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5890; AVX2-NEXT:    retq
5891;
5892; AVX512F-LABEL: test132:
5893; AVX512F:       # %bb.0: # %entry
5894; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5895; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5896; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
5897; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
5898; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5899; AVX512F-NEXT:    retq
5900;
5901; AVX512BW-LABEL: test132:
5902; AVX512BW:       # %bb.0: # %entry
5903; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5904; AVX512BW-NEXT:    retq
5905entry:
5906  %cmp = icmp sge <64 x i8> %a, %b
5907  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5908  ret <64 x i8> %sel
5909}
5910
5911define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
5912; SSE-LABEL: test133:
5913; SSE:       # %bb.0: # %entry
5914; SSE-NEXT:    pmaxub %xmm4, %xmm0
5915; SSE-NEXT:    pmaxub %xmm5, %xmm1
5916; SSE-NEXT:    pmaxub %xmm6, %xmm2
5917; SSE-NEXT:    pmaxub %xmm7, %xmm3
5918; SSE-NEXT:    retq
5919;
5920; AVX1-LABEL: test133:
5921; AVX1:       # %bb.0: # %entry
5922; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5923; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5924; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5925; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5926; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5927; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5928; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5929; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5930; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5931; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5932; AVX1-NEXT:    retq
5933;
5934; AVX2-LABEL: test133:
5935; AVX2:       # %bb.0: # %entry
5936; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5937; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5938; AVX2-NEXT:    retq
5939;
5940; AVX512F-LABEL: test133:
5941; AVX512F:       # %bb.0: # %entry
5942; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5943; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5944; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
5945; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
5946; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5947; AVX512F-NEXT:    retq
5948;
5949; AVX512BW-LABEL: test133:
5950; AVX512BW:       # %bb.0: # %entry
5951; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5952; AVX512BW-NEXT:    retq
5953entry:
5954  %cmp = icmp ult <64 x i8> %a, %b
5955  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5956  ret <64 x i8> %sel
5957}
5958
5959define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
5960; SSE-LABEL: test134:
5961; SSE:       # %bb.0: # %entry
5962; SSE-NEXT:    pmaxub %xmm4, %xmm0
5963; SSE-NEXT:    pmaxub %xmm5, %xmm1
5964; SSE-NEXT:    pmaxub %xmm6, %xmm2
5965; SSE-NEXT:    pmaxub %xmm7, %xmm3
5966; SSE-NEXT:    retq
5967;
5968; AVX1-LABEL: test134:
5969; AVX1:       # %bb.0: # %entry
5970; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5971; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5972; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5973; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5974; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5975; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5976; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5977; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5978; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5979; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5980; AVX1-NEXT:    retq
5981;
5982; AVX2-LABEL: test134:
5983; AVX2:       # %bb.0: # %entry
5984; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5985; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5986; AVX2-NEXT:    retq
5987;
5988; AVX512F-LABEL: test134:
5989; AVX512F:       # %bb.0: # %entry
5990; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5991; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5992; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
5993; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
5994; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5995; AVX512F-NEXT:    retq
5996;
5997; AVX512BW-LABEL: test134:
5998; AVX512BW:       # %bb.0: # %entry
5999; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
6000; AVX512BW-NEXT:    retq
6001entry:
6002  %cmp = icmp ule <64 x i8> %a, %b
6003  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6004  ret <64 x i8> %sel
6005}
6006
6007define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
6008; SSE-LABEL: test135:
6009; SSE:       # %bb.0: # %entry
6010; SSE-NEXT:    pminub %xmm4, %xmm0
6011; SSE-NEXT:    pminub %xmm5, %xmm1
6012; SSE-NEXT:    pminub %xmm6, %xmm2
6013; SSE-NEXT:    pminub %xmm7, %xmm3
6014; SSE-NEXT:    retq
6015;
6016; AVX1-LABEL: test135:
6017; AVX1:       # %bb.0: # %entry
6018; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6019; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6020; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
6021; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
6022; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6023; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6024; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6025; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
6026; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
6027; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6028; AVX1-NEXT:    retq
6029;
6030; AVX2-LABEL: test135:
6031; AVX2:       # %bb.0: # %entry
6032; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
6033; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
6034; AVX2-NEXT:    retq
6035;
6036; AVX512F-LABEL: test135:
6037; AVX512F:       # %bb.0: # %entry
6038; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6039; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6040; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
6041; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
6042; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6043; AVX512F-NEXT:    retq
6044;
6045; AVX512BW-LABEL: test135:
6046; AVX512BW:       # %bb.0: # %entry
6047; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
6048; AVX512BW-NEXT:    retq
6049entry:
6050  %cmp = icmp ugt <64 x i8> %a, %b
6051  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6052  ret <64 x i8> %sel
6053}
6054
6055define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
6056; SSE-LABEL: test136:
6057; SSE:       # %bb.0: # %entry
6058; SSE-NEXT:    pminub %xmm4, %xmm0
6059; SSE-NEXT:    pminub %xmm5, %xmm1
6060; SSE-NEXT:    pminub %xmm6, %xmm2
6061; SSE-NEXT:    pminub %xmm7, %xmm3
6062; SSE-NEXT:    retq
6063;
6064; AVX1-LABEL: test136:
6065; AVX1:       # %bb.0: # %entry
6066; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6067; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6068; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
6069; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
6070; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6071; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6072; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6073; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
6074; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
6075; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6076; AVX1-NEXT:    retq
6077;
6078; AVX2-LABEL: test136:
6079; AVX2:       # %bb.0: # %entry
6080; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
6081; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
6082; AVX2-NEXT:    retq
6083;
6084; AVX512F-LABEL: test136:
6085; AVX512F:       # %bb.0: # %entry
6086; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6087; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6088; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
6089; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
6090; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6091; AVX512F-NEXT:    retq
6092;
6093; AVX512BW-LABEL: test136:
6094; AVX512BW:       # %bb.0: # %entry
6095; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
6096; AVX512BW-NEXT:    retq
6097entry:
6098  %cmp = icmp uge <64 x i8> %a, %b
6099  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6100  ret <64 x i8> %sel
6101}
6102
6103define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
6104; SSE-LABEL: test137:
6105; SSE:       # %bb.0: # %entry
6106; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6107; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6108; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6109; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6110; SSE-NEXT:    retq
6111;
6112; AVX1-LABEL: test137:
6113; AVX1:       # %bb.0: # %entry
6114; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6115; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6116; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6117; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6118; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6119; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6120; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6121; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6122; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6123; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6124; AVX1-NEXT:    retq
6125;
6126; AVX2-LABEL: test137:
6127; AVX2:       # %bb.0: # %entry
6128; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6129; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6130; AVX2-NEXT:    retq
6131;
6132; AVX512F-LABEL: test137:
6133; AVX512F:       # %bb.0: # %entry
6134; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6135; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6136; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
6137; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
6138; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6139; AVX512F-NEXT:    retq
6140;
6141; AVX512BW-LABEL: test137:
6142; AVX512BW:       # %bb.0: # %entry
6143; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6144; AVX512BW-NEXT:    retq
6145entry:
6146  %cmp = icmp slt <32 x i16> %a, %b
6147  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6148  ret <32 x i16> %sel
6149}
6150
6151define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
6152; SSE-LABEL: test138:
6153; SSE:       # %bb.0: # %entry
6154; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6155; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6156; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6157; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6158; SSE-NEXT:    retq
6159;
6160; AVX1-LABEL: test138:
6161; AVX1:       # %bb.0: # %entry
6162; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6163; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6164; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6165; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6166; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6167; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6168; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6169; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6170; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6171; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6172; AVX1-NEXT:    retq
6173;
6174; AVX2-LABEL: test138:
6175; AVX2:       # %bb.0: # %entry
6176; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6177; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6178; AVX2-NEXT:    retq
6179;
6180; AVX512F-LABEL: test138:
6181; AVX512F:       # %bb.0: # %entry
6182; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6183; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6184; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
6185; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
6186; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6187; AVX512F-NEXT:    retq
6188;
6189; AVX512BW-LABEL: test138:
6190; AVX512BW:       # %bb.0: # %entry
6191; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6192; AVX512BW-NEXT:    retq
6193entry:
6194  %cmp = icmp sle <32 x i16> %a, %b
6195  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6196  ret <32 x i16> %sel
6197}
6198
6199define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6200; SSE-LABEL: test139:
6201; SSE:       # %bb.0: # %entry
6202; SSE-NEXT:    pminsw %xmm4, %xmm0
6203; SSE-NEXT:    pminsw %xmm5, %xmm1
6204; SSE-NEXT:    pminsw %xmm6, %xmm2
6205; SSE-NEXT:    pminsw %xmm7, %xmm3
6206; SSE-NEXT:    retq
6207;
6208; AVX1-LABEL: test139:
6209; AVX1:       # %bb.0: # %entry
6210; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6211; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6212; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6213; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6214; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6215; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6216; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6217; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6218; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6219; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6220; AVX1-NEXT:    retq
6221;
6222; AVX2-LABEL: test139:
6223; AVX2:       # %bb.0: # %entry
6224; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6225; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6226; AVX2-NEXT:    retq
6227;
6228; AVX512F-LABEL: test139:
6229; AVX512F:       # %bb.0: # %entry
6230; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6231; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6232; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
6233; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
6234; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6235; AVX512F-NEXT:    retq
6236;
6237; AVX512BW-LABEL: test139:
6238; AVX512BW:       # %bb.0: # %entry
6239; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6240; AVX512BW-NEXT:    retq
6241entry:
6242  %cmp = icmp sgt <32 x i16> %a, %b
6243  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6244  ret <32 x i16> %sel
6245}
6246
6247define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6248; SSE-LABEL: test140:
6249; SSE:       # %bb.0: # %entry
6250; SSE-NEXT:    pminsw %xmm4, %xmm0
6251; SSE-NEXT:    pminsw %xmm5, %xmm1
6252; SSE-NEXT:    pminsw %xmm6, %xmm2
6253; SSE-NEXT:    pminsw %xmm7, %xmm3
6254; SSE-NEXT:    retq
6255;
6256; AVX1-LABEL: test140:
6257; AVX1:       # %bb.0: # %entry
6258; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6259; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6260; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6261; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6262; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6263; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6264; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6265; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6266; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6267; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6268; AVX1-NEXT:    retq
6269;
6270; AVX2-LABEL: test140:
6271; AVX2:       # %bb.0: # %entry
6272; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6273; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6274; AVX2-NEXT:    retq
6275;
6276; AVX512F-LABEL: test140:
6277; AVX512F:       # %bb.0: # %entry
6278; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6279; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6280; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
6281; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
6282; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6283; AVX512F-NEXT:    retq
6284;
6285; AVX512BW-LABEL: test140:
6286; AVX512BW:       # %bb.0: # %entry
6287; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6288; AVX512BW-NEXT:    retq
6289entry:
6290  %cmp = icmp sge <32 x i16> %a, %b
6291  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6292  ret <32 x i16> %sel
6293}
6294
6295define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6296; SSE2-LABEL: test141:
6297; SSE2:       # %bb.0: # %entry
6298; SSE2-NEXT:    psubusw %xmm0, %xmm4
6299; SSE2-NEXT:    paddw %xmm4, %xmm0
6300; SSE2-NEXT:    psubusw %xmm1, %xmm5
6301; SSE2-NEXT:    paddw %xmm5, %xmm1
6302; SSE2-NEXT:    psubusw %xmm2, %xmm6
6303; SSE2-NEXT:    paddw %xmm6, %xmm2
6304; SSE2-NEXT:    psubusw %xmm3, %xmm7
6305; SSE2-NEXT:    paddw %xmm7, %xmm3
6306; SSE2-NEXT:    retq
6307;
6308; SSE4-LABEL: test141:
6309; SSE4:       # %bb.0: # %entry
6310; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6311; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6312; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6313; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6314; SSE4-NEXT:    retq
6315;
6316; AVX1-LABEL: test141:
6317; AVX1:       # %bb.0: # %entry
6318; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6319; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6320; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6321; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6322; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6323; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6324; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6325; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6326; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6327; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6328; AVX1-NEXT:    retq
6329;
6330; AVX2-LABEL: test141:
6331; AVX2:       # %bb.0: # %entry
6332; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6333; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6334; AVX2-NEXT:    retq
6335;
6336; AVX512F-LABEL: test141:
6337; AVX512F:       # %bb.0: # %entry
6338; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6339; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6340; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
6341; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
6342; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6343; AVX512F-NEXT:    retq
6344;
6345; AVX512BW-LABEL: test141:
6346; AVX512BW:       # %bb.0: # %entry
6347; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6348; AVX512BW-NEXT:    retq
6349entry:
6350  %cmp = icmp ult <32 x i16> %a, %b
6351  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6352  ret <32 x i16> %sel
6353}
6354
6355define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6356; SSE2-LABEL: test142:
6357; SSE2:       # %bb.0: # %entry
6358; SSE2-NEXT:    psubusw %xmm0, %xmm4
6359; SSE2-NEXT:    paddw %xmm4, %xmm0
6360; SSE2-NEXT:    psubusw %xmm1, %xmm5
6361; SSE2-NEXT:    paddw %xmm5, %xmm1
6362; SSE2-NEXT:    psubusw %xmm2, %xmm6
6363; SSE2-NEXT:    paddw %xmm6, %xmm2
6364; SSE2-NEXT:    psubusw %xmm3, %xmm7
6365; SSE2-NEXT:    paddw %xmm7, %xmm3
6366; SSE2-NEXT:    retq
6367;
6368; SSE4-LABEL: test142:
6369; SSE4:       # %bb.0: # %entry
6370; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6371; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6372; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6373; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6374; SSE4-NEXT:    retq
6375;
6376; AVX1-LABEL: test142:
6377; AVX1:       # %bb.0: # %entry
6378; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6379; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6380; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6381; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6382; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6383; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6384; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6385; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6386; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6387; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6388; AVX1-NEXT:    retq
6389;
6390; AVX2-LABEL: test142:
6391; AVX2:       # %bb.0: # %entry
6392; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6393; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6394; AVX2-NEXT:    retq
6395;
6396; AVX512F-LABEL: test142:
6397; AVX512F:       # %bb.0: # %entry
6398; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6399; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6400; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
6401; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
6402; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6403; AVX512F-NEXT:    retq
6404;
6405; AVX512BW-LABEL: test142:
6406; AVX512BW:       # %bb.0: # %entry
6407; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6408; AVX512BW-NEXT:    retq
6409entry:
6410  %cmp = icmp ule <32 x i16> %a, %b
6411  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6412  ret <32 x i16> %sel
6413}
6414
6415define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6416; SSE2-LABEL: test143:
6417; SSE2:       # %bb.0: # %entry
6418; SSE2-NEXT:    movdqa %xmm0, %xmm8
6419; SSE2-NEXT:    psubusw %xmm4, %xmm8
6420; SSE2-NEXT:    psubw %xmm8, %xmm0
6421; SSE2-NEXT:    movdqa %xmm1, %xmm4
6422; SSE2-NEXT:    psubusw %xmm5, %xmm4
6423; SSE2-NEXT:    psubw %xmm4, %xmm1
6424; SSE2-NEXT:    movdqa %xmm2, %xmm4
6425; SSE2-NEXT:    psubusw %xmm6, %xmm4
6426; SSE2-NEXT:    psubw %xmm4, %xmm2
6427; SSE2-NEXT:    movdqa %xmm3, %xmm4
6428; SSE2-NEXT:    psubusw %xmm7, %xmm4
6429; SSE2-NEXT:    psubw %xmm4, %xmm3
6430; SSE2-NEXT:    retq
6431;
6432; SSE4-LABEL: test143:
6433; SSE4:       # %bb.0: # %entry
6434; SSE4-NEXT:    pminuw %xmm4, %xmm0
6435; SSE4-NEXT:    pminuw %xmm5, %xmm1
6436; SSE4-NEXT:    pminuw %xmm6, %xmm2
6437; SSE4-NEXT:    pminuw %xmm7, %xmm3
6438; SSE4-NEXT:    retq
6439;
6440; AVX1-LABEL: test143:
6441; AVX1:       # %bb.0: # %entry
6442; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6443; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6444; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6445; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6446; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6447; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6448; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6449; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6450; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6451; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6452; AVX1-NEXT:    retq
6453;
6454; AVX2-LABEL: test143:
6455; AVX2:       # %bb.0: # %entry
6456; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6457; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6458; AVX2-NEXT:    retq
6459;
6460; AVX512F-LABEL: test143:
6461; AVX512F:       # %bb.0: # %entry
6462; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6463; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6464; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
6465; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
6466; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6467; AVX512F-NEXT:    retq
6468;
6469; AVX512BW-LABEL: test143:
6470; AVX512BW:       # %bb.0: # %entry
6471; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6472; AVX512BW-NEXT:    retq
6473entry:
6474  %cmp = icmp ugt <32 x i16> %a, %b
6475  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6476  ret <32 x i16> %sel
6477}
6478
6479define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6480; SSE2-LABEL: test144:
6481; SSE2:       # %bb.0: # %entry
6482; SSE2-NEXT:    movdqa %xmm0, %xmm8
6483; SSE2-NEXT:    psubusw %xmm4, %xmm8
6484; SSE2-NEXT:    psubw %xmm8, %xmm0
6485; SSE2-NEXT:    movdqa %xmm1, %xmm4
6486; SSE2-NEXT:    psubusw %xmm5, %xmm4
6487; SSE2-NEXT:    psubw %xmm4, %xmm1
6488; SSE2-NEXT:    movdqa %xmm2, %xmm4
6489; SSE2-NEXT:    psubusw %xmm6, %xmm4
6490; SSE2-NEXT:    psubw %xmm4, %xmm2
6491; SSE2-NEXT:    movdqa %xmm3, %xmm4
6492; SSE2-NEXT:    psubusw %xmm7, %xmm4
6493; SSE2-NEXT:    psubw %xmm4, %xmm3
6494; SSE2-NEXT:    retq
6495;
6496; SSE4-LABEL: test144:
6497; SSE4:       # %bb.0: # %entry
6498; SSE4-NEXT:    pminuw %xmm4, %xmm0
6499; SSE4-NEXT:    pminuw %xmm5, %xmm1
6500; SSE4-NEXT:    pminuw %xmm6, %xmm2
6501; SSE4-NEXT:    pminuw %xmm7, %xmm3
6502; SSE4-NEXT:    retq
6503;
6504; AVX1-LABEL: test144:
6505; AVX1:       # %bb.0: # %entry
6506; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6507; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6508; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6509; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6510; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6511; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6512; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6513; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6514; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6515; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6516; AVX1-NEXT:    retq
6517;
6518; AVX2-LABEL: test144:
6519; AVX2:       # %bb.0: # %entry
6520; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6521; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6522; AVX2-NEXT:    retq
6523;
6524; AVX512F-LABEL: test144:
6525; AVX512F:       # %bb.0: # %entry
6526; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6527; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6528; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
6529; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
6530; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6531; AVX512F-NEXT:    retq
6532;
6533; AVX512BW-LABEL: test144:
6534; AVX512BW:       # %bb.0: # %entry
6535; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6536; AVX512BW-NEXT:    retq
6537entry:
6538  %cmp = icmp uge <32 x i16> %a, %b
6539  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6540  ret <32 x i16> %sel
6541}
6542
6543define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6544; SSE2-LABEL: test145:
6545; SSE2:       # %bb.0: # %entry
6546; SSE2-NEXT:    movdqa %xmm0, %xmm8
6547; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6548; SSE2-NEXT:    pand %xmm8, %xmm0
6549; SSE2-NEXT:    pandn %xmm4, %xmm8
6550; SSE2-NEXT:    por %xmm0, %xmm8
6551; SSE2-NEXT:    movdqa %xmm1, %xmm4
6552; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6553; SSE2-NEXT:    pand %xmm4, %xmm1
6554; SSE2-NEXT:    pandn %xmm5, %xmm4
6555; SSE2-NEXT:    por %xmm1, %xmm4
6556; SSE2-NEXT:    movdqa %xmm2, %xmm5
6557; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
6558; SSE2-NEXT:    pand %xmm5, %xmm2
6559; SSE2-NEXT:    pandn %xmm6, %xmm5
6560; SSE2-NEXT:    por %xmm2, %xmm5
6561; SSE2-NEXT:    movdqa %xmm3, %xmm6
6562; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
6563; SSE2-NEXT:    pand %xmm6, %xmm3
6564; SSE2-NEXT:    pandn %xmm7, %xmm6
6565; SSE2-NEXT:    por %xmm3, %xmm6
6566; SSE2-NEXT:    movdqa %xmm8, %xmm0
6567; SSE2-NEXT:    movdqa %xmm4, %xmm1
6568; SSE2-NEXT:    movdqa %xmm5, %xmm2
6569; SSE2-NEXT:    movdqa %xmm6, %xmm3
6570; SSE2-NEXT:    retq
6571;
6572; SSE4-LABEL: test145:
6573; SSE4:       # %bb.0: # %entry
6574; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6575; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6576; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6577; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6578; SSE4-NEXT:    retq
6579;
6580; AVX1-LABEL: test145:
6581; AVX1:       # %bb.0: # %entry
6582; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6583; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6584; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6585; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6586; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6587; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6588; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6589; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6590; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6591; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6592; AVX1-NEXT:    retq
6593;
6594; AVX2-LABEL: test145:
6595; AVX2:       # %bb.0: # %entry
6596; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6597; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6598; AVX2-NEXT:    retq
6599;
6600; AVX512-LABEL: test145:
6601; AVX512:       # %bb.0: # %entry
6602; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6603; AVX512-NEXT:    retq
6604entry:
6605  %cmp = icmp slt <16 x i32> %a, %b
6606  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6607  ret <16 x i32> %sel
6608}
6609
6610define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6611; SSE2-LABEL: test146:
6612; SSE2:       # %bb.0: # %entry
6613; SSE2-NEXT:    movdqa %xmm0, %xmm8
6614; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6615; SSE2-NEXT:    pand %xmm8, %xmm0
6616; SSE2-NEXT:    pandn %xmm4, %xmm8
6617; SSE2-NEXT:    por %xmm0, %xmm8
6618; SSE2-NEXT:    movdqa %xmm1, %xmm4
6619; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6620; SSE2-NEXT:    pand %xmm4, %xmm1
6621; SSE2-NEXT:    pandn %xmm5, %xmm4
6622; SSE2-NEXT:    por %xmm1, %xmm4
6623; SSE2-NEXT:    movdqa %xmm2, %xmm5
6624; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
6625; SSE2-NEXT:    pand %xmm5, %xmm2
6626; SSE2-NEXT:    pandn %xmm6, %xmm5
6627; SSE2-NEXT:    por %xmm2, %xmm5
6628; SSE2-NEXT:    movdqa %xmm3, %xmm6
6629; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
6630; SSE2-NEXT:    pand %xmm6, %xmm3
6631; SSE2-NEXT:    pandn %xmm7, %xmm6
6632; SSE2-NEXT:    por %xmm3, %xmm6
6633; SSE2-NEXT:    movdqa %xmm8, %xmm0
6634; SSE2-NEXT:    movdqa %xmm4, %xmm1
6635; SSE2-NEXT:    movdqa %xmm5, %xmm2
6636; SSE2-NEXT:    movdqa %xmm6, %xmm3
6637; SSE2-NEXT:    retq
6638;
6639; SSE4-LABEL: test146:
6640; SSE4:       # %bb.0: # %entry
6641; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6642; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6643; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6644; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6645; SSE4-NEXT:    retq
6646;
6647; AVX1-LABEL: test146:
6648; AVX1:       # %bb.0: # %entry
6649; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6650; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6651; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6652; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6653; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6654; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6655; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6656; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6657; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6658; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6659; AVX1-NEXT:    retq
6660;
6661; AVX2-LABEL: test146:
6662; AVX2:       # %bb.0: # %entry
6663; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6664; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6665; AVX2-NEXT:    retq
6666;
6667; AVX512-LABEL: test146:
6668; AVX512:       # %bb.0: # %entry
6669; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6670; AVX512-NEXT:    retq
6671entry:
6672  %cmp = icmp sle <16 x i32> %a, %b
6673  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6674  ret <16 x i32> %sel
6675}
6676
6677define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
6678; SSE2-LABEL: test147:
6679; SSE2:       # %bb.0: # %entry
6680; SSE2-NEXT:    movdqa %xmm4, %xmm8
6681; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6682; SSE2-NEXT:    pand %xmm8, %xmm0
6683; SSE2-NEXT:    pandn %xmm4, %xmm8
6684; SSE2-NEXT:    por %xmm8, %xmm0
6685; SSE2-NEXT:    movdqa %xmm5, %xmm4
6686; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6687; SSE2-NEXT:    pand %xmm4, %xmm1
6688; SSE2-NEXT:    pandn %xmm5, %xmm4
6689; SSE2-NEXT:    por %xmm4, %xmm1
6690; SSE2-NEXT:    movdqa %xmm6, %xmm4
6691; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6692; SSE2-NEXT:    pand %xmm4, %xmm2
6693; SSE2-NEXT:    pandn %xmm6, %xmm4
6694; SSE2-NEXT:    por %xmm4, %xmm2
6695; SSE2-NEXT:    movdqa %xmm7, %xmm4
6696; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6697; SSE2-NEXT:    pand %xmm4, %xmm3
6698; SSE2-NEXT:    pandn %xmm7, %xmm4
6699; SSE2-NEXT:    por %xmm4, %xmm3
6700; SSE2-NEXT:    retq
6701;
6702; SSE4-LABEL: test147:
6703; SSE4:       # %bb.0: # %entry
6704; SSE4-NEXT:    pminsd %xmm4, %xmm0
6705; SSE4-NEXT:    pminsd %xmm5, %xmm1
6706; SSE4-NEXT:    pminsd %xmm6, %xmm2
6707; SSE4-NEXT:    pminsd %xmm7, %xmm3
6708; SSE4-NEXT:    retq
6709;
6710; AVX1-LABEL: test147:
6711; AVX1:       # %bb.0: # %entry
6712; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6713; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6714; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6715; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6716; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6717; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6718; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6719; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6720; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6721; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6722; AVX1-NEXT:    retq
6723;
6724; AVX2-LABEL: test147:
6725; AVX2:       # %bb.0: # %entry
6726; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6727; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6728; AVX2-NEXT:    retq
6729;
6730; AVX512-LABEL: test147:
6731; AVX512:       # %bb.0: # %entry
6732; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6733; AVX512-NEXT:    retq
6734entry:
6735  %cmp = icmp sgt <16 x i32> %a, %b
6736  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6737  ret <16 x i32> %sel
6738}
6739
6740define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
6741; SSE2-LABEL: test148:
6742; SSE2:       # %bb.0: # %entry
6743; SSE2-NEXT:    movdqa %xmm4, %xmm8
6744; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6745; SSE2-NEXT:    pand %xmm8, %xmm0
6746; SSE2-NEXT:    pandn %xmm4, %xmm8
6747; SSE2-NEXT:    por %xmm8, %xmm0
6748; SSE2-NEXT:    movdqa %xmm5, %xmm4
6749; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6750; SSE2-NEXT:    pand %xmm4, %xmm1
6751; SSE2-NEXT:    pandn %xmm5, %xmm4
6752; SSE2-NEXT:    por %xmm4, %xmm1
6753; SSE2-NEXT:    movdqa %xmm6, %xmm4
6754; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6755; SSE2-NEXT:    pand %xmm4, %xmm2
6756; SSE2-NEXT:    pandn %xmm6, %xmm4
6757; SSE2-NEXT:    por %xmm4, %xmm2
6758; SSE2-NEXT:    movdqa %xmm7, %xmm4
6759; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6760; SSE2-NEXT:    pand %xmm4, %xmm3
6761; SSE2-NEXT:    pandn %xmm7, %xmm4
6762; SSE2-NEXT:    por %xmm4, %xmm3
6763; SSE2-NEXT:    retq
6764;
6765; SSE4-LABEL: test148:
6766; SSE4:       # %bb.0: # %entry
6767; SSE4-NEXT:    pminsd %xmm4, %xmm0
6768; SSE4-NEXT:    pminsd %xmm5, %xmm1
6769; SSE4-NEXT:    pminsd %xmm6, %xmm2
6770; SSE4-NEXT:    pminsd %xmm7, %xmm3
6771; SSE4-NEXT:    retq
6772;
6773; AVX1-LABEL: test148:
6774; AVX1:       # %bb.0: # %entry
6775; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6776; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6777; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6778; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6779; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6780; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6781; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6782; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6783; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6784; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6785; AVX1-NEXT:    retq
6786;
6787; AVX2-LABEL: test148:
6788; AVX2:       # %bb.0: # %entry
6789; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6790; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6791; AVX2-NEXT:    retq
6792;
6793; AVX512-LABEL: test148:
6794; AVX512:       # %bb.0: # %entry
6795; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6796; AVX512-NEXT:    retq
6797entry:
6798  %cmp = icmp sge <16 x i32> %a, %b
6799  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6800  ret <16 x i32> %sel
6801}
6802
6803define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
6804; SSE2-LABEL: test149:
6805; SSE2:       # %bb.0: # %entry
6806; SSE2-NEXT:    movdqa %xmm1, %xmm8
6807; SSE2-NEXT:    movdqa %xmm0, %xmm10
6808; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
6809; SSE2-NEXT:    movdqa %xmm4, %xmm1
6810; SSE2-NEXT:    pxor %xmm9, %xmm1
6811; SSE2-NEXT:    pxor %xmm9, %xmm0
6812; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6813; SSE2-NEXT:    pand %xmm0, %xmm10
6814; SSE2-NEXT:    pandn %xmm4, %xmm0
6815; SSE2-NEXT:    por %xmm10, %xmm0
6816; SSE2-NEXT:    movdqa %xmm5, %xmm4
6817; SSE2-NEXT:    pxor %xmm9, %xmm4
6818; SSE2-NEXT:    movdqa %xmm8, %xmm1
6819; SSE2-NEXT:    pxor %xmm9, %xmm1
6820; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
6821; SSE2-NEXT:    pand %xmm1, %xmm8
6822; SSE2-NEXT:    pandn %xmm5, %xmm1
6823; SSE2-NEXT:    por %xmm8, %xmm1
6824; SSE2-NEXT:    movdqa %xmm6, %xmm5
6825; SSE2-NEXT:    pxor %xmm9, %xmm5
6826; SSE2-NEXT:    movdqa %xmm2, %xmm4
6827; SSE2-NEXT:    pxor %xmm9, %xmm4
6828; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6829; SSE2-NEXT:    pand %xmm4, %xmm2
6830; SSE2-NEXT:    pandn %xmm6, %xmm4
6831; SSE2-NEXT:    por %xmm2, %xmm4
6832; SSE2-NEXT:    movdqa %xmm7, %xmm2
6833; SSE2-NEXT:    pxor %xmm9, %xmm2
6834; SSE2-NEXT:    pxor %xmm3, %xmm9
6835; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
6836; SSE2-NEXT:    pand %xmm9, %xmm3
6837; SSE2-NEXT:    pandn %xmm7, %xmm9
6838; SSE2-NEXT:    por %xmm9, %xmm3
6839; SSE2-NEXT:    movdqa %xmm4, %xmm2
6840; SSE2-NEXT:    retq
6841;
6842; SSE4-LABEL: test149:
6843; SSE4:       # %bb.0: # %entry
6844; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6845; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6846; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6847; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6848; SSE4-NEXT:    retq
6849;
6850; AVX1-LABEL: test149:
6851; AVX1:       # %bb.0: # %entry
6852; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6853; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6854; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6855; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6856; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6857; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6858; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6859; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6860; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6861; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6862; AVX1-NEXT:    retq
6863;
6864; AVX2-LABEL: test149:
6865; AVX2:       # %bb.0: # %entry
6866; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6867; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6868; AVX2-NEXT:    retq
6869;
6870; AVX512-LABEL: test149:
6871; AVX512:       # %bb.0: # %entry
6872; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6873; AVX512-NEXT:    retq
6874entry:
6875  %cmp = icmp ult <16 x i32> %a, %b
6876  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6877  ret <16 x i32> %sel
6878}
6879
6880define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
6881; SSE2-LABEL: test150:
6882; SSE2:       # %bb.0: # %entry
6883; SSE2-NEXT:    movdqa %xmm1, %xmm8
6884; SSE2-NEXT:    movdqa %xmm0, %xmm10
6885; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
6886; SSE2-NEXT:    movdqa %xmm4, %xmm1
6887; SSE2-NEXT:    pxor %xmm9, %xmm1
6888; SSE2-NEXT:    pxor %xmm9, %xmm0
6889; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6890; SSE2-NEXT:    pand %xmm0, %xmm10
6891; SSE2-NEXT:    pandn %xmm4, %xmm0
6892; SSE2-NEXT:    por %xmm10, %xmm0
6893; SSE2-NEXT:    movdqa %xmm5, %xmm4
6894; SSE2-NEXT:    pxor %xmm9, %xmm4
6895; SSE2-NEXT:    movdqa %xmm8, %xmm1
6896; SSE2-NEXT:    pxor %xmm9, %xmm1
6897; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
6898; SSE2-NEXT:    pand %xmm1, %xmm8
6899; SSE2-NEXT:    pandn %xmm5, %xmm1
6900; SSE2-NEXT:    por %xmm8, %xmm1
6901; SSE2-NEXT:    movdqa %xmm6, %xmm5
6902; SSE2-NEXT:    pxor %xmm9, %xmm5
6903; SSE2-NEXT:    movdqa %xmm2, %xmm4
6904; SSE2-NEXT:    pxor %xmm9, %xmm4
6905; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6906; SSE2-NEXT:    pand %xmm4, %xmm2
6907; SSE2-NEXT:    pandn %xmm6, %xmm4
6908; SSE2-NEXT:    por %xmm2, %xmm4
6909; SSE2-NEXT:    movdqa %xmm7, %xmm2
6910; SSE2-NEXT:    pxor %xmm9, %xmm2
6911; SSE2-NEXT:    pxor %xmm3, %xmm9
6912; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
6913; SSE2-NEXT:    pand %xmm9, %xmm3
6914; SSE2-NEXT:    pandn %xmm7, %xmm9
6915; SSE2-NEXT:    por %xmm9, %xmm3
6916; SSE2-NEXT:    movdqa %xmm4, %xmm2
6917; SSE2-NEXT:    retq
6918;
6919; SSE4-LABEL: test150:
6920; SSE4:       # %bb.0: # %entry
6921; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6922; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6923; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6924; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6925; SSE4-NEXT:    retq
6926;
6927; AVX1-LABEL: test150:
6928; AVX1:       # %bb.0: # %entry
6929; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6930; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6931; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6932; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6933; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6934; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6935; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6936; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6937; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6938; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6939; AVX1-NEXT:    retq
6940;
6941; AVX2-LABEL: test150:
6942; AVX2:       # %bb.0: # %entry
6943; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6944; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6945; AVX2-NEXT:    retq
6946;
6947; AVX512-LABEL: test150:
6948; AVX512:       # %bb.0: # %entry
6949; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6950; AVX512-NEXT:    retq
6951entry:
6952  %cmp = icmp ule <16 x i32> %a, %b
6953  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6954  ret <16 x i32> %sel
6955}
6956
6957define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
6958; SSE2-LABEL: test151:
6959; SSE2:       # %bb.0: # %entry
6960; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6961; SSE2-NEXT:    movdqa %xmm0, %xmm9
6962; SSE2-NEXT:    pxor %xmm8, %xmm9
6963; SSE2-NEXT:    movdqa %xmm4, %xmm10
6964; SSE2-NEXT:    pxor %xmm8, %xmm10
6965; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6966; SSE2-NEXT:    pand %xmm10, %xmm0
6967; SSE2-NEXT:    pandn %xmm4, %xmm10
6968; SSE2-NEXT:    por %xmm10, %xmm0
6969; SSE2-NEXT:    movdqa %xmm1, %xmm9
6970; SSE2-NEXT:    pxor %xmm8, %xmm9
6971; SSE2-NEXT:    movdqa %xmm5, %xmm4
6972; SSE2-NEXT:    pxor %xmm8, %xmm4
6973; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6974; SSE2-NEXT:    pand %xmm4, %xmm1
6975; SSE2-NEXT:    pandn %xmm5, %xmm4
6976; SSE2-NEXT:    por %xmm4, %xmm1
6977; SSE2-NEXT:    movdqa %xmm2, %xmm4
6978; SSE2-NEXT:    pxor %xmm8, %xmm4
6979; SSE2-NEXT:    movdqa %xmm6, %xmm5
6980; SSE2-NEXT:    pxor %xmm8, %xmm5
6981; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6982; SSE2-NEXT:    pand %xmm5, %xmm2
6983; SSE2-NEXT:    pandn %xmm6, %xmm5
6984; SSE2-NEXT:    por %xmm5, %xmm2
6985; SSE2-NEXT:    movdqa %xmm3, %xmm4
6986; SSE2-NEXT:    pxor %xmm8, %xmm4
6987; SSE2-NEXT:    pxor %xmm7, %xmm8
6988; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6989; SSE2-NEXT:    pand %xmm8, %xmm3
6990; SSE2-NEXT:    pandn %xmm7, %xmm8
6991; SSE2-NEXT:    por %xmm8, %xmm3
6992; SSE2-NEXT:    retq
6993;
6994; SSE4-LABEL: test151:
6995; SSE4:       # %bb.0: # %entry
6996; SSE4-NEXT:    pminud %xmm4, %xmm0
6997; SSE4-NEXT:    pminud %xmm5, %xmm1
6998; SSE4-NEXT:    pminud %xmm6, %xmm2
6999; SSE4-NEXT:    pminud %xmm7, %xmm3
7000; SSE4-NEXT:    retq
7001;
7002; AVX1-LABEL: test151:
7003; AVX1:       # %bb.0: # %entry
7004; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7005; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7006; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
7007; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
7008; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7009; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7010; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7011; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
7012; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
7013; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7014; AVX1-NEXT:    retq
7015;
7016; AVX2-LABEL: test151:
7017; AVX2:       # %bb.0: # %entry
7018; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
7019; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
7020; AVX2-NEXT:    retq
7021;
7022; AVX512-LABEL: test151:
7023; AVX512:       # %bb.0: # %entry
7024; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
7025; AVX512-NEXT:    retq
7026entry:
7027  %cmp = icmp ugt <16 x i32> %a, %b
7028  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7029  ret <16 x i32> %sel
7030}
7031
7032define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
7033; SSE2-LABEL: test152:
7034; SSE2:       # %bb.0: # %entry
7035; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
7036; SSE2-NEXT:    movdqa %xmm0, %xmm9
7037; SSE2-NEXT:    pxor %xmm8, %xmm9
7038; SSE2-NEXT:    movdqa %xmm4, %xmm10
7039; SSE2-NEXT:    pxor %xmm8, %xmm10
7040; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7041; SSE2-NEXT:    pand %xmm10, %xmm0
7042; SSE2-NEXT:    pandn %xmm4, %xmm10
7043; SSE2-NEXT:    por %xmm10, %xmm0
7044; SSE2-NEXT:    movdqa %xmm1, %xmm9
7045; SSE2-NEXT:    pxor %xmm8, %xmm9
7046; SSE2-NEXT:    movdqa %xmm5, %xmm4
7047; SSE2-NEXT:    pxor %xmm8, %xmm4
7048; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
7049; SSE2-NEXT:    pand %xmm4, %xmm1
7050; SSE2-NEXT:    pandn %xmm5, %xmm4
7051; SSE2-NEXT:    por %xmm4, %xmm1
7052; SSE2-NEXT:    movdqa %xmm2, %xmm4
7053; SSE2-NEXT:    pxor %xmm8, %xmm4
7054; SSE2-NEXT:    movdqa %xmm6, %xmm5
7055; SSE2-NEXT:    pxor %xmm8, %xmm5
7056; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7057; SSE2-NEXT:    pand %xmm5, %xmm2
7058; SSE2-NEXT:    pandn %xmm6, %xmm5
7059; SSE2-NEXT:    por %xmm5, %xmm2
7060; SSE2-NEXT:    movdqa %xmm3, %xmm4
7061; SSE2-NEXT:    pxor %xmm8, %xmm4
7062; SSE2-NEXT:    pxor %xmm7, %xmm8
7063; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
7064; SSE2-NEXT:    pand %xmm8, %xmm3
7065; SSE2-NEXT:    pandn %xmm7, %xmm8
7066; SSE2-NEXT:    por %xmm8, %xmm3
7067; SSE2-NEXT:    retq
7068;
7069; SSE4-LABEL: test152:
7070; SSE4:       # %bb.0: # %entry
7071; SSE4-NEXT:    pminud %xmm4, %xmm0
7072; SSE4-NEXT:    pminud %xmm5, %xmm1
7073; SSE4-NEXT:    pminud %xmm6, %xmm2
7074; SSE4-NEXT:    pminud %xmm7, %xmm3
7075; SSE4-NEXT:    retq
7076;
7077; AVX1-LABEL: test152:
7078; AVX1:       # %bb.0: # %entry
7079; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7080; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7081; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
7082; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
7083; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7084; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7085; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7086; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
7087; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
7088; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7089; AVX1-NEXT:    retq
7090;
7091; AVX2-LABEL: test152:
7092; AVX2:       # %bb.0: # %entry
7093; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
7094; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
7095; AVX2-NEXT:    retq
7096;
7097; AVX512-LABEL: test152:
7098; AVX512:       # %bb.0: # %entry
7099; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
7100; AVX512-NEXT:    retq
7101entry:
7102  %cmp = icmp uge <16 x i32> %a, %b
7103  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7104  ret <16 x i32> %sel
7105}
7106
7107; -----------------------
7108
7109define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
7110; SSE2-LABEL: test153:
7111; SSE2:       # %bb.0: # %entry
7112; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7113; SSE2-NEXT:    movdqa %xmm4, %xmm9
7114; SSE2-NEXT:    pxor %xmm8, %xmm9
7115; SSE2-NEXT:    movdqa %xmm0, %xmm10
7116; SSE2-NEXT:    pxor %xmm8, %xmm10
7117; SSE2-NEXT:    movdqa %xmm10, %xmm11
7118; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7119; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7120; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7121; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7122; SSE2-NEXT:    pand %xmm12, %xmm9
7123; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7124; SSE2-NEXT:    por %xmm9, %xmm10
7125; SSE2-NEXT:    pand %xmm10, %xmm0
7126; SSE2-NEXT:    pandn %xmm4, %xmm10
7127; SSE2-NEXT:    por %xmm10, %xmm0
7128; SSE2-NEXT:    movdqa %xmm5, %xmm9
7129; SSE2-NEXT:    pxor %xmm8, %xmm9
7130; SSE2-NEXT:    movdqa %xmm1, %xmm4
7131; SSE2-NEXT:    pxor %xmm8, %xmm4
7132; SSE2-NEXT:    movdqa %xmm4, %xmm10
7133; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7134; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7135; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7136; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7137; SSE2-NEXT:    pand %xmm11, %xmm9
7138; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7139; SSE2-NEXT:    por %xmm9, %xmm4
7140; SSE2-NEXT:    pand %xmm4, %xmm1
7141; SSE2-NEXT:    pandn %xmm5, %xmm4
7142; SSE2-NEXT:    por %xmm4, %xmm1
7143; SSE2-NEXT:    movdqa %xmm6, %xmm4
7144; SSE2-NEXT:    pxor %xmm8, %xmm4
7145; SSE2-NEXT:    movdqa %xmm2, %xmm5
7146; SSE2-NEXT:    pxor %xmm8, %xmm5
7147; SSE2-NEXT:    movdqa %xmm5, %xmm9
7148; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7149; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7150; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7151; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7152; SSE2-NEXT:    pand %xmm10, %xmm4
7153; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7154; SSE2-NEXT:    por %xmm4, %xmm5
7155; SSE2-NEXT:    pand %xmm5, %xmm2
7156; SSE2-NEXT:    pandn %xmm6, %xmm5
7157; SSE2-NEXT:    por %xmm5, %xmm2
7158; SSE2-NEXT:    movdqa %xmm7, %xmm4
7159; SSE2-NEXT:    pxor %xmm8, %xmm4
7160; SSE2-NEXT:    pxor %xmm3, %xmm8
7161; SSE2-NEXT:    movdqa %xmm8, %xmm5
7162; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7163; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7164; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7165; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7166; SSE2-NEXT:    pand %xmm6, %xmm4
7167; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7168; SSE2-NEXT:    por %xmm4, %xmm5
7169; SSE2-NEXT:    pand %xmm5, %xmm3
7170; SSE2-NEXT:    pandn %xmm7, %xmm5
7171; SSE2-NEXT:    por %xmm5, %xmm3
7172; SSE2-NEXT:    retq
7173;
7174; SSE4-LABEL: test153:
7175; SSE4:       # %bb.0: # %entry
7176; SSE4-NEXT:    movdqa %xmm7, %xmm8
7177; SSE4-NEXT:    movdqa %xmm0, %xmm7
7178; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7179; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7180; SSE4-NEXT:    movdqa %xmm1, %xmm0
7181; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7182; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7183; SSE4-NEXT:    movdqa %xmm2, %xmm0
7184; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7185; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7186; SSE4-NEXT:    movdqa %xmm3, %xmm0
7187; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7188; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7189; SSE4-NEXT:    movapd %xmm4, %xmm0
7190; SSE4-NEXT:    movapd %xmm5, %xmm1
7191; SSE4-NEXT:    movapd %xmm6, %xmm2
7192; SSE4-NEXT:    movapd %xmm8, %xmm3
7193; SSE4-NEXT:    retq
7194;
7195; AVX1-LABEL: test153:
7196; AVX1:       # %bb.0: # %entry
7197; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7198; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7199; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7200; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7201; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7202; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7203; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7204; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7205; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7206; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7207; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7208; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7209; AVX1-NEXT:    retq
7210;
7211; AVX2-LABEL: test153:
7212; AVX2:       # %bb.0: # %entry
7213; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7214; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7215; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7216; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7217; AVX2-NEXT:    retq
7218;
7219; AVX512-LABEL: test153:
7220; AVX512:       # %bb.0: # %entry
7221; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7222; AVX512-NEXT:    retq
7223entry:
7224  %cmp = icmp slt <8 x i64> %a, %b
7225  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7226  ret <8 x i64> %sel
7227}
7228
7229define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7230; SSE2-LABEL: test154:
7231; SSE2:       # %bb.0: # %entry
7232; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7233; SSE2-NEXT:    movdqa %xmm4, %xmm9
7234; SSE2-NEXT:    pxor %xmm8, %xmm9
7235; SSE2-NEXT:    movdqa %xmm0, %xmm10
7236; SSE2-NEXT:    pxor %xmm8, %xmm10
7237; SSE2-NEXT:    movdqa %xmm10, %xmm11
7238; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7239; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7240; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7241; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7242; SSE2-NEXT:    pand %xmm12, %xmm9
7243; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7244; SSE2-NEXT:    por %xmm9, %xmm10
7245; SSE2-NEXT:    pand %xmm10, %xmm0
7246; SSE2-NEXT:    pandn %xmm4, %xmm10
7247; SSE2-NEXT:    por %xmm10, %xmm0
7248; SSE2-NEXT:    movdqa %xmm5, %xmm9
7249; SSE2-NEXT:    pxor %xmm8, %xmm9
7250; SSE2-NEXT:    movdqa %xmm1, %xmm4
7251; SSE2-NEXT:    pxor %xmm8, %xmm4
7252; SSE2-NEXT:    movdqa %xmm4, %xmm10
7253; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7254; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7255; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7256; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7257; SSE2-NEXT:    pand %xmm11, %xmm9
7258; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7259; SSE2-NEXT:    por %xmm9, %xmm4
7260; SSE2-NEXT:    pand %xmm4, %xmm1
7261; SSE2-NEXT:    pandn %xmm5, %xmm4
7262; SSE2-NEXT:    por %xmm4, %xmm1
7263; SSE2-NEXT:    movdqa %xmm6, %xmm4
7264; SSE2-NEXT:    pxor %xmm8, %xmm4
7265; SSE2-NEXT:    movdqa %xmm2, %xmm5
7266; SSE2-NEXT:    pxor %xmm8, %xmm5
7267; SSE2-NEXT:    movdqa %xmm5, %xmm9
7268; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7269; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7270; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7271; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7272; SSE2-NEXT:    pand %xmm10, %xmm4
7273; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7274; SSE2-NEXT:    por %xmm4, %xmm5
7275; SSE2-NEXT:    pand %xmm5, %xmm2
7276; SSE2-NEXT:    pandn %xmm6, %xmm5
7277; SSE2-NEXT:    por %xmm5, %xmm2
7278; SSE2-NEXT:    movdqa %xmm7, %xmm4
7279; SSE2-NEXT:    pxor %xmm8, %xmm4
7280; SSE2-NEXT:    pxor %xmm3, %xmm8
7281; SSE2-NEXT:    movdqa %xmm8, %xmm5
7282; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7283; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7284; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7285; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7286; SSE2-NEXT:    pand %xmm6, %xmm4
7287; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7288; SSE2-NEXT:    por %xmm4, %xmm5
7289; SSE2-NEXT:    pand %xmm5, %xmm3
7290; SSE2-NEXT:    pandn %xmm7, %xmm5
7291; SSE2-NEXT:    por %xmm5, %xmm3
7292; SSE2-NEXT:    retq
7293;
7294; SSE4-LABEL: test154:
7295; SSE4:       # %bb.0: # %entry
7296; SSE4-NEXT:    movdqa %xmm7, %xmm8
7297; SSE4-NEXT:    movdqa %xmm0, %xmm7
7298; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7299; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7300; SSE4-NEXT:    movdqa %xmm1, %xmm0
7301; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7302; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7303; SSE4-NEXT:    movdqa %xmm2, %xmm0
7304; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7305; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7306; SSE4-NEXT:    movdqa %xmm3, %xmm0
7307; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7308; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7309; SSE4-NEXT:    movapd %xmm4, %xmm0
7310; SSE4-NEXT:    movapd %xmm5, %xmm1
7311; SSE4-NEXT:    movapd %xmm6, %xmm2
7312; SSE4-NEXT:    movapd %xmm8, %xmm3
7313; SSE4-NEXT:    retq
7314;
7315; AVX1-LABEL: test154:
7316; AVX1:       # %bb.0: # %entry
7317; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7318; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7319; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7320; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7321; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7322; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7323; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7324; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7325; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7326; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7327; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7328; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7329; AVX1-NEXT:    retq
7330;
7331; AVX2-LABEL: test154:
7332; AVX2:       # %bb.0: # %entry
7333; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7334; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7335; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7336; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7337; AVX2-NEXT:    retq
7338;
7339; AVX512-LABEL: test154:
7340; AVX512:       # %bb.0: # %entry
7341; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7342; AVX512-NEXT:    retq
7343entry:
7344  %cmp = icmp sle <8 x i64> %a, %b
7345  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7346  ret <8 x i64> %sel
7347}
7348
7349define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7350; SSE2-LABEL: test155:
7351; SSE2:       # %bb.0: # %entry
7352; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7353; SSE2-NEXT:    movdqa %xmm0, %xmm9
7354; SSE2-NEXT:    pxor %xmm8, %xmm9
7355; SSE2-NEXT:    movdqa %xmm4, %xmm10
7356; SSE2-NEXT:    pxor %xmm8, %xmm10
7357; SSE2-NEXT:    movdqa %xmm10, %xmm11
7358; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7359; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7360; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7361; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7362; SSE2-NEXT:    pand %xmm12, %xmm9
7363; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7364; SSE2-NEXT:    por %xmm9, %xmm10
7365; SSE2-NEXT:    pand %xmm10, %xmm0
7366; SSE2-NEXT:    pandn %xmm4, %xmm10
7367; SSE2-NEXT:    por %xmm10, %xmm0
7368; SSE2-NEXT:    movdqa %xmm1, %xmm9
7369; SSE2-NEXT:    pxor %xmm8, %xmm9
7370; SSE2-NEXT:    movdqa %xmm5, %xmm4
7371; SSE2-NEXT:    pxor %xmm8, %xmm4
7372; SSE2-NEXT:    movdqa %xmm4, %xmm10
7373; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7374; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7375; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7376; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7377; SSE2-NEXT:    pand %xmm11, %xmm9
7378; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7379; SSE2-NEXT:    por %xmm9, %xmm4
7380; SSE2-NEXT:    pand %xmm4, %xmm1
7381; SSE2-NEXT:    pandn %xmm5, %xmm4
7382; SSE2-NEXT:    por %xmm4, %xmm1
7383; SSE2-NEXT:    movdqa %xmm2, %xmm4
7384; SSE2-NEXT:    pxor %xmm8, %xmm4
7385; SSE2-NEXT:    movdqa %xmm6, %xmm5
7386; SSE2-NEXT:    pxor %xmm8, %xmm5
7387; SSE2-NEXT:    movdqa %xmm5, %xmm9
7388; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7389; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7390; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7391; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7392; SSE2-NEXT:    pand %xmm10, %xmm4
7393; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7394; SSE2-NEXT:    por %xmm4, %xmm5
7395; SSE2-NEXT:    pand %xmm5, %xmm2
7396; SSE2-NEXT:    pandn %xmm6, %xmm5
7397; SSE2-NEXT:    por %xmm5, %xmm2
7398; SSE2-NEXT:    movdqa %xmm3, %xmm4
7399; SSE2-NEXT:    pxor %xmm8, %xmm4
7400; SSE2-NEXT:    pxor %xmm7, %xmm8
7401; SSE2-NEXT:    movdqa %xmm8, %xmm5
7402; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7403; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7404; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7405; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7406; SSE2-NEXT:    pand %xmm6, %xmm4
7407; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7408; SSE2-NEXT:    por %xmm4, %xmm5
7409; SSE2-NEXT:    pand %xmm5, %xmm3
7410; SSE2-NEXT:    pandn %xmm7, %xmm5
7411; SSE2-NEXT:    por %xmm5, %xmm3
7412; SSE2-NEXT:    retq
7413;
7414; SSE4-LABEL: test155:
7415; SSE4:       # %bb.0: # %entry
7416; SSE4-NEXT:    movdqa %xmm7, %xmm8
7417; SSE4-NEXT:    movdqa %xmm0, %xmm7
7418; SSE4-NEXT:    movdqa %xmm4, %xmm0
7419; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
7420; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7421; SSE4-NEXT:    movdqa %xmm5, %xmm0
7422; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7423; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7424; SSE4-NEXT:    movdqa %xmm6, %xmm0
7425; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7426; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7427; SSE4-NEXT:    movdqa %xmm8, %xmm0
7428; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7429; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7430; SSE4-NEXT:    movapd %xmm4, %xmm0
7431; SSE4-NEXT:    movapd %xmm5, %xmm1
7432; SSE4-NEXT:    movapd %xmm6, %xmm2
7433; SSE4-NEXT:    movapd %xmm8, %xmm3
7434; SSE4-NEXT:    retq
7435;
7436; AVX1-LABEL: test155:
7437; AVX1:       # %bb.0: # %entry
7438; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7439; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
7440; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7441; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
7442; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7443; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7444; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7445; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7446; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7447; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
7448; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7449; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7450; AVX1-NEXT:    retq
7451;
7452; AVX2-LABEL: test155:
7453; AVX2:       # %bb.0: # %entry
7454; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
7455; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7456; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
7457; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7458; AVX2-NEXT:    retq
7459;
7460; AVX512-LABEL: test155:
7461; AVX512:       # %bb.0: # %entry
7462; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7463; AVX512-NEXT:    retq
7464entry:
7465  %cmp = icmp sgt <8 x i64> %a, %b
7466  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7467  ret <8 x i64> %sel
7468}
7469
7470define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7471; SSE2-LABEL: test156:
7472; SSE2:       # %bb.0: # %entry
7473; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7474; SSE2-NEXT:    movdqa %xmm4, %xmm9
7475; SSE2-NEXT:    pxor %xmm8, %xmm9
7476; SSE2-NEXT:    movdqa %xmm0, %xmm10
7477; SSE2-NEXT:    pxor %xmm8, %xmm10
7478; SSE2-NEXT:    movdqa %xmm10, %xmm11
7479; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7480; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7481; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7482; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7483; SSE2-NEXT:    pand %xmm12, %xmm9
7484; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7485; SSE2-NEXT:    por %xmm9, %xmm10
7486; SSE2-NEXT:    pand %xmm10, %xmm0
7487; SSE2-NEXT:    pandn %xmm4, %xmm10
7488; SSE2-NEXT:    por %xmm10, %xmm0
7489; SSE2-NEXT:    movdqa %xmm5, %xmm9
7490; SSE2-NEXT:    pxor %xmm8, %xmm9
7491; SSE2-NEXT:    movdqa %xmm1, %xmm4
7492; SSE2-NEXT:    pxor %xmm8, %xmm4
7493; SSE2-NEXT:    movdqa %xmm4, %xmm10
7494; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7495; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7496; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7497; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7498; SSE2-NEXT:    pand %xmm11, %xmm9
7499; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7500; SSE2-NEXT:    por %xmm9, %xmm4
7501; SSE2-NEXT:    pand %xmm4, %xmm1
7502; SSE2-NEXT:    pandn %xmm5, %xmm4
7503; SSE2-NEXT:    por %xmm4, %xmm1
7504; SSE2-NEXT:    movdqa %xmm6, %xmm4
7505; SSE2-NEXT:    pxor %xmm8, %xmm4
7506; SSE2-NEXT:    movdqa %xmm2, %xmm5
7507; SSE2-NEXT:    pxor %xmm8, %xmm5
7508; SSE2-NEXT:    movdqa %xmm5, %xmm9
7509; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7510; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7511; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7512; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7513; SSE2-NEXT:    pand %xmm10, %xmm4
7514; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7515; SSE2-NEXT:    por %xmm4, %xmm5
7516; SSE2-NEXT:    pand %xmm5, %xmm2
7517; SSE2-NEXT:    pandn %xmm6, %xmm5
7518; SSE2-NEXT:    por %xmm5, %xmm2
7519; SSE2-NEXT:    movdqa %xmm7, %xmm4
7520; SSE2-NEXT:    pxor %xmm8, %xmm4
7521; SSE2-NEXT:    pxor %xmm3, %xmm8
7522; SSE2-NEXT:    movdqa %xmm8, %xmm5
7523; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7524; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7525; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7526; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7527; SSE2-NEXT:    pand %xmm6, %xmm4
7528; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7529; SSE2-NEXT:    por %xmm4, %xmm5
7530; SSE2-NEXT:    pand %xmm5, %xmm3
7531; SSE2-NEXT:    pandn %xmm7, %xmm5
7532; SSE2-NEXT:    por %xmm5, %xmm3
7533; SSE2-NEXT:    retq
7534;
7535; SSE4-LABEL: test156:
7536; SSE4:       # %bb.0: # %entry
7537; SSE4-NEXT:    movdqa %xmm7, %xmm8
7538; SSE4-NEXT:    movdqa %xmm6, %xmm9
7539; SSE4-NEXT:    movdqa %xmm5, %xmm10
7540; SSE4-NEXT:    movdqa %xmm4, %xmm5
7541; SSE4-NEXT:    movdqa %xmm0, %xmm6
7542; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7543; SSE4-NEXT:    pxor %xmm7, %xmm4
7544; SSE4-NEXT:    pxor %xmm7, %xmm0
7545; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7546; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
7547; SSE4-NEXT:    movdqa %xmm10, %xmm4
7548; SSE4-NEXT:    pxor %xmm7, %xmm4
7549; SSE4-NEXT:    movdqa %xmm1, %xmm0
7550; SSE4-NEXT:    pxor %xmm7, %xmm0
7551; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7552; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7553; SSE4-NEXT:    movdqa %xmm9, %xmm1
7554; SSE4-NEXT:    pxor %xmm7, %xmm1
7555; SSE4-NEXT:    movdqa %xmm2, %xmm0
7556; SSE4-NEXT:    pxor %xmm7, %xmm0
7557; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7558; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7559; SSE4-NEXT:    movdqa %xmm8, %xmm0
7560; SSE4-NEXT:    pxor %xmm7, %xmm0
7561; SSE4-NEXT:    pxor %xmm3, %xmm7
7562; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7563; SSE4-NEXT:    movdqa %xmm7, %xmm0
7564; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7565; SSE4-NEXT:    movapd %xmm5, %xmm0
7566; SSE4-NEXT:    movapd %xmm10, %xmm1
7567; SSE4-NEXT:    movapd %xmm9, %xmm2
7568; SSE4-NEXT:    movapd %xmm8, %xmm3
7569; SSE4-NEXT:    retq
7570;
7571; AVX1-LABEL: test156:
7572; AVX1:       # %bb.0: # %entry
7573; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7574; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7575; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7576; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7577; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7578; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7579; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
7580; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
7581; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7582; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7583; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7584; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7585; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7586; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7587; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7588; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7589; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
7590; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
7591; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7592; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7593; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7594; AVX1-NEXT:    retq
7595;
7596; AVX2-LABEL: test156:
7597; AVX2:       # %bb.0: # %entry
7598; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7599; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
7600; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
7601; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7602; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7603; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
7604; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
7605; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7606; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7607; AVX2-NEXT:    retq
7608;
7609; AVX512-LABEL: test156:
7610; AVX512:       # %bb.0: # %entry
7611; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
7612; AVX512-NEXT:    retq
7613entry:
7614  %cmp = icmp ule <8 x i64> %a, %b
7615  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7616  ret <8 x i64> %sel
7617}
7618
7619define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
7620; SSE2-LABEL: test159:
7621; SSE2:       # %bb.0: # %entry
7622; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7623; SSE2-NEXT:    movdqa %xmm0, %xmm9
7624; SSE2-NEXT:    pxor %xmm8, %xmm9
7625; SSE2-NEXT:    movdqa %xmm4, %xmm10
7626; SSE2-NEXT:    pxor %xmm8, %xmm10
7627; SSE2-NEXT:    movdqa %xmm10, %xmm11
7628; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7629; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7630; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7631; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7632; SSE2-NEXT:    pand %xmm12, %xmm9
7633; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7634; SSE2-NEXT:    por %xmm9, %xmm10
7635; SSE2-NEXT:    pand %xmm10, %xmm0
7636; SSE2-NEXT:    pandn %xmm4, %xmm10
7637; SSE2-NEXT:    por %xmm10, %xmm0
7638; SSE2-NEXT:    movdqa %xmm1, %xmm9
7639; SSE2-NEXT:    pxor %xmm8, %xmm9
7640; SSE2-NEXT:    movdqa %xmm5, %xmm4
7641; SSE2-NEXT:    pxor %xmm8, %xmm4
7642; SSE2-NEXT:    movdqa %xmm4, %xmm10
7643; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7644; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7645; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7646; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7647; SSE2-NEXT:    pand %xmm11, %xmm9
7648; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7649; SSE2-NEXT:    por %xmm9, %xmm4
7650; SSE2-NEXT:    pand %xmm4, %xmm1
7651; SSE2-NEXT:    pandn %xmm5, %xmm4
7652; SSE2-NEXT:    por %xmm4, %xmm1
7653; SSE2-NEXT:    movdqa %xmm2, %xmm4
7654; SSE2-NEXT:    pxor %xmm8, %xmm4
7655; SSE2-NEXT:    movdqa %xmm6, %xmm5
7656; SSE2-NEXT:    pxor %xmm8, %xmm5
7657; SSE2-NEXT:    movdqa %xmm5, %xmm9
7658; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7659; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7660; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7661; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7662; SSE2-NEXT:    pand %xmm10, %xmm4
7663; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7664; SSE2-NEXT:    por %xmm4, %xmm5
7665; SSE2-NEXT:    pand %xmm5, %xmm2
7666; SSE2-NEXT:    pandn %xmm6, %xmm5
7667; SSE2-NEXT:    por %xmm5, %xmm2
7668; SSE2-NEXT:    movdqa %xmm3, %xmm4
7669; SSE2-NEXT:    pxor %xmm8, %xmm4
7670; SSE2-NEXT:    pxor %xmm7, %xmm8
7671; SSE2-NEXT:    movdqa %xmm8, %xmm5
7672; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7673; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7674; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7675; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7676; SSE2-NEXT:    pand %xmm6, %xmm4
7677; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7678; SSE2-NEXT:    por %xmm4, %xmm5
7679; SSE2-NEXT:    pand %xmm5, %xmm3
7680; SSE2-NEXT:    pandn %xmm7, %xmm5
7681; SSE2-NEXT:    por %xmm5, %xmm3
7682; SSE2-NEXT:    retq
7683;
7684; SSE4-LABEL: test159:
7685; SSE4:       # %bb.0: # %entry
7686; SSE4-NEXT:    movdqa %xmm7, %xmm8
7687; SSE4-NEXT:    movdqa %xmm6, %xmm9
7688; SSE4-NEXT:    movdqa %xmm5, %xmm10
7689; SSE4-NEXT:    movdqa %xmm0, %xmm5
7690; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7691; SSE4-NEXT:    movdqa %xmm0, %xmm6
7692; SSE4-NEXT:    pxor %xmm7, %xmm6
7693; SSE4-NEXT:    movdqa %xmm4, %xmm0
7694; SSE4-NEXT:    pxor %xmm7, %xmm0
7695; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7696; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
7697; SSE4-NEXT:    movdqa %xmm1, %xmm5
7698; SSE4-NEXT:    pxor %xmm7, %xmm5
7699; SSE4-NEXT:    movdqa %xmm10, %xmm0
7700; SSE4-NEXT:    pxor %xmm7, %xmm0
7701; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7702; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7703; SSE4-NEXT:    movdqa %xmm2, %xmm1
7704; SSE4-NEXT:    pxor %xmm7, %xmm1
7705; SSE4-NEXT:    movdqa %xmm9, %xmm0
7706; SSE4-NEXT:    pxor %xmm7, %xmm0
7707; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7708; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7709; SSE4-NEXT:    movdqa %xmm3, %xmm0
7710; SSE4-NEXT:    pxor %xmm7, %xmm0
7711; SSE4-NEXT:    pxor %xmm8, %xmm7
7712; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7713; SSE4-NEXT:    movdqa %xmm7, %xmm0
7714; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7715; SSE4-NEXT:    movapd %xmm4, %xmm0
7716; SSE4-NEXT:    movapd %xmm10, %xmm1
7717; SSE4-NEXT:    movapd %xmm9, %xmm2
7718; SSE4-NEXT:    movapd %xmm8, %xmm3
7719; SSE4-NEXT:    retq
7720;
7721; AVX1-LABEL: test159:
7722; AVX1:       # %bb.0: # %entry
7723; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7724; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7725; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7726; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7727; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7728; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7729; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7730; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7731; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7732; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7733; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7734; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7735; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7736; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7737; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7738; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7739; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7740; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7741; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7742; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7743; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7744; AVX1-NEXT:    retq
7745;
7746; AVX2-LABEL: test159:
7747; AVX2:       # %bb.0: # %entry
7748; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7749; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7750; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7751; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7752; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7753; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7754; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7755; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7756; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7757; AVX2-NEXT:    retq
7758;
7759; AVX512-LABEL: test159:
7760; AVX512:       # %bb.0: # %entry
7761; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7762; AVX512-NEXT:    retq
7763entry:
7764  %cmp = icmp ugt <8 x i64> %a, %b
7765  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7766  ret <8 x i64> %sel
7767}
7768
7769define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
7770; SSE2-LABEL: test160:
7771; SSE2:       # %bb.0: # %entry
7772; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7773; SSE2-NEXT:    movdqa %xmm0, %xmm9
7774; SSE2-NEXT:    pxor %xmm8, %xmm9
7775; SSE2-NEXT:    movdqa %xmm4, %xmm10
7776; SSE2-NEXT:    pxor %xmm8, %xmm10
7777; SSE2-NEXT:    movdqa %xmm10, %xmm11
7778; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7779; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7780; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7781; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7782; SSE2-NEXT:    pand %xmm12, %xmm9
7783; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7784; SSE2-NEXT:    por %xmm9, %xmm10
7785; SSE2-NEXT:    pand %xmm10, %xmm0
7786; SSE2-NEXT:    pandn %xmm4, %xmm10
7787; SSE2-NEXT:    por %xmm10, %xmm0
7788; SSE2-NEXT:    movdqa %xmm1, %xmm9
7789; SSE2-NEXT:    pxor %xmm8, %xmm9
7790; SSE2-NEXT:    movdqa %xmm5, %xmm4
7791; SSE2-NEXT:    pxor %xmm8, %xmm4
7792; SSE2-NEXT:    movdqa %xmm4, %xmm10
7793; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7794; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7795; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7796; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7797; SSE2-NEXT:    pand %xmm11, %xmm9
7798; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7799; SSE2-NEXT:    por %xmm9, %xmm4
7800; SSE2-NEXT:    pand %xmm4, %xmm1
7801; SSE2-NEXT:    pandn %xmm5, %xmm4
7802; SSE2-NEXT:    por %xmm4, %xmm1
7803; SSE2-NEXT:    movdqa %xmm2, %xmm4
7804; SSE2-NEXT:    pxor %xmm8, %xmm4
7805; SSE2-NEXT:    movdqa %xmm6, %xmm5
7806; SSE2-NEXT:    pxor %xmm8, %xmm5
7807; SSE2-NEXT:    movdqa %xmm5, %xmm9
7808; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7809; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7810; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7811; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7812; SSE2-NEXT:    pand %xmm10, %xmm4
7813; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7814; SSE2-NEXT:    por %xmm4, %xmm5
7815; SSE2-NEXT:    pand %xmm5, %xmm2
7816; SSE2-NEXT:    pandn %xmm6, %xmm5
7817; SSE2-NEXT:    por %xmm5, %xmm2
7818; SSE2-NEXT:    movdqa %xmm3, %xmm4
7819; SSE2-NEXT:    pxor %xmm8, %xmm4
7820; SSE2-NEXT:    pxor %xmm7, %xmm8
7821; SSE2-NEXT:    movdqa %xmm8, %xmm5
7822; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7823; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7824; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7825; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7826; SSE2-NEXT:    pand %xmm6, %xmm4
7827; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7828; SSE2-NEXT:    por %xmm4, %xmm5
7829; SSE2-NEXT:    pand %xmm5, %xmm3
7830; SSE2-NEXT:    pandn %xmm7, %xmm5
7831; SSE2-NEXT:    por %xmm5, %xmm3
7832; SSE2-NEXT:    retq
7833;
7834; SSE4-LABEL: test160:
7835; SSE4:       # %bb.0: # %entry
7836; SSE4-NEXT:    movdqa %xmm7, %xmm8
7837; SSE4-NEXT:    movdqa %xmm6, %xmm9
7838; SSE4-NEXT:    movdqa %xmm5, %xmm10
7839; SSE4-NEXT:    movdqa %xmm0, %xmm5
7840; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7841; SSE4-NEXT:    movdqa %xmm0, %xmm6
7842; SSE4-NEXT:    pxor %xmm7, %xmm6
7843; SSE4-NEXT:    movdqa %xmm4, %xmm0
7844; SSE4-NEXT:    pxor %xmm7, %xmm0
7845; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7846; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
7847; SSE4-NEXT:    movdqa %xmm1, %xmm5
7848; SSE4-NEXT:    pxor %xmm7, %xmm5
7849; SSE4-NEXT:    movdqa %xmm10, %xmm0
7850; SSE4-NEXT:    pxor %xmm7, %xmm0
7851; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7852; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7853; SSE4-NEXT:    movdqa %xmm2, %xmm1
7854; SSE4-NEXT:    pxor %xmm7, %xmm1
7855; SSE4-NEXT:    movdqa %xmm9, %xmm0
7856; SSE4-NEXT:    pxor %xmm7, %xmm0
7857; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7858; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7859; SSE4-NEXT:    movdqa %xmm3, %xmm0
7860; SSE4-NEXT:    pxor %xmm7, %xmm0
7861; SSE4-NEXT:    pxor %xmm8, %xmm7
7862; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7863; SSE4-NEXT:    movdqa %xmm7, %xmm0
7864; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7865; SSE4-NEXT:    movapd %xmm4, %xmm0
7866; SSE4-NEXT:    movapd %xmm10, %xmm1
7867; SSE4-NEXT:    movapd %xmm9, %xmm2
7868; SSE4-NEXT:    movapd %xmm8, %xmm3
7869; SSE4-NEXT:    retq
7870;
7871; AVX1-LABEL: test160:
7872; AVX1:       # %bb.0: # %entry
7873; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7874; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7875; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7876; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7877; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7878; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7879; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7880; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7881; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7882; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7883; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7884; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7885; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7886; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7887; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7888; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7889; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7890; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7891; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7892; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7893; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7894; AVX1-NEXT:    retq
7895;
7896; AVX2-LABEL: test160:
7897; AVX2:       # %bb.0: # %entry
7898; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7899; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7900; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7901; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7902; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7903; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7904; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7905; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7906; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7907; AVX2-NEXT:    retq
7908;
7909; AVX512-LABEL: test160:
7910; AVX512:       # %bb.0: # %entry
7911; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7912; AVX512-NEXT:    retq
7913entry:
7914  %cmp = icmp uge <8 x i64> %a, %b
7915  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7916  ret <8 x i64> %sel
7917}
7918
7919define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
7920; SSE2-LABEL: test161:
7921; SSE2:       # %bb.0: # %entry
7922; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7923; SSE2-NEXT:    movdqa %xmm0, %xmm5
7924; SSE2-NEXT:    pxor %xmm4, %xmm5
7925; SSE2-NEXT:    movdqa %xmm2, %xmm6
7926; SSE2-NEXT:    pxor %xmm4, %xmm6
7927; SSE2-NEXT:    movdqa %xmm6, %xmm7
7928; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7929; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7930; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7931; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7932; SSE2-NEXT:    pand %xmm8, %xmm5
7933; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7934; SSE2-NEXT:    por %xmm5, %xmm6
7935; SSE2-NEXT:    pand %xmm6, %xmm0
7936; SSE2-NEXT:    pandn %xmm2, %xmm6
7937; SSE2-NEXT:    por %xmm6, %xmm0
7938; SSE2-NEXT:    movdqa %xmm1, %xmm2
7939; SSE2-NEXT:    pxor %xmm4, %xmm2
7940; SSE2-NEXT:    pxor %xmm3, %xmm4
7941; SSE2-NEXT:    movdqa %xmm4, %xmm5
7942; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7943; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7944; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7945; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7946; SSE2-NEXT:    pand %xmm6, %xmm2
7947; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7948; SSE2-NEXT:    por %xmm2, %xmm4
7949; SSE2-NEXT:    pand %xmm4, %xmm1
7950; SSE2-NEXT:    pandn %xmm3, %xmm4
7951; SSE2-NEXT:    por %xmm4, %xmm1
7952; SSE2-NEXT:    retq
7953;
7954; SSE4-LABEL: test161:
7955; SSE4:       # %bb.0: # %entry
7956; SSE4-NEXT:    movdqa %xmm0, %xmm4
7957; SSE4-NEXT:    movdqa %xmm2, %xmm0
7958; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7959; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7960; SSE4-NEXT:    movdqa %xmm3, %xmm0
7961; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7962; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7963; SSE4-NEXT:    movapd %xmm2, %xmm0
7964; SSE4-NEXT:    movapd %xmm3, %xmm1
7965; SSE4-NEXT:    retq
7966;
7967; AVX1-LABEL: test161:
7968; AVX1:       # %bb.0: # %entry
7969; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7970; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7971; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7972; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7973; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7974; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7975; AVX1-NEXT:    retq
7976;
7977; AVX2-LABEL: test161:
7978; AVX2:       # %bb.0: # %entry
7979; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7980; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7981; AVX2-NEXT:    retq
7982;
7983; AVX512F-LABEL: test161:
7984; AVX512F:       # %bb.0: # %entry
7985; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
7986; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7987; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7988; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
7989; AVX512F-NEXT:    retq
7990;
7991; AVX512BW-LABEL: test161:
7992; AVX512BW:       # %bb.0: # %entry
7993; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7994; AVX512BW-NEXT:    retq
7995entry:
7996  %cmp = icmp slt <4 x i64> %a, %b
7997  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7998  ret <4 x i64> %sel
7999}
8000
8001define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
8002; SSE2-LABEL: test162:
8003; SSE2:       # %bb.0: # %entry
8004; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8005; SSE2-NEXT:    movdqa %xmm0, %xmm5
8006; SSE2-NEXT:    pxor %xmm4, %xmm5
8007; SSE2-NEXT:    movdqa %xmm2, %xmm6
8008; SSE2-NEXT:    pxor %xmm4, %xmm6
8009; SSE2-NEXT:    movdqa %xmm6, %xmm7
8010; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8011; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8012; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8013; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8014; SSE2-NEXT:    pand %xmm8, %xmm5
8015; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8016; SSE2-NEXT:    por %xmm5, %xmm6
8017; SSE2-NEXT:    pand %xmm6, %xmm0
8018; SSE2-NEXT:    pandn %xmm2, %xmm6
8019; SSE2-NEXT:    por %xmm6, %xmm0
8020; SSE2-NEXT:    movdqa %xmm1, %xmm2
8021; SSE2-NEXT:    pxor %xmm4, %xmm2
8022; SSE2-NEXT:    pxor %xmm3, %xmm4
8023; SSE2-NEXT:    movdqa %xmm4, %xmm5
8024; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8025; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8026; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8027; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8028; SSE2-NEXT:    pand %xmm6, %xmm2
8029; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8030; SSE2-NEXT:    por %xmm2, %xmm4
8031; SSE2-NEXT:    pand %xmm4, %xmm1
8032; SSE2-NEXT:    pandn %xmm3, %xmm4
8033; SSE2-NEXT:    por %xmm4, %xmm1
8034; SSE2-NEXT:    retq
8035;
8036; SSE4-LABEL: test162:
8037; SSE4:       # %bb.0: # %entry
8038; SSE4-NEXT:    movdqa %xmm0, %xmm4
8039; SSE4-NEXT:    movdqa %xmm2, %xmm0
8040; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8041; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8042; SSE4-NEXT:    movdqa %xmm3, %xmm0
8043; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8044; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8045; SSE4-NEXT:    movapd %xmm2, %xmm0
8046; SSE4-NEXT:    movapd %xmm3, %xmm1
8047; SSE4-NEXT:    retq
8048;
8049; AVX1-LABEL: test162:
8050; AVX1:       # %bb.0: # %entry
8051; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8052; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8053; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8054; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8055; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8056; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8057; AVX1-NEXT:    retq
8058;
8059; AVX2-LABEL: test162:
8060; AVX2:       # %bb.0: # %entry
8061; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8062; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8063; AVX2-NEXT:    retq
8064;
8065; AVX512F-LABEL: test162:
8066; AVX512F:       # %bb.0: # %entry
8067; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8068; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8069; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8070; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8071; AVX512F-NEXT:    retq
8072;
8073; AVX512BW-LABEL: test162:
8074; AVX512BW:       # %bb.0: # %entry
8075; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8076; AVX512BW-NEXT:    retq
8077entry:
8078  %cmp = icmp sle <4 x i64> %a, %b
8079  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8080  ret <4 x i64> %sel
8081}
8082
8083define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
8084; SSE2-LABEL: test163:
8085; SSE2:       # %bb.0: # %entry
8086; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8087; SSE2-NEXT:    movdqa %xmm2, %xmm5
8088; SSE2-NEXT:    pxor %xmm4, %xmm5
8089; SSE2-NEXT:    movdqa %xmm0, %xmm6
8090; SSE2-NEXT:    pxor %xmm4, %xmm6
8091; SSE2-NEXT:    movdqa %xmm6, %xmm7
8092; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8093; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8094; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8095; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8096; SSE2-NEXT:    pand %xmm8, %xmm5
8097; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8098; SSE2-NEXT:    por %xmm5, %xmm6
8099; SSE2-NEXT:    pand %xmm6, %xmm0
8100; SSE2-NEXT:    pandn %xmm2, %xmm6
8101; SSE2-NEXT:    por %xmm6, %xmm0
8102; SSE2-NEXT:    movdqa %xmm3, %xmm2
8103; SSE2-NEXT:    pxor %xmm4, %xmm2
8104; SSE2-NEXT:    pxor %xmm1, %xmm4
8105; SSE2-NEXT:    movdqa %xmm4, %xmm5
8106; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8107; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8108; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8109; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8110; SSE2-NEXT:    pand %xmm6, %xmm2
8111; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8112; SSE2-NEXT:    por %xmm2, %xmm4
8113; SSE2-NEXT:    pand %xmm4, %xmm1
8114; SSE2-NEXT:    pandn %xmm3, %xmm4
8115; SSE2-NEXT:    por %xmm4, %xmm1
8116; SSE2-NEXT:    retq
8117;
8118; SSE4-LABEL: test163:
8119; SSE4:       # %bb.0: # %entry
8120; SSE4-NEXT:    movdqa %xmm0, %xmm4
8121; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8122; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8123; SSE4-NEXT:    movdqa %xmm1, %xmm0
8124; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8125; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8126; SSE4-NEXT:    movapd %xmm2, %xmm0
8127; SSE4-NEXT:    movapd %xmm3, %xmm1
8128; SSE4-NEXT:    retq
8129;
8130; AVX1-LABEL: test163:
8131; AVX1:       # %bb.0: # %entry
8132; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8133; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8134; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8135; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8136; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8137; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8138; AVX1-NEXT:    retq
8139;
8140; AVX2-LABEL: test163:
8141; AVX2:       # %bb.0: # %entry
8142; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8143; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8144; AVX2-NEXT:    retq
8145;
8146; AVX512F-LABEL: test163:
8147; AVX512F:       # %bb.0: # %entry
8148; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8149; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8150; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8151; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8152; AVX512F-NEXT:    retq
8153;
8154; AVX512BW-LABEL: test163:
8155; AVX512BW:       # %bb.0: # %entry
8156; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8157; AVX512BW-NEXT:    retq
8158entry:
8159  %cmp = icmp sgt <4 x i64> %a, %b
8160  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8161  ret <4 x i64> %sel
8162}
8163
8164define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
8165; SSE2-LABEL: test164:
8166; SSE2:       # %bb.0: # %entry
8167; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8168; SSE2-NEXT:    movdqa %xmm2, %xmm5
8169; SSE2-NEXT:    pxor %xmm4, %xmm5
8170; SSE2-NEXT:    movdqa %xmm0, %xmm6
8171; SSE2-NEXT:    pxor %xmm4, %xmm6
8172; SSE2-NEXT:    movdqa %xmm6, %xmm7
8173; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8174; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8175; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8176; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8177; SSE2-NEXT:    pand %xmm8, %xmm5
8178; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8179; SSE2-NEXT:    por %xmm5, %xmm6
8180; SSE2-NEXT:    pand %xmm6, %xmm0
8181; SSE2-NEXT:    pandn %xmm2, %xmm6
8182; SSE2-NEXT:    por %xmm6, %xmm0
8183; SSE2-NEXT:    movdqa %xmm3, %xmm2
8184; SSE2-NEXT:    pxor %xmm4, %xmm2
8185; SSE2-NEXT:    pxor %xmm1, %xmm4
8186; SSE2-NEXT:    movdqa %xmm4, %xmm5
8187; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8188; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8189; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8190; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8191; SSE2-NEXT:    pand %xmm6, %xmm2
8192; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8193; SSE2-NEXT:    por %xmm2, %xmm4
8194; SSE2-NEXT:    pand %xmm4, %xmm1
8195; SSE2-NEXT:    pandn %xmm3, %xmm4
8196; SSE2-NEXT:    por %xmm4, %xmm1
8197; SSE2-NEXT:    retq
8198;
8199; SSE4-LABEL: test164:
8200; SSE4:       # %bb.0: # %entry
8201; SSE4-NEXT:    movdqa %xmm0, %xmm4
8202; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8203; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8204; SSE4-NEXT:    movdqa %xmm1, %xmm0
8205; SSE4-NEXT:    pcmpgtq %xmm3, %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: test164:
8212; AVX1:       # %bb.0: # %entry
8213; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8214; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8215; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8216; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8217; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8218; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8219; AVX1-NEXT:    retq
8220;
8221; AVX2-LABEL: test164:
8222; AVX2:       # %bb.0: # %entry
8223; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8224; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8225; AVX2-NEXT:    retq
8226;
8227; AVX512F-LABEL: test164:
8228; AVX512F:       # %bb.0: # %entry
8229; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8230; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8231; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8232; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8233; AVX512F-NEXT:    retq
8234;
8235; AVX512BW-LABEL: test164:
8236; AVX512BW:       # %bb.0: # %entry
8237; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8238; AVX512BW-NEXT:    retq
8239entry:
8240  %cmp = icmp sge <4 x i64> %a, %b
8241  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8242  ret <4 x i64> %sel
8243}
8244
8245define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
8246; SSE2-LABEL: test165:
8247; SSE2:       # %bb.0: # %entry
8248; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8249; SSE2-NEXT:    movdqa %xmm0, %xmm5
8250; SSE2-NEXT:    pxor %xmm4, %xmm5
8251; SSE2-NEXT:    movdqa %xmm2, %xmm6
8252; SSE2-NEXT:    pxor %xmm4, %xmm6
8253; SSE2-NEXT:    movdqa %xmm6, %xmm7
8254; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8255; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8256; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8257; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8258; SSE2-NEXT:    pand %xmm8, %xmm5
8259; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8260; SSE2-NEXT:    por %xmm5, %xmm6
8261; SSE2-NEXT:    pand %xmm6, %xmm0
8262; SSE2-NEXT:    pandn %xmm2, %xmm6
8263; SSE2-NEXT:    por %xmm6, %xmm0
8264; SSE2-NEXT:    movdqa %xmm1, %xmm2
8265; SSE2-NEXT:    pxor %xmm4, %xmm2
8266; SSE2-NEXT:    pxor %xmm3, %xmm4
8267; SSE2-NEXT:    movdqa %xmm4, %xmm5
8268; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8269; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8270; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8271; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8272; SSE2-NEXT:    pand %xmm6, %xmm2
8273; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8274; SSE2-NEXT:    por %xmm2, %xmm4
8275; SSE2-NEXT:    pand %xmm4, %xmm1
8276; SSE2-NEXT:    pandn %xmm3, %xmm4
8277; SSE2-NEXT:    por %xmm4, %xmm1
8278; SSE2-NEXT:    retq
8279;
8280; SSE4-LABEL: test165:
8281; SSE4:       # %bb.0: # %entry
8282; SSE4-NEXT:    movdqa %xmm0, %xmm4
8283; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8284; SSE4-NEXT:    movdqa %xmm0, %xmm6
8285; SSE4-NEXT:    pxor %xmm5, %xmm6
8286; SSE4-NEXT:    movdqa %xmm2, %xmm0
8287; SSE4-NEXT:    pxor %xmm5, %xmm0
8288; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8289; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8290; SSE4-NEXT:    movdqa %xmm1, %xmm0
8291; SSE4-NEXT:    pxor %xmm5, %xmm0
8292; SSE4-NEXT:    pxor %xmm3, %xmm5
8293; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8294; SSE4-NEXT:    movdqa %xmm5, %xmm0
8295; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8296; SSE4-NEXT:    movapd %xmm2, %xmm0
8297; SSE4-NEXT:    movapd %xmm3, %xmm1
8298; SSE4-NEXT:    retq
8299;
8300; AVX1-LABEL: test165:
8301; AVX1:       # %bb.0: # %entry
8302; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8303; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8304; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8305; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8306; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8307; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8308; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8309; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8310; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8311; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8312; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8313; AVX1-NEXT:    retq
8314;
8315; AVX2-LABEL: test165:
8316; AVX2:       # %bb.0: # %entry
8317; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8318; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8319; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8320; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8321; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8322; AVX2-NEXT:    retq
8323;
8324; AVX512F-LABEL: test165:
8325; AVX512F:       # %bb.0: # %entry
8326; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8327; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8328; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8329; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8330; AVX512F-NEXT:    retq
8331;
8332; AVX512BW-LABEL: test165:
8333; AVX512BW:       # %bb.0: # %entry
8334; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8335; AVX512BW-NEXT:    retq
8336entry:
8337  %cmp = icmp ult <4 x i64> %a, %b
8338  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8339  ret <4 x i64> %sel
8340}
8341
8342define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
8343; SSE2-LABEL: test166:
8344; SSE2:       # %bb.0: # %entry
8345; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8346; SSE2-NEXT:    movdqa %xmm0, %xmm5
8347; SSE2-NEXT:    pxor %xmm4, %xmm5
8348; SSE2-NEXT:    movdqa %xmm2, %xmm6
8349; SSE2-NEXT:    pxor %xmm4, %xmm6
8350; SSE2-NEXT:    movdqa %xmm6, %xmm7
8351; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8352; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8353; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8354; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8355; SSE2-NEXT:    pand %xmm8, %xmm5
8356; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8357; SSE2-NEXT:    por %xmm5, %xmm6
8358; SSE2-NEXT:    pand %xmm6, %xmm0
8359; SSE2-NEXT:    pandn %xmm2, %xmm6
8360; SSE2-NEXT:    por %xmm6, %xmm0
8361; SSE2-NEXT:    movdqa %xmm1, %xmm2
8362; SSE2-NEXT:    pxor %xmm4, %xmm2
8363; SSE2-NEXT:    pxor %xmm3, %xmm4
8364; SSE2-NEXT:    movdqa %xmm4, %xmm5
8365; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8366; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8367; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8368; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8369; SSE2-NEXT:    pand %xmm6, %xmm2
8370; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8371; SSE2-NEXT:    por %xmm2, %xmm4
8372; SSE2-NEXT:    pand %xmm4, %xmm1
8373; SSE2-NEXT:    pandn %xmm3, %xmm4
8374; SSE2-NEXT:    por %xmm4, %xmm1
8375; SSE2-NEXT:    retq
8376;
8377; SSE4-LABEL: test166:
8378; SSE4:       # %bb.0: # %entry
8379; SSE4-NEXT:    movdqa %xmm0, %xmm4
8380; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8381; SSE4-NEXT:    movdqa %xmm0, %xmm6
8382; SSE4-NEXT:    pxor %xmm5, %xmm6
8383; SSE4-NEXT:    movdqa %xmm2, %xmm0
8384; SSE4-NEXT:    pxor %xmm5, %xmm0
8385; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8386; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8387; SSE4-NEXT:    movdqa %xmm1, %xmm0
8388; SSE4-NEXT:    pxor %xmm5, %xmm0
8389; SSE4-NEXT:    pxor %xmm3, %xmm5
8390; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8391; SSE4-NEXT:    movdqa %xmm5, %xmm0
8392; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8393; SSE4-NEXT:    movapd %xmm2, %xmm0
8394; SSE4-NEXT:    movapd %xmm3, %xmm1
8395; SSE4-NEXT:    retq
8396;
8397; AVX1-LABEL: test166:
8398; AVX1:       # %bb.0: # %entry
8399; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8400; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8401; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8402; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8403; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8404; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8405; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8406; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8407; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8408; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8409; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8410; AVX1-NEXT:    retq
8411;
8412; AVX2-LABEL: test166:
8413; AVX2:       # %bb.0: # %entry
8414; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8415; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8416; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8417; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8418; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8419; AVX2-NEXT:    retq
8420;
8421; AVX512F-LABEL: test166:
8422; AVX512F:       # %bb.0: # %entry
8423; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8424; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8425; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8426; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8427; AVX512F-NEXT:    retq
8428;
8429; AVX512BW-LABEL: test166:
8430; AVX512BW:       # %bb.0: # %entry
8431; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8432; AVX512BW-NEXT:    retq
8433entry:
8434  %cmp = icmp ule <4 x i64> %a, %b
8435  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8436  ret <4 x i64> %sel
8437}
8438
8439define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
8440; SSE2-LABEL: test167:
8441; SSE2:       # %bb.0: # %entry
8442; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8443; SSE2-NEXT:    movdqa %xmm2, %xmm5
8444; SSE2-NEXT:    pxor %xmm4, %xmm5
8445; SSE2-NEXT:    movdqa %xmm0, %xmm6
8446; SSE2-NEXT:    pxor %xmm4, %xmm6
8447; SSE2-NEXT:    movdqa %xmm6, %xmm7
8448; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8449; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8450; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8451; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8452; SSE2-NEXT:    pand %xmm8, %xmm5
8453; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8454; SSE2-NEXT:    por %xmm5, %xmm6
8455; SSE2-NEXT:    pand %xmm6, %xmm0
8456; SSE2-NEXT:    pandn %xmm2, %xmm6
8457; SSE2-NEXT:    por %xmm6, %xmm0
8458; SSE2-NEXT:    movdqa %xmm3, %xmm2
8459; SSE2-NEXT:    pxor %xmm4, %xmm2
8460; SSE2-NEXT:    pxor %xmm1, %xmm4
8461; SSE2-NEXT:    movdqa %xmm4, %xmm5
8462; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8463; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8464; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8465; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8466; SSE2-NEXT:    pand %xmm6, %xmm2
8467; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8468; SSE2-NEXT:    por %xmm2, %xmm4
8469; SSE2-NEXT:    pand %xmm4, %xmm1
8470; SSE2-NEXT:    pandn %xmm3, %xmm4
8471; SSE2-NEXT:    por %xmm4, %xmm1
8472; SSE2-NEXT:    retq
8473;
8474; SSE4-LABEL: test167:
8475; SSE4:       # %bb.0: # %entry
8476; SSE4-NEXT:    movdqa %xmm0, %xmm4
8477; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8478; SSE4-NEXT:    movdqa %xmm2, %xmm6
8479; SSE4-NEXT:    pxor %xmm5, %xmm6
8480; SSE4-NEXT:    pxor %xmm5, %xmm0
8481; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8482; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8483; SSE4-NEXT:    movdqa %xmm3, %xmm0
8484; SSE4-NEXT:    pxor %xmm5, %xmm0
8485; SSE4-NEXT:    pxor %xmm1, %xmm5
8486; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8487; SSE4-NEXT:    movdqa %xmm5, %xmm0
8488; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8489; SSE4-NEXT:    movapd %xmm2, %xmm0
8490; SSE4-NEXT:    movapd %xmm3, %xmm1
8491; SSE4-NEXT:    retq
8492;
8493; AVX1-LABEL: test167:
8494; AVX1:       # %bb.0: # %entry
8495; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8496; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8497; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8498; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8499; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8500; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8501; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8502; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8503; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8504; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8505; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8506; AVX1-NEXT:    retq
8507;
8508; AVX2-LABEL: test167:
8509; AVX2:       # %bb.0: # %entry
8510; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8511; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8512; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8513; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8514; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8515; AVX2-NEXT:    retq
8516;
8517; AVX512F-LABEL: test167:
8518; AVX512F:       # %bb.0: # %entry
8519; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8520; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8521; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8522; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8523; AVX512F-NEXT:    retq
8524;
8525; AVX512BW-LABEL: test167:
8526; AVX512BW:       # %bb.0: # %entry
8527; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8528; AVX512BW-NEXT:    retq
8529entry:
8530  %cmp = icmp ugt <4 x i64> %a, %b
8531  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8532  ret <4 x i64> %sel
8533}
8534
8535define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
8536; SSE2-LABEL: test168:
8537; SSE2:       # %bb.0: # %entry
8538; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8539; SSE2-NEXT:    movdqa %xmm2, %xmm5
8540; SSE2-NEXT:    pxor %xmm4, %xmm5
8541; SSE2-NEXT:    movdqa %xmm0, %xmm6
8542; SSE2-NEXT:    pxor %xmm4, %xmm6
8543; SSE2-NEXT:    movdqa %xmm6, %xmm7
8544; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8545; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8546; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8547; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8548; SSE2-NEXT:    pand %xmm8, %xmm5
8549; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8550; SSE2-NEXT:    por %xmm5, %xmm6
8551; SSE2-NEXT:    pand %xmm6, %xmm0
8552; SSE2-NEXT:    pandn %xmm2, %xmm6
8553; SSE2-NEXT:    por %xmm6, %xmm0
8554; SSE2-NEXT:    movdqa %xmm3, %xmm2
8555; SSE2-NEXT:    pxor %xmm4, %xmm2
8556; SSE2-NEXT:    pxor %xmm1, %xmm4
8557; SSE2-NEXT:    movdqa %xmm4, %xmm5
8558; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8559; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8560; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8561; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8562; SSE2-NEXT:    pand %xmm6, %xmm2
8563; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8564; SSE2-NEXT:    por %xmm2, %xmm4
8565; SSE2-NEXT:    pand %xmm4, %xmm1
8566; SSE2-NEXT:    pandn %xmm3, %xmm4
8567; SSE2-NEXT:    por %xmm4, %xmm1
8568; SSE2-NEXT:    retq
8569;
8570; SSE4-LABEL: test168:
8571; SSE4:       # %bb.0: # %entry
8572; SSE4-NEXT:    movdqa %xmm0, %xmm4
8573; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8574; SSE4-NEXT:    movdqa %xmm2, %xmm6
8575; SSE4-NEXT:    pxor %xmm5, %xmm6
8576; SSE4-NEXT:    pxor %xmm5, %xmm0
8577; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8578; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8579; SSE4-NEXT:    movdqa %xmm3, %xmm0
8580; SSE4-NEXT:    pxor %xmm5, %xmm0
8581; SSE4-NEXT:    pxor %xmm1, %xmm5
8582; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8583; SSE4-NEXT:    movdqa %xmm5, %xmm0
8584; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8585; SSE4-NEXT:    movapd %xmm2, %xmm0
8586; SSE4-NEXT:    movapd %xmm3, %xmm1
8587; SSE4-NEXT:    retq
8588;
8589; AVX1-LABEL: test168:
8590; AVX1:       # %bb.0: # %entry
8591; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8592; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8593; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8594; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8595; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8596; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8597; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8598; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8599; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8600; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8601; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8602; AVX1-NEXT:    retq
8603;
8604; AVX2-LABEL: test168:
8605; AVX2:       # %bb.0: # %entry
8606; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8607; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8608; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8609; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8610; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8611; AVX2-NEXT:    retq
8612;
8613; AVX512F-LABEL: test168:
8614; AVX512F:       # %bb.0: # %entry
8615; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8616; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8617; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8618; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8619; AVX512F-NEXT:    retq
8620;
8621; AVX512BW-LABEL: test168:
8622; AVX512BW:       # %bb.0: # %entry
8623; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8624; AVX512BW-NEXT:    retq
8625entry:
8626  %cmp = icmp uge <4 x i64> %a, %b
8627  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8628  ret <4 x i64> %sel
8629}
8630
8631define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
8632; SSE2-LABEL: test169:
8633; SSE2:       # %bb.0: # %entry
8634; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8635; SSE2-NEXT:    movdqa %xmm2, %xmm5
8636; SSE2-NEXT:    pxor %xmm4, %xmm5
8637; SSE2-NEXT:    movdqa %xmm0, %xmm6
8638; SSE2-NEXT:    pxor %xmm4, %xmm6
8639; SSE2-NEXT:    movdqa %xmm6, %xmm7
8640; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8641; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8642; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8643; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8644; SSE2-NEXT:    pand %xmm8, %xmm5
8645; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8646; SSE2-NEXT:    por %xmm5, %xmm6
8647; SSE2-NEXT:    pand %xmm6, %xmm0
8648; SSE2-NEXT:    pandn %xmm2, %xmm6
8649; SSE2-NEXT:    por %xmm6, %xmm0
8650; SSE2-NEXT:    movdqa %xmm3, %xmm2
8651; SSE2-NEXT:    pxor %xmm4, %xmm2
8652; SSE2-NEXT:    pxor %xmm1, %xmm4
8653; SSE2-NEXT:    movdqa %xmm4, %xmm5
8654; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8655; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8656; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8657; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8658; SSE2-NEXT:    pand %xmm6, %xmm2
8659; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8660; SSE2-NEXT:    por %xmm2, %xmm4
8661; SSE2-NEXT:    pand %xmm4, %xmm1
8662; SSE2-NEXT:    pandn %xmm3, %xmm4
8663; SSE2-NEXT:    por %xmm4, %xmm1
8664; SSE2-NEXT:    retq
8665;
8666; SSE4-LABEL: test169:
8667; SSE4:       # %bb.0: # %entry
8668; SSE4-NEXT:    movdqa %xmm0, %xmm4
8669; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8670; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8671; SSE4-NEXT:    movdqa %xmm1, %xmm0
8672; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8673; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8674; SSE4-NEXT:    movapd %xmm2, %xmm0
8675; SSE4-NEXT:    movapd %xmm3, %xmm1
8676; SSE4-NEXT:    retq
8677;
8678; AVX1-LABEL: test169:
8679; AVX1:       # %bb.0: # %entry
8680; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8681; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8682; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8683; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8684; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8685; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8686; AVX1-NEXT:    retq
8687;
8688; AVX2-LABEL: test169:
8689; AVX2:       # %bb.0: # %entry
8690; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8691; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8692; AVX2-NEXT:    retq
8693;
8694; AVX512F-LABEL: test169:
8695; AVX512F:       # %bb.0: # %entry
8696; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8697; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8698; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8699; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8700; AVX512F-NEXT:    retq
8701;
8702; AVX512BW-LABEL: test169:
8703; AVX512BW:       # %bb.0: # %entry
8704; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8705; AVX512BW-NEXT:    retq
8706entry:
8707  %cmp = icmp slt <4 x i64> %a, %b
8708  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8709  ret <4 x i64> %sel
8710}
8711
8712define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
8713; SSE2-LABEL: test170:
8714; SSE2:       # %bb.0: # %entry
8715; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8716; SSE2-NEXT:    movdqa %xmm2, %xmm5
8717; SSE2-NEXT:    pxor %xmm4, %xmm5
8718; SSE2-NEXT:    movdqa %xmm0, %xmm6
8719; SSE2-NEXT:    pxor %xmm4, %xmm6
8720; SSE2-NEXT:    movdqa %xmm6, %xmm7
8721; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8722; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8723; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8724; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8725; SSE2-NEXT:    pand %xmm8, %xmm5
8726; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8727; SSE2-NEXT:    por %xmm5, %xmm6
8728; SSE2-NEXT:    pand %xmm6, %xmm0
8729; SSE2-NEXT:    pandn %xmm2, %xmm6
8730; SSE2-NEXT:    por %xmm6, %xmm0
8731; SSE2-NEXT:    movdqa %xmm3, %xmm2
8732; SSE2-NEXT:    pxor %xmm4, %xmm2
8733; SSE2-NEXT:    pxor %xmm1, %xmm4
8734; SSE2-NEXT:    movdqa %xmm4, %xmm5
8735; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8736; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8737; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8738; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8739; SSE2-NEXT:    pand %xmm6, %xmm2
8740; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8741; SSE2-NEXT:    por %xmm2, %xmm4
8742; SSE2-NEXT:    pand %xmm4, %xmm1
8743; SSE2-NEXT:    pandn %xmm3, %xmm4
8744; SSE2-NEXT:    por %xmm4, %xmm1
8745; SSE2-NEXT:    retq
8746;
8747; SSE4-LABEL: test170:
8748; SSE4:       # %bb.0: # %entry
8749; SSE4-NEXT:    movdqa %xmm0, %xmm4
8750; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8751; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8752; SSE4-NEXT:    movdqa %xmm1, %xmm0
8753; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8754; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8755; SSE4-NEXT:    movapd %xmm2, %xmm0
8756; SSE4-NEXT:    movapd %xmm3, %xmm1
8757; SSE4-NEXT:    retq
8758;
8759; AVX1-LABEL: test170:
8760; AVX1:       # %bb.0: # %entry
8761; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8762; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8763; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8764; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8765; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8766; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8767; AVX1-NEXT:    retq
8768;
8769; AVX2-LABEL: test170:
8770; AVX2:       # %bb.0: # %entry
8771; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8772; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8773; AVX2-NEXT:    retq
8774;
8775; AVX512F-LABEL: test170:
8776; AVX512F:       # %bb.0: # %entry
8777; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8778; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8779; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8780; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8781; AVX512F-NEXT:    retq
8782;
8783; AVX512BW-LABEL: test170:
8784; AVX512BW:       # %bb.0: # %entry
8785; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8786; AVX512BW-NEXT:    retq
8787entry:
8788  %cmp = icmp sle <4 x i64> %a, %b
8789  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8790  ret <4 x i64> %sel
8791}
8792
8793define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
8794; SSE2-LABEL: test171:
8795; SSE2:       # %bb.0: # %entry
8796; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8797; SSE2-NEXT:    movdqa %xmm0, %xmm5
8798; SSE2-NEXT:    pxor %xmm4, %xmm5
8799; SSE2-NEXT:    movdqa %xmm2, %xmm6
8800; SSE2-NEXT:    pxor %xmm4, %xmm6
8801; SSE2-NEXT:    movdqa %xmm6, %xmm7
8802; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8803; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8804; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8805; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8806; SSE2-NEXT:    pand %xmm8, %xmm5
8807; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8808; SSE2-NEXT:    por %xmm5, %xmm6
8809; SSE2-NEXT:    pand %xmm6, %xmm0
8810; SSE2-NEXT:    pandn %xmm2, %xmm6
8811; SSE2-NEXT:    por %xmm6, %xmm0
8812; SSE2-NEXT:    movdqa %xmm1, %xmm2
8813; SSE2-NEXT:    pxor %xmm4, %xmm2
8814; SSE2-NEXT:    pxor %xmm3, %xmm4
8815; SSE2-NEXT:    movdqa %xmm4, %xmm5
8816; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8817; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8818; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8819; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8820; SSE2-NEXT:    pand %xmm6, %xmm2
8821; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8822; SSE2-NEXT:    por %xmm2, %xmm4
8823; SSE2-NEXT:    pand %xmm4, %xmm1
8824; SSE2-NEXT:    pandn %xmm3, %xmm4
8825; SSE2-NEXT:    por %xmm4, %xmm1
8826; SSE2-NEXT:    retq
8827;
8828; SSE4-LABEL: test171:
8829; SSE4:       # %bb.0: # %entry
8830; SSE4-NEXT:    movdqa %xmm0, %xmm4
8831; SSE4-NEXT:    movdqa %xmm2, %xmm0
8832; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8833; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8834; SSE4-NEXT:    movdqa %xmm3, %xmm0
8835; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8836; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8837; SSE4-NEXT:    movapd %xmm2, %xmm0
8838; SSE4-NEXT:    movapd %xmm3, %xmm1
8839; SSE4-NEXT:    retq
8840;
8841; AVX1-LABEL: test171:
8842; AVX1:       # %bb.0: # %entry
8843; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8844; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8845; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8846; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8847; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8848; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8849; AVX1-NEXT:    retq
8850;
8851; AVX2-LABEL: test171:
8852; AVX2:       # %bb.0: # %entry
8853; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8854; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8855; AVX2-NEXT:    retq
8856;
8857; AVX512F-LABEL: test171:
8858; AVX512F:       # %bb.0: # %entry
8859; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8860; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8861; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8862; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8863; AVX512F-NEXT:    retq
8864;
8865; AVX512BW-LABEL: test171:
8866; AVX512BW:       # %bb.0: # %entry
8867; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8868; AVX512BW-NEXT:    retq
8869entry:
8870  %cmp = icmp sgt <4 x i64> %a, %b
8871  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8872  ret <4 x i64> %sel
8873}
8874
8875define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
8876; SSE2-LABEL: test172:
8877; SSE2:       # %bb.0: # %entry
8878; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8879; SSE2-NEXT:    movdqa %xmm0, %xmm5
8880; SSE2-NEXT:    pxor %xmm4, %xmm5
8881; SSE2-NEXT:    movdqa %xmm2, %xmm6
8882; SSE2-NEXT:    pxor %xmm4, %xmm6
8883; SSE2-NEXT:    movdqa %xmm6, %xmm7
8884; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8885; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8886; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8887; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8888; SSE2-NEXT:    pand %xmm8, %xmm5
8889; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8890; SSE2-NEXT:    por %xmm5, %xmm6
8891; SSE2-NEXT:    pand %xmm6, %xmm0
8892; SSE2-NEXT:    pandn %xmm2, %xmm6
8893; SSE2-NEXT:    por %xmm6, %xmm0
8894; SSE2-NEXT:    movdqa %xmm1, %xmm2
8895; SSE2-NEXT:    pxor %xmm4, %xmm2
8896; SSE2-NEXT:    pxor %xmm3, %xmm4
8897; SSE2-NEXT:    movdqa %xmm4, %xmm5
8898; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8899; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8900; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8901; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8902; SSE2-NEXT:    pand %xmm6, %xmm2
8903; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8904; SSE2-NEXT:    por %xmm2, %xmm4
8905; SSE2-NEXT:    pand %xmm4, %xmm1
8906; SSE2-NEXT:    pandn %xmm3, %xmm4
8907; SSE2-NEXT:    por %xmm4, %xmm1
8908; SSE2-NEXT:    retq
8909;
8910; SSE4-LABEL: test172:
8911; SSE4:       # %bb.0: # %entry
8912; SSE4-NEXT:    movdqa %xmm0, %xmm4
8913; SSE4-NEXT:    movdqa %xmm2, %xmm0
8914; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8915; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8916; SSE4-NEXT:    movdqa %xmm3, %xmm0
8917; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8918; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8919; SSE4-NEXT:    movapd %xmm2, %xmm0
8920; SSE4-NEXT:    movapd %xmm3, %xmm1
8921; SSE4-NEXT:    retq
8922;
8923; AVX1-LABEL: test172:
8924; AVX1:       # %bb.0: # %entry
8925; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8926; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8927; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8928; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8929; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8930; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8931; AVX1-NEXT:    retq
8932;
8933; AVX2-LABEL: test172:
8934; AVX2:       # %bb.0: # %entry
8935; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8936; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8937; AVX2-NEXT:    retq
8938;
8939; AVX512F-LABEL: test172:
8940; AVX512F:       # %bb.0: # %entry
8941; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8942; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8943; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8944; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8945; AVX512F-NEXT:    retq
8946;
8947; AVX512BW-LABEL: test172:
8948; AVX512BW:       # %bb.0: # %entry
8949; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8950; AVX512BW-NEXT:    retq
8951entry:
8952  %cmp = icmp sge <4 x i64> %a, %b
8953  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8954  ret <4 x i64> %sel
8955}
8956
8957define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
8958; SSE2-LABEL: test173:
8959; SSE2:       # %bb.0: # %entry
8960; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8961; SSE2-NEXT:    movdqa %xmm2, %xmm5
8962; SSE2-NEXT:    pxor %xmm4, %xmm5
8963; SSE2-NEXT:    movdqa %xmm0, %xmm6
8964; SSE2-NEXT:    pxor %xmm4, %xmm6
8965; SSE2-NEXT:    movdqa %xmm6, %xmm7
8966; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8967; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8968; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8969; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8970; SSE2-NEXT:    pand %xmm8, %xmm5
8971; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8972; SSE2-NEXT:    por %xmm5, %xmm6
8973; SSE2-NEXT:    pand %xmm6, %xmm0
8974; SSE2-NEXT:    pandn %xmm2, %xmm6
8975; SSE2-NEXT:    por %xmm6, %xmm0
8976; SSE2-NEXT:    movdqa %xmm3, %xmm2
8977; SSE2-NEXT:    pxor %xmm4, %xmm2
8978; SSE2-NEXT:    pxor %xmm1, %xmm4
8979; SSE2-NEXT:    movdqa %xmm4, %xmm5
8980; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8981; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8982; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8983; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8984; SSE2-NEXT:    pand %xmm6, %xmm2
8985; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8986; SSE2-NEXT:    por %xmm2, %xmm4
8987; SSE2-NEXT:    pand %xmm4, %xmm1
8988; SSE2-NEXT:    pandn %xmm3, %xmm4
8989; SSE2-NEXT:    por %xmm4, %xmm1
8990; SSE2-NEXT:    retq
8991;
8992; SSE4-LABEL: test173:
8993; SSE4:       # %bb.0: # %entry
8994; SSE4-NEXT:    movdqa %xmm0, %xmm4
8995; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8996; SSE4-NEXT:    movdqa %xmm2, %xmm6
8997; SSE4-NEXT:    pxor %xmm5, %xmm6
8998; SSE4-NEXT:    pxor %xmm5, %xmm0
8999; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9000; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9001; SSE4-NEXT:    movdqa %xmm3, %xmm0
9002; SSE4-NEXT:    pxor %xmm5, %xmm0
9003; SSE4-NEXT:    pxor %xmm1, %xmm5
9004; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9005; SSE4-NEXT:    movdqa %xmm5, %xmm0
9006; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9007; SSE4-NEXT:    movapd %xmm2, %xmm0
9008; SSE4-NEXT:    movapd %xmm3, %xmm1
9009; SSE4-NEXT:    retq
9010;
9011; AVX1-LABEL: test173:
9012; AVX1:       # %bb.0: # %entry
9013; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9014; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9015; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9016; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9017; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9018; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9019; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
9020; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
9021; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9022; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9023; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9024; AVX1-NEXT:    retq
9025;
9026; AVX2-LABEL: test173:
9027; AVX2:       # %bb.0: # %entry
9028; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9029; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9030; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9031; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9032; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9033; AVX2-NEXT:    retq
9034;
9035; AVX512F-LABEL: test173:
9036; AVX512F:       # %bb.0: # %entry
9037; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9038; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9039; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9040; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9041; AVX512F-NEXT:    retq
9042;
9043; AVX512BW-LABEL: test173:
9044; AVX512BW:       # %bb.0: # %entry
9045; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9046; AVX512BW-NEXT:    retq
9047entry:
9048  %cmp = icmp ult <4 x i64> %a, %b
9049  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9050  ret <4 x i64> %sel
9051}
9052
9053define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
9054; SSE2-LABEL: test174:
9055; SSE2:       # %bb.0: # %entry
9056; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9057; SSE2-NEXT:    movdqa %xmm2, %xmm5
9058; SSE2-NEXT:    pxor %xmm4, %xmm5
9059; SSE2-NEXT:    movdqa %xmm0, %xmm6
9060; SSE2-NEXT:    pxor %xmm4, %xmm6
9061; SSE2-NEXT:    movdqa %xmm6, %xmm7
9062; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9063; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9064; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9065; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9066; SSE2-NEXT:    pand %xmm8, %xmm5
9067; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9068; SSE2-NEXT:    por %xmm5, %xmm6
9069; SSE2-NEXT:    pand %xmm6, %xmm0
9070; SSE2-NEXT:    pandn %xmm2, %xmm6
9071; SSE2-NEXT:    por %xmm6, %xmm0
9072; SSE2-NEXT:    movdqa %xmm3, %xmm2
9073; SSE2-NEXT:    pxor %xmm4, %xmm2
9074; SSE2-NEXT:    pxor %xmm1, %xmm4
9075; SSE2-NEXT:    movdqa %xmm4, %xmm5
9076; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9077; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9078; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9079; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9080; SSE2-NEXT:    pand %xmm6, %xmm2
9081; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9082; SSE2-NEXT:    por %xmm2, %xmm4
9083; SSE2-NEXT:    pand %xmm4, %xmm1
9084; SSE2-NEXT:    pandn %xmm3, %xmm4
9085; SSE2-NEXT:    por %xmm4, %xmm1
9086; SSE2-NEXT:    retq
9087;
9088; SSE4-LABEL: test174:
9089; SSE4:       # %bb.0: # %entry
9090; SSE4-NEXT:    movdqa %xmm0, %xmm4
9091; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9092; SSE4-NEXT:    movdqa %xmm2, %xmm6
9093; SSE4-NEXT:    pxor %xmm5, %xmm6
9094; SSE4-NEXT:    pxor %xmm5, %xmm0
9095; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9096; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9097; SSE4-NEXT:    movdqa %xmm3, %xmm0
9098; SSE4-NEXT:    pxor %xmm5, %xmm0
9099; SSE4-NEXT:    pxor %xmm1, %xmm5
9100; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9101; SSE4-NEXT:    movdqa %xmm5, %xmm0
9102; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9103; SSE4-NEXT:    movapd %xmm2, %xmm0
9104; SSE4-NEXT:    movapd %xmm3, %xmm1
9105; SSE4-NEXT:    retq
9106;
9107; AVX1-LABEL: test174:
9108; AVX1:       # %bb.0: # %entry
9109; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9110; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9111; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9112; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9113; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9114; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9115; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
9116; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
9117; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9118; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9119; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9120; AVX1-NEXT:    retq
9121;
9122; AVX2-LABEL: test174:
9123; AVX2:       # %bb.0: # %entry
9124; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9125; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9126; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9127; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9128; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9129; AVX2-NEXT:    retq
9130;
9131; AVX512F-LABEL: test174:
9132; AVX512F:       # %bb.0: # %entry
9133; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9134; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9135; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9136; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9137; AVX512F-NEXT:    retq
9138;
9139; AVX512BW-LABEL: test174:
9140; AVX512BW:       # %bb.0: # %entry
9141; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9142; AVX512BW-NEXT:    retq
9143entry:
9144  %cmp = icmp ule <4 x i64> %a, %b
9145  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9146  ret <4 x i64> %sel
9147}
9148
9149define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
9150; SSE2-LABEL: test175:
9151; SSE2:       # %bb.0: # %entry
9152; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9153; SSE2-NEXT:    movdqa %xmm0, %xmm5
9154; SSE2-NEXT:    pxor %xmm4, %xmm5
9155; SSE2-NEXT:    movdqa %xmm2, %xmm6
9156; SSE2-NEXT:    pxor %xmm4, %xmm6
9157; SSE2-NEXT:    movdqa %xmm6, %xmm7
9158; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9159; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9160; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9161; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9162; SSE2-NEXT:    pand %xmm8, %xmm5
9163; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9164; SSE2-NEXT:    por %xmm5, %xmm6
9165; SSE2-NEXT:    pand %xmm6, %xmm0
9166; SSE2-NEXT:    pandn %xmm2, %xmm6
9167; SSE2-NEXT:    por %xmm6, %xmm0
9168; SSE2-NEXT:    movdqa %xmm1, %xmm2
9169; SSE2-NEXT:    pxor %xmm4, %xmm2
9170; SSE2-NEXT:    pxor %xmm3, %xmm4
9171; SSE2-NEXT:    movdqa %xmm4, %xmm5
9172; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9173; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9174; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9175; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9176; SSE2-NEXT:    pand %xmm6, %xmm2
9177; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9178; SSE2-NEXT:    por %xmm2, %xmm4
9179; SSE2-NEXT:    pand %xmm4, %xmm1
9180; SSE2-NEXT:    pandn %xmm3, %xmm4
9181; SSE2-NEXT:    por %xmm4, %xmm1
9182; SSE2-NEXT:    retq
9183;
9184; SSE4-LABEL: test175:
9185; SSE4:       # %bb.0: # %entry
9186; SSE4-NEXT:    movdqa %xmm0, %xmm4
9187; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9188; SSE4-NEXT:    movdqa %xmm0, %xmm6
9189; SSE4-NEXT:    pxor %xmm5, %xmm6
9190; SSE4-NEXT:    movdqa %xmm2, %xmm0
9191; SSE4-NEXT:    pxor %xmm5, %xmm0
9192; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9193; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9194; SSE4-NEXT:    movdqa %xmm1, %xmm0
9195; SSE4-NEXT:    pxor %xmm5, %xmm0
9196; SSE4-NEXT:    pxor %xmm3, %xmm5
9197; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9198; SSE4-NEXT:    movdqa %xmm5, %xmm0
9199; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9200; SSE4-NEXT:    movapd %xmm2, %xmm0
9201; SSE4-NEXT:    movapd %xmm3, %xmm1
9202; SSE4-NEXT:    retq
9203;
9204; AVX1-LABEL: test175:
9205; AVX1:       # %bb.0: # %entry
9206; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9207; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9208; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9209; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9210; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9211; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9212; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9213; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9214; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9215; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9216; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9217; AVX1-NEXT:    retq
9218;
9219; AVX2-LABEL: test175:
9220; AVX2:       # %bb.0: # %entry
9221; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9222; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9223; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9224; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9225; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9226; AVX2-NEXT:    retq
9227;
9228; AVX512F-LABEL: test175:
9229; AVX512F:       # %bb.0: # %entry
9230; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9231; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9232; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9233; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9234; AVX512F-NEXT:    retq
9235;
9236; AVX512BW-LABEL: test175:
9237; AVX512BW:       # %bb.0: # %entry
9238; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9239; AVX512BW-NEXT:    retq
9240entry:
9241  %cmp = icmp ugt <4 x i64> %a, %b
9242  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9243  ret <4 x i64> %sel
9244}
9245
9246define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
9247; SSE2-LABEL: test176:
9248; SSE2:       # %bb.0: # %entry
9249; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9250; SSE2-NEXT:    movdqa %xmm0, %xmm5
9251; SSE2-NEXT:    pxor %xmm4, %xmm5
9252; SSE2-NEXT:    movdqa %xmm2, %xmm6
9253; SSE2-NEXT:    pxor %xmm4, %xmm6
9254; SSE2-NEXT:    movdqa %xmm6, %xmm7
9255; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9256; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9257; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9258; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9259; SSE2-NEXT:    pand %xmm8, %xmm5
9260; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9261; SSE2-NEXT:    por %xmm5, %xmm6
9262; SSE2-NEXT:    pand %xmm6, %xmm0
9263; SSE2-NEXT:    pandn %xmm2, %xmm6
9264; SSE2-NEXT:    por %xmm6, %xmm0
9265; SSE2-NEXT:    movdqa %xmm1, %xmm2
9266; SSE2-NEXT:    pxor %xmm4, %xmm2
9267; SSE2-NEXT:    pxor %xmm3, %xmm4
9268; SSE2-NEXT:    movdqa %xmm4, %xmm5
9269; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9270; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9271; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9272; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9273; SSE2-NEXT:    pand %xmm6, %xmm2
9274; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9275; SSE2-NEXT:    por %xmm2, %xmm4
9276; SSE2-NEXT:    pand %xmm4, %xmm1
9277; SSE2-NEXT:    pandn %xmm3, %xmm4
9278; SSE2-NEXT:    por %xmm4, %xmm1
9279; SSE2-NEXT:    retq
9280;
9281; SSE4-LABEL: test176:
9282; SSE4:       # %bb.0: # %entry
9283; SSE4-NEXT:    movdqa %xmm0, %xmm4
9284; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9285; SSE4-NEXT:    movdqa %xmm0, %xmm6
9286; SSE4-NEXT:    pxor %xmm5, %xmm6
9287; SSE4-NEXT:    movdqa %xmm2, %xmm0
9288; SSE4-NEXT:    pxor %xmm5, %xmm0
9289; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9290; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9291; SSE4-NEXT:    movdqa %xmm1, %xmm0
9292; SSE4-NEXT:    pxor %xmm5, %xmm0
9293; SSE4-NEXT:    pxor %xmm3, %xmm5
9294; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9295; SSE4-NEXT:    movdqa %xmm5, %xmm0
9296; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9297; SSE4-NEXT:    movapd %xmm2, %xmm0
9298; SSE4-NEXT:    movapd %xmm3, %xmm1
9299; SSE4-NEXT:    retq
9300;
9301; AVX1-LABEL: test176:
9302; AVX1:       # %bb.0: # %entry
9303; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9304; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9305; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9306; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9307; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9308; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9309; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9310; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9311; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9312; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9313; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9314; AVX1-NEXT:    retq
9315;
9316; AVX2-LABEL: test176:
9317; AVX2:       # %bb.0: # %entry
9318; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9319; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9320; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9321; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9322; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9323; AVX2-NEXT:    retq
9324;
9325; AVX512F-LABEL: test176:
9326; AVX512F:       # %bb.0: # %entry
9327; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9328; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9329; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9330; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9331; AVX512F-NEXT:    retq
9332;
9333; AVX512BW-LABEL: test176:
9334; AVX512BW:       # %bb.0: # %entry
9335; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9336; AVX512BW-NEXT:    retq
9337entry:
9338  %cmp = icmp uge <4 x i64> %a, %b
9339  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9340  ret <4 x i64> %sel
9341}
9342
9343define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
9344; SSE2-LABEL: test177:
9345; SSE2:       # %bb.0: # %entry
9346; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9347; SSE2-NEXT:    movdqa %xmm0, %xmm3
9348; SSE2-NEXT:    pxor %xmm2, %xmm3
9349; SSE2-NEXT:    pxor %xmm1, %xmm2
9350; SSE2-NEXT:    movdqa %xmm2, %xmm4
9351; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9352; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9353; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9354; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9355; SSE2-NEXT:    pand %xmm5, %xmm2
9356; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9357; SSE2-NEXT:    por %xmm2, %xmm3
9358; SSE2-NEXT:    pand %xmm3, %xmm0
9359; SSE2-NEXT:    pandn %xmm1, %xmm3
9360; SSE2-NEXT:    por %xmm3, %xmm0
9361; SSE2-NEXT:    retq
9362;
9363; SSE4-LABEL: test177:
9364; SSE4:       # %bb.0: # %entry
9365; SSE4-NEXT:    movdqa %xmm0, %xmm2
9366; SSE4-NEXT:    movdqa %xmm1, %xmm0
9367; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9368; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9369; SSE4-NEXT:    movapd %xmm1, %xmm0
9370; SSE4-NEXT:    retq
9371;
9372; AVX1-LABEL: test177:
9373; AVX1:       # %bb.0: # %entry
9374; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9375; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9376; AVX1-NEXT:    retq
9377;
9378; AVX2-LABEL: test177:
9379; AVX2:       # %bb.0: # %entry
9380; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9381; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9382; AVX2-NEXT:    retq
9383;
9384; AVX512F-LABEL: test177:
9385; AVX512F:       # %bb.0: # %entry
9386; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9387; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9388; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9389; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9390; AVX512F-NEXT:    retq
9391;
9392; AVX512BW-LABEL: test177:
9393; AVX512BW:       # %bb.0: # %entry
9394; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9395; AVX512BW-NEXT:    retq
9396entry:
9397  %cmp = icmp slt <2 x i64> %a, %b
9398  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9399  ret <2 x i64> %sel
9400}
9401
9402define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
9403; SSE2-LABEL: test178:
9404; SSE2:       # %bb.0: # %entry
9405; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9406; SSE2-NEXT:    movdqa %xmm0, %xmm3
9407; SSE2-NEXT:    pxor %xmm2, %xmm3
9408; SSE2-NEXT:    pxor %xmm1, %xmm2
9409; SSE2-NEXT:    movdqa %xmm2, %xmm4
9410; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9411; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9412; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9413; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9414; SSE2-NEXT:    pand %xmm5, %xmm2
9415; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9416; SSE2-NEXT:    por %xmm2, %xmm3
9417; SSE2-NEXT:    pand %xmm3, %xmm0
9418; SSE2-NEXT:    pandn %xmm1, %xmm3
9419; SSE2-NEXT:    por %xmm3, %xmm0
9420; SSE2-NEXT:    retq
9421;
9422; SSE4-LABEL: test178:
9423; SSE4:       # %bb.0: # %entry
9424; SSE4-NEXT:    movdqa %xmm0, %xmm2
9425; SSE4-NEXT:    movdqa %xmm1, %xmm0
9426; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9427; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9428; SSE4-NEXT:    movapd %xmm1, %xmm0
9429; SSE4-NEXT:    retq
9430;
9431; AVX1-LABEL: test178:
9432; AVX1:       # %bb.0: # %entry
9433; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9434; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9435; AVX1-NEXT:    retq
9436;
9437; AVX2-LABEL: test178:
9438; AVX2:       # %bb.0: # %entry
9439; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9440; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9441; AVX2-NEXT:    retq
9442;
9443; AVX512F-LABEL: test178:
9444; AVX512F:       # %bb.0: # %entry
9445; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9446; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9447; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9448; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9449; AVX512F-NEXT:    retq
9450;
9451; AVX512BW-LABEL: test178:
9452; AVX512BW:       # %bb.0: # %entry
9453; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9454; AVX512BW-NEXT:    retq
9455entry:
9456  %cmp = icmp sle <2 x i64> %a, %b
9457  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9458  ret <2 x i64> %sel
9459}
9460
9461define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
9462; SSE2-LABEL: test179:
9463; SSE2:       # %bb.0: # %entry
9464; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9465; SSE2-NEXT:    movdqa %xmm1, %xmm3
9466; SSE2-NEXT:    pxor %xmm2, %xmm3
9467; SSE2-NEXT:    pxor %xmm0, %xmm2
9468; SSE2-NEXT:    movdqa %xmm2, %xmm4
9469; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9470; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9471; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9472; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9473; SSE2-NEXT:    pand %xmm5, %xmm2
9474; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9475; SSE2-NEXT:    por %xmm2, %xmm3
9476; SSE2-NEXT:    pand %xmm3, %xmm0
9477; SSE2-NEXT:    pandn %xmm1, %xmm3
9478; SSE2-NEXT:    por %xmm3, %xmm0
9479; SSE2-NEXT:    retq
9480;
9481; SSE4-LABEL: test179:
9482; SSE4:       # %bb.0: # %entry
9483; SSE4-NEXT:    movdqa %xmm0, %xmm2
9484; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9485; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9486; SSE4-NEXT:    movapd %xmm1, %xmm0
9487; SSE4-NEXT:    retq
9488;
9489; AVX1-LABEL: test179:
9490; AVX1:       # %bb.0: # %entry
9491; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9492; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9493; AVX1-NEXT:    retq
9494;
9495; AVX2-LABEL: test179:
9496; AVX2:       # %bb.0: # %entry
9497; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9498; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9499; AVX2-NEXT:    retq
9500;
9501; AVX512F-LABEL: test179:
9502; AVX512F:       # %bb.0: # %entry
9503; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9504; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9505; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9506; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9507; AVX512F-NEXT:    retq
9508;
9509; AVX512BW-LABEL: test179:
9510; AVX512BW:       # %bb.0: # %entry
9511; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9512; AVX512BW-NEXT:    retq
9513entry:
9514  %cmp = icmp sgt <2 x i64> %a, %b
9515  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9516  ret <2 x i64> %sel
9517}
9518
9519define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
9520; SSE2-LABEL: test180:
9521; SSE2:       # %bb.0: # %entry
9522; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9523; SSE2-NEXT:    movdqa %xmm1, %xmm3
9524; SSE2-NEXT:    pxor %xmm2, %xmm3
9525; SSE2-NEXT:    pxor %xmm0, %xmm2
9526; SSE2-NEXT:    movdqa %xmm2, %xmm4
9527; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9528; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9529; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9530; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9531; SSE2-NEXT:    pand %xmm5, %xmm2
9532; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9533; SSE2-NEXT:    por %xmm2, %xmm3
9534; SSE2-NEXT:    pand %xmm3, %xmm0
9535; SSE2-NEXT:    pandn %xmm1, %xmm3
9536; SSE2-NEXT:    por %xmm3, %xmm0
9537; SSE2-NEXT:    retq
9538;
9539; SSE4-LABEL: test180:
9540; SSE4:       # %bb.0: # %entry
9541; SSE4-NEXT:    movdqa %xmm0, %xmm2
9542; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9543; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9544; SSE4-NEXT:    movapd %xmm1, %xmm0
9545; SSE4-NEXT:    retq
9546;
9547; AVX1-LABEL: test180:
9548; AVX1:       # %bb.0: # %entry
9549; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9550; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9551; AVX1-NEXT:    retq
9552;
9553; AVX2-LABEL: test180:
9554; AVX2:       # %bb.0: # %entry
9555; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9556; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9557; AVX2-NEXT:    retq
9558;
9559; AVX512F-LABEL: test180:
9560; AVX512F:       # %bb.0: # %entry
9561; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9562; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9563; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9564; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9565; AVX512F-NEXT:    retq
9566;
9567; AVX512BW-LABEL: test180:
9568; AVX512BW:       # %bb.0: # %entry
9569; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9570; AVX512BW-NEXT:    retq
9571entry:
9572  %cmp = icmp sge <2 x i64> %a, %b
9573  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9574  ret <2 x i64> %sel
9575}
9576
9577define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
9578; SSE2-LABEL: test181:
9579; SSE2:       # %bb.0: # %entry
9580; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9581; SSE2-NEXT:    movdqa %xmm0, %xmm3
9582; SSE2-NEXT:    pxor %xmm2, %xmm3
9583; SSE2-NEXT:    pxor %xmm1, %xmm2
9584; SSE2-NEXT:    movdqa %xmm2, %xmm4
9585; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9586; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9587; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9588; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9589; SSE2-NEXT:    pand %xmm5, %xmm2
9590; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9591; SSE2-NEXT:    por %xmm2, %xmm3
9592; SSE2-NEXT:    pand %xmm3, %xmm0
9593; SSE2-NEXT:    pandn %xmm1, %xmm3
9594; SSE2-NEXT:    por %xmm3, %xmm0
9595; SSE2-NEXT:    retq
9596;
9597; SSE4-LABEL: test181:
9598; SSE4:       # %bb.0: # %entry
9599; SSE4-NEXT:    movdqa %xmm0, %xmm2
9600; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9601; SSE4-NEXT:    movdqa %xmm2, %xmm3
9602; SSE4-NEXT:    pxor %xmm0, %xmm3
9603; SSE4-NEXT:    pxor %xmm1, %xmm0
9604; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9605; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9606; SSE4-NEXT:    movapd %xmm1, %xmm0
9607; SSE4-NEXT:    retq
9608;
9609; AVX1-LABEL: test181:
9610; AVX1:       # %bb.0: # %entry
9611; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9612; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9613; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9614; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9615; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9616; AVX1-NEXT:    retq
9617;
9618; AVX2-LABEL: test181:
9619; AVX2:       # %bb.0: # %entry
9620; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9621; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9622; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9623; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9624; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9625; AVX2-NEXT:    retq
9626;
9627; AVX512F-LABEL: test181:
9628; AVX512F:       # %bb.0: # %entry
9629; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9630; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9631; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9632; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9633; AVX512F-NEXT:    retq
9634;
9635; AVX512BW-LABEL: test181:
9636; AVX512BW:       # %bb.0: # %entry
9637; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9638; AVX512BW-NEXT:    retq
9639entry:
9640  %cmp = icmp ult <2 x i64> %a, %b
9641  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9642  ret <2 x i64> %sel
9643}
9644
9645define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
9646; SSE2-LABEL: test182:
9647; SSE2:       # %bb.0: # %entry
9648; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9649; SSE2-NEXT:    movdqa %xmm0, %xmm3
9650; SSE2-NEXT:    pxor %xmm2, %xmm3
9651; SSE2-NEXT:    pxor %xmm1, %xmm2
9652; SSE2-NEXT:    movdqa %xmm2, %xmm4
9653; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9654; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9655; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9656; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9657; SSE2-NEXT:    pand %xmm5, %xmm2
9658; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9659; SSE2-NEXT:    por %xmm2, %xmm3
9660; SSE2-NEXT:    pand %xmm3, %xmm0
9661; SSE2-NEXT:    pandn %xmm1, %xmm3
9662; SSE2-NEXT:    por %xmm3, %xmm0
9663; SSE2-NEXT:    retq
9664;
9665; SSE4-LABEL: test182:
9666; SSE4:       # %bb.0: # %entry
9667; SSE4-NEXT:    movdqa %xmm0, %xmm2
9668; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9669; SSE4-NEXT:    movdqa %xmm2, %xmm3
9670; SSE4-NEXT:    pxor %xmm0, %xmm3
9671; SSE4-NEXT:    pxor %xmm1, %xmm0
9672; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9673; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9674; SSE4-NEXT:    movapd %xmm1, %xmm0
9675; SSE4-NEXT:    retq
9676;
9677; AVX1-LABEL: test182:
9678; AVX1:       # %bb.0: # %entry
9679; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9680; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9681; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9682; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9683; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9684; AVX1-NEXT:    retq
9685;
9686; AVX2-LABEL: test182:
9687; AVX2:       # %bb.0: # %entry
9688; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9689; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9690; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9691; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9692; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9693; AVX2-NEXT:    retq
9694;
9695; AVX512F-LABEL: test182:
9696; AVX512F:       # %bb.0: # %entry
9697; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9698; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9699; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9700; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9701; AVX512F-NEXT:    retq
9702;
9703; AVX512BW-LABEL: test182:
9704; AVX512BW:       # %bb.0: # %entry
9705; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9706; AVX512BW-NEXT:    retq
9707entry:
9708  %cmp = icmp ule <2 x i64> %a, %b
9709  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9710  ret <2 x i64> %sel
9711}
9712
9713define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
9714; SSE2-LABEL: test183:
9715; SSE2:       # %bb.0: # %entry
9716; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9717; SSE2-NEXT:    movdqa %xmm1, %xmm3
9718; SSE2-NEXT:    pxor %xmm2, %xmm3
9719; SSE2-NEXT:    pxor %xmm0, %xmm2
9720; SSE2-NEXT:    movdqa %xmm2, %xmm4
9721; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9722; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9723; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9724; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9725; SSE2-NEXT:    pand %xmm5, %xmm2
9726; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9727; SSE2-NEXT:    por %xmm2, %xmm3
9728; SSE2-NEXT:    pand %xmm3, %xmm0
9729; SSE2-NEXT:    pandn %xmm1, %xmm3
9730; SSE2-NEXT:    por %xmm3, %xmm0
9731; SSE2-NEXT:    retq
9732;
9733; SSE4-LABEL: test183:
9734; SSE4:       # %bb.0: # %entry
9735; SSE4-NEXT:    movdqa %xmm0, %xmm2
9736; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9737; SSE4-NEXT:    movdqa %xmm1, %xmm3
9738; SSE4-NEXT:    pxor %xmm0, %xmm3
9739; SSE4-NEXT:    pxor %xmm2, %xmm0
9740; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9741; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9742; SSE4-NEXT:    movapd %xmm1, %xmm0
9743; SSE4-NEXT:    retq
9744;
9745; AVX1-LABEL: test183:
9746; AVX1:       # %bb.0: # %entry
9747; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9748; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9749; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9750; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9751; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9752; AVX1-NEXT:    retq
9753;
9754; AVX2-LABEL: test183:
9755; AVX2:       # %bb.0: # %entry
9756; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9757; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9758; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9759; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9760; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9761; AVX2-NEXT:    retq
9762;
9763; AVX512F-LABEL: test183:
9764; AVX512F:       # %bb.0: # %entry
9765; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9766; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9767; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9768; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9769; AVX512F-NEXT:    retq
9770;
9771; AVX512BW-LABEL: test183:
9772; AVX512BW:       # %bb.0: # %entry
9773; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9774; AVX512BW-NEXT:    retq
9775entry:
9776  %cmp = icmp ugt <2 x i64> %a, %b
9777  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9778  ret <2 x i64> %sel
9779}
9780
9781define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
9782; SSE2-LABEL: test184:
9783; SSE2:       # %bb.0: # %entry
9784; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9785; SSE2-NEXT:    movdqa %xmm1, %xmm3
9786; SSE2-NEXT:    pxor %xmm2, %xmm3
9787; SSE2-NEXT:    pxor %xmm0, %xmm2
9788; SSE2-NEXT:    movdqa %xmm2, %xmm4
9789; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9790; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9791; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9792; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9793; SSE2-NEXT:    pand %xmm5, %xmm2
9794; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9795; SSE2-NEXT:    por %xmm2, %xmm3
9796; SSE2-NEXT:    pand %xmm3, %xmm0
9797; SSE2-NEXT:    pandn %xmm1, %xmm3
9798; SSE2-NEXT:    por %xmm3, %xmm0
9799; SSE2-NEXT:    retq
9800;
9801; SSE4-LABEL: test184:
9802; SSE4:       # %bb.0: # %entry
9803; SSE4-NEXT:    movdqa %xmm0, %xmm2
9804; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9805; SSE4-NEXT:    movdqa %xmm1, %xmm3
9806; SSE4-NEXT:    pxor %xmm0, %xmm3
9807; SSE4-NEXT:    pxor %xmm2, %xmm0
9808; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9809; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9810; SSE4-NEXT:    movapd %xmm1, %xmm0
9811; SSE4-NEXT:    retq
9812;
9813; AVX1-LABEL: test184:
9814; AVX1:       # %bb.0: # %entry
9815; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9816; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9817; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9818; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9819; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9820; AVX1-NEXT:    retq
9821;
9822; AVX2-LABEL: test184:
9823; AVX2:       # %bb.0: # %entry
9824; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9825; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9826; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9827; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9828; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9829; AVX2-NEXT:    retq
9830;
9831; AVX512F-LABEL: test184:
9832; AVX512F:       # %bb.0: # %entry
9833; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9834; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9835; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9836; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9837; AVX512F-NEXT:    retq
9838;
9839; AVX512BW-LABEL: test184:
9840; AVX512BW:       # %bb.0: # %entry
9841; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9842; AVX512BW-NEXT:    retq
9843entry:
9844  %cmp = icmp uge <2 x i64> %a, %b
9845  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9846  ret <2 x i64> %sel
9847}
9848
9849define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
9850; SSE2-LABEL: test185:
9851; SSE2:       # %bb.0: # %entry
9852; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9853; SSE2-NEXT:    movdqa %xmm1, %xmm3
9854; SSE2-NEXT:    pxor %xmm2, %xmm3
9855; SSE2-NEXT:    pxor %xmm0, %xmm2
9856; SSE2-NEXT:    movdqa %xmm2, %xmm4
9857; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9858; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9859; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9860; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9861; SSE2-NEXT:    pand %xmm5, %xmm2
9862; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9863; SSE2-NEXT:    por %xmm2, %xmm3
9864; SSE2-NEXT:    pand %xmm3, %xmm0
9865; SSE2-NEXT:    pandn %xmm1, %xmm3
9866; SSE2-NEXT:    por %xmm3, %xmm0
9867; SSE2-NEXT:    retq
9868;
9869; SSE4-LABEL: test185:
9870; SSE4:       # %bb.0: # %entry
9871; SSE4-NEXT:    movdqa %xmm0, %xmm2
9872; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9873; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9874; SSE4-NEXT:    movapd %xmm1, %xmm0
9875; SSE4-NEXT:    retq
9876;
9877; AVX1-LABEL: test185:
9878; AVX1:       # %bb.0: # %entry
9879; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9880; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9881; AVX1-NEXT:    retq
9882;
9883; AVX2-LABEL: test185:
9884; AVX2:       # %bb.0: # %entry
9885; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9886; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9887; AVX2-NEXT:    retq
9888;
9889; AVX512F-LABEL: test185:
9890; AVX512F:       # %bb.0: # %entry
9891; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9892; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9893; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9894; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9895; AVX512F-NEXT:    retq
9896;
9897; AVX512BW-LABEL: test185:
9898; AVX512BW:       # %bb.0: # %entry
9899; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9900; AVX512BW-NEXT:    retq
9901entry:
9902  %cmp = icmp slt <2 x i64> %a, %b
9903  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9904  ret <2 x i64> %sel
9905}
9906
9907define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
9908; SSE2-LABEL: test186:
9909; SSE2:       # %bb.0: # %entry
9910; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9911; SSE2-NEXT:    movdqa %xmm1, %xmm3
9912; SSE2-NEXT:    pxor %xmm2, %xmm3
9913; SSE2-NEXT:    pxor %xmm0, %xmm2
9914; SSE2-NEXT:    movdqa %xmm2, %xmm4
9915; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9916; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9917; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9918; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9919; SSE2-NEXT:    pand %xmm5, %xmm2
9920; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9921; SSE2-NEXT:    por %xmm2, %xmm3
9922; SSE2-NEXT:    pand %xmm3, %xmm0
9923; SSE2-NEXT:    pandn %xmm1, %xmm3
9924; SSE2-NEXT:    por %xmm3, %xmm0
9925; SSE2-NEXT:    retq
9926;
9927; SSE4-LABEL: test186:
9928; SSE4:       # %bb.0: # %entry
9929; SSE4-NEXT:    movdqa %xmm0, %xmm2
9930; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9931; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9932; SSE4-NEXT:    movapd %xmm1, %xmm0
9933; SSE4-NEXT:    retq
9934;
9935; AVX1-LABEL: test186:
9936; AVX1:       # %bb.0: # %entry
9937; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9938; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9939; AVX1-NEXT:    retq
9940;
9941; AVX2-LABEL: test186:
9942; AVX2:       # %bb.0: # %entry
9943; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9944; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9945; AVX2-NEXT:    retq
9946;
9947; AVX512F-LABEL: test186:
9948; AVX512F:       # %bb.0: # %entry
9949; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9950; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9951; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9952; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9953; AVX512F-NEXT:    retq
9954;
9955; AVX512BW-LABEL: test186:
9956; AVX512BW:       # %bb.0: # %entry
9957; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9958; AVX512BW-NEXT:    retq
9959entry:
9960  %cmp = icmp sle <2 x i64> %a, %b
9961  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9962  ret <2 x i64> %sel
9963}
9964
9965define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
9966; SSE2-LABEL: test187:
9967; SSE2:       # %bb.0: # %entry
9968; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9969; SSE2-NEXT:    movdqa %xmm0, %xmm3
9970; SSE2-NEXT:    pxor %xmm2, %xmm3
9971; SSE2-NEXT:    pxor %xmm1, %xmm2
9972; SSE2-NEXT:    movdqa %xmm2, %xmm4
9973; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9974; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9975; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9976; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9977; SSE2-NEXT:    pand %xmm5, %xmm2
9978; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9979; SSE2-NEXT:    por %xmm2, %xmm3
9980; SSE2-NEXT:    pand %xmm3, %xmm0
9981; SSE2-NEXT:    pandn %xmm1, %xmm3
9982; SSE2-NEXT:    por %xmm3, %xmm0
9983; SSE2-NEXT:    retq
9984;
9985; SSE4-LABEL: test187:
9986; SSE4:       # %bb.0: # %entry
9987; SSE4-NEXT:    movdqa %xmm0, %xmm2
9988; SSE4-NEXT:    movdqa %xmm1, %xmm0
9989; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9990; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9991; SSE4-NEXT:    movapd %xmm1, %xmm0
9992; SSE4-NEXT:    retq
9993;
9994; AVX1-LABEL: test187:
9995; AVX1:       # %bb.0: # %entry
9996; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9997; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9998; AVX1-NEXT:    retq
9999;
10000; AVX2-LABEL: test187:
10001; AVX2:       # %bb.0: # %entry
10002; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10003; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10004; AVX2-NEXT:    retq
10005;
10006; AVX512F-LABEL: test187:
10007; AVX512F:       # %bb.0: # %entry
10008; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10009; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10010; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
10011; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10012; AVX512F-NEXT:    retq
10013;
10014; AVX512BW-LABEL: test187:
10015; AVX512BW:       # %bb.0: # %entry
10016; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
10017; AVX512BW-NEXT:    retq
10018entry:
10019  %cmp = icmp sgt <2 x i64> %a, %b
10020  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10021  ret <2 x i64> %sel
10022}
10023
10024define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
10025; SSE2-LABEL: test188:
10026; SSE2:       # %bb.0: # %entry
10027; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
10028; SSE2-NEXT:    movdqa %xmm0, %xmm3
10029; SSE2-NEXT:    pxor %xmm2, %xmm3
10030; SSE2-NEXT:    pxor %xmm1, %xmm2
10031; SSE2-NEXT:    movdqa %xmm2, %xmm4
10032; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10033; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10034; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10035; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10036; SSE2-NEXT:    pand %xmm5, %xmm2
10037; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10038; SSE2-NEXT:    por %xmm2, %xmm3
10039; SSE2-NEXT:    pand %xmm3, %xmm0
10040; SSE2-NEXT:    pandn %xmm1, %xmm3
10041; SSE2-NEXT:    por %xmm3, %xmm0
10042; SSE2-NEXT:    retq
10043;
10044; SSE4-LABEL: test188:
10045; SSE4:       # %bb.0: # %entry
10046; SSE4-NEXT:    movdqa %xmm0, %xmm2
10047; SSE4-NEXT:    movdqa %xmm1, %xmm0
10048; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
10049; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10050; SSE4-NEXT:    movapd %xmm1, %xmm0
10051; SSE4-NEXT:    retq
10052;
10053; AVX1-LABEL: test188:
10054; AVX1:       # %bb.0: # %entry
10055; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10056; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10057; AVX1-NEXT:    retq
10058;
10059; AVX2-LABEL: test188:
10060; AVX2:       # %bb.0: # %entry
10061; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10062; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10063; AVX2-NEXT:    retq
10064;
10065; AVX512F-LABEL: test188:
10066; AVX512F:       # %bb.0: # %entry
10067; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10068; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10069; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
10070; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10071; AVX512F-NEXT:    retq
10072;
10073; AVX512BW-LABEL: test188:
10074; AVX512BW:       # %bb.0: # %entry
10075; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
10076; AVX512BW-NEXT:    retq
10077entry:
10078  %cmp = icmp sge <2 x i64> %a, %b
10079  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10080  ret <2 x i64> %sel
10081}
10082
10083define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
10084; SSE2-LABEL: test189:
10085; SSE2:       # %bb.0: # %entry
10086; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10087; SSE2-NEXT:    movdqa %xmm1, %xmm3
10088; SSE2-NEXT:    pxor %xmm2, %xmm3
10089; SSE2-NEXT:    pxor %xmm0, %xmm2
10090; SSE2-NEXT:    movdqa %xmm2, %xmm4
10091; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10092; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10093; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10094; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10095; SSE2-NEXT:    pand %xmm5, %xmm2
10096; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10097; SSE2-NEXT:    por %xmm2, %xmm3
10098; SSE2-NEXT:    pand %xmm3, %xmm0
10099; SSE2-NEXT:    pandn %xmm1, %xmm3
10100; SSE2-NEXT:    por %xmm3, %xmm0
10101; SSE2-NEXT:    retq
10102;
10103; SSE4-LABEL: test189:
10104; SSE4:       # %bb.0: # %entry
10105; SSE4-NEXT:    movdqa %xmm0, %xmm2
10106; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10107; SSE4-NEXT:    movdqa %xmm1, %xmm3
10108; SSE4-NEXT:    pxor %xmm0, %xmm3
10109; SSE4-NEXT:    pxor %xmm2, %xmm0
10110; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10111; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10112; SSE4-NEXT:    movapd %xmm1, %xmm0
10113; SSE4-NEXT:    retq
10114;
10115; AVX1-LABEL: test189:
10116; AVX1:       # %bb.0: # %entry
10117; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10118; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10119; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10120; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10121; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10122; AVX1-NEXT:    retq
10123;
10124; AVX2-LABEL: test189:
10125; AVX2:       # %bb.0: # %entry
10126; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10127; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10128; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10129; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10130; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10131; AVX2-NEXT:    retq
10132;
10133; AVX512F-LABEL: test189:
10134; AVX512F:       # %bb.0: # %entry
10135; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10136; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10137; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
10138; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10139; AVX512F-NEXT:    retq
10140;
10141; AVX512BW-LABEL: test189:
10142; AVX512BW:       # %bb.0: # %entry
10143; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10144; AVX512BW-NEXT:    retq
10145entry:
10146  %cmp = icmp ult <2 x i64> %a, %b
10147  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10148  ret <2 x i64> %sel
10149}
10150
10151define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
10152; SSE2-LABEL: test190:
10153; SSE2:       # %bb.0: # %entry
10154; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10155; SSE2-NEXT:    movdqa %xmm1, %xmm3
10156; SSE2-NEXT:    pxor %xmm2, %xmm3
10157; SSE2-NEXT:    pxor %xmm0, %xmm2
10158; SSE2-NEXT:    movdqa %xmm2, %xmm4
10159; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10160; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10161; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10162; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10163; SSE2-NEXT:    pand %xmm5, %xmm2
10164; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10165; SSE2-NEXT:    por %xmm2, %xmm3
10166; SSE2-NEXT:    pand %xmm3, %xmm0
10167; SSE2-NEXT:    pandn %xmm1, %xmm3
10168; SSE2-NEXT:    por %xmm3, %xmm0
10169; SSE2-NEXT:    retq
10170;
10171; SSE4-LABEL: test190:
10172; SSE4:       # %bb.0: # %entry
10173; SSE4-NEXT:    movdqa %xmm0, %xmm2
10174; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10175; SSE4-NEXT:    movdqa %xmm1, %xmm3
10176; SSE4-NEXT:    pxor %xmm0, %xmm3
10177; SSE4-NEXT:    pxor %xmm2, %xmm0
10178; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10179; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10180; SSE4-NEXT:    movapd %xmm1, %xmm0
10181; SSE4-NEXT:    retq
10182;
10183; AVX1-LABEL: test190:
10184; AVX1:       # %bb.0: # %entry
10185; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10186; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10187; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10188; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10189; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10190; AVX1-NEXT:    retq
10191;
10192; AVX2-LABEL: test190:
10193; AVX2:       # %bb.0: # %entry
10194; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10195; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10196; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10197; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10198; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10199; AVX2-NEXT:    retq
10200;
10201; AVX512F-LABEL: test190:
10202; AVX512F:       # %bb.0: # %entry
10203; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10204; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10205; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
10206; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10207; AVX512F-NEXT:    retq
10208;
10209; AVX512BW-LABEL: test190:
10210; AVX512BW:       # %bb.0: # %entry
10211; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10212; AVX512BW-NEXT:    retq
10213entry:
10214  %cmp = icmp ule <2 x i64> %a, %b
10215  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10216  ret <2 x i64> %sel
10217}
10218
10219define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
10220; SSE2-LABEL: test191:
10221; SSE2:       # %bb.0: # %entry
10222; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10223; SSE2-NEXT:    movdqa %xmm0, %xmm3
10224; SSE2-NEXT:    pxor %xmm2, %xmm3
10225; SSE2-NEXT:    pxor %xmm1, %xmm2
10226; SSE2-NEXT:    movdqa %xmm2, %xmm4
10227; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10228; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10229; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10230; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10231; SSE2-NEXT:    pand %xmm5, %xmm2
10232; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10233; SSE2-NEXT:    por %xmm2, %xmm3
10234; SSE2-NEXT:    pand %xmm3, %xmm0
10235; SSE2-NEXT:    pandn %xmm1, %xmm3
10236; SSE2-NEXT:    por %xmm3, %xmm0
10237; SSE2-NEXT:    retq
10238;
10239; SSE4-LABEL: test191:
10240; SSE4:       # %bb.0: # %entry
10241; SSE4-NEXT:    movdqa %xmm0, %xmm2
10242; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10243; SSE4-NEXT:    movdqa %xmm2, %xmm3
10244; SSE4-NEXT:    pxor %xmm0, %xmm3
10245; SSE4-NEXT:    pxor %xmm1, %xmm0
10246; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10247; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10248; SSE4-NEXT:    movapd %xmm1, %xmm0
10249; SSE4-NEXT:    retq
10250;
10251; AVX1-LABEL: test191:
10252; AVX1:       # %bb.0: # %entry
10253; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10254; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10255; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10256; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10257; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10258; AVX1-NEXT:    retq
10259;
10260; AVX2-LABEL: test191:
10261; AVX2:       # %bb.0: # %entry
10262; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10263; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10264; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10265; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10266; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10267; AVX2-NEXT:    retq
10268;
10269; AVX512F-LABEL: test191:
10270; AVX512F:       # %bb.0: # %entry
10271; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10272; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10273; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
10274; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10275; AVX512F-NEXT:    retq
10276;
10277; AVX512BW-LABEL: test191:
10278; AVX512BW:       # %bb.0: # %entry
10279; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10280; AVX512BW-NEXT:    retq
10281entry:
10282  %cmp = icmp ugt <2 x i64> %a, %b
10283  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10284  ret <2 x i64> %sel
10285}
10286
10287define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
10288; SSE2-LABEL: test192:
10289; SSE2:       # %bb.0: # %entry
10290; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10291; SSE2-NEXT:    movdqa %xmm0, %xmm3
10292; SSE2-NEXT:    pxor %xmm2, %xmm3
10293; SSE2-NEXT:    pxor %xmm1, %xmm2
10294; SSE2-NEXT:    movdqa %xmm2, %xmm4
10295; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10296; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10297; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10298; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10299; SSE2-NEXT:    pand %xmm5, %xmm2
10300; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10301; SSE2-NEXT:    por %xmm2, %xmm3
10302; SSE2-NEXT:    pand %xmm3, %xmm0
10303; SSE2-NEXT:    pandn %xmm1, %xmm3
10304; SSE2-NEXT:    por %xmm3, %xmm0
10305; SSE2-NEXT:    retq
10306;
10307; SSE4-LABEL: test192:
10308; SSE4:       # %bb.0: # %entry
10309; SSE4-NEXT:    movdqa %xmm0, %xmm2
10310; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10311; SSE4-NEXT:    movdqa %xmm2, %xmm3
10312; SSE4-NEXT:    pxor %xmm0, %xmm3
10313; SSE4-NEXT:    pxor %xmm1, %xmm0
10314; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10315; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10316; SSE4-NEXT:    movapd %xmm1, %xmm0
10317; SSE4-NEXT:    retq
10318;
10319; AVX1-LABEL: test192:
10320; AVX1:       # %bb.0: # %entry
10321; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10322; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10323; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10324; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10325; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10326; AVX1-NEXT:    retq
10327;
10328; AVX2-LABEL: test192:
10329; AVX2:       # %bb.0: # %entry
10330; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10331; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10332; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10333; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10334; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10335; AVX2-NEXT:    retq
10336;
10337; AVX512F-LABEL: test192:
10338; AVX512F:       # %bb.0: # %entry
10339; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10340; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10341; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
10342; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10343; AVX512F-NEXT:    retq
10344;
10345; AVX512BW-LABEL: test192:
10346; AVX512BW:       # %bb.0: # %entry
10347; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10348; AVX512BW-NEXT:    retq
10349entry:
10350  %cmp = icmp uge <2 x i64> %a, %b
10351  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10352  ret <2 x i64> %sel
10353}
10354