1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefixes=SSE,SSE2
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefixes=SSE,SSE4
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW
8
9define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) {
10; SSE2-LABEL: test1:
11; SSE2:       # %bb.0: # %entry
12; SSE2-NEXT:    movdqa %xmm1, %xmm2
13; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
14; SSE2-NEXT:    pand %xmm2, %xmm0
15; SSE2-NEXT:    pandn %xmm1, %xmm2
16; SSE2-NEXT:    por %xmm2, %xmm0
17; SSE2-NEXT:    retq
18;
19; SSE4-LABEL: test1:
20; SSE4:       # %bb.0: # %entry
21; SSE4-NEXT:    pminsb %xmm1, %xmm0
22; SSE4-NEXT:    retq
23;
24; AVX-LABEL: test1:
25; AVX:       # %bb.0: # %entry
26; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
27; AVX-NEXT:    retq
28entry:
29  %cmp = icmp slt <16 x i8> %a, %b
30  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
31  ret <16 x i8> %sel
32}
33
34define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
35; SSE2-LABEL: test2:
36; SSE2:       # %bb.0: # %entry
37; SSE2-NEXT:    movdqa %xmm1, %xmm2
38; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
39; SSE2-NEXT:    pand %xmm2, %xmm0
40; SSE2-NEXT:    pandn %xmm1, %xmm2
41; SSE2-NEXT:    por %xmm2, %xmm0
42; SSE2-NEXT:    retq
43;
44; SSE4-LABEL: test2:
45; SSE4:       # %bb.0: # %entry
46; SSE4-NEXT:    pminsb %xmm1, %xmm0
47; SSE4-NEXT:    retq
48;
49; AVX-LABEL: test2:
50; AVX:       # %bb.0: # %entry
51; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
52; AVX-NEXT:    retq
53entry:
54  %cmp = icmp sle <16 x i8> %a, %b
55  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
56  ret <16 x i8> %sel
57}
58
59define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
60; SSE2-LABEL: test3:
61; SSE2:       # %bb.0: # %entry
62; SSE2-NEXT:    movdqa %xmm0, %xmm2
63; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
64; SSE2-NEXT:    pand %xmm2, %xmm0
65; SSE2-NEXT:    pandn %xmm1, %xmm2
66; SSE2-NEXT:    por %xmm2, %xmm0
67; SSE2-NEXT:    retq
68;
69; SSE4-LABEL: test3:
70; SSE4:       # %bb.0: # %entry
71; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
72; SSE4-NEXT:    retq
73;
74; AVX-LABEL: test3:
75; AVX:       # %bb.0: # %entry
76; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
77; AVX-NEXT:    retq
78entry:
79  %cmp = icmp sgt <16 x i8> %a, %b
80  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
81  ret <16 x i8> %sel
82}
83
84define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
85; SSE2-LABEL: test4:
86; SSE2:       # %bb.0: # %entry
87; SSE2-NEXT:    movdqa %xmm0, %xmm2
88; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
89; SSE2-NEXT:    pand %xmm2, %xmm0
90; SSE2-NEXT:    pandn %xmm1, %xmm2
91; SSE2-NEXT:    por %xmm2, %xmm0
92; SSE2-NEXT:    retq
93;
94; SSE4-LABEL: test4:
95; SSE4:       # %bb.0: # %entry
96; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
97; SSE4-NEXT:    retq
98;
99; AVX-LABEL: test4:
100; AVX:       # %bb.0: # %entry
101; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
102; AVX-NEXT:    retq
103entry:
104  %cmp = icmp sge <16 x i8> %a, %b
105  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
106  ret <16 x i8> %sel
107}
108
109define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
110; SSE-LABEL: test5:
111; SSE:       # %bb.0: # %entry
112; SSE-NEXT:    pminub %xmm1, %xmm0
113; SSE-NEXT:    retq
114;
115; AVX-LABEL: test5:
116; AVX:       # %bb.0: # %entry
117; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
118; AVX-NEXT:    retq
119entry:
120  %cmp = icmp ult <16 x i8> %a, %b
121  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
122  ret <16 x i8> %sel
123}
124
125define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
126; SSE-LABEL: test6:
127; SSE:       # %bb.0: # %entry
128; SSE-NEXT:    pminub %xmm1, %xmm0
129; SSE-NEXT:    retq
130;
131; AVX-LABEL: test6:
132; AVX:       # %bb.0: # %entry
133; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
134; AVX-NEXT:    retq
135entry:
136  %cmp = icmp ule <16 x i8> %a, %b
137  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
138  ret <16 x i8> %sel
139}
140
141define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
142; SSE-LABEL: test7:
143; SSE:       # %bb.0: # %entry
144; SSE-NEXT:    pmaxub %xmm1, %xmm0
145; SSE-NEXT:    retq
146;
147; AVX-LABEL: test7:
148; AVX:       # %bb.0: # %entry
149; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
150; AVX-NEXT:    retq
151entry:
152  %cmp = icmp ugt <16 x i8> %a, %b
153  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
154  ret <16 x i8> %sel
155}
156
157define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
158; SSE-LABEL: test8:
159; SSE:       # %bb.0: # %entry
160; SSE-NEXT:    pmaxub %xmm1, %xmm0
161; SSE-NEXT:    retq
162;
163; AVX-LABEL: test8:
164; AVX:       # %bb.0: # %entry
165; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
166; AVX-NEXT:    retq
167entry:
168  %cmp = icmp uge <16 x i8> %a, %b
169  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
170  ret <16 x i8> %sel
171}
172
173define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
174; SSE-LABEL: test9:
175; SSE:       # %bb.0: # %entry
176; SSE-NEXT:    pminsw %xmm1, %xmm0
177; SSE-NEXT:    retq
178;
179; AVX-LABEL: test9:
180; AVX:       # %bb.0: # %entry
181; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
182; AVX-NEXT:    retq
183entry:
184  %cmp = icmp slt <8 x i16> %a, %b
185  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
186  ret <8 x i16> %sel
187}
188
189define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
190; SSE-LABEL: test10:
191; SSE:       # %bb.0: # %entry
192; SSE-NEXT:    pminsw %xmm1, %xmm0
193; SSE-NEXT:    retq
194;
195; AVX-LABEL: test10:
196; AVX:       # %bb.0: # %entry
197; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
198; AVX-NEXT:    retq
199entry:
200  %cmp = icmp sle <8 x i16> %a, %b
201  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
202  ret <8 x i16> %sel
203}
204
205define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
206; SSE-LABEL: test11:
207; SSE:       # %bb.0: # %entry
208; SSE-NEXT:    pmaxsw %xmm1, %xmm0
209; SSE-NEXT:    retq
210;
211; AVX-LABEL: test11:
212; AVX:       # %bb.0: # %entry
213; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
214; AVX-NEXT:    retq
215entry:
216  %cmp = icmp sgt <8 x i16> %a, %b
217  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
218  ret <8 x i16> %sel
219}
220
221define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
222; SSE-LABEL: test12:
223; SSE:       # %bb.0: # %entry
224; SSE-NEXT:    pmaxsw %xmm1, %xmm0
225; SSE-NEXT:    retq
226;
227; AVX-LABEL: test12:
228; AVX:       # %bb.0: # %entry
229; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
230; AVX-NEXT:    retq
231entry:
232  %cmp = icmp sge <8 x i16> %a, %b
233  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
234  ret <8 x i16> %sel
235}
236
237define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
238; SSE2-LABEL: test13:
239; SSE2:       # %bb.0: # %entry
240; SSE2-NEXT:    movdqa %xmm0, %xmm2
241; SSE2-NEXT:    psubusw %xmm1, %xmm2
242; SSE2-NEXT:    psubw %xmm2, %xmm0
243; SSE2-NEXT:    retq
244;
245; SSE4-LABEL: test13:
246; SSE4:       # %bb.0: # %entry
247; SSE4-NEXT:    pminuw %xmm1, %xmm0
248; SSE4-NEXT:    retq
249;
250; AVX-LABEL: test13:
251; AVX:       # %bb.0: # %entry
252; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
253; AVX-NEXT:    retq
254entry:
255  %cmp = icmp ult <8 x i16> %a, %b
256  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
257  ret <8 x i16> %sel
258}
259
260define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
261; SSE2-LABEL: test14:
262; SSE2:       # %bb.0: # %entry
263; SSE2-NEXT:    movdqa %xmm0, %xmm2
264; SSE2-NEXT:    psubusw %xmm1, %xmm2
265; SSE2-NEXT:    psubw %xmm2, %xmm0
266; SSE2-NEXT:    retq
267;
268; SSE4-LABEL: test14:
269; SSE4:       # %bb.0: # %entry
270; SSE4-NEXT:    pminuw %xmm1, %xmm0
271; SSE4-NEXT:    retq
272;
273; AVX-LABEL: test14:
274; AVX:       # %bb.0: # %entry
275; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
276; AVX-NEXT:    retq
277entry:
278  %cmp = icmp ule <8 x i16> %a, %b
279  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
280  ret <8 x i16> %sel
281}
282
283define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
284; SSE2-LABEL: test15:
285; SSE2:       # %bb.0: # %entry
286; SSE2-NEXT:    psubusw %xmm0, %xmm1
287; SSE2-NEXT:    paddw %xmm1, %xmm0
288; SSE2-NEXT:    retq
289;
290; SSE4-LABEL: test15:
291; SSE4:       # %bb.0: # %entry
292; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
293; SSE4-NEXT:    retq
294;
295; AVX-LABEL: test15:
296; AVX:       # %bb.0: # %entry
297; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
298; AVX-NEXT:    retq
299entry:
300  %cmp = icmp ugt <8 x i16> %a, %b
301  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
302  ret <8 x i16> %sel
303}
304
305define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
306; SSE2-LABEL: test16:
307; SSE2:       # %bb.0: # %entry
308; SSE2-NEXT:    psubusw %xmm0, %xmm1
309; SSE2-NEXT:    paddw %xmm1, %xmm0
310; SSE2-NEXT:    retq
311;
312; SSE4-LABEL: test16:
313; SSE4:       # %bb.0: # %entry
314; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
315; SSE4-NEXT:    retq
316;
317; AVX-LABEL: test16:
318; AVX:       # %bb.0: # %entry
319; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
320; AVX-NEXT:    retq
321entry:
322  %cmp = icmp uge <8 x i16> %a, %b
323  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
324  ret <8 x i16> %sel
325}
326
327define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
328; SSE2-LABEL: test17:
329; SSE2:       # %bb.0: # %entry
330; SSE2-NEXT:    movdqa %xmm1, %xmm2
331; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
332; SSE2-NEXT:    pand %xmm2, %xmm0
333; SSE2-NEXT:    pandn %xmm1, %xmm2
334; SSE2-NEXT:    por %xmm2, %xmm0
335; SSE2-NEXT:    retq
336;
337; SSE4-LABEL: test17:
338; SSE4:       # %bb.0: # %entry
339; SSE4-NEXT:    pminsd %xmm1, %xmm0
340; SSE4-NEXT:    retq
341;
342; AVX-LABEL: test17:
343; AVX:       # %bb.0: # %entry
344; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
345; AVX-NEXT:    retq
346entry:
347  %cmp = icmp slt <4 x i32> %a, %b
348  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
349  ret <4 x i32> %sel
350}
351
352define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
353; SSE2-LABEL: test18:
354; SSE2:       # %bb.0: # %entry
355; SSE2-NEXT:    movdqa %xmm1, %xmm2
356; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
357; SSE2-NEXT:    pand %xmm2, %xmm0
358; SSE2-NEXT:    pandn %xmm1, %xmm2
359; SSE2-NEXT:    por %xmm2, %xmm0
360; SSE2-NEXT:    retq
361;
362; SSE4-LABEL: test18:
363; SSE4:       # %bb.0: # %entry
364; SSE4-NEXT:    pminsd %xmm1, %xmm0
365; SSE4-NEXT:    retq
366;
367; AVX-LABEL: test18:
368; AVX:       # %bb.0: # %entry
369; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
370; AVX-NEXT:    retq
371entry:
372  %cmp = icmp sle <4 x i32> %a, %b
373  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
374  ret <4 x i32> %sel
375}
376
377define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
378; SSE2-LABEL: test19:
379; SSE2:       # %bb.0: # %entry
380; SSE2-NEXT:    movdqa %xmm0, %xmm2
381; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
382; SSE2-NEXT:    pand %xmm2, %xmm0
383; SSE2-NEXT:    pandn %xmm1, %xmm2
384; SSE2-NEXT:    por %xmm2, %xmm0
385; SSE2-NEXT:    retq
386;
387; SSE4-LABEL: test19:
388; SSE4:       # %bb.0: # %entry
389; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
390; SSE4-NEXT:    retq
391;
392; AVX-LABEL: test19:
393; AVX:       # %bb.0: # %entry
394; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
395; AVX-NEXT:    retq
396entry:
397  %cmp = icmp sgt <4 x i32> %a, %b
398  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
399  ret <4 x i32> %sel
400}
401
402define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
403; SSE2-LABEL: test20:
404; SSE2:       # %bb.0: # %entry
405; SSE2-NEXT:    movdqa %xmm0, %xmm2
406; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
407; SSE2-NEXT:    pand %xmm2, %xmm0
408; SSE2-NEXT:    pandn %xmm1, %xmm2
409; SSE2-NEXT:    por %xmm2, %xmm0
410; SSE2-NEXT:    retq
411;
412; SSE4-LABEL: test20:
413; SSE4:       # %bb.0: # %entry
414; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
415; SSE4-NEXT:    retq
416;
417; AVX-LABEL: test20:
418; AVX:       # %bb.0: # %entry
419; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
420; AVX-NEXT:    retq
421entry:
422  %cmp = icmp sge <4 x i32> %a, %b
423  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
424  ret <4 x i32> %sel
425}
426
427define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
428; SSE2-LABEL: test21:
429; SSE2:       # %bb.0: # %entry
430; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
431; SSE2-NEXT:    movdqa %xmm0, %xmm3
432; SSE2-NEXT:    pxor %xmm2, %xmm3
433; SSE2-NEXT:    pxor %xmm1, %xmm2
434; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
435; SSE2-NEXT:    pand %xmm2, %xmm0
436; SSE2-NEXT:    pandn %xmm1, %xmm2
437; SSE2-NEXT:    por %xmm2, %xmm0
438; SSE2-NEXT:    retq
439;
440; SSE4-LABEL: test21:
441; SSE4:       # %bb.0: # %entry
442; SSE4-NEXT:    pminud %xmm1, %xmm0
443; SSE4-NEXT:    retq
444;
445; AVX-LABEL: test21:
446; AVX:       # %bb.0: # %entry
447; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
448; AVX-NEXT:    retq
449entry:
450  %cmp = icmp ult <4 x i32> %a, %b
451  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
452  ret <4 x i32> %sel
453}
454
455define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
456; SSE2-LABEL: test22:
457; SSE2:       # %bb.0: # %entry
458; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
459; SSE2-NEXT:    movdqa %xmm0, %xmm3
460; SSE2-NEXT:    pxor %xmm2, %xmm3
461; SSE2-NEXT:    pxor %xmm1, %xmm2
462; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
463; SSE2-NEXT:    pand %xmm2, %xmm0
464; SSE2-NEXT:    pandn %xmm1, %xmm2
465; SSE2-NEXT:    por %xmm2, %xmm0
466; SSE2-NEXT:    retq
467;
468; SSE4-LABEL: test22:
469; SSE4:       # %bb.0: # %entry
470; SSE4-NEXT:    pminud %xmm1, %xmm0
471; SSE4-NEXT:    retq
472;
473; AVX-LABEL: test22:
474; AVX:       # %bb.0: # %entry
475; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
476; AVX-NEXT:    retq
477entry:
478  %cmp = icmp ule <4 x i32> %a, %b
479  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
480  ret <4 x i32> %sel
481}
482
483define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
484; SSE2-LABEL: test23:
485; SSE2:       # %bb.0: # %entry
486; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
487; SSE2-NEXT:    movdqa %xmm1, %xmm3
488; SSE2-NEXT:    pxor %xmm2, %xmm3
489; SSE2-NEXT:    pxor %xmm0, %xmm2
490; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
491; SSE2-NEXT:    pand %xmm2, %xmm0
492; SSE2-NEXT:    pandn %xmm1, %xmm2
493; SSE2-NEXT:    por %xmm2, %xmm0
494; SSE2-NEXT:    retq
495;
496; SSE4-LABEL: test23:
497; SSE4:       # %bb.0: # %entry
498; SSE4-NEXT:    pmaxud %xmm1, %xmm0
499; SSE4-NEXT:    retq
500;
501; AVX-LABEL: test23:
502; AVX:       # %bb.0: # %entry
503; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
504; AVX-NEXT:    retq
505entry:
506  %cmp = icmp ugt <4 x i32> %a, %b
507  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
508  ret <4 x i32> %sel
509}
510
511define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
512; SSE2-LABEL: test24:
513; SSE2:       # %bb.0: # %entry
514; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
515; SSE2-NEXT:    movdqa %xmm1, %xmm3
516; SSE2-NEXT:    pxor %xmm2, %xmm3
517; SSE2-NEXT:    pxor %xmm0, %xmm2
518; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
519; SSE2-NEXT:    pand %xmm2, %xmm0
520; SSE2-NEXT:    pandn %xmm1, %xmm2
521; SSE2-NEXT:    por %xmm2, %xmm0
522; SSE2-NEXT:    retq
523;
524; SSE4-LABEL: test24:
525; SSE4:       # %bb.0: # %entry
526; SSE4-NEXT:    pmaxud %xmm1, %xmm0
527; SSE4-NEXT:    retq
528;
529; AVX-LABEL: test24:
530; AVX:       # %bb.0: # %entry
531; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
532; AVX-NEXT:    retq
533entry:
534  %cmp = icmp uge <4 x i32> %a, %b
535  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
536  ret <4 x i32> %sel
537}
538
539define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
540; SSE2-LABEL: test25:
541; SSE2:       # %bb.0: # %entry
542; SSE2-NEXT:    movdqa %xmm2, %xmm4
543; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
544; SSE2-NEXT:    pand %xmm4, %xmm0
545; SSE2-NEXT:    pandn %xmm2, %xmm4
546; SSE2-NEXT:    por %xmm4, %xmm0
547; SSE2-NEXT:    movdqa %xmm3, %xmm2
548; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
549; SSE2-NEXT:    pand %xmm2, %xmm1
550; SSE2-NEXT:    pandn %xmm3, %xmm2
551; SSE2-NEXT:    por %xmm2, %xmm1
552; SSE2-NEXT:    retq
553;
554; SSE4-LABEL: test25:
555; SSE4:       # %bb.0: # %entry
556; SSE4-NEXT:    pminsb %xmm2, %xmm0
557; SSE4-NEXT:    pminsb %xmm3, %xmm1
558; SSE4-NEXT:    retq
559;
560; AVX1-LABEL: test25:
561; AVX1:       # %bb.0: # %entry
562; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
563; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
564; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
565; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
566; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
567; AVX1-NEXT:    retq
568;
569; AVX2-LABEL: test25:
570; AVX2:       # %bb.0: # %entry
571; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
572; AVX2-NEXT:    retq
573;
574; AVX512-LABEL: test25:
575; AVX512:       # %bb.0: # %entry
576; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
577; AVX512-NEXT:    retq
578entry:
579  %cmp = icmp slt <32 x i8> %a, %b
580  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
581  ret <32 x i8> %sel
582}
583
584define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
585; SSE2-LABEL: test26:
586; SSE2:       # %bb.0: # %entry
587; SSE2-NEXT:    movdqa %xmm2, %xmm4
588; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
589; SSE2-NEXT:    pand %xmm4, %xmm0
590; SSE2-NEXT:    pandn %xmm2, %xmm4
591; SSE2-NEXT:    por %xmm4, %xmm0
592; SSE2-NEXT:    movdqa %xmm3, %xmm2
593; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
594; SSE2-NEXT:    pand %xmm2, %xmm1
595; SSE2-NEXT:    pandn %xmm3, %xmm2
596; SSE2-NEXT:    por %xmm2, %xmm1
597; SSE2-NEXT:    retq
598;
599; SSE4-LABEL: test26:
600; SSE4:       # %bb.0: # %entry
601; SSE4-NEXT:    pminsb %xmm2, %xmm0
602; SSE4-NEXT:    pminsb %xmm3, %xmm1
603; SSE4-NEXT:    retq
604;
605; AVX1-LABEL: test26:
606; AVX1:       # %bb.0: # %entry
607; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
608; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
609; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
610; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
611; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
612; AVX1-NEXT:    retq
613;
614; AVX2-LABEL: test26:
615; AVX2:       # %bb.0: # %entry
616; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
617; AVX2-NEXT:    retq
618;
619; AVX512-LABEL: test26:
620; AVX512:       # %bb.0: # %entry
621; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
622; AVX512-NEXT:    retq
623entry:
624  %cmp = icmp sle <32 x i8> %a, %b
625  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
626  ret <32 x i8> %sel
627}
628
629define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
630; SSE2-LABEL: test27:
631; SSE2:       # %bb.0: # %entry
632; SSE2-NEXT:    movdqa %xmm0, %xmm4
633; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
634; SSE2-NEXT:    pand %xmm4, %xmm0
635; SSE2-NEXT:    pandn %xmm2, %xmm4
636; SSE2-NEXT:    por %xmm4, %xmm0
637; SSE2-NEXT:    movdqa %xmm1, %xmm2
638; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
639; SSE2-NEXT:    pand %xmm2, %xmm1
640; SSE2-NEXT:    pandn %xmm3, %xmm2
641; SSE2-NEXT:    por %xmm2, %xmm1
642; SSE2-NEXT:    retq
643;
644; SSE4-LABEL: test27:
645; SSE4:       # %bb.0: # %entry
646; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
647; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
648; SSE4-NEXT:    retq
649;
650; AVX1-LABEL: test27:
651; AVX1:       # %bb.0: # %entry
652; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
653; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
654; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
655; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
656; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
657; AVX1-NEXT:    retq
658;
659; AVX2-LABEL: test27:
660; AVX2:       # %bb.0: # %entry
661; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
662; AVX2-NEXT:    retq
663;
664; AVX512-LABEL: test27:
665; AVX512:       # %bb.0: # %entry
666; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
667; AVX512-NEXT:    retq
668entry:
669  %cmp = icmp sgt <32 x i8> %a, %b
670  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
671  ret <32 x i8> %sel
672}
673
674define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
675; SSE2-LABEL: test28:
676; SSE2:       # %bb.0: # %entry
677; SSE2-NEXT:    movdqa %xmm0, %xmm4
678; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
679; SSE2-NEXT:    pand %xmm4, %xmm0
680; SSE2-NEXT:    pandn %xmm2, %xmm4
681; SSE2-NEXT:    por %xmm4, %xmm0
682; SSE2-NEXT:    movdqa %xmm1, %xmm2
683; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
684; SSE2-NEXT:    pand %xmm2, %xmm1
685; SSE2-NEXT:    pandn %xmm3, %xmm2
686; SSE2-NEXT:    por %xmm2, %xmm1
687; SSE2-NEXT:    retq
688;
689; SSE4-LABEL: test28:
690; SSE4:       # %bb.0: # %entry
691; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
692; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
693; SSE4-NEXT:    retq
694;
695; AVX1-LABEL: test28:
696; AVX1:       # %bb.0: # %entry
697; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
698; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
699; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
700; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
701; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
702; AVX1-NEXT:    retq
703;
704; AVX2-LABEL: test28:
705; AVX2:       # %bb.0: # %entry
706; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
707; AVX2-NEXT:    retq
708;
709; AVX512-LABEL: test28:
710; AVX512:       # %bb.0: # %entry
711; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
712; AVX512-NEXT:    retq
713entry:
714  %cmp = icmp sge <32 x i8> %a, %b
715  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
716  ret <32 x i8> %sel
717}
718
719define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
720; SSE-LABEL: test29:
721; SSE:       # %bb.0: # %entry
722; SSE-NEXT:    pminub %xmm2, %xmm0
723; SSE-NEXT:    pminub %xmm3, %xmm1
724; SSE-NEXT:    retq
725;
726; AVX1-LABEL: test29:
727; AVX1:       # %bb.0: # %entry
728; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
729; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
730; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
731; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
732; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
733; AVX1-NEXT:    retq
734;
735; AVX2-LABEL: test29:
736; AVX2:       # %bb.0: # %entry
737; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
738; AVX2-NEXT:    retq
739;
740; AVX512-LABEL: test29:
741; AVX512:       # %bb.0: # %entry
742; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
743; AVX512-NEXT:    retq
744entry:
745  %cmp = icmp ult <32 x i8> %a, %b
746  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
747  ret <32 x i8> %sel
748}
749
750define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
751; SSE-LABEL: test30:
752; SSE:       # %bb.0: # %entry
753; SSE-NEXT:    pminub %xmm2, %xmm0
754; SSE-NEXT:    pminub %xmm3, %xmm1
755; SSE-NEXT:    retq
756;
757; AVX1-LABEL: test30:
758; AVX1:       # %bb.0: # %entry
759; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
760; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
761; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
762; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
763; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
764; AVX1-NEXT:    retq
765;
766; AVX2-LABEL: test30:
767; AVX2:       # %bb.0: # %entry
768; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
769; AVX2-NEXT:    retq
770;
771; AVX512-LABEL: test30:
772; AVX512:       # %bb.0: # %entry
773; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
774; AVX512-NEXT:    retq
775entry:
776  %cmp = icmp ule <32 x i8> %a, %b
777  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
778  ret <32 x i8> %sel
779}
780
781define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
782; SSE-LABEL: test31:
783; SSE:       # %bb.0: # %entry
784; SSE-NEXT:    pmaxub %xmm2, %xmm0
785; SSE-NEXT:    pmaxub %xmm3, %xmm1
786; SSE-NEXT:    retq
787;
788; AVX1-LABEL: test31:
789; AVX1:       # %bb.0: # %entry
790; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
791; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
792; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
793; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
794; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
795; AVX1-NEXT:    retq
796;
797; AVX2-LABEL: test31:
798; AVX2:       # %bb.0: # %entry
799; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
800; AVX2-NEXT:    retq
801;
802; AVX512-LABEL: test31:
803; AVX512:       # %bb.0: # %entry
804; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
805; AVX512-NEXT:    retq
806entry:
807  %cmp = icmp ugt <32 x i8> %a, %b
808  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
809  ret <32 x i8> %sel
810}
811
812define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
813; SSE-LABEL: test32:
814; SSE:       # %bb.0: # %entry
815; SSE-NEXT:    pmaxub %xmm2, %xmm0
816; SSE-NEXT:    pmaxub %xmm3, %xmm1
817; SSE-NEXT:    retq
818;
819; AVX1-LABEL: test32:
820; AVX1:       # %bb.0: # %entry
821; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
822; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
823; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
824; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
825; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
826; AVX1-NEXT:    retq
827;
828; AVX2-LABEL: test32:
829; AVX2:       # %bb.0: # %entry
830; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
831; AVX2-NEXT:    retq
832;
833; AVX512-LABEL: test32:
834; AVX512:       # %bb.0: # %entry
835; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
836; AVX512-NEXT:    retq
837entry:
838  %cmp = icmp uge <32 x i8> %a, %b
839  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
840  ret <32 x i8> %sel
841}
842
843define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
844; SSE-LABEL: test33:
845; SSE:       # %bb.0: # %entry
846; SSE-NEXT:    pminsw %xmm2, %xmm0
847; SSE-NEXT:    pminsw %xmm3, %xmm1
848; SSE-NEXT:    retq
849;
850; AVX1-LABEL: test33:
851; AVX1:       # %bb.0: # %entry
852; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
853; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
854; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
855; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
856; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
857; AVX1-NEXT:    retq
858;
859; AVX2-LABEL: test33:
860; AVX2:       # %bb.0: # %entry
861; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
862; AVX2-NEXT:    retq
863;
864; AVX512-LABEL: test33:
865; AVX512:       # %bb.0: # %entry
866; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
867; AVX512-NEXT:    retq
868entry:
869  %cmp = icmp slt <16 x i16> %a, %b
870  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
871  ret <16 x i16> %sel
872}
873
874define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
875; SSE-LABEL: test34:
876; SSE:       # %bb.0: # %entry
877; SSE-NEXT:    pminsw %xmm2, %xmm0
878; SSE-NEXT:    pminsw %xmm3, %xmm1
879; SSE-NEXT:    retq
880;
881; AVX1-LABEL: test34:
882; AVX1:       # %bb.0: # %entry
883; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
884; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
885; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
886; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
887; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
888; AVX1-NEXT:    retq
889;
890; AVX2-LABEL: test34:
891; AVX2:       # %bb.0: # %entry
892; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
893; AVX2-NEXT:    retq
894;
895; AVX512-LABEL: test34:
896; AVX512:       # %bb.0: # %entry
897; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
898; AVX512-NEXT:    retq
899entry:
900  %cmp = icmp sle <16 x i16> %a, %b
901  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
902  ret <16 x i16> %sel
903}
904
905define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
906; SSE-LABEL: test35:
907; SSE:       # %bb.0: # %entry
908; SSE-NEXT:    pmaxsw %xmm2, %xmm0
909; SSE-NEXT:    pmaxsw %xmm3, %xmm1
910; SSE-NEXT:    retq
911;
912; AVX1-LABEL: test35:
913; AVX1:       # %bb.0: # %entry
914; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
915; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
916; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
917; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
918; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
919; AVX1-NEXT:    retq
920;
921; AVX2-LABEL: test35:
922; AVX2:       # %bb.0: # %entry
923; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
924; AVX2-NEXT:    retq
925;
926; AVX512-LABEL: test35:
927; AVX512:       # %bb.0: # %entry
928; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
929; AVX512-NEXT:    retq
930entry:
931  %cmp = icmp sgt <16 x i16> %a, %b
932  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
933  ret <16 x i16> %sel
934}
935
936define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
937; SSE-LABEL: test36:
938; SSE:       # %bb.0: # %entry
939; SSE-NEXT:    pmaxsw %xmm2, %xmm0
940; SSE-NEXT:    pmaxsw %xmm3, %xmm1
941; SSE-NEXT:    retq
942;
943; AVX1-LABEL: test36:
944; AVX1:       # %bb.0: # %entry
945; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
946; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
947; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
948; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
949; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
950; AVX1-NEXT:    retq
951;
952; AVX2-LABEL: test36:
953; AVX2:       # %bb.0: # %entry
954; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
955; AVX2-NEXT:    retq
956;
957; AVX512-LABEL: test36:
958; AVX512:       # %bb.0: # %entry
959; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
960; AVX512-NEXT:    retq
961entry:
962  %cmp = icmp sge <16 x i16> %a, %b
963  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
964  ret <16 x i16> %sel
965}
966
967define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
968; SSE2-LABEL: test37:
969; SSE2:       # %bb.0: # %entry
970; SSE2-NEXT:    movdqa %xmm0, %xmm4
971; SSE2-NEXT:    psubusw %xmm2, %xmm4
972; SSE2-NEXT:    psubw %xmm4, %xmm0
973; SSE2-NEXT:    movdqa %xmm1, %xmm2
974; SSE2-NEXT:    psubusw %xmm3, %xmm2
975; SSE2-NEXT:    psubw %xmm2, %xmm1
976; SSE2-NEXT:    retq
977;
978; SSE4-LABEL: test37:
979; SSE4:       # %bb.0: # %entry
980; SSE4-NEXT:    pminuw %xmm2, %xmm0
981; SSE4-NEXT:    pminuw %xmm3, %xmm1
982; SSE4-NEXT:    retq
983;
984; AVX1-LABEL: test37:
985; AVX1:       # %bb.0: # %entry
986; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
987; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
988; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
989; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
990; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
991; AVX1-NEXT:    retq
992;
993; AVX2-LABEL: test37:
994; AVX2:       # %bb.0: # %entry
995; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
996; AVX2-NEXT:    retq
997;
998; AVX512-LABEL: test37:
999; AVX512:       # %bb.0: # %entry
1000; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1001; AVX512-NEXT:    retq
1002entry:
1003  %cmp = icmp ult <16 x i16> %a, %b
1004  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1005  ret <16 x i16> %sel
1006}
1007
1008define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1009; SSE2-LABEL: test38:
1010; SSE2:       # %bb.0: # %entry
1011; SSE2-NEXT:    movdqa %xmm0, %xmm4
1012; SSE2-NEXT:    psubusw %xmm2, %xmm4
1013; SSE2-NEXT:    psubw %xmm4, %xmm0
1014; SSE2-NEXT:    movdqa %xmm1, %xmm2
1015; SSE2-NEXT:    psubusw %xmm3, %xmm2
1016; SSE2-NEXT:    psubw %xmm2, %xmm1
1017; SSE2-NEXT:    retq
1018;
1019; SSE4-LABEL: test38:
1020; SSE4:       # %bb.0: # %entry
1021; SSE4-NEXT:    pminuw %xmm2, %xmm0
1022; SSE4-NEXT:    pminuw %xmm3, %xmm1
1023; SSE4-NEXT:    retq
1024;
1025; AVX1-LABEL: test38:
1026; AVX1:       # %bb.0: # %entry
1027; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1028; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1029; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1030; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1031; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1032; AVX1-NEXT:    retq
1033;
1034; AVX2-LABEL: test38:
1035; AVX2:       # %bb.0: # %entry
1036; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1037; AVX2-NEXT:    retq
1038;
1039; AVX512-LABEL: test38:
1040; AVX512:       # %bb.0: # %entry
1041; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1042; AVX512-NEXT:    retq
1043entry:
1044  %cmp = icmp ule <16 x i16> %a, %b
1045  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1046  ret <16 x i16> %sel
1047}
1048
1049define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1050; SSE2-LABEL: test39:
1051; SSE2:       # %bb.0: # %entry
1052; SSE2-NEXT:    psubusw %xmm0, %xmm2
1053; SSE2-NEXT:    paddw %xmm2, %xmm0
1054; SSE2-NEXT:    psubusw %xmm1, %xmm3
1055; SSE2-NEXT:    paddw %xmm3, %xmm1
1056; SSE2-NEXT:    retq
1057;
1058; SSE4-LABEL: test39:
1059; SSE4:       # %bb.0: # %entry
1060; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1061; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1062; SSE4-NEXT:    retq
1063;
1064; AVX1-LABEL: test39:
1065; AVX1:       # %bb.0: # %entry
1066; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1067; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1068; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1069; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1070; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1071; AVX1-NEXT:    retq
1072;
1073; AVX2-LABEL: test39:
1074; AVX2:       # %bb.0: # %entry
1075; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1076; AVX2-NEXT:    retq
1077;
1078; AVX512-LABEL: test39:
1079; AVX512:       # %bb.0: # %entry
1080; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1081; AVX512-NEXT:    retq
1082entry:
1083  %cmp = icmp ugt <16 x i16> %a, %b
1084  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1085  ret <16 x i16> %sel
1086}
1087
1088define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1089; SSE2-LABEL: test40:
1090; SSE2:       # %bb.0: # %entry
1091; SSE2-NEXT:    psubusw %xmm0, %xmm2
1092; SSE2-NEXT:    paddw %xmm2, %xmm0
1093; SSE2-NEXT:    psubusw %xmm1, %xmm3
1094; SSE2-NEXT:    paddw %xmm3, %xmm1
1095; SSE2-NEXT:    retq
1096;
1097; SSE4-LABEL: test40:
1098; SSE4:       # %bb.0: # %entry
1099; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1100; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1101; SSE4-NEXT:    retq
1102;
1103; AVX1-LABEL: test40:
1104; AVX1:       # %bb.0: # %entry
1105; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1106; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1107; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1108; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1109; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1110; AVX1-NEXT:    retq
1111;
1112; AVX2-LABEL: test40:
1113; AVX2:       # %bb.0: # %entry
1114; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1115; AVX2-NEXT:    retq
1116;
1117; AVX512-LABEL: test40:
1118; AVX512:       # %bb.0: # %entry
1119; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1120; AVX512-NEXT:    retq
1121entry:
1122  %cmp = icmp uge <16 x i16> %a, %b
1123  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1124  ret <16 x i16> %sel
1125}
1126
1127define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1128; SSE2-LABEL: test41:
1129; SSE2:       # %bb.0: # %entry
1130; SSE2-NEXT:    movdqa %xmm2, %xmm4
1131; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1132; SSE2-NEXT:    pand %xmm4, %xmm0
1133; SSE2-NEXT:    pandn %xmm2, %xmm4
1134; SSE2-NEXT:    por %xmm4, %xmm0
1135; SSE2-NEXT:    movdqa %xmm3, %xmm2
1136; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1137; SSE2-NEXT:    pand %xmm2, %xmm1
1138; SSE2-NEXT:    pandn %xmm3, %xmm2
1139; SSE2-NEXT:    por %xmm2, %xmm1
1140; SSE2-NEXT:    retq
1141;
1142; SSE4-LABEL: test41:
1143; SSE4:       # %bb.0: # %entry
1144; SSE4-NEXT:    pminsd %xmm2, %xmm0
1145; SSE4-NEXT:    pminsd %xmm3, %xmm1
1146; SSE4-NEXT:    retq
1147;
1148; AVX1-LABEL: test41:
1149; AVX1:       # %bb.0: # %entry
1150; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1151; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1152; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1153; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1154; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1155; AVX1-NEXT:    retq
1156;
1157; AVX2-LABEL: test41:
1158; AVX2:       # %bb.0: # %entry
1159; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1160; AVX2-NEXT:    retq
1161;
1162; AVX512-LABEL: test41:
1163; AVX512:       # %bb.0: # %entry
1164; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1165; AVX512-NEXT:    retq
1166entry:
1167  %cmp = icmp slt <8 x i32> %a, %b
1168  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1169  ret <8 x i32> %sel
1170}
1171
1172define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1173; SSE2-LABEL: test42:
1174; SSE2:       # %bb.0: # %entry
1175; SSE2-NEXT:    movdqa %xmm2, %xmm4
1176; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1177; SSE2-NEXT:    pand %xmm4, %xmm0
1178; SSE2-NEXT:    pandn %xmm2, %xmm4
1179; SSE2-NEXT:    por %xmm4, %xmm0
1180; SSE2-NEXT:    movdqa %xmm3, %xmm2
1181; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1182; SSE2-NEXT:    pand %xmm2, %xmm1
1183; SSE2-NEXT:    pandn %xmm3, %xmm2
1184; SSE2-NEXT:    por %xmm2, %xmm1
1185; SSE2-NEXT:    retq
1186;
1187; SSE4-LABEL: test42:
1188; SSE4:       # %bb.0: # %entry
1189; SSE4-NEXT:    pminsd %xmm2, %xmm0
1190; SSE4-NEXT:    pminsd %xmm3, %xmm1
1191; SSE4-NEXT:    retq
1192;
1193; AVX1-LABEL: test42:
1194; AVX1:       # %bb.0: # %entry
1195; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1196; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1197; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1198; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1199; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1200; AVX1-NEXT:    retq
1201;
1202; AVX2-LABEL: test42:
1203; AVX2:       # %bb.0: # %entry
1204; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1205; AVX2-NEXT:    retq
1206;
1207; AVX512-LABEL: test42:
1208; AVX512:       # %bb.0: # %entry
1209; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1210; AVX512-NEXT:    retq
1211entry:
1212  %cmp = icmp sle <8 x i32> %a, %b
1213  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1214  ret <8 x i32> %sel
1215}
1216
1217define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1218; SSE2-LABEL: test43:
1219; SSE2:       # %bb.0: # %entry
1220; SSE2-NEXT:    movdqa %xmm0, %xmm4
1221; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1222; SSE2-NEXT:    pand %xmm4, %xmm0
1223; SSE2-NEXT:    pandn %xmm2, %xmm4
1224; SSE2-NEXT:    por %xmm4, %xmm0
1225; SSE2-NEXT:    movdqa %xmm1, %xmm2
1226; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1227; SSE2-NEXT:    pand %xmm2, %xmm1
1228; SSE2-NEXT:    pandn %xmm3, %xmm2
1229; SSE2-NEXT:    por %xmm2, %xmm1
1230; SSE2-NEXT:    retq
1231;
1232; SSE4-LABEL: test43:
1233; SSE4:       # %bb.0: # %entry
1234; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1235; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1236; SSE4-NEXT:    retq
1237;
1238; AVX1-LABEL: test43:
1239; AVX1:       # %bb.0: # %entry
1240; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1241; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1242; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1243; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1244; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1245; AVX1-NEXT:    retq
1246;
1247; AVX2-LABEL: test43:
1248; AVX2:       # %bb.0: # %entry
1249; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1250; AVX2-NEXT:    retq
1251;
1252; AVX512-LABEL: test43:
1253; AVX512:       # %bb.0: # %entry
1254; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1255; AVX512-NEXT:    retq
1256entry:
1257  %cmp = icmp sgt <8 x i32> %a, %b
1258  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1259  ret <8 x i32> %sel
1260}
1261
1262define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1263; SSE2-LABEL: test44:
1264; SSE2:       # %bb.0: # %entry
1265; SSE2-NEXT:    movdqa %xmm0, %xmm4
1266; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1267; SSE2-NEXT:    pand %xmm4, %xmm0
1268; SSE2-NEXT:    pandn %xmm2, %xmm4
1269; SSE2-NEXT:    por %xmm4, %xmm0
1270; SSE2-NEXT:    movdqa %xmm1, %xmm2
1271; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1272; SSE2-NEXT:    pand %xmm2, %xmm1
1273; SSE2-NEXT:    pandn %xmm3, %xmm2
1274; SSE2-NEXT:    por %xmm2, %xmm1
1275; SSE2-NEXT:    retq
1276;
1277; SSE4-LABEL: test44:
1278; SSE4:       # %bb.0: # %entry
1279; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1280; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1281; SSE4-NEXT:    retq
1282;
1283; AVX1-LABEL: test44:
1284; AVX1:       # %bb.0: # %entry
1285; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1286; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1287; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1288; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1289; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1290; AVX1-NEXT:    retq
1291;
1292; AVX2-LABEL: test44:
1293; AVX2:       # %bb.0: # %entry
1294; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1295; AVX2-NEXT:    retq
1296;
1297; AVX512-LABEL: test44:
1298; AVX512:       # %bb.0: # %entry
1299; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1300; AVX512-NEXT:    retq
1301entry:
1302  %cmp = icmp sge <8 x i32> %a, %b
1303  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1304  ret <8 x i32> %sel
1305}
1306
1307define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1308; SSE2-LABEL: test45:
1309; SSE2:       # %bb.0: # %entry
1310; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1311; SSE2-NEXT:    movdqa %xmm0, %xmm5
1312; SSE2-NEXT:    pxor %xmm4, %xmm5
1313; SSE2-NEXT:    movdqa %xmm2, %xmm6
1314; SSE2-NEXT:    pxor %xmm4, %xmm6
1315; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1316; SSE2-NEXT:    pand %xmm6, %xmm0
1317; SSE2-NEXT:    pandn %xmm2, %xmm6
1318; SSE2-NEXT:    por %xmm6, %xmm0
1319; SSE2-NEXT:    movdqa %xmm1, %xmm2
1320; SSE2-NEXT:    pxor %xmm4, %xmm2
1321; SSE2-NEXT:    pxor %xmm3, %xmm4
1322; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1323; SSE2-NEXT:    pand %xmm4, %xmm1
1324; SSE2-NEXT:    pandn %xmm3, %xmm4
1325; SSE2-NEXT:    por %xmm4, %xmm1
1326; SSE2-NEXT:    retq
1327;
1328; SSE4-LABEL: test45:
1329; SSE4:       # %bb.0: # %entry
1330; SSE4-NEXT:    pminud %xmm2, %xmm0
1331; SSE4-NEXT:    pminud %xmm3, %xmm1
1332; SSE4-NEXT:    retq
1333;
1334; AVX1-LABEL: test45:
1335; AVX1:       # %bb.0: # %entry
1336; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1337; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1338; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1339; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1340; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1341; AVX1-NEXT:    retq
1342;
1343; AVX2-LABEL: test45:
1344; AVX2:       # %bb.0: # %entry
1345; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1346; AVX2-NEXT:    retq
1347;
1348; AVX512-LABEL: test45:
1349; AVX512:       # %bb.0: # %entry
1350; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1351; AVX512-NEXT:    retq
1352entry:
1353  %cmp = icmp ult <8 x i32> %a, %b
1354  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1355  ret <8 x i32> %sel
1356}
1357
1358define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1359; SSE2-LABEL: test46:
1360; SSE2:       # %bb.0: # %entry
1361; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1362; SSE2-NEXT:    movdqa %xmm0, %xmm5
1363; SSE2-NEXT:    pxor %xmm4, %xmm5
1364; SSE2-NEXT:    movdqa %xmm2, %xmm6
1365; SSE2-NEXT:    pxor %xmm4, %xmm6
1366; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1367; SSE2-NEXT:    pand %xmm6, %xmm0
1368; SSE2-NEXT:    pandn %xmm2, %xmm6
1369; SSE2-NEXT:    por %xmm6, %xmm0
1370; SSE2-NEXT:    movdqa %xmm1, %xmm2
1371; SSE2-NEXT:    pxor %xmm4, %xmm2
1372; SSE2-NEXT:    pxor %xmm3, %xmm4
1373; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1374; SSE2-NEXT:    pand %xmm4, %xmm1
1375; SSE2-NEXT:    pandn %xmm3, %xmm4
1376; SSE2-NEXT:    por %xmm4, %xmm1
1377; SSE2-NEXT:    retq
1378;
1379; SSE4-LABEL: test46:
1380; SSE4:       # %bb.0: # %entry
1381; SSE4-NEXT:    pminud %xmm2, %xmm0
1382; SSE4-NEXT:    pminud %xmm3, %xmm1
1383; SSE4-NEXT:    retq
1384;
1385; AVX1-LABEL: test46:
1386; AVX1:       # %bb.0: # %entry
1387; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1388; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1389; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1390; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1391; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1392; AVX1-NEXT:    retq
1393;
1394; AVX2-LABEL: test46:
1395; AVX2:       # %bb.0: # %entry
1396; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1397; AVX2-NEXT:    retq
1398;
1399; AVX512-LABEL: test46:
1400; AVX512:       # %bb.0: # %entry
1401; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1402; AVX512-NEXT:    retq
1403entry:
1404  %cmp = icmp ule <8 x i32> %a, %b
1405  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1406  ret <8 x i32> %sel
1407}
1408
1409define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1410; SSE2-LABEL: test47:
1411; SSE2:       # %bb.0: # %entry
1412; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1413; SSE2-NEXT:    movdqa %xmm2, %xmm5
1414; SSE2-NEXT:    pxor %xmm4, %xmm5
1415; SSE2-NEXT:    movdqa %xmm0, %xmm6
1416; SSE2-NEXT:    pxor %xmm4, %xmm6
1417; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1418; SSE2-NEXT:    pand %xmm6, %xmm0
1419; SSE2-NEXT:    pandn %xmm2, %xmm6
1420; SSE2-NEXT:    por %xmm6, %xmm0
1421; SSE2-NEXT:    movdqa %xmm3, %xmm2
1422; SSE2-NEXT:    pxor %xmm4, %xmm2
1423; SSE2-NEXT:    pxor %xmm1, %xmm4
1424; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1425; SSE2-NEXT:    pand %xmm4, %xmm1
1426; SSE2-NEXT:    pandn %xmm3, %xmm4
1427; SSE2-NEXT:    por %xmm4, %xmm1
1428; SSE2-NEXT:    retq
1429;
1430; SSE4-LABEL: test47:
1431; SSE4:       # %bb.0: # %entry
1432; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1433; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1434; SSE4-NEXT:    retq
1435;
1436; AVX1-LABEL: test47:
1437; AVX1:       # %bb.0: # %entry
1438; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1439; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1440; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1441; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1442; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1443; AVX1-NEXT:    retq
1444;
1445; AVX2-LABEL: test47:
1446; AVX2:       # %bb.0: # %entry
1447; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1448; AVX2-NEXT:    retq
1449;
1450; AVX512-LABEL: test47:
1451; AVX512:       # %bb.0: # %entry
1452; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1453; AVX512-NEXT:    retq
1454entry:
1455  %cmp = icmp ugt <8 x i32> %a, %b
1456  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1457  ret <8 x i32> %sel
1458}
1459
1460define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1461; SSE2-LABEL: test48:
1462; SSE2:       # %bb.0: # %entry
1463; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1464; SSE2-NEXT:    movdqa %xmm2, %xmm5
1465; SSE2-NEXT:    pxor %xmm4, %xmm5
1466; SSE2-NEXT:    movdqa %xmm0, %xmm6
1467; SSE2-NEXT:    pxor %xmm4, %xmm6
1468; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1469; SSE2-NEXT:    pand %xmm6, %xmm0
1470; SSE2-NEXT:    pandn %xmm2, %xmm6
1471; SSE2-NEXT:    por %xmm6, %xmm0
1472; SSE2-NEXT:    movdqa %xmm3, %xmm2
1473; SSE2-NEXT:    pxor %xmm4, %xmm2
1474; SSE2-NEXT:    pxor %xmm1, %xmm4
1475; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1476; SSE2-NEXT:    pand %xmm4, %xmm1
1477; SSE2-NEXT:    pandn %xmm3, %xmm4
1478; SSE2-NEXT:    por %xmm4, %xmm1
1479; SSE2-NEXT:    retq
1480;
1481; SSE4-LABEL: test48:
1482; SSE4:       # %bb.0: # %entry
1483; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1484; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1485; SSE4-NEXT:    retq
1486;
1487; AVX1-LABEL: test48:
1488; AVX1:       # %bb.0: # %entry
1489; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1490; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1491; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1492; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1493; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1494; AVX1-NEXT:    retq
1495;
1496; AVX2-LABEL: test48:
1497; AVX2:       # %bb.0: # %entry
1498; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1499; AVX2-NEXT:    retq
1500;
1501; AVX512-LABEL: test48:
1502; AVX512:       # %bb.0: # %entry
1503; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1504; AVX512-NEXT:    retq
1505entry:
1506  %cmp = icmp uge <8 x i32> %a, %b
1507  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1508  ret <8 x i32> %sel
1509}
1510
1511define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1512; SSE2-LABEL: test49:
1513; SSE2:       # %bb.0: # %entry
1514; SSE2-NEXT:    movdqa %xmm0, %xmm2
1515; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1516; SSE2-NEXT:    pand %xmm2, %xmm0
1517; SSE2-NEXT:    pandn %xmm1, %xmm2
1518; SSE2-NEXT:    por %xmm2, %xmm0
1519; SSE2-NEXT:    retq
1520;
1521; SSE4-LABEL: test49:
1522; SSE4:       # %bb.0: # %entry
1523; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1524; SSE4-NEXT:    retq
1525;
1526; AVX-LABEL: test49:
1527; AVX:       # %bb.0: # %entry
1528; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1529; AVX-NEXT:    retq
1530entry:
1531  %cmp = icmp slt <16 x i8> %a, %b
1532  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1533  ret <16 x i8> %sel
1534}
1535
1536define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1537; SSE2-LABEL: test50:
1538; SSE2:       # %bb.0: # %entry
1539; SSE2-NEXT:    movdqa %xmm0, %xmm2
1540; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1541; SSE2-NEXT:    pand %xmm2, %xmm0
1542; SSE2-NEXT:    pandn %xmm1, %xmm2
1543; SSE2-NEXT:    por %xmm2, %xmm0
1544; SSE2-NEXT:    retq
1545;
1546; SSE4-LABEL: test50:
1547; SSE4:       # %bb.0: # %entry
1548; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1549; SSE4-NEXT:    retq
1550;
1551; AVX-LABEL: test50:
1552; AVX:       # %bb.0: # %entry
1553; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1554; AVX-NEXT:    retq
1555entry:
1556  %cmp = icmp sle <16 x i8> %a, %b
1557  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1558  ret <16 x i8> %sel
1559}
1560
1561define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1562; SSE2-LABEL: test51:
1563; SSE2:       # %bb.0: # %entry
1564; SSE2-NEXT:    movdqa %xmm1, %xmm2
1565; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1566; SSE2-NEXT:    pand %xmm2, %xmm0
1567; SSE2-NEXT:    pandn %xmm1, %xmm2
1568; SSE2-NEXT:    por %xmm2, %xmm0
1569; SSE2-NEXT:    retq
1570;
1571; SSE4-LABEL: test51:
1572; SSE4:       # %bb.0: # %entry
1573; SSE4-NEXT:    pminsb %xmm1, %xmm0
1574; SSE4-NEXT:    retq
1575;
1576; AVX-LABEL: test51:
1577; AVX:       # %bb.0: # %entry
1578; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1579; AVX-NEXT:    retq
1580entry:
1581  %cmp = icmp sgt <16 x i8> %a, %b
1582  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1583  ret <16 x i8> %sel
1584}
1585
1586define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1587; SSE2-LABEL: test52:
1588; SSE2:       # %bb.0: # %entry
1589; SSE2-NEXT:    movdqa %xmm1, %xmm2
1590; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1591; SSE2-NEXT:    pand %xmm2, %xmm0
1592; SSE2-NEXT:    pandn %xmm1, %xmm2
1593; SSE2-NEXT:    por %xmm2, %xmm0
1594; SSE2-NEXT:    retq
1595;
1596; SSE4-LABEL: test52:
1597; SSE4:       # %bb.0: # %entry
1598; SSE4-NEXT:    pminsb %xmm1, %xmm0
1599; SSE4-NEXT:    retq
1600;
1601; AVX-LABEL: test52:
1602; AVX:       # %bb.0: # %entry
1603; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1604; AVX-NEXT:    retq
1605entry:
1606  %cmp = icmp sge <16 x i8> %a, %b
1607  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1608  ret <16 x i8> %sel
1609}
1610
1611define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
1612; SSE-LABEL: test53:
1613; SSE:       # %bb.0: # %entry
1614; SSE-NEXT:    pmaxub %xmm1, %xmm0
1615; SSE-NEXT:    retq
1616;
1617; AVX-LABEL: test53:
1618; AVX:       # %bb.0: # %entry
1619; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1620; AVX-NEXT:    retq
1621entry:
1622  %cmp = icmp ult <16 x i8> %a, %b
1623  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1624  ret <16 x i8> %sel
1625}
1626
1627define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
1628; SSE-LABEL: test54:
1629; SSE:       # %bb.0: # %entry
1630; SSE-NEXT:    pmaxub %xmm1, %xmm0
1631; SSE-NEXT:    retq
1632;
1633; AVX-LABEL: test54:
1634; AVX:       # %bb.0: # %entry
1635; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1636; AVX-NEXT:    retq
1637entry:
1638  %cmp = icmp ule <16 x i8> %a, %b
1639  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1640  ret <16 x i8> %sel
1641}
1642
1643define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
1644; SSE-LABEL: test55:
1645; SSE:       # %bb.0: # %entry
1646; SSE-NEXT:    pminub %xmm1, %xmm0
1647; SSE-NEXT:    retq
1648;
1649; AVX-LABEL: test55:
1650; AVX:       # %bb.0: # %entry
1651; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1652; AVX-NEXT:    retq
1653entry:
1654  %cmp = icmp ugt <16 x i8> %a, %b
1655  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1656  ret <16 x i8> %sel
1657}
1658
1659define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1660; SSE-LABEL: test56:
1661; SSE:       # %bb.0: # %entry
1662; SSE-NEXT:    pminub %xmm1, %xmm0
1663; SSE-NEXT:    retq
1664;
1665; AVX-LABEL: test56:
1666; AVX:       # %bb.0: # %entry
1667; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1668; AVX-NEXT:    retq
1669entry:
1670  %cmp = icmp uge <16 x i8> %a, %b
1671  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1672  ret <16 x i8> %sel
1673}
1674
1675define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1676; SSE-LABEL: test57:
1677; SSE:       # %bb.0: # %entry
1678; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1679; SSE-NEXT:    retq
1680;
1681; AVX-LABEL: test57:
1682; AVX:       # %bb.0: # %entry
1683; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1684; AVX-NEXT:    retq
1685entry:
1686  %cmp = icmp slt <8 x i16> %a, %b
1687  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1688  ret <8 x i16> %sel
1689}
1690
1691define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
1692; SSE-LABEL: test58:
1693; SSE:       # %bb.0: # %entry
1694; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1695; SSE-NEXT:    retq
1696;
1697; AVX-LABEL: test58:
1698; AVX:       # %bb.0: # %entry
1699; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1700; AVX-NEXT:    retq
1701entry:
1702  %cmp = icmp sle <8 x i16> %a, %b
1703  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1704  ret <8 x i16> %sel
1705}
1706
1707define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
1708; SSE-LABEL: test59:
1709; SSE:       # %bb.0: # %entry
1710; SSE-NEXT:    pminsw %xmm1, %xmm0
1711; SSE-NEXT:    retq
1712;
1713; AVX-LABEL: test59:
1714; AVX:       # %bb.0: # %entry
1715; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1716; AVX-NEXT:    retq
1717entry:
1718  %cmp = icmp sgt <8 x i16> %a, %b
1719  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1720  ret <8 x i16> %sel
1721}
1722
1723define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
1724; SSE-LABEL: test60:
1725; SSE:       # %bb.0: # %entry
1726; SSE-NEXT:    pminsw %xmm1, %xmm0
1727; SSE-NEXT:    retq
1728;
1729; AVX-LABEL: test60:
1730; AVX:       # %bb.0: # %entry
1731; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1732; AVX-NEXT:    retq
1733entry:
1734  %cmp = icmp sge <8 x i16> %a, %b
1735  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1736  ret <8 x i16> %sel
1737}
1738
1739define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1740; SSE2-LABEL: test61:
1741; SSE2:       # %bb.0: # %entry
1742; SSE2-NEXT:    psubusw %xmm0, %xmm1
1743; SSE2-NEXT:    paddw %xmm1, %xmm0
1744; SSE2-NEXT:    retq
1745;
1746; SSE4-LABEL: test61:
1747; SSE4:       # %bb.0: # %entry
1748; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1749; SSE4-NEXT:    retq
1750;
1751; AVX-LABEL: test61:
1752; AVX:       # %bb.0: # %entry
1753; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1754; AVX-NEXT:    retq
1755entry:
1756  %cmp = icmp ult <8 x i16> %a, %b
1757  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1758  ret <8 x i16> %sel
1759}
1760
1761define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1762; SSE2-LABEL: test62:
1763; SSE2:       # %bb.0: # %entry
1764; SSE2-NEXT:    psubusw %xmm0, %xmm1
1765; SSE2-NEXT:    paddw %xmm1, %xmm0
1766; SSE2-NEXT:    retq
1767;
1768; SSE4-LABEL: test62:
1769; SSE4:       # %bb.0: # %entry
1770; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1771; SSE4-NEXT:    retq
1772;
1773; AVX-LABEL: test62:
1774; AVX:       # %bb.0: # %entry
1775; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1776; AVX-NEXT:    retq
1777entry:
1778  %cmp = icmp ule <8 x i16> %a, %b
1779  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1780  ret <8 x i16> %sel
1781}
1782
1783define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1784; SSE2-LABEL: test63:
1785; SSE2:       # %bb.0: # %entry
1786; SSE2-NEXT:    movdqa %xmm0, %xmm2
1787; SSE2-NEXT:    psubusw %xmm1, %xmm2
1788; SSE2-NEXT:    psubw %xmm2, %xmm0
1789; SSE2-NEXT:    retq
1790;
1791; SSE4-LABEL: test63:
1792; SSE4:       # %bb.0: # %entry
1793; SSE4-NEXT:    pminuw %xmm1, %xmm0
1794; SSE4-NEXT:    retq
1795;
1796; AVX-LABEL: test63:
1797; AVX:       # %bb.0: # %entry
1798; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1799; AVX-NEXT:    retq
1800entry:
1801  %cmp = icmp ugt <8 x i16> %a, %b
1802  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1803  ret <8 x i16> %sel
1804}
1805
1806define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1807; SSE2-LABEL: test64:
1808; SSE2:       # %bb.0: # %entry
1809; SSE2-NEXT:    movdqa %xmm0, %xmm2
1810; SSE2-NEXT:    psubusw %xmm1, %xmm2
1811; SSE2-NEXT:    psubw %xmm2, %xmm0
1812; SSE2-NEXT:    retq
1813;
1814; SSE4-LABEL: test64:
1815; SSE4:       # %bb.0: # %entry
1816; SSE4-NEXT:    pminuw %xmm1, %xmm0
1817; SSE4-NEXT:    retq
1818;
1819; AVX-LABEL: test64:
1820; AVX:       # %bb.0: # %entry
1821; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1822; AVX-NEXT:    retq
1823entry:
1824  %cmp = icmp uge <8 x i16> %a, %b
1825  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1826  ret <8 x i16> %sel
1827}
1828
1829define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1830; SSE2-LABEL: test65:
1831; SSE2:       # %bb.0: # %entry
1832; SSE2-NEXT:    movdqa %xmm0, %xmm2
1833; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1834; SSE2-NEXT:    pand %xmm2, %xmm0
1835; SSE2-NEXT:    pandn %xmm1, %xmm2
1836; SSE2-NEXT:    por %xmm2, %xmm0
1837; SSE2-NEXT:    retq
1838;
1839; SSE4-LABEL: test65:
1840; SSE4:       # %bb.0: # %entry
1841; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1842; SSE4-NEXT:    retq
1843;
1844; AVX-LABEL: test65:
1845; AVX:       # %bb.0: # %entry
1846; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1847; AVX-NEXT:    retq
1848entry:
1849  %cmp = icmp slt <4 x i32> %a, %b
1850  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1851  ret <4 x i32> %sel
1852}
1853
1854define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
1855; SSE2-LABEL: test66:
1856; SSE2:       # %bb.0: # %entry
1857; SSE2-NEXT:    movdqa %xmm0, %xmm2
1858; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1859; SSE2-NEXT:    pand %xmm2, %xmm0
1860; SSE2-NEXT:    pandn %xmm1, %xmm2
1861; SSE2-NEXT:    por %xmm2, %xmm0
1862; SSE2-NEXT:    retq
1863;
1864; SSE4-LABEL: test66:
1865; SSE4:       # %bb.0: # %entry
1866; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1867; SSE4-NEXT:    retq
1868;
1869; AVX-LABEL: test66:
1870; AVX:       # %bb.0: # %entry
1871; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1872; AVX-NEXT:    retq
1873entry:
1874  %cmp = icmp sle <4 x i32> %a, %b
1875  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1876  ret <4 x i32> %sel
1877}
1878
1879define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
1880; SSE2-LABEL: test67:
1881; SSE2:       # %bb.0: # %entry
1882; SSE2-NEXT:    movdqa %xmm1, %xmm2
1883; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1884; SSE2-NEXT:    pand %xmm2, %xmm0
1885; SSE2-NEXT:    pandn %xmm1, %xmm2
1886; SSE2-NEXT:    por %xmm2, %xmm0
1887; SSE2-NEXT:    retq
1888;
1889; SSE4-LABEL: test67:
1890; SSE4:       # %bb.0: # %entry
1891; SSE4-NEXT:    pminsd %xmm1, %xmm0
1892; SSE4-NEXT:    retq
1893;
1894; AVX-LABEL: test67:
1895; AVX:       # %bb.0: # %entry
1896; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1897; AVX-NEXT:    retq
1898entry:
1899  %cmp = icmp sgt <4 x i32> %a, %b
1900  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1901  ret <4 x i32> %sel
1902}
1903
1904define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
1905; SSE2-LABEL: test68:
1906; SSE2:       # %bb.0: # %entry
1907; SSE2-NEXT:    movdqa %xmm1, %xmm2
1908; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1909; SSE2-NEXT:    pand %xmm2, %xmm0
1910; SSE2-NEXT:    pandn %xmm1, %xmm2
1911; SSE2-NEXT:    por %xmm2, %xmm0
1912; SSE2-NEXT:    retq
1913;
1914; SSE4-LABEL: test68:
1915; SSE4:       # %bb.0: # %entry
1916; SSE4-NEXT:    pminsd %xmm1, %xmm0
1917; SSE4-NEXT:    retq
1918;
1919; AVX-LABEL: test68:
1920; AVX:       # %bb.0: # %entry
1921; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1922; AVX-NEXT:    retq
1923entry:
1924  %cmp = icmp sge <4 x i32> %a, %b
1925  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1926  ret <4 x i32> %sel
1927}
1928
1929define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
1930; SSE2-LABEL: test69:
1931; SSE2:       # %bb.0: # %entry
1932; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1933; SSE2-NEXT:    movdqa %xmm1, %xmm3
1934; SSE2-NEXT:    pxor %xmm2, %xmm3
1935; SSE2-NEXT:    pxor %xmm0, %xmm2
1936; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1937; SSE2-NEXT:    pand %xmm2, %xmm0
1938; SSE2-NEXT:    pandn %xmm1, %xmm2
1939; SSE2-NEXT:    por %xmm2, %xmm0
1940; SSE2-NEXT:    retq
1941;
1942; SSE4-LABEL: test69:
1943; SSE4:       # %bb.0: # %entry
1944; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1945; SSE4-NEXT:    retq
1946;
1947; AVX-LABEL: test69:
1948; AVX:       # %bb.0: # %entry
1949; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1950; AVX-NEXT:    retq
1951entry:
1952  %cmp = icmp ult <4 x i32> %a, %b
1953  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1954  ret <4 x i32> %sel
1955}
1956
1957define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
1958; SSE2-LABEL: test70:
1959; SSE2:       # %bb.0: # %entry
1960; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1961; SSE2-NEXT:    movdqa %xmm1, %xmm3
1962; SSE2-NEXT:    pxor %xmm2, %xmm3
1963; SSE2-NEXT:    pxor %xmm0, %xmm2
1964; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1965; SSE2-NEXT:    pand %xmm2, %xmm0
1966; SSE2-NEXT:    pandn %xmm1, %xmm2
1967; SSE2-NEXT:    por %xmm2, %xmm0
1968; SSE2-NEXT:    retq
1969;
1970; SSE4-LABEL: test70:
1971; SSE4:       # %bb.0: # %entry
1972; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1973; SSE4-NEXT:    retq
1974;
1975; AVX-LABEL: test70:
1976; AVX:       # %bb.0: # %entry
1977; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1978; AVX-NEXT:    retq
1979entry:
1980  %cmp = icmp ule <4 x i32> %a, %b
1981  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1982  ret <4 x i32> %sel
1983}
1984
1985define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
1986; SSE2-LABEL: test71:
1987; SSE2:       # %bb.0: # %entry
1988; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1989; SSE2-NEXT:    movdqa %xmm0, %xmm3
1990; SSE2-NEXT:    pxor %xmm2, %xmm3
1991; SSE2-NEXT:    pxor %xmm1, %xmm2
1992; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1993; SSE2-NEXT:    pand %xmm2, %xmm0
1994; SSE2-NEXT:    pandn %xmm1, %xmm2
1995; SSE2-NEXT:    por %xmm2, %xmm0
1996; SSE2-NEXT:    retq
1997;
1998; SSE4-LABEL: test71:
1999; SSE4:       # %bb.0: # %entry
2000; SSE4-NEXT:    pminud %xmm1, %xmm0
2001; SSE4-NEXT:    retq
2002;
2003; AVX-LABEL: test71:
2004; AVX:       # %bb.0: # %entry
2005; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2006; AVX-NEXT:    retq
2007entry:
2008  %cmp = icmp ugt <4 x i32> %a, %b
2009  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2010  ret <4 x i32> %sel
2011}
2012
2013define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2014; SSE2-LABEL: test72:
2015; SSE2:       # %bb.0: # %entry
2016; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2017; SSE2-NEXT:    movdqa %xmm0, %xmm3
2018; SSE2-NEXT:    pxor %xmm2, %xmm3
2019; SSE2-NEXT:    pxor %xmm1, %xmm2
2020; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2021; SSE2-NEXT:    pand %xmm2, %xmm0
2022; SSE2-NEXT:    pandn %xmm1, %xmm2
2023; SSE2-NEXT:    por %xmm2, %xmm0
2024; SSE2-NEXT:    retq
2025;
2026; SSE4-LABEL: test72:
2027; SSE4:       # %bb.0: # %entry
2028; SSE4-NEXT:    pminud %xmm1, %xmm0
2029; SSE4-NEXT:    retq
2030;
2031; AVX-LABEL: test72:
2032; AVX:       # %bb.0: # %entry
2033; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2034; AVX-NEXT:    retq
2035entry:
2036  %cmp = icmp uge <4 x i32> %a, %b
2037  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2038  ret <4 x i32> %sel
2039}
2040
2041define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2042; SSE2-LABEL: test73:
2043; SSE2:       # %bb.0: # %entry
2044; SSE2-NEXT:    movdqa %xmm0, %xmm4
2045; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2046; SSE2-NEXT:    pand %xmm4, %xmm0
2047; SSE2-NEXT:    pandn %xmm2, %xmm4
2048; SSE2-NEXT:    por %xmm4, %xmm0
2049; SSE2-NEXT:    movdqa %xmm1, %xmm2
2050; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2051; SSE2-NEXT:    pand %xmm2, %xmm1
2052; SSE2-NEXT:    pandn %xmm3, %xmm2
2053; SSE2-NEXT:    por %xmm2, %xmm1
2054; SSE2-NEXT:    retq
2055;
2056; SSE4-LABEL: test73:
2057; SSE4:       # %bb.0: # %entry
2058; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2059; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2060; SSE4-NEXT:    retq
2061;
2062; AVX1-LABEL: test73:
2063; AVX1:       # %bb.0: # %entry
2064; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2065; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2066; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2067; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2068; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2069; AVX1-NEXT:    retq
2070;
2071; AVX2-LABEL: test73:
2072; AVX2:       # %bb.0: # %entry
2073; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2074; AVX2-NEXT:    retq
2075;
2076; AVX512-LABEL: test73:
2077; AVX512:       # %bb.0: # %entry
2078; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2079; AVX512-NEXT:    retq
2080entry:
2081  %cmp = icmp slt <32 x i8> %a, %b
2082  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2083  ret <32 x i8> %sel
2084}
2085
2086define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2087; SSE2-LABEL: test74:
2088; SSE2:       # %bb.0: # %entry
2089; SSE2-NEXT:    movdqa %xmm0, %xmm4
2090; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2091; SSE2-NEXT:    pand %xmm4, %xmm0
2092; SSE2-NEXT:    pandn %xmm2, %xmm4
2093; SSE2-NEXT:    por %xmm4, %xmm0
2094; SSE2-NEXT:    movdqa %xmm1, %xmm2
2095; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2096; SSE2-NEXT:    pand %xmm2, %xmm1
2097; SSE2-NEXT:    pandn %xmm3, %xmm2
2098; SSE2-NEXT:    por %xmm2, %xmm1
2099; SSE2-NEXT:    retq
2100;
2101; SSE4-LABEL: test74:
2102; SSE4:       # %bb.0: # %entry
2103; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2104; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2105; SSE4-NEXT:    retq
2106;
2107; AVX1-LABEL: test74:
2108; AVX1:       # %bb.0: # %entry
2109; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2110; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2111; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2112; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2113; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2114; AVX1-NEXT:    retq
2115;
2116; AVX2-LABEL: test74:
2117; AVX2:       # %bb.0: # %entry
2118; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2119; AVX2-NEXT:    retq
2120;
2121; AVX512-LABEL: test74:
2122; AVX512:       # %bb.0: # %entry
2123; AVX512-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2124; AVX512-NEXT:    retq
2125entry:
2126  %cmp = icmp sle <32 x i8> %a, %b
2127  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2128  ret <32 x i8> %sel
2129}
2130
2131define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2132; SSE2-LABEL: test75:
2133; SSE2:       # %bb.0: # %entry
2134; SSE2-NEXT:    movdqa %xmm2, %xmm4
2135; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2136; SSE2-NEXT:    pand %xmm4, %xmm0
2137; SSE2-NEXT:    pandn %xmm2, %xmm4
2138; SSE2-NEXT:    por %xmm4, %xmm0
2139; SSE2-NEXT:    movdqa %xmm3, %xmm2
2140; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2141; SSE2-NEXT:    pand %xmm2, %xmm1
2142; SSE2-NEXT:    pandn %xmm3, %xmm2
2143; SSE2-NEXT:    por %xmm2, %xmm1
2144; SSE2-NEXT:    retq
2145;
2146; SSE4-LABEL: test75:
2147; SSE4:       # %bb.0: # %entry
2148; SSE4-NEXT:    pminsb %xmm2, %xmm0
2149; SSE4-NEXT:    pminsb %xmm3, %xmm1
2150; SSE4-NEXT:    retq
2151;
2152; AVX1-LABEL: test75:
2153; AVX1:       # %bb.0: # %entry
2154; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2155; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2156; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2157; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2158; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2159; AVX1-NEXT:    retq
2160;
2161; AVX2-LABEL: test75:
2162; AVX2:       # %bb.0: # %entry
2163; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2164; AVX2-NEXT:    retq
2165;
2166; AVX512-LABEL: test75:
2167; AVX512:       # %bb.0: # %entry
2168; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2169; AVX512-NEXT:    retq
2170entry:
2171  %cmp = icmp sgt <32 x i8> %a, %b
2172  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2173  ret <32 x i8> %sel
2174}
2175
2176define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2177; SSE2-LABEL: test76:
2178; SSE2:       # %bb.0: # %entry
2179; SSE2-NEXT:    movdqa %xmm2, %xmm4
2180; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2181; SSE2-NEXT:    pand %xmm4, %xmm0
2182; SSE2-NEXT:    pandn %xmm2, %xmm4
2183; SSE2-NEXT:    por %xmm4, %xmm0
2184; SSE2-NEXT:    movdqa %xmm3, %xmm2
2185; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2186; SSE2-NEXT:    pand %xmm2, %xmm1
2187; SSE2-NEXT:    pandn %xmm3, %xmm2
2188; SSE2-NEXT:    por %xmm2, %xmm1
2189; SSE2-NEXT:    retq
2190;
2191; SSE4-LABEL: test76:
2192; SSE4:       # %bb.0: # %entry
2193; SSE4-NEXT:    pminsb %xmm2, %xmm0
2194; SSE4-NEXT:    pminsb %xmm3, %xmm1
2195; SSE4-NEXT:    retq
2196;
2197; AVX1-LABEL: test76:
2198; AVX1:       # %bb.0: # %entry
2199; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2200; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2201; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2202; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2203; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2204; AVX1-NEXT:    retq
2205;
2206; AVX2-LABEL: test76:
2207; AVX2:       # %bb.0: # %entry
2208; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2209; AVX2-NEXT:    retq
2210;
2211; AVX512-LABEL: test76:
2212; AVX512:       # %bb.0: # %entry
2213; AVX512-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2214; AVX512-NEXT:    retq
2215entry:
2216  %cmp = icmp sge <32 x i8> %a, %b
2217  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2218  ret <32 x i8> %sel
2219}
2220
2221define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2222; SSE-LABEL: test77:
2223; SSE:       # %bb.0: # %entry
2224; SSE-NEXT:    pmaxub %xmm2, %xmm0
2225; SSE-NEXT:    pmaxub %xmm3, %xmm1
2226; SSE-NEXT:    retq
2227;
2228; AVX1-LABEL: test77:
2229; AVX1:       # %bb.0: # %entry
2230; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2231; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2232; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2233; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2234; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2235; AVX1-NEXT:    retq
2236;
2237; AVX2-LABEL: test77:
2238; AVX2:       # %bb.0: # %entry
2239; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2240; AVX2-NEXT:    retq
2241;
2242; AVX512-LABEL: test77:
2243; AVX512:       # %bb.0: # %entry
2244; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2245; AVX512-NEXT:    retq
2246entry:
2247  %cmp = icmp ult <32 x i8> %a, %b
2248  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2249  ret <32 x i8> %sel
2250}
2251
2252define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2253; SSE-LABEL: test78:
2254; SSE:       # %bb.0: # %entry
2255; SSE-NEXT:    pmaxub %xmm2, %xmm0
2256; SSE-NEXT:    pmaxub %xmm3, %xmm1
2257; SSE-NEXT:    retq
2258;
2259; AVX1-LABEL: test78:
2260; AVX1:       # %bb.0: # %entry
2261; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2262; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2263; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2264; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2265; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2266; AVX1-NEXT:    retq
2267;
2268; AVX2-LABEL: test78:
2269; AVX2:       # %bb.0: # %entry
2270; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2271; AVX2-NEXT:    retq
2272;
2273; AVX512-LABEL: test78:
2274; AVX512:       # %bb.0: # %entry
2275; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2276; AVX512-NEXT:    retq
2277entry:
2278  %cmp = icmp ule <32 x i8> %a, %b
2279  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2280  ret <32 x i8> %sel
2281}
2282
2283define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2284; SSE-LABEL: test79:
2285; SSE:       # %bb.0: # %entry
2286; SSE-NEXT:    pminub %xmm2, %xmm0
2287; SSE-NEXT:    pminub %xmm3, %xmm1
2288; SSE-NEXT:    retq
2289;
2290; AVX1-LABEL: test79:
2291; AVX1:       # %bb.0: # %entry
2292; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2293; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2294; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2295; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2296; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2297; AVX1-NEXT:    retq
2298;
2299; AVX2-LABEL: test79:
2300; AVX2:       # %bb.0: # %entry
2301; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2302; AVX2-NEXT:    retq
2303;
2304; AVX512-LABEL: test79:
2305; AVX512:       # %bb.0: # %entry
2306; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2307; AVX512-NEXT:    retq
2308entry:
2309  %cmp = icmp ugt <32 x i8> %a, %b
2310  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2311  ret <32 x i8> %sel
2312}
2313
2314define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2315; SSE-LABEL: test80:
2316; SSE:       # %bb.0: # %entry
2317; SSE-NEXT:    pminub %xmm2, %xmm0
2318; SSE-NEXT:    pminub %xmm3, %xmm1
2319; SSE-NEXT:    retq
2320;
2321; AVX1-LABEL: test80:
2322; AVX1:       # %bb.0: # %entry
2323; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2324; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2325; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2326; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2327; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2328; AVX1-NEXT:    retq
2329;
2330; AVX2-LABEL: test80:
2331; AVX2:       # %bb.0: # %entry
2332; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2333; AVX2-NEXT:    retq
2334;
2335; AVX512-LABEL: test80:
2336; AVX512:       # %bb.0: # %entry
2337; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2338; AVX512-NEXT:    retq
2339entry:
2340  %cmp = icmp uge <32 x i8> %a, %b
2341  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2342  ret <32 x i8> %sel
2343}
2344
2345define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2346; SSE-LABEL: test81:
2347; SSE:       # %bb.0: # %entry
2348; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2349; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2350; SSE-NEXT:    retq
2351;
2352; AVX1-LABEL: test81:
2353; AVX1:       # %bb.0: # %entry
2354; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2355; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2356; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2357; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2358; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2359; AVX1-NEXT:    retq
2360;
2361; AVX2-LABEL: test81:
2362; AVX2:       # %bb.0: # %entry
2363; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2364; AVX2-NEXT:    retq
2365;
2366; AVX512-LABEL: test81:
2367; AVX512:       # %bb.0: # %entry
2368; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2369; AVX512-NEXT:    retq
2370entry:
2371  %cmp = icmp slt <16 x i16> %a, %b
2372  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2373  ret <16 x i16> %sel
2374}
2375
2376define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2377; SSE-LABEL: test82:
2378; SSE:       # %bb.0: # %entry
2379; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2380; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2381; SSE-NEXT:    retq
2382;
2383; AVX1-LABEL: test82:
2384; AVX1:       # %bb.0: # %entry
2385; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2386; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2387; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2388; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2389; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2390; AVX1-NEXT:    retq
2391;
2392; AVX2-LABEL: test82:
2393; AVX2:       # %bb.0: # %entry
2394; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2395; AVX2-NEXT:    retq
2396;
2397; AVX512-LABEL: test82:
2398; AVX512:       # %bb.0: # %entry
2399; AVX512-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2400; AVX512-NEXT:    retq
2401entry:
2402  %cmp = icmp sle <16 x i16> %a, %b
2403  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2404  ret <16 x i16> %sel
2405}
2406
2407define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2408; SSE-LABEL: test83:
2409; SSE:       # %bb.0: # %entry
2410; SSE-NEXT:    pminsw %xmm2, %xmm0
2411; SSE-NEXT:    pminsw %xmm3, %xmm1
2412; SSE-NEXT:    retq
2413;
2414; AVX1-LABEL: test83:
2415; AVX1:       # %bb.0: # %entry
2416; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2417; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2418; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2419; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2420; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2421; AVX1-NEXT:    retq
2422;
2423; AVX2-LABEL: test83:
2424; AVX2:       # %bb.0: # %entry
2425; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2426; AVX2-NEXT:    retq
2427;
2428; AVX512-LABEL: test83:
2429; AVX512:       # %bb.0: # %entry
2430; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2431; AVX512-NEXT:    retq
2432entry:
2433  %cmp = icmp sgt <16 x i16> %a, %b
2434  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2435  ret <16 x i16> %sel
2436}
2437
2438define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2439; SSE-LABEL: test84:
2440; SSE:       # %bb.0: # %entry
2441; SSE-NEXT:    pminsw %xmm2, %xmm0
2442; SSE-NEXT:    pminsw %xmm3, %xmm1
2443; SSE-NEXT:    retq
2444;
2445; AVX1-LABEL: test84:
2446; AVX1:       # %bb.0: # %entry
2447; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2448; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2449; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2450; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2451; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2452; AVX1-NEXT:    retq
2453;
2454; AVX2-LABEL: test84:
2455; AVX2:       # %bb.0: # %entry
2456; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2457; AVX2-NEXT:    retq
2458;
2459; AVX512-LABEL: test84:
2460; AVX512:       # %bb.0: # %entry
2461; AVX512-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2462; AVX512-NEXT:    retq
2463entry:
2464  %cmp = icmp sge <16 x i16> %a, %b
2465  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2466  ret <16 x i16> %sel
2467}
2468
2469define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2470; SSE2-LABEL: test85:
2471; SSE2:       # %bb.0: # %entry
2472; SSE2-NEXT:    psubusw %xmm0, %xmm2
2473; SSE2-NEXT:    paddw %xmm2, %xmm0
2474; SSE2-NEXT:    psubusw %xmm1, %xmm3
2475; SSE2-NEXT:    paddw %xmm3, %xmm1
2476; SSE2-NEXT:    retq
2477;
2478; SSE4-LABEL: test85:
2479; SSE4:       # %bb.0: # %entry
2480; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2481; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2482; SSE4-NEXT:    retq
2483;
2484; AVX1-LABEL: test85:
2485; AVX1:       # %bb.0: # %entry
2486; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2487; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2488; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2489; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2490; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2491; AVX1-NEXT:    retq
2492;
2493; AVX2-LABEL: test85:
2494; AVX2:       # %bb.0: # %entry
2495; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2496; AVX2-NEXT:    retq
2497;
2498; AVX512-LABEL: test85:
2499; AVX512:       # %bb.0: # %entry
2500; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2501; AVX512-NEXT:    retq
2502entry:
2503  %cmp = icmp ult <16 x i16> %a, %b
2504  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2505  ret <16 x i16> %sel
2506}
2507
2508define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2509; SSE2-LABEL: test86:
2510; SSE2:       # %bb.0: # %entry
2511; SSE2-NEXT:    psubusw %xmm0, %xmm2
2512; SSE2-NEXT:    paddw %xmm2, %xmm0
2513; SSE2-NEXT:    psubusw %xmm1, %xmm3
2514; SSE2-NEXT:    paddw %xmm3, %xmm1
2515; SSE2-NEXT:    retq
2516;
2517; SSE4-LABEL: test86:
2518; SSE4:       # %bb.0: # %entry
2519; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2520; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2521; SSE4-NEXT:    retq
2522;
2523; AVX1-LABEL: test86:
2524; AVX1:       # %bb.0: # %entry
2525; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2526; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2527; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2528; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2529; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2530; AVX1-NEXT:    retq
2531;
2532; AVX2-LABEL: test86:
2533; AVX2:       # %bb.0: # %entry
2534; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2535; AVX2-NEXT:    retq
2536;
2537; AVX512-LABEL: test86:
2538; AVX512:       # %bb.0: # %entry
2539; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2540; AVX512-NEXT:    retq
2541entry:
2542  %cmp = icmp ule <16 x i16> %a, %b
2543  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2544  ret <16 x i16> %sel
2545}
2546
2547define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2548; SSE2-LABEL: test87:
2549; SSE2:       # %bb.0: # %entry
2550; SSE2-NEXT:    movdqa %xmm0, %xmm4
2551; SSE2-NEXT:    psubusw %xmm2, %xmm4
2552; SSE2-NEXT:    psubw %xmm4, %xmm0
2553; SSE2-NEXT:    movdqa %xmm1, %xmm2
2554; SSE2-NEXT:    psubusw %xmm3, %xmm2
2555; SSE2-NEXT:    psubw %xmm2, %xmm1
2556; SSE2-NEXT:    retq
2557;
2558; SSE4-LABEL: test87:
2559; SSE4:       # %bb.0: # %entry
2560; SSE4-NEXT:    pminuw %xmm2, %xmm0
2561; SSE4-NEXT:    pminuw %xmm3, %xmm1
2562; SSE4-NEXT:    retq
2563;
2564; AVX1-LABEL: test87:
2565; AVX1:       # %bb.0: # %entry
2566; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2567; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2568; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2569; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2570; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2571; AVX1-NEXT:    retq
2572;
2573; AVX2-LABEL: test87:
2574; AVX2:       # %bb.0: # %entry
2575; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2576; AVX2-NEXT:    retq
2577;
2578; AVX512-LABEL: test87:
2579; AVX512:       # %bb.0: # %entry
2580; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2581; AVX512-NEXT:    retq
2582entry:
2583  %cmp = icmp ugt <16 x i16> %a, %b
2584  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2585  ret <16 x i16> %sel
2586}
2587
2588define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2589; SSE2-LABEL: test88:
2590; SSE2:       # %bb.0: # %entry
2591; SSE2-NEXT:    movdqa %xmm0, %xmm4
2592; SSE2-NEXT:    psubusw %xmm2, %xmm4
2593; SSE2-NEXT:    psubw %xmm4, %xmm0
2594; SSE2-NEXT:    movdqa %xmm1, %xmm2
2595; SSE2-NEXT:    psubusw %xmm3, %xmm2
2596; SSE2-NEXT:    psubw %xmm2, %xmm1
2597; SSE2-NEXT:    retq
2598;
2599; SSE4-LABEL: test88:
2600; SSE4:       # %bb.0: # %entry
2601; SSE4-NEXT:    pminuw %xmm2, %xmm0
2602; SSE4-NEXT:    pminuw %xmm3, %xmm1
2603; SSE4-NEXT:    retq
2604;
2605; AVX1-LABEL: test88:
2606; AVX1:       # %bb.0: # %entry
2607; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2608; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2609; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2610; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2611; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2612; AVX1-NEXT:    retq
2613;
2614; AVX2-LABEL: test88:
2615; AVX2:       # %bb.0: # %entry
2616; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2617; AVX2-NEXT:    retq
2618;
2619; AVX512-LABEL: test88:
2620; AVX512:       # %bb.0: # %entry
2621; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2622; AVX512-NEXT:    retq
2623entry:
2624  %cmp = icmp uge <16 x i16> %a, %b
2625  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2626  ret <16 x i16> %sel
2627}
2628
2629define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2630; SSE2-LABEL: test89:
2631; SSE2:       # %bb.0: # %entry
2632; SSE2-NEXT:    movdqa %xmm0, %xmm4
2633; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2634; SSE2-NEXT:    pand %xmm4, %xmm0
2635; SSE2-NEXT:    pandn %xmm2, %xmm4
2636; SSE2-NEXT:    por %xmm4, %xmm0
2637; SSE2-NEXT:    movdqa %xmm1, %xmm2
2638; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2639; SSE2-NEXT:    pand %xmm2, %xmm1
2640; SSE2-NEXT:    pandn %xmm3, %xmm2
2641; SSE2-NEXT:    por %xmm2, %xmm1
2642; SSE2-NEXT:    retq
2643;
2644; SSE4-LABEL: test89:
2645; SSE4:       # %bb.0: # %entry
2646; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2647; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2648; SSE4-NEXT:    retq
2649;
2650; AVX1-LABEL: test89:
2651; AVX1:       # %bb.0: # %entry
2652; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2653; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2654; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2655; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2656; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2657; AVX1-NEXT:    retq
2658;
2659; AVX2-LABEL: test89:
2660; AVX2:       # %bb.0: # %entry
2661; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2662; AVX2-NEXT:    retq
2663;
2664; AVX512-LABEL: test89:
2665; AVX512:       # %bb.0: # %entry
2666; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2667; AVX512-NEXT:    retq
2668entry:
2669  %cmp = icmp slt <8 x i32> %a, %b
2670  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2671  ret <8 x i32> %sel
2672}
2673
2674define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2675; SSE2-LABEL: test90:
2676; SSE2:       # %bb.0: # %entry
2677; SSE2-NEXT:    movdqa %xmm0, %xmm4
2678; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2679; SSE2-NEXT:    pand %xmm4, %xmm0
2680; SSE2-NEXT:    pandn %xmm2, %xmm4
2681; SSE2-NEXT:    por %xmm4, %xmm0
2682; SSE2-NEXT:    movdqa %xmm1, %xmm2
2683; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2684; SSE2-NEXT:    pand %xmm2, %xmm1
2685; SSE2-NEXT:    pandn %xmm3, %xmm2
2686; SSE2-NEXT:    por %xmm2, %xmm1
2687; SSE2-NEXT:    retq
2688;
2689; SSE4-LABEL: test90:
2690; SSE4:       # %bb.0: # %entry
2691; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2692; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2693; SSE4-NEXT:    retq
2694;
2695; AVX1-LABEL: test90:
2696; AVX1:       # %bb.0: # %entry
2697; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2698; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2699; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2700; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2701; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2702; AVX1-NEXT:    retq
2703;
2704; AVX2-LABEL: test90:
2705; AVX2:       # %bb.0: # %entry
2706; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2707; AVX2-NEXT:    retq
2708;
2709; AVX512-LABEL: test90:
2710; AVX512:       # %bb.0: # %entry
2711; AVX512-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2712; AVX512-NEXT:    retq
2713entry:
2714  %cmp = icmp sle <8 x i32> %a, %b
2715  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2716  ret <8 x i32> %sel
2717}
2718
2719define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2720; SSE2-LABEL: test91:
2721; SSE2:       # %bb.0: # %entry
2722; SSE2-NEXT:    movdqa %xmm2, %xmm4
2723; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2724; SSE2-NEXT:    pand %xmm4, %xmm0
2725; SSE2-NEXT:    pandn %xmm2, %xmm4
2726; SSE2-NEXT:    por %xmm4, %xmm0
2727; SSE2-NEXT:    movdqa %xmm3, %xmm2
2728; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2729; SSE2-NEXT:    pand %xmm2, %xmm1
2730; SSE2-NEXT:    pandn %xmm3, %xmm2
2731; SSE2-NEXT:    por %xmm2, %xmm1
2732; SSE2-NEXT:    retq
2733;
2734; SSE4-LABEL: test91:
2735; SSE4:       # %bb.0: # %entry
2736; SSE4-NEXT:    pminsd %xmm2, %xmm0
2737; SSE4-NEXT:    pminsd %xmm3, %xmm1
2738; SSE4-NEXT:    retq
2739;
2740; AVX1-LABEL: test91:
2741; AVX1:       # %bb.0: # %entry
2742; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2743; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2744; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2745; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2746; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2747; AVX1-NEXT:    retq
2748;
2749; AVX2-LABEL: test91:
2750; AVX2:       # %bb.0: # %entry
2751; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2752; AVX2-NEXT:    retq
2753;
2754; AVX512-LABEL: test91:
2755; AVX512:       # %bb.0: # %entry
2756; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2757; AVX512-NEXT:    retq
2758entry:
2759  %cmp = icmp sgt <8 x i32> %a, %b
2760  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2761  ret <8 x i32> %sel
2762}
2763
2764define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
2765; SSE2-LABEL: test92:
2766; SSE2:       # %bb.0: # %entry
2767; SSE2-NEXT:    movdqa %xmm2, %xmm4
2768; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2769; SSE2-NEXT:    pand %xmm4, %xmm0
2770; SSE2-NEXT:    pandn %xmm2, %xmm4
2771; SSE2-NEXT:    por %xmm4, %xmm0
2772; SSE2-NEXT:    movdqa %xmm3, %xmm2
2773; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2774; SSE2-NEXT:    pand %xmm2, %xmm1
2775; SSE2-NEXT:    pandn %xmm3, %xmm2
2776; SSE2-NEXT:    por %xmm2, %xmm1
2777; SSE2-NEXT:    retq
2778;
2779; SSE4-LABEL: test92:
2780; SSE4:       # %bb.0: # %entry
2781; SSE4-NEXT:    pminsd %xmm2, %xmm0
2782; SSE4-NEXT:    pminsd %xmm3, %xmm1
2783; SSE4-NEXT:    retq
2784;
2785; AVX1-LABEL: test92:
2786; AVX1:       # %bb.0: # %entry
2787; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2788; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2789; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2790; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2791; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2792; AVX1-NEXT:    retq
2793;
2794; AVX2-LABEL: test92:
2795; AVX2:       # %bb.0: # %entry
2796; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2797; AVX2-NEXT:    retq
2798;
2799; AVX512-LABEL: test92:
2800; AVX512:       # %bb.0: # %entry
2801; AVX512-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2802; AVX512-NEXT:    retq
2803entry:
2804  %cmp = icmp sge <8 x i32> %a, %b
2805  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2806  ret <8 x i32> %sel
2807}
2808
2809define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
2810; SSE2-LABEL: test93:
2811; SSE2:       # %bb.0: # %entry
2812; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2813; SSE2-NEXT:    movdqa %xmm2, %xmm5
2814; SSE2-NEXT:    pxor %xmm4, %xmm5
2815; SSE2-NEXT:    movdqa %xmm0, %xmm6
2816; SSE2-NEXT:    pxor %xmm4, %xmm6
2817; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2818; SSE2-NEXT:    pand %xmm6, %xmm0
2819; SSE2-NEXT:    pandn %xmm2, %xmm6
2820; SSE2-NEXT:    por %xmm6, %xmm0
2821; SSE2-NEXT:    movdqa %xmm3, %xmm2
2822; SSE2-NEXT:    pxor %xmm4, %xmm2
2823; SSE2-NEXT:    pxor %xmm1, %xmm4
2824; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2825; SSE2-NEXT:    pand %xmm4, %xmm1
2826; SSE2-NEXT:    pandn %xmm3, %xmm4
2827; SSE2-NEXT:    por %xmm4, %xmm1
2828; SSE2-NEXT:    retq
2829;
2830; SSE4-LABEL: test93:
2831; SSE4:       # %bb.0: # %entry
2832; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2833; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2834; SSE4-NEXT:    retq
2835;
2836; AVX1-LABEL: test93:
2837; AVX1:       # %bb.0: # %entry
2838; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2839; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2840; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2841; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2842; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2843; AVX1-NEXT:    retq
2844;
2845; AVX2-LABEL: test93:
2846; AVX2:       # %bb.0: # %entry
2847; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2848; AVX2-NEXT:    retq
2849;
2850; AVX512-LABEL: test93:
2851; AVX512:       # %bb.0: # %entry
2852; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2853; AVX512-NEXT:    retq
2854entry:
2855  %cmp = icmp ult <8 x i32> %a, %b
2856  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2857  ret <8 x i32> %sel
2858}
2859
2860define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
2861; SSE2-LABEL: test94:
2862; SSE2:       # %bb.0: # %entry
2863; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2864; SSE2-NEXT:    movdqa %xmm2, %xmm5
2865; SSE2-NEXT:    pxor %xmm4, %xmm5
2866; SSE2-NEXT:    movdqa %xmm0, %xmm6
2867; SSE2-NEXT:    pxor %xmm4, %xmm6
2868; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2869; SSE2-NEXT:    pand %xmm6, %xmm0
2870; SSE2-NEXT:    pandn %xmm2, %xmm6
2871; SSE2-NEXT:    por %xmm6, %xmm0
2872; SSE2-NEXT:    movdqa %xmm3, %xmm2
2873; SSE2-NEXT:    pxor %xmm4, %xmm2
2874; SSE2-NEXT:    pxor %xmm1, %xmm4
2875; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2876; SSE2-NEXT:    pand %xmm4, %xmm1
2877; SSE2-NEXT:    pandn %xmm3, %xmm4
2878; SSE2-NEXT:    por %xmm4, %xmm1
2879; SSE2-NEXT:    retq
2880;
2881; SSE4-LABEL: test94:
2882; SSE4:       # %bb.0: # %entry
2883; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2884; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2885; SSE4-NEXT:    retq
2886;
2887; AVX1-LABEL: test94:
2888; AVX1:       # %bb.0: # %entry
2889; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2890; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2891; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2892; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2893; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2894; AVX1-NEXT:    retq
2895;
2896; AVX2-LABEL: test94:
2897; AVX2:       # %bb.0: # %entry
2898; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2899; AVX2-NEXT:    retq
2900;
2901; AVX512-LABEL: test94:
2902; AVX512:       # %bb.0: # %entry
2903; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2904; AVX512-NEXT:    retq
2905entry:
2906  %cmp = icmp ule <8 x i32> %a, %b
2907  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2908  ret <8 x i32> %sel
2909}
2910
2911define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
2912; SSE2-LABEL: test95:
2913; SSE2:       # %bb.0: # %entry
2914; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2915; SSE2-NEXT:    movdqa %xmm0, %xmm5
2916; SSE2-NEXT:    pxor %xmm4, %xmm5
2917; SSE2-NEXT:    movdqa %xmm2, %xmm6
2918; SSE2-NEXT:    pxor %xmm4, %xmm6
2919; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2920; SSE2-NEXT:    pand %xmm6, %xmm0
2921; SSE2-NEXT:    pandn %xmm2, %xmm6
2922; SSE2-NEXT:    por %xmm6, %xmm0
2923; SSE2-NEXT:    movdqa %xmm1, %xmm2
2924; SSE2-NEXT:    pxor %xmm4, %xmm2
2925; SSE2-NEXT:    pxor %xmm3, %xmm4
2926; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2927; SSE2-NEXT:    pand %xmm4, %xmm1
2928; SSE2-NEXT:    pandn %xmm3, %xmm4
2929; SSE2-NEXT:    por %xmm4, %xmm1
2930; SSE2-NEXT:    retq
2931;
2932; SSE4-LABEL: test95:
2933; SSE4:       # %bb.0: # %entry
2934; SSE4-NEXT:    pminud %xmm2, %xmm0
2935; SSE4-NEXT:    pminud %xmm3, %xmm1
2936; SSE4-NEXT:    retq
2937;
2938; AVX1-LABEL: test95:
2939; AVX1:       # %bb.0: # %entry
2940; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2941; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2942; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
2943; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2944; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2945; AVX1-NEXT:    retq
2946;
2947; AVX2-LABEL: test95:
2948; AVX2:       # %bb.0: # %entry
2949; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
2950; AVX2-NEXT:    retq
2951;
2952; AVX512-LABEL: test95:
2953; AVX512:       # %bb.0: # %entry
2954; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
2955; AVX512-NEXT:    retq
2956entry:
2957  %cmp = icmp ugt <8 x i32> %a, %b
2958  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2959  ret <8 x i32> %sel
2960}
2961
2962define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
2963; SSE2-LABEL: test96:
2964; SSE2:       # %bb.0: # %entry
2965; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2966; SSE2-NEXT:    movdqa %xmm0, %xmm5
2967; SSE2-NEXT:    pxor %xmm4, %xmm5
2968; SSE2-NEXT:    movdqa %xmm2, %xmm6
2969; SSE2-NEXT:    pxor %xmm4, %xmm6
2970; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
2971; SSE2-NEXT:    pand %xmm6, %xmm0
2972; SSE2-NEXT:    pandn %xmm2, %xmm6
2973; SSE2-NEXT:    por %xmm6, %xmm0
2974; SSE2-NEXT:    movdqa %xmm1, %xmm2
2975; SSE2-NEXT:    pxor %xmm4, %xmm2
2976; SSE2-NEXT:    pxor %xmm3, %xmm4
2977; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2978; SSE2-NEXT:    pand %xmm4, %xmm1
2979; SSE2-NEXT:    pandn %xmm3, %xmm4
2980; SSE2-NEXT:    por %xmm4, %xmm1
2981; SSE2-NEXT:    retq
2982;
2983; SSE4-LABEL: test96:
2984; SSE4:       # %bb.0: # %entry
2985; SSE4-NEXT:    pminud %xmm2, %xmm0
2986; SSE4-NEXT:    pminud %xmm3, %xmm1
2987; SSE4-NEXT:    retq
2988;
2989; AVX1-LABEL: test96:
2990; AVX1:       # %bb.0: # %entry
2991; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2992; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2993; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
2994; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2995; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2996; AVX1-NEXT:    retq
2997;
2998; AVX2-LABEL: test96:
2999; AVX2:       # %bb.0: # %entry
3000; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3001; AVX2-NEXT:    retq
3002;
3003; AVX512-LABEL: test96:
3004; AVX512:       # %bb.0: # %entry
3005; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3006; AVX512-NEXT:    retq
3007entry:
3008  %cmp = icmp uge <8 x i32> %a, %b
3009  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3010  ret <8 x i32> %sel
3011}
3012
3013; ----------------------------
3014
3015define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3016; SSE2-LABEL: test97:
3017; SSE2:       # %bb.0: # %entry
3018; SSE2-NEXT:    movdqa %xmm4, %xmm8
3019; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3020; SSE2-NEXT:    pand %xmm8, %xmm0
3021; SSE2-NEXT:    pandn %xmm4, %xmm8
3022; SSE2-NEXT:    por %xmm8, %xmm0
3023; SSE2-NEXT:    movdqa %xmm5, %xmm4
3024; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3025; SSE2-NEXT:    pand %xmm4, %xmm1
3026; SSE2-NEXT:    pandn %xmm5, %xmm4
3027; SSE2-NEXT:    por %xmm4, %xmm1
3028; SSE2-NEXT:    movdqa %xmm6, %xmm4
3029; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3030; SSE2-NEXT:    pand %xmm4, %xmm2
3031; SSE2-NEXT:    pandn %xmm6, %xmm4
3032; SSE2-NEXT:    por %xmm4, %xmm2
3033; SSE2-NEXT:    movdqa %xmm7, %xmm4
3034; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3035; SSE2-NEXT:    pand %xmm4, %xmm3
3036; SSE2-NEXT:    pandn %xmm7, %xmm4
3037; SSE2-NEXT:    por %xmm4, %xmm3
3038; SSE2-NEXT:    retq
3039;
3040; SSE4-LABEL: test97:
3041; SSE4:       # %bb.0: # %entry
3042; SSE4-NEXT:    pminsb %xmm4, %xmm0
3043; SSE4-NEXT:    pminsb %xmm5, %xmm1
3044; SSE4-NEXT:    pminsb %xmm6, %xmm2
3045; SSE4-NEXT:    pminsb %xmm7, %xmm3
3046; SSE4-NEXT:    retq
3047;
3048; AVX1-LABEL: test97:
3049; AVX1:       # %bb.0: # %entry
3050; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3051; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3052; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3053; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3054; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3055; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3056; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3057; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3058; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3059; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3060; AVX1-NEXT:    retq
3061;
3062; AVX2-LABEL: test97:
3063; AVX2:       # %bb.0: # %entry
3064; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3065; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3066; AVX2-NEXT:    retq
3067;
3068; AVX512F-LABEL: test97:
3069; AVX512F:       # %bb.0: # %entry
3070; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3071; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3072; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
3073; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
3074; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3075; AVX512F-NEXT:    retq
3076;
3077; AVX512BW-LABEL: test97:
3078; AVX512BW:       # %bb.0: # %entry
3079; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3080; AVX512BW-NEXT:    retq
3081entry:
3082  %cmp = icmp slt <64 x i8> %a, %b
3083  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3084  ret <64 x i8> %sel
3085}
3086
3087define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3088; SSE2-LABEL: test98:
3089; SSE2:       # %bb.0: # %entry
3090; SSE2-NEXT:    movdqa %xmm4, %xmm8
3091; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3092; SSE2-NEXT:    pand %xmm8, %xmm0
3093; SSE2-NEXT:    pandn %xmm4, %xmm8
3094; SSE2-NEXT:    por %xmm8, %xmm0
3095; SSE2-NEXT:    movdqa %xmm5, %xmm4
3096; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3097; SSE2-NEXT:    pand %xmm4, %xmm1
3098; SSE2-NEXT:    pandn %xmm5, %xmm4
3099; SSE2-NEXT:    por %xmm4, %xmm1
3100; SSE2-NEXT:    movdqa %xmm6, %xmm4
3101; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3102; SSE2-NEXT:    pand %xmm4, %xmm2
3103; SSE2-NEXT:    pandn %xmm6, %xmm4
3104; SSE2-NEXT:    por %xmm4, %xmm2
3105; SSE2-NEXT:    movdqa %xmm7, %xmm4
3106; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3107; SSE2-NEXT:    pand %xmm4, %xmm3
3108; SSE2-NEXT:    pandn %xmm7, %xmm4
3109; SSE2-NEXT:    por %xmm4, %xmm3
3110; SSE2-NEXT:    retq
3111;
3112; SSE4-LABEL: test98:
3113; SSE4:       # %bb.0: # %entry
3114; SSE4-NEXT:    pminsb %xmm4, %xmm0
3115; SSE4-NEXT:    pminsb %xmm5, %xmm1
3116; SSE4-NEXT:    pminsb %xmm6, %xmm2
3117; SSE4-NEXT:    pminsb %xmm7, %xmm3
3118; SSE4-NEXT:    retq
3119;
3120; AVX1-LABEL: test98:
3121; AVX1:       # %bb.0: # %entry
3122; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3123; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3124; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3125; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3126; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3127; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3128; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3129; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3130; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3131; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3132; AVX1-NEXT:    retq
3133;
3134; AVX2-LABEL: test98:
3135; AVX2:       # %bb.0: # %entry
3136; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3137; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3138; AVX2-NEXT:    retq
3139;
3140; AVX512F-LABEL: test98:
3141; AVX512F:       # %bb.0: # %entry
3142; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3143; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3144; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
3145; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
3146; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3147; AVX512F-NEXT:    retq
3148;
3149; AVX512BW-LABEL: test98:
3150; AVX512BW:       # %bb.0: # %entry
3151; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3152; AVX512BW-NEXT:    retq
3153entry:
3154  %cmp = icmp sle <64 x i8> %a, %b
3155  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3156  ret <64 x i8> %sel
3157}
3158
3159define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3160; SSE2-LABEL: test99:
3161; SSE2:       # %bb.0: # %entry
3162; SSE2-NEXT:    movdqa %xmm0, %xmm8
3163; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3164; SSE2-NEXT:    pand %xmm8, %xmm0
3165; SSE2-NEXT:    pandn %xmm4, %xmm8
3166; SSE2-NEXT:    por %xmm8, %xmm0
3167; SSE2-NEXT:    movdqa %xmm1, %xmm4
3168; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3169; SSE2-NEXT:    pand %xmm4, %xmm1
3170; SSE2-NEXT:    pandn %xmm5, %xmm4
3171; SSE2-NEXT:    por %xmm4, %xmm1
3172; SSE2-NEXT:    movdqa %xmm2, %xmm4
3173; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
3174; SSE2-NEXT:    pand %xmm4, %xmm2
3175; SSE2-NEXT:    pandn %xmm6, %xmm4
3176; SSE2-NEXT:    por %xmm4, %xmm2
3177; SSE2-NEXT:    movdqa %xmm3, %xmm4
3178; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
3179; SSE2-NEXT:    pand %xmm4, %xmm3
3180; SSE2-NEXT:    pandn %xmm7, %xmm4
3181; SSE2-NEXT:    por %xmm4, %xmm3
3182; SSE2-NEXT:    retq
3183;
3184; SSE4-LABEL: test99:
3185; SSE4:       # %bb.0: # %entry
3186; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3187; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3188; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3189; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3190; SSE4-NEXT:    retq
3191;
3192; AVX1-LABEL: test99:
3193; AVX1:       # %bb.0: # %entry
3194; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3195; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3196; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3197; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3198; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3199; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3200; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3201; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3202; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3203; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3204; AVX1-NEXT:    retq
3205;
3206; AVX2-LABEL: test99:
3207; AVX2:       # %bb.0: # %entry
3208; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3209; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3210; AVX2-NEXT:    retq
3211;
3212; AVX512F-LABEL: test99:
3213; AVX512F:       # %bb.0: # %entry
3214; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3215; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3216; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
3217; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
3218; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3219; AVX512F-NEXT:    retq
3220;
3221; AVX512BW-LABEL: test99:
3222; AVX512BW:       # %bb.0: # %entry
3223; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3224; AVX512BW-NEXT:    retq
3225entry:
3226  %cmp = icmp sgt <64 x i8> %a, %b
3227  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3228  ret <64 x i8> %sel
3229}
3230
3231define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3232; SSE2-LABEL: test100:
3233; SSE2:       # %bb.0: # %entry
3234; SSE2-NEXT:    movdqa %xmm0, %xmm8
3235; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3236; SSE2-NEXT:    pand %xmm8, %xmm0
3237; SSE2-NEXT:    pandn %xmm4, %xmm8
3238; SSE2-NEXT:    por %xmm8, %xmm0
3239; SSE2-NEXT:    movdqa %xmm1, %xmm4
3240; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3241; SSE2-NEXT:    pand %xmm4, %xmm1
3242; SSE2-NEXT:    pandn %xmm5, %xmm4
3243; SSE2-NEXT:    por %xmm4, %xmm1
3244; SSE2-NEXT:    movdqa %xmm2, %xmm4
3245; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
3246; SSE2-NEXT:    pand %xmm4, %xmm2
3247; SSE2-NEXT:    pandn %xmm6, %xmm4
3248; SSE2-NEXT:    por %xmm4, %xmm2
3249; SSE2-NEXT:    movdqa %xmm3, %xmm4
3250; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
3251; SSE2-NEXT:    pand %xmm4, %xmm3
3252; SSE2-NEXT:    pandn %xmm7, %xmm4
3253; SSE2-NEXT:    por %xmm4, %xmm3
3254; SSE2-NEXT:    retq
3255;
3256; SSE4-LABEL: test100:
3257; SSE4:       # %bb.0: # %entry
3258; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3259; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3260; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3261; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3262; SSE4-NEXT:    retq
3263;
3264; AVX1-LABEL: test100:
3265; AVX1:       # %bb.0: # %entry
3266; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3267; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3268; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3269; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3270; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3271; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3272; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3273; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3274; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3275; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3276; AVX1-NEXT:    retq
3277;
3278; AVX2-LABEL: test100:
3279; AVX2:       # %bb.0: # %entry
3280; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3281; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3282; AVX2-NEXT:    retq
3283;
3284; AVX512F-LABEL: test100:
3285; AVX512F:       # %bb.0: # %entry
3286; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3287; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3288; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
3289; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
3290; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3291; AVX512F-NEXT:    retq
3292;
3293; AVX512BW-LABEL: test100:
3294; AVX512BW:       # %bb.0: # %entry
3295; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3296; AVX512BW-NEXT:    retq
3297entry:
3298  %cmp = icmp sge <64 x i8> %a, %b
3299  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3300  ret <64 x i8> %sel
3301}
3302
3303define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3304; SSE-LABEL: test101:
3305; SSE:       # %bb.0: # %entry
3306; SSE-NEXT:    pminub %xmm4, %xmm0
3307; SSE-NEXT:    pminub %xmm5, %xmm1
3308; SSE-NEXT:    pminub %xmm6, %xmm2
3309; SSE-NEXT:    pminub %xmm7, %xmm3
3310; SSE-NEXT:    retq
3311;
3312; AVX1-LABEL: test101:
3313; AVX1:       # %bb.0: # %entry
3314; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3315; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3316; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3317; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3318; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3319; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3320; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3321; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3322; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3323; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3324; AVX1-NEXT:    retq
3325;
3326; AVX2-LABEL: test101:
3327; AVX2:       # %bb.0: # %entry
3328; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3329; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3330; AVX2-NEXT:    retq
3331;
3332; AVX512F-LABEL: test101:
3333; AVX512F:       # %bb.0: # %entry
3334; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3335; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3336; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
3337; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
3338; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3339; AVX512F-NEXT:    retq
3340;
3341; AVX512BW-LABEL: test101:
3342; AVX512BW:       # %bb.0: # %entry
3343; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3344; AVX512BW-NEXT:    retq
3345entry:
3346  %cmp = icmp ult <64 x i8> %a, %b
3347  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3348  ret <64 x i8> %sel
3349}
3350
3351define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3352; SSE-LABEL: test102:
3353; SSE:       # %bb.0: # %entry
3354; SSE-NEXT:    pminub %xmm4, %xmm0
3355; SSE-NEXT:    pminub %xmm5, %xmm1
3356; SSE-NEXT:    pminub %xmm6, %xmm2
3357; SSE-NEXT:    pminub %xmm7, %xmm3
3358; SSE-NEXT:    retq
3359;
3360; AVX1-LABEL: test102:
3361; AVX1:       # %bb.0: # %entry
3362; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3363; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3364; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3365; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3366; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3367; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3368; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3369; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3370; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3371; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3372; AVX1-NEXT:    retq
3373;
3374; AVX2-LABEL: test102:
3375; AVX2:       # %bb.0: # %entry
3376; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3377; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3378; AVX2-NEXT:    retq
3379;
3380; AVX512F-LABEL: test102:
3381; AVX512F:       # %bb.0: # %entry
3382; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3383; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3384; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
3385; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
3386; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3387; AVX512F-NEXT:    retq
3388;
3389; AVX512BW-LABEL: test102:
3390; AVX512BW:       # %bb.0: # %entry
3391; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3392; AVX512BW-NEXT:    retq
3393entry:
3394  %cmp = icmp ule <64 x i8> %a, %b
3395  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3396  ret <64 x i8> %sel
3397}
3398
3399define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3400; SSE-LABEL: test103:
3401; SSE:       # %bb.0: # %entry
3402; SSE-NEXT:    pmaxub %xmm4, %xmm0
3403; SSE-NEXT:    pmaxub %xmm5, %xmm1
3404; SSE-NEXT:    pmaxub %xmm6, %xmm2
3405; SSE-NEXT:    pmaxub %xmm7, %xmm3
3406; SSE-NEXT:    retq
3407;
3408; AVX1-LABEL: test103:
3409; AVX1:       # %bb.0: # %entry
3410; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3411; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3412; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3413; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3414; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3415; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3416; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3417; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3418; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3419; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3420; AVX1-NEXT:    retq
3421;
3422; AVX2-LABEL: test103:
3423; AVX2:       # %bb.0: # %entry
3424; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3425; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3426; AVX2-NEXT:    retq
3427;
3428; AVX512F-LABEL: test103:
3429; AVX512F:       # %bb.0: # %entry
3430; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3431; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3432; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
3433; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
3434; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3435; AVX512F-NEXT:    retq
3436;
3437; AVX512BW-LABEL: test103:
3438; AVX512BW:       # %bb.0: # %entry
3439; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3440; AVX512BW-NEXT:    retq
3441entry:
3442  %cmp = icmp ugt <64 x i8> %a, %b
3443  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3444  ret <64 x i8> %sel
3445}
3446
3447define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3448; SSE-LABEL: test104:
3449; SSE:       # %bb.0: # %entry
3450; SSE-NEXT:    pmaxub %xmm4, %xmm0
3451; SSE-NEXT:    pmaxub %xmm5, %xmm1
3452; SSE-NEXT:    pmaxub %xmm6, %xmm2
3453; SSE-NEXT:    pmaxub %xmm7, %xmm3
3454; SSE-NEXT:    retq
3455;
3456; AVX1-LABEL: test104:
3457; AVX1:       # %bb.0: # %entry
3458; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3459; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3460; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3461; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3462; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3463; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3464; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3465; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3466; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3467; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3468; AVX1-NEXT:    retq
3469;
3470; AVX2-LABEL: test104:
3471; AVX2:       # %bb.0: # %entry
3472; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3473; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3474; AVX2-NEXT:    retq
3475;
3476; AVX512F-LABEL: test104:
3477; AVX512F:       # %bb.0: # %entry
3478; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3479; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3480; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
3481; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
3482; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3483; AVX512F-NEXT:    retq
3484;
3485; AVX512BW-LABEL: test104:
3486; AVX512BW:       # %bb.0: # %entry
3487; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3488; AVX512BW-NEXT:    retq
3489entry:
3490  %cmp = icmp uge <64 x i8> %a, %b
3491  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3492  ret <64 x i8> %sel
3493}
3494
3495define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3496; SSE-LABEL: test105:
3497; SSE:       # %bb.0: # %entry
3498; SSE-NEXT:    pminsw %xmm4, %xmm0
3499; SSE-NEXT:    pminsw %xmm5, %xmm1
3500; SSE-NEXT:    pminsw %xmm6, %xmm2
3501; SSE-NEXT:    pminsw %xmm7, %xmm3
3502; SSE-NEXT:    retq
3503;
3504; AVX1-LABEL: test105:
3505; AVX1:       # %bb.0: # %entry
3506; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3507; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3508; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3509; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3510; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3511; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3512; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3513; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3514; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3515; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3516; AVX1-NEXT:    retq
3517;
3518; AVX2-LABEL: test105:
3519; AVX2:       # %bb.0: # %entry
3520; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3521; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3522; AVX2-NEXT:    retq
3523;
3524; AVX512F-LABEL: test105:
3525; AVX512F:       # %bb.0: # %entry
3526; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3527; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3528; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
3529; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
3530; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3531; AVX512F-NEXT:    retq
3532;
3533; AVX512BW-LABEL: test105:
3534; AVX512BW:       # %bb.0: # %entry
3535; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3536; AVX512BW-NEXT:    retq
3537entry:
3538  %cmp = icmp slt <32 x i16> %a, %b
3539  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3540  ret <32 x i16> %sel
3541}
3542
3543define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3544; SSE-LABEL: test106:
3545; SSE:       # %bb.0: # %entry
3546; SSE-NEXT:    pminsw %xmm4, %xmm0
3547; SSE-NEXT:    pminsw %xmm5, %xmm1
3548; SSE-NEXT:    pminsw %xmm6, %xmm2
3549; SSE-NEXT:    pminsw %xmm7, %xmm3
3550; SSE-NEXT:    retq
3551;
3552; AVX1-LABEL: test106:
3553; AVX1:       # %bb.0: # %entry
3554; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3555; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3556; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3557; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3558; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3559; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3560; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3561; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3562; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3563; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3564; AVX1-NEXT:    retq
3565;
3566; AVX2-LABEL: test106:
3567; AVX2:       # %bb.0: # %entry
3568; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3569; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3570; AVX2-NEXT:    retq
3571;
3572; AVX512F-LABEL: test106:
3573; AVX512F:       # %bb.0: # %entry
3574; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3575; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3576; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
3577; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
3578; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3579; AVX512F-NEXT:    retq
3580;
3581; AVX512BW-LABEL: test106:
3582; AVX512BW:       # %bb.0: # %entry
3583; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3584; AVX512BW-NEXT:    retq
3585entry:
3586  %cmp = icmp sle <32 x i16> %a, %b
3587  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3588  ret <32 x i16> %sel
3589}
3590
3591define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3592; SSE-LABEL: test107:
3593; SSE:       # %bb.0: # %entry
3594; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3595; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3596; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3597; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3598; SSE-NEXT:    retq
3599;
3600; AVX1-LABEL: test107:
3601; AVX1:       # %bb.0: # %entry
3602; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3603; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3604; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3605; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3606; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3607; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3608; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3609; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3610; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3611; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3612; AVX1-NEXT:    retq
3613;
3614; AVX2-LABEL: test107:
3615; AVX2:       # %bb.0: # %entry
3616; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3617; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3618; AVX2-NEXT:    retq
3619;
3620; AVX512F-LABEL: test107:
3621; AVX512F:       # %bb.0: # %entry
3622; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3623; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3624; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
3625; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3626; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3627; AVX512F-NEXT:    retq
3628;
3629; AVX512BW-LABEL: test107:
3630; AVX512BW:       # %bb.0: # %entry
3631; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3632; AVX512BW-NEXT:    retq
3633entry:
3634  %cmp = icmp sgt <32 x i16> %a, %b
3635  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3636  ret <32 x i16> %sel
3637}
3638
3639define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3640; SSE-LABEL: test108:
3641; SSE:       # %bb.0: # %entry
3642; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3643; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3644; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3645; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3646; SSE-NEXT:    retq
3647;
3648; AVX1-LABEL: test108:
3649; AVX1:       # %bb.0: # %entry
3650; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3651; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3652; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3653; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3654; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3655; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3656; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3657; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3658; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3659; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3660; AVX1-NEXT:    retq
3661;
3662; AVX2-LABEL: test108:
3663; AVX2:       # %bb.0: # %entry
3664; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3665; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3666; AVX2-NEXT:    retq
3667;
3668; AVX512F-LABEL: test108:
3669; AVX512F:       # %bb.0: # %entry
3670; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3671; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3672; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
3673; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
3674; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3675; AVX512F-NEXT:    retq
3676;
3677; AVX512BW-LABEL: test108:
3678; AVX512BW:       # %bb.0: # %entry
3679; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3680; AVX512BW-NEXT:    retq
3681entry:
3682  %cmp = icmp sge <32 x i16> %a, %b
3683  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3684  ret <32 x i16> %sel
3685}
3686
3687define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3688; SSE2-LABEL: test109:
3689; SSE2:       # %bb.0: # %entry
3690; SSE2-NEXT:    movdqa %xmm0, %xmm8
3691; SSE2-NEXT:    psubusw %xmm4, %xmm8
3692; SSE2-NEXT:    psubw %xmm8, %xmm0
3693; SSE2-NEXT:    movdqa %xmm1, %xmm4
3694; SSE2-NEXT:    psubusw %xmm5, %xmm4
3695; SSE2-NEXT:    psubw %xmm4, %xmm1
3696; SSE2-NEXT:    movdqa %xmm2, %xmm4
3697; SSE2-NEXT:    psubusw %xmm6, %xmm4
3698; SSE2-NEXT:    psubw %xmm4, %xmm2
3699; SSE2-NEXT:    movdqa %xmm3, %xmm4
3700; SSE2-NEXT:    psubusw %xmm7, %xmm4
3701; SSE2-NEXT:    psubw %xmm4, %xmm3
3702; SSE2-NEXT:    retq
3703;
3704; SSE4-LABEL: test109:
3705; SSE4:       # %bb.0: # %entry
3706; SSE4-NEXT:    pminuw %xmm4, %xmm0
3707; SSE4-NEXT:    pminuw %xmm5, %xmm1
3708; SSE4-NEXT:    pminuw %xmm6, %xmm2
3709; SSE4-NEXT:    pminuw %xmm7, %xmm3
3710; SSE4-NEXT:    retq
3711;
3712; AVX1-LABEL: test109:
3713; AVX1:       # %bb.0: # %entry
3714; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3715; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3716; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3717; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3718; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3719; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3720; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3721; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3722; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3723; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3724; AVX1-NEXT:    retq
3725;
3726; AVX2-LABEL: test109:
3727; AVX2:       # %bb.0: # %entry
3728; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3729; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3730; AVX2-NEXT:    retq
3731;
3732; AVX512F-LABEL: test109:
3733; AVX512F:       # %bb.0: # %entry
3734; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3735; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3736; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
3737; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
3738; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3739; AVX512F-NEXT:    retq
3740;
3741; AVX512BW-LABEL: test109:
3742; AVX512BW:       # %bb.0: # %entry
3743; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3744; AVX512BW-NEXT:    retq
3745entry:
3746  %cmp = icmp ult <32 x i16> %a, %b
3747  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3748  ret <32 x i16> %sel
3749}
3750
3751define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3752; SSE2-LABEL: test110:
3753; SSE2:       # %bb.0: # %entry
3754; SSE2-NEXT:    movdqa %xmm0, %xmm8
3755; SSE2-NEXT:    psubusw %xmm4, %xmm8
3756; SSE2-NEXT:    psubw %xmm8, %xmm0
3757; SSE2-NEXT:    movdqa %xmm1, %xmm4
3758; SSE2-NEXT:    psubusw %xmm5, %xmm4
3759; SSE2-NEXT:    psubw %xmm4, %xmm1
3760; SSE2-NEXT:    movdqa %xmm2, %xmm4
3761; SSE2-NEXT:    psubusw %xmm6, %xmm4
3762; SSE2-NEXT:    psubw %xmm4, %xmm2
3763; SSE2-NEXT:    movdqa %xmm3, %xmm4
3764; SSE2-NEXT:    psubusw %xmm7, %xmm4
3765; SSE2-NEXT:    psubw %xmm4, %xmm3
3766; SSE2-NEXT:    retq
3767;
3768; SSE4-LABEL: test110:
3769; SSE4:       # %bb.0: # %entry
3770; SSE4-NEXT:    pminuw %xmm4, %xmm0
3771; SSE4-NEXT:    pminuw %xmm5, %xmm1
3772; SSE4-NEXT:    pminuw %xmm6, %xmm2
3773; SSE4-NEXT:    pminuw %xmm7, %xmm3
3774; SSE4-NEXT:    retq
3775;
3776; AVX1-LABEL: test110:
3777; AVX1:       # %bb.0: # %entry
3778; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3779; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3780; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3781; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3782; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3783; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3784; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3785; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3786; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3787; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3788; AVX1-NEXT:    retq
3789;
3790; AVX2-LABEL: test110:
3791; AVX2:       # %bb.0: # %entry
3792; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3793; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3794; AVX2-NEXT:    retq
3795;
3796; AVX512F-LABEL: test110:
3797; AVX512F:       # %bb.0: # %entry
3798; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3799; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3800; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
3801; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
3802; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3803; AVX512F-NEXT:    retq
3804;
3805; AVX512BW-LABEL: test110:
3806; AVX512BW:       # %bb.0: # %entry
3807; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3808; AVX512BW-NEXT:    retq
3809entry:
3810  %cmp = icmp ule <32 x i16> %a, %b
3811  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3812  ret <32 x i16> %sel
3813}
3814
3815define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
3816; SSE2-LABEL: test111:
3817; SSE2:       # %bb.0: # %entry
3818; SSE2-NEXT:    psubusw %xmm0, %xmm4
3819; SSE2-NEXT:    paddw %xmm4, %xmm0
3820; SSE2-NEXT:    psubusw %xmm1, %xmm5
3821; SSE2-NEXT:    paddw %xmm5, %xmm1
3822; SSE2-NEXT:    psubusw %xmm2, %xmm6
3823; SSE2-NEXT:    paddw %xmm6, %xmm2
3824; SSE2-NEXT:    psubusw %xmm3, %xmm7
3825; SSE2-NEXT:    paddw %xmm7, %xmm3
3826; SSE2-NEXT:    retq
3827;
3828; SSE4-LABEL: test111:
3829; SSE4:       # %bb.0: # %entry
3830; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3831; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3832; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3833; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3834; SSE4-NEXT:    retq
3835;
3836; AVX1-LABEL: test111:
3837; AVX1:       # %bb.0: # %entry
3838; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3839; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3840; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3841; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3842; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3843; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3844; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3845; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3846; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3847; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3848; AVX1-NEXT:    retq
3849;
3850; AVX2-LABEL: test111:
3851; AVX2:       # %bb.0: # %entry
3852; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3853; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3854; AVX2-NEXT:    retq
3855;
3856; AVX512F-LABEL: test111:
3857; AVX512F:       # %bb.0: # %entry
3858; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3859; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3860; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
3861; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
3862; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3863; AVX512F-NEXT:    retq
3864;
3865; AVX512BW-LABEL: test111:
3866; AVX512BW:       # %bb.0: # %entry
3867; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3868; AVX512BW-NEXT:    retq
3869entry:
3870  %cmp = icmp ugt <32 x i16> %a, %b
3871  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3872  ret <32 x i16> %sel
3873}
3874
3875define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
3876; SSE2-LABEL: test112:
3877; SSE2:       # %bb.0: # %entry
3878; SSE2-NEXT:    psubusw %xmm0, %xmm4
3879; SSE2-NEXT:    paddw %xmm4, %xmm0
3880; SSE2-NEXT:    psubusw %xmm1, %xmm5
3881; SSE2-NEXT:    paddw %xmm5, %xmm1
3882; SSE2-NEXT:    psubusw %xmm2, %xmm6
3883; SSE2-NEXT:    paddw %xmm6, %xmm2
3884; SSE2-NEXT:    psubusw %xmm3, %xmm7
3885; SSE2-NEXT:    paddw %xmm7, %xmm3
3886; SSE2-NEXT:    retq
3887;
3888; SSE4-LABEL: test112:
3889; SSE4:       # %bb.0: # %entry
3890; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3891; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3892; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3893; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3894; SSE4-NEXT:    retq
3895;
3896; AVX1-LABEL: test112:
3897; AVX1:       # %bb.0: # %entry
3898; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3899; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3900; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3901; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3902; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3903; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3904; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3905; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3906; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3907; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3908; AVX1-NEXT:    retq
3909;
3910; AVX2-LABEL: test112:
3911; AVX2:       # %bb.0: # %entry
3912; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3913; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3914; AVX2-NEXT:    retq
3915;
3916; AVX512F-LABEL: test112:
3917; AVX512F:       # %bb.0: # %entry
3918; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
3919; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
3920; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
3921; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
3922; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
3923; AVX512F-NEXT:    retq
3924;
3925; AVX512BW-LABEL: test112:
3926; AVX512BW:       # %bb.0: # %entry
3927; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3928; AVX512BW-NEXT:    retq
3929entry:
3930  %cmp = icmp uge <32 x i16> %a, %b
3931  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3932  ret <32 x i16> %sel
3933}
3934
3935define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
3936; SSE2-LABEL: test113:
3937; SSE2:       # %bb.0: # %entry
3938; SSE2-NEXT:    movdqa %xmm4, %xmm8
3939; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
3940; SSE2-NEXT:    pand %xmm8, %xmm0
3941; SSE2-NEXT:    pandn %xmm4, %xmm8
3942; SSE2-NEXT:    por %xmm8, %xmm0
3943; SSE2-NEXT:    movdqa %xmm5, %xmm4
3944; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
3945; SSE2-NEXT:    pand %xmm4, %xmm1
3946; SSE2-NEXT:    pandn %xmm5, %xmm4
3947; SSE2-NEXT:    por %xmm4, %xmm1
3948; SSE2-NEXT:    movdqa %xmm6, %xmm4
3949; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3950; SSE2-NEXT:    pand %xmm4, %xmm2
3951; SSE2-NEXT:    pandn %xmm6, %xmm4
3952; SSE2-NEXT:    por %xmm4, %xmm2
3953; SSE2-NEXT:    movdqa %xmm7, %xmm4
3954; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
3955; SSE2-NEXT:    pand %xmm4, %xmm3
3956; SSE2-NEXT:    pandn %xmm7, %xmm4
3957; SSE2-NEXT:    por %xmm4, %xmm3
3958; SSE2-NEXT:    retq
3959;
3960; SSE4-LABEL: test113:
3961; SSE4:       # %bb.0: # %entry
3962; SSE4-NEXT:    pminsd %xmm4, %xmm0
3963; SSE4-NEXT:    pminsd %xmm5, %xmm1
3964; SSE4-NEXT:    pminsd %xmm6, %xmm2
3965; SSE4-NEXT:    pminsd %xmm7, %xmm3
3966; SSE4-NEXT:    retq
3967;
3968; AVX1-LABEL: test113:
3969; AVX1:       # %bb.0: # %entry
3970; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3971; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3972; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
3973; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
3974; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3975; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3976; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3977; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
3978; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
3979; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3980; AVX1-NEXT:    retq
3981;
3982; AVX2-LABEL: test113:
3983; AVX2:       # %bb.0: # %entry
3984; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
3985; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
3986; AVX2-NEXT:    retq
3987;
3988; AVX512-LABEL: test113:
3989; AVX512:       # %bb.0: # %entry
3990; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
3991; AVX512-NEXT:    retq
3992entry:
3993  %cmp = icmp slt <16 x i32> %a, %b
3994  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
3995  ret <16 x i32> %sel
3996}
3997
3998define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
3999; SSE2-LABEL: test114:
4000; SSE2:       # %bb.0: # %entry
4001; SSE2-NEXT:    movdqa %xmm4, %xmm8
4002; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
4003; SSE2-NEXT:    pand %xmm8, %xmm0
4004; SSE2-NEXT:    pandn %xmm4, %xmm8
4005; SSE2-NEXT:    por %xmm8, %xmm0
4006; SSE2-NEXT:    movdqa %xmm5, %xmm4
4007; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
4008; SSE2-NEXT:    pand %xmm4, %xmm1
4009; SSE2-NEXT:    pandn %xmm5, %xmm4
4010; SSE2-NEXT:    por %xmm4, %xmm1
4011; SSE2-NEXT:    movdqa %xmm6, %xmm4
4012; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
4013; SSE2-NEXT:    pand %xmm4, %xmm2
4014; SSE2-NEXT:    pandn %xmm6, %xmm4
4015; SSE2-NEXT:    por %xmm4, %xmm2
4016; SSE2-NEXT:    movdqa %xmm7, %xmm4
4017; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
4018; SSE2-NEXT:    pand %xmm4, %xmm3
4019; SSE2-NEXT:    pandn %xmm7, %xmm4
4020; SSE2-NEXT:    por %xmm4, %xmm3
4021; SSE2-NEXT:    retq
4022;
4023; SSE4-LABEL: test114:
4024; SSE4:       # %bb.0: # %entry
4025; SSE4-NEXT:    pminsd %xmm4, %xmm0
4026; SSE4-NEXT:    pminsd %xmm5, %xmm1
4027; SSE4-NEXT:    pminsd %xmm6, %xmm2
4028; SSE4-NEXT:    pminsd %xmm7, %xmm3
4029; SSE4-NEXT:    retq
4030;
4031; AVX1-LABEL: test114:
4032; AVX1:       # %bb.0: # %entry
4033; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4034; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4035; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4036; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4037; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4038; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4039; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4040; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4041; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4042; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4043; AVX1-NEXT:    retq
4044;
4045; AVX2-LABEL: test114:
4046; AVX2:       # %bb.0: # %entry
4047; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4048; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4049; AVX2-NEXT:    retq
4050;
4051; AVX512-LABEL: test114:
4052; AVX512:       # %bb.0: # %entry
4053; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4054; AVX512-NEXT:    retq
4055entry:
4056  %cmp = icmp sle <16 x i32> %a, %b
4057  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4058  ret <16 x i32> %sel
4059}
4060
4061define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4062; SSE2-LABEL: test115:
4063; SSE2:       # %bb.0: # %entry
4064; SSE2-NEXT:    movdqa %xmm0, %xmm8
4065; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4066; SSE2-NEXT:    pand %xmm8, %xmm0
4067; SSE2-NEXT:    pandn %xmm4, %xmm8
4068; SSE2-NEXT:    por %xmm8, %xmm0
4069; SSE2-NEXT:    movdqa %xmm1, %xmm4
4070; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4071; SSE2-NEXT:    pand %xmm4, %xmm1
4072; SSE2-NEXT:    pandn %xmm5, %xmm4
4073; SSE2-NEXT:    por %xmm4, %xmm1
4074; SSE2-NEXT:    movdqa %xmm2, %xmm4
4075; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
4076; SSE2-NEXT:    pand %xmm4, %xmm2
4077; SSE2-NEXT:    pandn %xmm6, %xmm4
4078; SSE2-NEXT:    por %xmm4, %xmm2
4079; SSE2-NEXT:    movdqa %xmm3, %xmm4
4080; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
4081; SSE2-NEXT:    pand %xmm4, %xmm3
4082; SSE2-NEXT:    pandn %xmm7, %xmm4
4083; SSE2-NEXT:    por %xmm4, %xmm3
4084; SSE2-NEXT:    retq
4085;
4086; SSE4-LABEL: test115:
4087; SSE4:       # %bb.0: # %entry
4088; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4089; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4090; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4091; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4092; SSE4-NEXT:    retq
4093;
4094; AVX1-LABEL: test115:
4095; AVX1:       # %bb.0: # %entry
4096; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4097; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4098; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4099; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4100; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4101; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4102; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4103; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4104; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4105; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4106; AVX1-NEXT:    retq
4107;
4108; AVX2-LABEL: test115:
4109; AVX2:       # %bb.0: # %entry
4110; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4111; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4112; AVX2-NEXT:    retq
4113;
4114; AVX512-LABEL: test115:
4115; AVX512:       # %bb.0: # %entry
4116; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4117; AVX512-NEXT:    retq
4118entry:
4119  %cmp = icmp sgt <16 x i32> %a, %b
4120  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4121  ret <16 x i32> %sel
4122}
4123
4124define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4125; SSE2-LABEL: test116:
4126; SSE2:       # %bb.0: # %entry
4127; SSE2-NEXT:    movdqa %xmm0, %xmm8
4128; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4129; SSE2-NEXT:    pand %xmm8, %xmm0
4130; SSE2-NEXT:    pandn %xmm4, %xmm8
4131; SSE2-NEXT:    por %xmm8, %xmm0
4132; SSE2-NEXT:    movdqa %xmm1, %xmm4
4133; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4134; SSE2-NEXT:    pand %xmm4, %xmm1
4135; SSE2-NEXT:    pandn %xmm5, %xmm4
4136; SSE2-NEXT:    por %xmm4, %xmm1
4137; SSE2-NEXT:    movdqa %xmm2, %xmm4
4138; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
4139; SSE2-NEXT:    pand %xmm4, %xmm2
4140; SSE2-NEXT:    pandn %xmm6, %xmm4
4141; SSE2-NEXT:    por %xmm4, %xmm2
4142; SSE2-NEXT:    movdqa %xmm3, %xmm4
4143; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
4144; SSE2-NEXT:    pand %xmm4, %xmm3
4145; SSE2-NEXT:    pandn %xmm7, %xmm4
4146; SSE2-NEXT:    por %xmm4, %xmm3
4147; SSE2-NEXT:    retq
4148;
4149; SSE4-LABEL: test116:
4150; SSE4:       # %bb.0: # %entry
4151; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4152; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4153; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4154; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4155; SSE4-NEXT:    retq
4156;
4157; AVX1-LABEL: test116:
4158; AVX1:       # %bb.0: # %entry
4159; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4160; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4161; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4162; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4163; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4164; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4165; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4166; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4167; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4168; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4169; AVX1-NEXT:    retq
4170;
4171; AVX2-LABEL: test116:
4172; AVX2:       # %bb.0: # %entry
4173; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4174; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4175; AVX2-NEXT:    retq
4176;
4177; AVX512-LABEL: test116:
4178; AVX512:       # %bb.0: # %entry
4179; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4180; AVX512-NEXT:    retq
4181entry:
4182  %cmp = icmp sge <16 x i32> %a, %b
4183  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4184  ret <16 x i32> %sel
4185}
4186
4187define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4188; SSE2-LABEL: test117:
4189; SSE2:       # %bb.0: # %entry
4190; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4191; SSE2-NEXT:    movdqa %xmm0, %xmm9
4192; SSE2-NEXT:    pxor %xmm8, %xmm9
4193; SSE2-NEXT:    movdqa %xmm4, %xmm10
4194; SSE2-NEXT:    pxor %xmm8, %xmm10
4195; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4196; SSE2-NEXT:    pand %xmm10, %xmm0
4197; SSE2-NEXT:    pandn %xmm4, %xmm10
4198; SSE2-NEXT:    por %xmm10, %xmm0
4199; SSE2-NEXT:    movdqa %xmm1, %xmm9
4200; SSE2-NEXT:    pxor %xmm8, %xmm9
4201; SSE2-NEXT:    movdqa %xmm5, %xmm4
4202; SSE2-NEXT:    pxor %xmm8, %xmm4
4203; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4204; SSE2-NEXT:    pand %xmm4, %xmm1
4205; SSE2-NEXT:    pandn %xmm5, %xmm4
4206; SSE2-NEXT:    por %xmm4, %xmm1
4207; SSE2-NEXT:    movdqa %xmm2, %xmm4
4208; SSE2-NEXT:    pxor %xmm8, %xmm4
4209; SSE2-NEXT:    movdqa %xmm6, %xmm5
4210; SSE2-NEXT:    pxor %xmm8, %xmm5
4211; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4212; SSE2-NEXT:    pand %xmm5, %xmm2
4213; SSE2-NEXT:    pandn %xmm6, %xmm5
4214; SSE2-NEXT:    por %xmm5, %xmm2
4215; SSE2-NEXT:    movdqa %xmm3, %xmm4
4216; SSE2-NEXT:    pxor %xmm8, %xmm4
4217; SSE2-NEXT:    pxor %xmm7, %xmm8
4218; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4219; SSE2-NEXT:    pand %xmm8, %xmm3
4220; SSE2-NEXT:    pandn %xmm7, %xmm8
4221; SSE2-NEXT:    por %xmm8, %xmm3
4222; SSE2-NEXT:    retq
4223;
4224; SSE4-LABEL: test117:
4225; SSE4:       # %bb.0: # %entry
4226; SSE4-NEXT:    pminud %xmm4, %xmm0
4227; SSE4-NEXT:    pminud %xmm5, %xmm1
4228; SSE4-NEXT:    pminud %xmm6, %xmm2
4229; SSE4-NEXT:    pminud %xmm7, %xmm3
4230; SSE4-NEXT:    retq
4231;
4232; AVX1-LABEL: test117:
4233; AVX1:       # %bb.0: # %entry
4234; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4235; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4236; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4237; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4238; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4239; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4240; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4241; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4242; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4243; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4244; AVX1-NEXT:    retq
4245;
4246; AVX2-LABEL: test117:
4247; AVX2:       # %bb.0: # %entry
4248; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4249; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4250; AVX2-NEXT:    retq
4251;
4252; AVX512-LABEL: test117:
4253; AVX512:       # %bb.0: # %entry
4254; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4255; AVX512-NEXT:    retq
4256entry:
4257  %cmp = icmp ult <16 x i32> %a, %b
4258  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4259  ret <16 x i32> %sel
4260}
4261
4262define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4263; SSE2-LABEL: test118:
4264; SSE2:       # %bb.0: # %entry
4265; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4266; SSE2-NEXT:    movdqa %xmm0, %xmm9
4267; SSE2-NEXT:    pxor %xmm8, %xmm9
4268; SSE2-NEXT:    movdqa %xmm4, %xmm10
4269; SSE2-NEXT:    pxor %xmm8, %xmm10
4270; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4271; SSE2-NEXT:    pand %xmm10, %xmm0
4272; SSE2-NEXT:    pandn %xmm4, %xmm10
4273; SSE2-NEXT:    por %xmm10, %xmm0
4274; SSE2-NEXT:    movdqa %xmm1, %xmm9
4275; SSE2-NEXT:    pxor %xmm8, %xmm9
4276; SSE2-NEXT:    movdqa %xmm5, %xmm4
4277; SSE2-NEXT:    pxor %xmm8, %xmm4
4278; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4279; SSE2-NEXT:    pand %xmm4, %xmm1
4280; SSE2-NEXT:    pandn %xmm5, %xmm4
4281; SSE2-NEXT:    por %xmm4, %xmm1
4282; SSE2-NEXT:    movdqa %xmm2, %xmm4
4283; SSE2-NEXT:    pxor %xmm8, %xmm4
4284; SSE2-NEXT:    movdqa %xmm6, %xmm5
4285; SSE2-NEXT:    pxor %xmm8, %xmm5
4286; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4287; SSE2-NEXT:    pand %xmm5, %xmm2
4288; SSE2-NEXT:    pandn %xmm6, %xmm5
4289; SSE2-NEXT:    por %xmm5, %xmm2
4290; SSE2-NEXT:    movdqa %xmm3, %xmm4
4291; SSE2-NEXT:    pxor %xmm8, %xmm4
4292; SSE2-NEXT:    pxor %xmm7, %xmm8
4293; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4294; SSE2-NEXT:    pand %xmm8, %xmm3
4295; SSE2-NEXT:    pandn %xmm7, %xmm8
4296; SSE2-NEXT:    por %xmm8, %xmm3
4297; SSE2-NEXT:    retq
4298;
4299; SSE4-LABEL: test118:
4300; SSE4:       # %bb.0: # %entry
4301; SSE4-NEXT:    pminud %xmm4, %xmm0
4302; SSE4-NEXT:    pminud %xmm5, %xmm1
4303; SSE4-NEXT:    pminud %xmm6, %xmm2
4304; SSE4-NEXT:    pminud %xmm7, %xmm3
4305; SSE4-NEXT:    retq
4306;
4307; AVX1-LABEL: test118:
4308; AVX1:       # %bb.0: # %entry
4309; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4310; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4311; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4312; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4313; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4314; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4315; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4316; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4317; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4318; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4319; AVX1-NEXT:    retq
4320;
4321; AVX2-LABEL: test118:
4322; AVX2:       # %bb.0: # %entry
4323; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4324; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4325; AVX2-NEXT:    retq
4326;
4327; AVX512-LABEL: test118:
4328; AVX512:       # %bb.0: # %entry
4329; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4330; AVX512-NEXT:    retq
4331entry:
4332  %cmp = icmp ule <16 x i32> %a, %b
4333  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4334  ret <16 x i32> %sel
4335}
4336
4337define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4338; SSE2-LABEL: test119:
4339; SSE2:       # %bb.0: # %entry
4340; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4341; SSE2-NEXT:    movdqa %xmm4, %xmm9
4342; SSE2-NEXT:    pxor %xmm8, %xmm9
4343; SSE2-NEXT:    movdqa %xmm0, %xmm10
4344; SSE2-NEXT:    pxor %xmm8, %xmm10
4345; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4346; SSE2-NEXT:    pand %xmm10, %xmm0
4347; SSE2-NEXT:    pandn %xmm4, %xmm10
4348; SSE2-NEXT:    por %xmm10, %xmm0
4349; SSE2-NEXT:    movdqa %xmm5, %xmm9
4350; SSE2-NEXT:    pxor %xmm8, %xmm9
4351; SSE2-NEXT:    movdqa %xmm1, %xmm4
4352; SSE2-NEXT:    pxor %xmm8, %xmm4
4353; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4354; SSE2-NEXT:    pand %xmm4, %xmm1
4355; SSE2-NEXT:    pandn %xmm5, %xmm4
4356; SSE2-NEXT:    por %xmm4, %xmm1
4357; SSE2-NEXT:    movdqa %xmm6, %xmm4
4358; SSE2-NEXT:    pxor %xmm8, %xmm4
4359; SSE2-NEXT:    movdqa %xmm2, %xmm5
4360; SSE2-NEXT:    pxor %xmm8, %xmm5
4361; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4362; SSE2-NEXT:    pand %xmm5, %xmm2
4363; SSE2-NEXT:    pandn %xmm6, %xmm5
4364; SSE2-NEXT:    por %xmm5, %xmm2
4365; SSE2-NEXT:    movdqa %xmm7, %xmm4
4366; SSE2-NEXT:    pxor %xmm8, %xmm4
4367; SSE2-NEXT:    pxor %xmm3, %xmm8
4368; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4369; SSE2-NEXT:    pand %xmm8, %xmm3
4370; SSE2-NEXT:    pandn %xmm7, %xmm8
4371; SSE2-NEXT:    por %xmm8, %xmm3
4372; SSE2-NEXT:    retq
4373;
4374; SSE4-LABEL: test119:
4375; SSE4:       # %bb.0: # %entry
4376; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4377; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4378; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4379; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4380; SSE4-NEXT:    retq
4381;
4382; AVX1-LABEL: test119:
4383; AVX1:       # %bb.0: # %entry
4384; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4385; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4386; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4387; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4388; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4389; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4390; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4391; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4392; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4393; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4394; AVX1-NEXT:    retq
4395;
4396; AVX2-LABEL: test119:
4397; AVX2:       # %bb.0: # %entry
4398; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4399; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4400; AVX2-NEXT:    retq
4401;
4402; AVX512-LABEL: test119:
4403; AVX512:       # %bb.0: # %entry
4404; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4405; AVX512-NEXT:    retq
4406entry:
4407  %cmp = icmp ugt <16 x i32> %a, %b
4408  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4409  ret <16 x i32> %sel
4410}
4411
4412define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4413; SSE2-LABEL: test120:
4414; SSE2:       # %bb.0: # %entry
4415; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4416; SSE2-NEXT:    movdqa %xmm4, %xmm9
4417; SSE2-NEXT:    pxor %xmm8, %xmm9
4418; SSE2-NEXT:    movdqa %xmm0, %xmm10
4419; SSE2-NEXT:    pxor %xmm8, %xmm10
4420; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4421; SSE2-NEXT:    pand %xmm10, %xmm0
4422; SSE2-NEXT:    pandn %xmm4, %xmm10
4423; SSE2-NEXT:    por %xmm10, %xmm0
4424; SSE2-NEXT:    movdqa %xmm5, %xmm9
4425; SSE2-NEXT:    pxor %xmm8, %xmm9
4426; SSE2-NEXT:    movdqa %xmm1, %xmm4
4427; SSE2-NEXT:    pxor %xmm8, %xmm4
4428; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4429; SSE2-NEXT:    pand %xmm4, %xmm1
4430; SSE2-NEXT:    pandn %xmm5, %xmm4
4431; SSE2-NEXT:    por %xmm4, %xmm1
4432; SSE2-NEXT:    movdqa %xmm6, %xmm4
4433; SSE2-NEXT:    pxor %xmm8, %xmm4
4434; SSE2-NEXT:    movdqa %xmm2, %xmm5
4435; SSE2-NEXT:    pxor %xmm8, %xmm5
4436; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4437; SSE2-NEXT:    pand %xmm5, %xmm2
4438; SSE2-NEXT:    pandn %xmm6, %xmm5
4439; SSE2-NEXT:    por %xmm5, %xmm2
4440; SSE2-NEXT:    movdqa %xmm7, %xmm4
4441; SSE2-NEXT:    pxor %xmm8, %xmm4
4442; SSE2-NEXT:    pxor %xmm3, %xmm8
4443; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4444; SSE2-NEXT:    pand %xmm8, %xmm3
4445; SSE2-NEXT:    pandn %xmm7, %xmm8
4446; SSE2-NEXT:    por %xmm8, %xmm3
4447; SSE2-NEXT:    retq
4448;
4449; SSE4-LABEL: test120:
4450; SSE4:       # %bb.0: # %entry
4451; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4452; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4453; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4454; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4455; SSE4-NEXT:    retq
4456;
4457; AVX1-LABEL: test120:
4458; AVX1:       # %bb.0: # %entry
4459; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4460; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4461; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4462; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4463; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4464; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4465; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4466; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4467; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4468; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4469; AVX1-NEXT:    retq
4470;
4471; AVX2-LABEL: test120:
4472; AVX2:       # %bb.0: # %entry
4473; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4474; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4475; AVX2-NEXT:    retq
4476;
4477; AVX512-LABEL: test120:
4478; AVX512:       # %bb.0: # %entry
4479; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4480; AVX512-NEXT:    retq
4481entry:
4482  %cmp = icmp uge <16 x i32> %a, %b
4483  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4484  ret <16 x i32> %sel
4485}
4486
4487define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4488; SSE2-LABEL: test121:
4489; SSE2:       # %bb.0: # %entry
4490; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4491; SSE2-NEXT:    movdqa %xmm0, %xmm9
4492; SSE2-NEXT:    pxor %xmm8, %xmm9
4493; SSE2-NEXT:    movdqa %xmm4, %xmm10
4494; SSE2-NEXT:    pxor %xmm8, %xmm10
4495; SSE2-NEXT:    movdqa %xmm10, %xmm11
4496; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4497; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4498; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4499; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4500; SSE2-NEXT:    pand %xmm12, %xmm9
4501; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4502; SSE2-NEXT:    por %xmm9, %xmm10
4503; SSE2-NEXT:    pand %xmm10, %xmm0
4504; SSE2-NEXT:    pandn %xmm4, %xmm10
4505; SSE2-NEXT:    por %xmm10, %xmm0
4506; SSE2-NEXT:    movdqa %xmm1, %xmm9
4507; SSE2-NEXT:    pxor %xmm8, %xmm9
4508; SSE2-NEXT:    movdqa %xmm5, %xmm4
4509; SSE2-NEXT:    pxor %xmm8, %xmm4
4510; SSE2-NEXT:    movdqa %xmm4, %xmm10
4511; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4512; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4513; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4514; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4515; SSE2-NEXT:    pand %xmm11, %xmm9
4516; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4517; SSE2-NEXT:    por %xmm9, %xmm4
4518; SSE2-NEXT:    pand %xmm4, %xmm1
4519; SSE2-NEXT:    pandn %xmm5, %xmm4
4520; SSE2-NEXT:    por %xmm4, %xmm1
4521; SSE2-NEXT:    movdqa %xmm2, %xmm4
4522; SSE2-NEXT:    pxor %xmm8, %xmm4
4523; SSE2-NEXT:    movdqa %xmm6, %xmm5
4524; SSE2-NEXT:    pxor %xmm8, %xmm5
4525; SSE2-NEXT:    movdqa %xmm5, %xmm9
4526; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4527; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4528; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4529; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4530; SSE2-NEXT:    pand %xmm10, %xmm4
4531; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4532; SSE2-NEXT:    por %xmm4, %xmm5
4533; SSE2-NEXT:    pand %xmm5, %xmm2
4534; SSE2-NEXT:    pandn %xmm6, %xmm5
4535; SSE2-NEXT:    por %xmm5, %xmm2
4536; SSE2-NEXT:    movdqa %xmm3, %xmm4
4537; SSE2-NEXT:    pxor %xmm8, %xmm4
4538; SSE2-NEXT:    pxor %xmm7, %xmm8
4539; SSE2-NEXT:    movdqa %xmm8, %xmm5
4540; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4541; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4542; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4543; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4544; SSE2-NEXT:    pand %xmm6, %xmm4
4545; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4546; SSE2-NEXT:    por %xmm4, %xmm5
4547; SSE2-NEXT:    pand %xmm5, %xmm3
4548; SSE2-NEXT:    pandn %xmm7, %xmm5
4549; SSE2-NEXT:    por %xmm5, %xmm3
4550; SSE2-NEXT:    retq
4551;
4552; SSE4-LABEL: test121:
4553; SSE4:       # %bb.0: # %entry
4554; SSE4-NEXT:    movdqa %xmm7, %xmm8
4555; SSE4-NEXT:    movdqa %xmm0, %xmm7
4556; SSE4-NEXT:    movdqa %xmm4, %xmm0
4557; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4558; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4559; SSE4-NEXT:    movdqa %xmm5, %xmm0
4560; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4561; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4562; SSE4-NEXT:    movdqa %xmm6, %xmm0
4563; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4564; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4565; SSE4-NEXT:    movdqa %xmm8, %xmm0
4566; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4567; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4568; SSE4-NEXT:    movapd %xmm4, %xmm0
4569; SSE4-NEXT:    movapd %xmm5, %xmm1
4570; SSE4-NEXT:    movapd %xmm6, %xmm2
4571; SSE4-NEXT:    movapd %xmm8, %xmm3
4572; SSE4-NEXT:    retq
4573;
4574; AVX1-LABEL: test121:
4575; AVX1:       # %bb.0: # %entry
4576; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4577; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4578; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4579; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4580; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4581; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4582; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4583; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4584; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4585; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4586; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4587; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4588; AVX1-NEXT:    retq
4589;
4590; AVX2-LABEL: test121:
4591; AVX2:       # %bb.0: # %entry
4592; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4593; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4594; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4595; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4596; AVX2-NEXT:    retq
4597;
4598; AVX512-LABEL: test121:
4599; AVX512:       # %bb.0: # %entry
4600; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4601; AVX512-NEXT:    retq
4602entry:
4603  %cmp = icmp slt <8 x i64> %a, %b
4604  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4605  ret <8 x i64> %sel
4606}
4607
4608define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4609; SSE2-LABEL: test122:
4610; SSE2:       # %bb.0: # %entry
4611; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4612; SSE2-NEXT:    movdqa %xmm0, %xmm9
4613; SSE2-NEXT:    pxor %xmm8, %xmm9
4614; SSE2-NEXT:    movdqa %xmm4, %xmm10
4615; SSE2-NEXT:    pxor %xmm8, %xmm10
4616; SSE2-NEXT:    movdqa %xmm10, %xmm11
4617; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4618; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4619; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4620; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4621; SSE2-NEXT:    pand %xmm12, %xmm9
4622; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4623; SSE2-NEXT:    por %xmm9, %xmm10
4624; SSE2-NEXT:    pand %xmm10, %xmm0
4625; SSE2-NEXT:    pandn %xmm4, %xmm10
4626; SSE2-NEXT:    por %xmm10, %xmm0
4627; SSE2-NEXT:    movdqa %xmm1, %xmm9
4628; SSE2-NEXT:    pxor %xmm8, %xmm9
4629; SSE2-NEXT:    movdqa %xmm5, %xmm4
4630; SSE2-NEXT:    pxor %xmm8, %xmm4
4631; SSE2-NEXT:    movdqa %xmm4, %xmm10
4632; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4633; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4634; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4635; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4636; SSE2-NEXT:    pand %xmm11, %xmm9
4637; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4638; SSE2-NEXT:    por %xmm9, %xmm4
4639; SSE2-NEXT:    pand %xmm4, %xmm1
4640; SSE2-NEXT:    pandn %xmm5, %xmm4
4641; SSE2-NEXT:    por %xmm4, %xmm1
4642; SSE2-NEXT:    movdqa %xmm2, %xmm4
4643; SSE2-NEXT:    pxor %xmm8, %xmm4
4644; SSE2-NEXT:    movdqa %xmm6, %xmm5
4645; SSE2-NEXT:    pxor %xmm8, %xmm5
4646; SSE2-NEXT:    movdqa %xmm5, %xmm9
4647; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4648; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4649; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4650; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4651; SSE2-NEXT:    pand %xmm10, %xmm4
4652; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4653; SSE2-NEXT:    por %xmm4, %xmm5
4654; SSE2-NEXT:    pand %xmm5, %xmm2
4655; SSE2-NEXT:    pandn %xmm6, %xmm5
4656; SSE2-NEXT:    por %xmm5, %xmm2
4657; SSE2-NEXT:    movdqa %xmm3, %xmm4
4658; SSE2-NEXT:    pxor %xmm8, %xmm4
4659; SSE2-NEXT:    pxor %xmm7, %xmm8
4660; SSE2-NEXT:    movdqa %xmm8, %xmm5
4661; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4662; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4663; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4664; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4665; SSE2-NEXT:    pand %xmm6, %xmm4
4666; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4667; SSE2-NEXT:    por %xmm4, %xmm5
4668; SSE2-NEXT:    pand %xmm5, %xmm3
4669; SSE2-NEXT:    pandn %xmm7, %xmm5
4670; SSE2-NEXT:    por %xmm5, %xmm3
4671; SSE2-NEXT:    retq
4672;
4673; SSE4-LABEL: test122:
4674; SSE4:       # %bb.0: # %entry
4675; SSE4-NEXT:    movdqa %xmm7, %xmm8
4676; SSE4-NEXT:    movdqa %xmm0, %xmm7
4677; SSE4-NEXT:    movdqa %xmm4, %xmm0
4678; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4679; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4680; SSE4-NEXT:    movdqa %xmm5, %xmm0
4681; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4682; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4683; SSE4-NEXT:    movdqa %xmm6, %xmm0
4684; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4685; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4686; SSE4-NEXT:    movdqa %xmm8, %xmm0
4687; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4688; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4689; SSE4-NEXT:    movapd %xmm4, %xmm0
4690; SSE4-NEXT:    movapd %xmm5, %xmm1
4691; SSE4-NEXT:    movapd %xmm6, %xmm2
4692; SSE4-NEXT:    movapd %xmm8, %xmm3
4693; SSE4-NEXT:    retq
4694;
4695; AVX1-LABEL: test122:
4696; AVX1:       # %bb.0: # %entry
4697; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4698; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4699; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4700; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4701; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4702; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4703; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4704; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4705; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4706; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4707; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4708; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4709; AVX1-NEXT:    retq
4710;
4711; AVX2-LABEL: test122:
4712; AVX2:       # %bb.0: # %entry
4713; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4714; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4715; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4716; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4717; AVX2-NEXT:    retq
4718;
4719; AVX512-LABEL: test122:
4720; AVX512:       # %bb.0: # %entry
4721; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4722; AVX512-NEXT:    retq
4723entry:
4724  %cmp = icmp sle <8 x i64> %a, %b
4725  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4726  ret <8 x i64> %sel
4727}
4728
4729define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
4730; SSE2-LABEL: test123:
4731; SSE2:       # %bb.0: # %entry
4732; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4733; SSE2-NEXT:    movdqa %xmm4, %xmm9
4734; SSE2-NEXT:    pxor %xmm8, %xmm9
4735; SSE2-NEXT:    movdqa %xmm0, %xmm10
4736; SSE2-NEXT:    pxor %xmm8, %xmm10
4737; SSE2-NEXT:    movdqa %xmm10, %xmm11
4738; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4739; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4740; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4741; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4742; SSE2-NEXT:    pand %xmm12, %xmm9
4743; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4744; SSE2-NEXT:    por %xmm9, %xmm10
4745; SSE2-NEXT:    pand %xmm10, %xmm0
4746; SSE2-NEXT:    pandn %xmm4, %xmm10
4747; SSE2-NEXT:    por %xmm10, %xmm0
4748; SSE2-NEXT:    movdqa %xmm5, %xmm9
4749; SSE2-NEXT:    pxor %xmm8, %xmm9
4750; SSE2-NEXT:    movdqa %xmm1, %xmm4
4751; SSE2-NEXT:    pxor %xmm8, %xmm4
4752; SSE2-NEXT:    movdqa %xmm4, %xmm10
4753; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4754; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4755; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4756; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4757; SSE2-NEXT:    pand %xmm11, %xmm9
4758; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4759; SSE2-NEXT:    por %xmm9, %xmm4
4760; SSE2-NEXT:    pand %xmm4, %xmm1
4761; SSE2-NEXT:    pandn %xmm5, %xmm4
4762; SSE2-NEXT:    por %xmm4, %xmm1
4763; SSE2-NEXT:    movdqa %xmm6, %xmm4
4764; SSE2-NEXT:    pxor %xmm8, %xmm4
4765; SSE2-NEXT:    movdqa %xmm2, %xmm5
4766; SSE2-NEXT:    pxor %xmm8, %xmm5
4767; SSE2-NEXT:    movdqa %xmm5, %xmm9
4768; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4769; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4770; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4771; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4772; SSE2-NEXT:    pand %xmm10, %xmm4
4773; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4774; SSE2-NEXT:    por %xmm4, %xmm5
4775; SSE2-NEXT:    pand %xmm5, %xmm2
4776; SSE2-NEXT:    pandn %xmm6, %xmm5
4777; SSE2-NEXT:    por %xmm5, %xmm2
4778; SSE2-NEXT:    movdqa %xmm7, %xmm4
4779; SSE2-NEXT:    pxor %xmm8, %xmm4
4780; SSE2-NEXT:    pxor %xmm3, %xmm8
4781; SSE2-NEXT:    movdqa %xmm8, %xmm5
4782; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4783; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4784; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4785; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4786; SSE2-NEXT:    pand %xmm6, %xmm4
4787; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4788; SSE2-NEXT:    por %xmm4, %xmm5
4789; SSE2-NEXT:    pand %xmm5, %xmm3
4790; SSE2-NEXT:    pandn %xmm7, %xmm5
4791; SSE2-NEXT:    por %xmm5, %xmm3
4792; SSE2-NEXT:    retq
4793;
4794; SSE4-LABEL: test123:
4795; SSE4:       # %bb.0: # %entry
4796; SSE4-NEXT:    movdqa %xmm7, %xmm8
4797; SSE4-NEXT:    movdqa %xmm0, %xmm7
4798; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4799; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4800; SSE4-NEXT:    movdqa %xmm1, %xmm0
4801; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4802; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4803; SSE4-NEXT:    movdqa %xmm2, %xmm0
4804; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4805; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4806; SSE4-NEXT:    movdqa %xmm3, %xmm0
4807; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4808; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4809; SSE4-NEXT:    movapd %xmm4, %xmm0
4810; SSE4-NEXT:    movapd %xmm5, %xmm1
4811; SSE4-NEXT:    movapd %xmm6, %xmm2
4812; SSE4-NEXT:    movapd %xmm8, %xmm3
4813; SSE4-NEXT:    retq
4814;
4815; AVX1-LABEL: test123:
4816; AVX1:       # %bb.0: # %entry
4817; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4818; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4819; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4820; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4821; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4822; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4823; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4824; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4825; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4826; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4827; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4828; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4829; AVX1-NEXT:    retq
4830;
4831; AVX2-LABEL: test123:
4832; AVX2:       # %bb.0: # %entry
4833; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4834; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4835; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4836; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4837; AVX2-NEXT:    retq
4838;
4839; AVX512-LABEL: test123:
4840; AVX512:       # %bb.0: # %entry
4841; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4842; AVX512-NEXT:    retq
4843entry:
4844  %cmp = icmp sgt <8 x i64> %a, %b
4845  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4846  ret <8 x i64> %sel
4847}
4848
4849define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
4850; SSE2-LABEL: test124:
4851; SSE2:       # %bb.0: # %entry
4852; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
4853; SSE2-NEXT:    movdqa %xmm4, %xmm9
4854; SSE2-NEXT:    pxor %xmm8, %xmm9
4855; SSE2-NEXT:    movdqa %xmm0, %xmm10
4856; SSE2-NEXT:    pxor %xmm8, %xmm10
4857; SSE2-NEXT:    movdqa %xmm10, %xmm11
4858; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4859; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4860; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4861; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4862; SSE2-NEXT:    pand %xmm12, %xmm9
4863; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4864; SSE2-NEXT:    por %xmm9, %xmm10
4865; SSE2-NEXT:    pand %xmm10, %xmm0
4866; SSE2-NEXT:    pandn %xmm4, %xmm10
4867; SSE2-NEXT:    por %xmm10, %xmm0
4868; SSE2-NEXT:    movdqa %xmm5, %xmm9
4869; SSE2-NEXT:    pxor %xmm8, %xmm9
4870; SSE2-NEXT:    movdqa %xmm1, %xmm4
4871; SSE2-NEXT:    pxor %xmm8, %xmm4
4872; SSE2-NEXT:    movdqa %xmm4, %xmm10
4873; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4874; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4875; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4876; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4877; SSE2-NEXT:    pand %xmm11, %xmm9
4878; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4879; SSE2-NEXT:    por %xmm9, %xmm4
4880; SSE2-NEXT:    pand %xmm4, %xmm1
4881; SSE2-NEXT:    pandn %xmm5, %xmm4
4882; SSE2-NEXT:    por %xmm4, %xmm1
4883; SSE2-NEXT:    movdqa %xmm6, %xmm4
4884; SSE2-NEXT:    pxor %xmm8, %xmm4
4885; SSE2-NEXT:    movdqa %xmm2, %xmm5
4886; SSE2-NEXT:    pxor %xmm8, %xmm5
4887; SSE2-NEXT:    movdqa %xmm5, %xmm9
4888; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4889; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4890; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4891; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4892; SSE2-NEXT:    pand %xmm10, %xmm4
4893; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4894; SSE2-NEXT:    por %xmm4, %xmm5
4895; SSE2-NEXT:    pand %xmm5, %xmm2
4896; SSE2-NEXT:    pandn %xmm6, %xmm5
4897; SSE2-NEXT:    por %xmm5, %xmm2
4898; SSE2-NEXT:    movdqa %xmm7, %xmm4
4899; SSE2-NEXT:    pxor %xmm8, %xmm4
4900; SSE2-NEXT:    pxor %xmm3, %xmm8
4901; SSE2-NEXT:    movdqa %xmm8, %xmm5
4902; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4903; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4904; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4905; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4906; SSE2-NEXT:    pand %xmm6, %xmm4
4907; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4908; SSE2-NEXT:    por %xmm4, %xmm5
4909; SSE2-NEXT:    pand %xmm5, %xmm3
4910; SSE2-NEXT:    pandn %xmm7, %xmm5
4911; SSE2-NEXT:    por %xmm5, %xmm3
4912; SSE2-NEXT:    retq
4913;
4914; SSE4-LABEL: test124:
4915; SSE4:       # %bb.0: # %entry
4916; SSE4-NEXT:    movdqa %xmm7, %xmm8
4917; SSE4-NEXT:    movdqa %xmm0, %xmm7
4918; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4919; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
4920; SSE4-NEXT:    movdqa %xmm1, %xmm0
4921; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4922; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4923; SSE4-NEXT:    movdqa %xmm2, %xmm0
4924; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4925; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4926; SSE4-NEXT:    movdqa %xmm3, %xmm0
4927; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4928; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
4929; SSE4-NEXT:    movapd %xmm4, %xmm0
4930; SSE4-NEXT:    movapd %xmm5, %xmm1
4931; SSE4-NEXT:    movapd %xmm6, %xmm2
4932; SSE4-NEXT:    movapd %xmm8, %xmm3
4933; SSE4-NEXT:    retq
4934;
4935; AVX1-LABEL: test124:
4936; AVX1:       # %bb.0: # %entry
4937; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4938; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4939; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4940; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4941; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4942; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4943; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4944; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4945; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4946; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4947; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4948; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4949; AVX1-NEXT:    retq
4950;
4951; AVX2-LABEL: test124:
4952; AVX2:       # %bb.0: # %entry
4953; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4954; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4955; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4956; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4957; AVX2-NEXT:    retq
4958;
4959; AVX512-LABEL: test124:
4960; AVX512:       # %bb.0: # %entry
4961; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4962; AVX512-NEXT:    retq
4963entry:
4964  %cmp = icmp sge <8 x i64> %a, %b
4965  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4966  ret <8 x i64> %sel
4967}
4968
4969define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
4970; SSE2-LABEL: test125:
4971; SSE2:       # %bb.0: # %entry
4972; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
4973; SSE2-NEXT:    movdqa %xmm0, %xmm9
4974; SSE2-NEXT:    pxor %xmm8, %xmm9
4975; SSE2-NEXT:    movdqa %xmm4, %xmm10
4976; SSE2-NEXT:    pxor %xmm8, %xmm10
4977; SSE2-NEXT:    movdqa %xmm10, %xmm11
4978; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4979; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4980; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4981; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4982; SSE2-NEXT:    pand %xmm12, %xmm9
4983; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4984; SSE2-NEXT:    por %xmm9, %xmm10
4985; SSE2-NEXT:    pand %xmm10, %xmm0
4986; SSE2-NEXT:    pandn %xmm4, %xmm10
4987; SSE2-NEXT:    por %xmm10, %xmm0
4988; SSE2-NEXT:    movdqa %xmm1, %xmm9
4989; SSE2-NEXT:    pxor %xmm8, %xmm9
4990; SSE2-NEXT:    movdqa %xmm5, %xmm4
4991; SSE2-NEXT:    pxor %xmm8, %xmm4
4992; SSE2-NEXT:    movdqa %xmm4, %xmm10
4993; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4994; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4995; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4996; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4997; SSE2-NEXT:    pand %xmm11, %xmm9
4998; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4999; SSE2-NEXT:    por %xmm9, %xmm4
5000; SSE2-NEXT:    pand %xmm4, %xmm1
5001; SSE2-NEXT:    pandn %xmm5, %xmm4
5002; SSE2-NEXT:    por %xmm4, %xmm1
5003; SSE2-NEXT:    movdqa %xmm2, %xmm4
5004; SSE2-NEXT:    pxor %xmm8, %xmm4
5005; SSE2-NEXT:    movdqa %xmm6, %xmm5
5006; SSE2-NEXT:    pxor %xmm8, %xmm5
5007; SSE2-NEXT:    movdqa %xmm5, %xmm9
5008; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5009; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5010; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5011; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5012; SSE2-NEXT:    pand %xmm10, %xmm4
5013; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5014; SSE2-NEXT:    por %xmm4, %xmm5
5015; SSE2-NEXT:    pand %xmm5, %xmm2
5016; SSE2-NEXT:    pandn %xmm6, %xmm5
5017; SSE2-NEXT:    por %xmm5, %xmm2
5018; SSE2-NEXT:    movdqa %xmm3, %xmm4
5019; SSE2-NEXT:    pxor %xmm8, %xmm4
5020; SSE2-NEXT:    pxor %xmm7, %xmm8
5021; SSE2-NEXT:    movdqa %xmm8, %xmm5
5022; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5023; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5024; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5025; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5026; SSE2-NEXT:    pand %xmm6, %xmm4
5027; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5028; SSE2-NEXT:    por %xmm4, %xmm5
5029; SSE2-NEXT:    pand %xmm5, %xmm3
5030; SSE2-NEXT:    pandn %xmm7, %xmm5
5031; SSE2-NEXT:    por %xmm5, %xmm3
5032; SSE2-NEXT:    retq
5033;
5034; SSE4-LABEL: test125:
5035; SSE4:       # %bb.0: # %entry
5036; SSE4-NEXT:    movdqa %xmm7, %xmm8
5037; SSE4-NEXT:    movdqa %xmm6, %xmm9
5038; SSE4-NEXT:    movdqa %xmm5, %xmm10
5039; SSE4-NEXT:    movdqa %xmm0, %xmm5
5040; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5041; SSE4-NEXT:    movdqa %xmm0, %xmm6
5042; SSE4-NEXT:    pxor %xmm7, %xmm6
5043; SSE4-NEXT:    movdqa %xmm4, %xmm0
5044; SSE4-NEXT:    pxor %xmm7, %xmm0
5045; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
5046; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
5047; SSE4-NEXT:    movdqa %xmm1, %xmm5
5048; SSE4-NEXT:    pxor %xmm7, %xmm5
5049; SSE4-NEXT:    movdqa %xmm10, %xmm0
5050; SSE4-NEXT:    pxor %xmm7, %xmm0
5051; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
5052; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5053; SSE4-NEXT:    movdqa %xmm2, %xmm1
5054; SSE4-NEXT:    pxor %xmm7, %xmm1
5055; SSE4-NEXT:    movdqa %xmm9, %xmm0
5056; SSE4-NEXT:    pxor %xmm7, %xmm0
5057; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5058; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5059; SSE4-NEXT:    movdqa %xmm3, %xmm0
5060; SSE4-NEXT:    pxor %xmm7, %xmm0
5061; SSE4-NEXT:    pxor %xmm8, %xmm7
5062; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5063; SSE4-NEXT:    movdqa %xmm7, %xmm0
5064; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5065; SSE4-NEXT:    movapd %xmm4, %xmm0
5066; SSE4-NEXT:    movapd %xmm10, %xmm1
5067; SSE4-NEXT:    movapd %xmm9, %xmm2
5068; SSE4-NEXT:    movapd %xmm8, %xmm3
5069; SSE4-NEXT:    retq
5070;
5071; AVX1-LABEL: test125:
5072; AVX1:       # %bb.0: # %entry
5073; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5074; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5075; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5076; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5077; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5078; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5079; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5080; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5081; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5082; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5083; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5084; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5085; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5086; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5087; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5088; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5089; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5090; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5091; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5092; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5093; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5094; AVX1-NEXT:    retq
5095;
5096; AVX2-LABEL: test125:
5097; AVX2:       # %bb.0: # %entry
5098; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5099; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5100; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5101; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5102; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5103; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5104; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5105; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5106; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5107; AVX2-NEXT:    retq
5108;
5109; AVX512-LABEL: test125:
5110; AVX512:       # %bb.0: # %entry
5111; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5112; AVX512-NEXT:    retq
5113entry:
5114  %cmp = icmp ult <8 x i64> %a, %b
5115  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5116  ret <8 x i64> %sel
5117}
5118
5119define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5120; SSE2-LABEL: test126:
5121; SSE2:       # %bb.0: # %entry
5122; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5123; SSE2-NEXT:    movdqa %xmm0, %xmm9
5124; SSE2-NEXT:    pxor %xmm8, %xmm9
5125; SSE2-NEXT:    movdqa %xmm4, %xmm10
5126; SSE2-NEXT:    pxor %xmm8, %xmm10
5127; SSE2-NEXT:    movdqa %xmm10, %xmm11
5128; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5129; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5130; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5131; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5132; SSE2-NEXT:    pand %xmm12, %xmm9
5133; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5134; SSE2-NEXT:    por %xmm9, %xmm10
5135; SSE2-NEXT:    pand %xmm10, %xmm0
5136; SSE2-NEXT:    pandn %xmm4, %xmm10
5137; SSE2-NEXT:    por %xmm10, %xmm0
5138; SSE2-NEXT:    movdqa %xmm1, %xmm9
5139; SSE2-NEXT:    pxor %xmm8, %xmm9
5140; SSE2-NEXT:    movdqa %xmm5, %xmm4
5141; SSE2-NEXT:    pxor %xmm8, %xmm4
5142; SSE2-NEXT:    movdqa %xmm4, %xmm10
5143; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5144; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5145; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5146; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5147; SSE2-NEXT:    pand %xmm11, %xmm9
5148; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5149; SSE2-NEXT:    por %xmm9, %xmm4
5150; SSE2-NEXT:    pand %xmm4, %xmm1
5151; SSE2-NEXT:    pandn %xmm5, %xmm4
5152; SSE2-NEXT:    por %xmm4, %xmm1
5153; SSE2-NEXT:    movdqa %xmm2, %xmm4
5154; SSE2-NEXT:    pxor %xmm8, %xmm4
5155; SSE2-NEXT:    movdqa %xmm6, %xmm5
5156; SSE2-NEXT:    pxor %xmm8, %xmm5
5157; SSE2-NEXT:    movdqa %xmm5, %xmm9
5158; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5159; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5160; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5161; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5162; SSE2-NEXT:    pand %xmm10, %xmm4
5163; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5164; SSE2-NEXT:    por %xmm4, %xmm5
5165; SSE2-NEXT:    pand %xmm5, %xmm2
5166; SSE2-NEXT:    pandn %xmm6, %xmm5
5167; SSE2-NEXT:    por %xmm5, %xmm2
5168; SSE2-NEXT:    movdqa %xmm3, %xmm4
5169; SSE2-NEXT:    pxor %xmm8, %xmm4
5170; SSE2-NEXT:    pxor %xmm7, %xmm8
5171; SSE2-NEXT:    movdqa %xmm8, %xmm5
5172; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5173; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5174; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5175; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5176; SSE2-NEXT:    pand %xmm6, %xmm4
5177; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5178; SSE2-NEXT:    por %xmm4, %xmm5
5179; SSE2-NEXT:    pand %xmm5, %xmm3
5180; SSE2-NEXT:    pandn %xmm7, %xmm5
5181; SSE2-NEXT:    por %xmm5, %xmm3
5182; SSE2-NEXT:    retq
5183;
5184; SSE4-LABEL: test126:
5185; SSE4:       # %bb.0: # %entry
5186; SSE4-NEXT:    movdqa %xmm7, %xmm8
5187; SSE4-NEXT:    movdqa %xmm6, %xmm9
5188; SSE4-NEXT:    movdqa %xmm5, %xmm10
5189; SSE4-NEXT:    movdqa %xmm0, %xmm5
5190; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5191; SSE4-NEXT:    movdqa %xmm0, %xmm6
5192; SSE4-NEXT:    pxor %xmm7, %xmm6
5193; SSE4-NEXT:    movdqa %xmm4, %xmm0
5194; SSE4-NEXT:    pxor %xmm7, %xmm0
5195; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
5196; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
5197; SSE4-NEXT:    movdqa %xmm1, %xmm5
5198; SSE4-NEXT:    pxor %xmm7, %xmm5
5199; SSE4-NEXT:    movdqa %xmm10, %xmm0
5200; SSE4-NEXT:    pxor %xmm7, %xmm0
5201; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
5202; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5203; SSE4-NEXT:    movdqa %xmm2, %xmm1
5204; SSE4-NEXT:    pxor %xmm7, %xmm1
5205; SSE4-NEXT:    movdqa %xmm9, %xmm0
5206; SSE4-NEXT:    pxor %xmm7, %xmm0
5207; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5208; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5209; SSE4-NEXT:    movdqa %xmm3, %xmm0
5210; SSE4-NEXT:    pxor %xmm7, %xmm0
5211; SSE4-NEXT:    pxor %xmm8, %xmm7
5212; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5213; SSE4-NEXT:    movdqa %xmm7, %xmm0
5214; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5215; SSE4-NEXT:    movapd %xmm4, %xmm0
5216; SSE4-NEXT:    movapd %xmm10, %xmm1
5217; SSE4-NEXT:    movapd %xmm9, %xmm2
5218; SSE4-NEXT:    movapd %xmm8, %xmm3
5219; SSE4-NEXT:    retq
5220;
5221; AVX1-LABEL: test126:
5222; AVX1:       # %bb.0: # %entry
5223; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5224; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5225; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5226; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5227; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5228; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5229; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5230; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5231; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5232; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5233; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5234; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5235; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5236; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5237; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5238; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5239; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5240; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5241; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5242; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5243; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5244; AVX1-NEXT:    retq
5245;
5246; AVX2-LABEL: test126:
5247; AVX2:       # %bb.0: # %entry
5248; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5249; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5250; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5251; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5252; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5253; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5254; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5255; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5256; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5257; AVX2-NEXT:    retq
5258;
5259; AVX512-LABEL: test126:
5260; AVX512:       # %bb.0: # %entry
5261; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5262; AVX512-NEXT:    retq
5263entry:
5264  %cmp = icmp ule <8 x i64> %a, %b
5265  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5266  ret <8 x i64> %sel
5267}
5268
5269define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5270; SSE2-LABEL: test127:
5271; SSE2:       # %bb.0: # %entry
5272; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5273; SSE2-NEXT:    movdqa %xmm4, %xmm9
5274; SSE2-NEXT:    pxor %xmm8, %xmm9
5275; SSE2-NEXT:    movdqa %xmm0, %xmm10
5276; SSE2-NEXT:    pxor %xmm8, %xmm10
5277; SSE2-NEXT:    movdqa %xmm10, %xmm11
5278; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5279; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5280; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5281; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5282; SSE2-NEXT:    pand %xmm12, %xmm9
5283; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5284; SSE2-NEXT:    por %xmm9, %xmm10
5285; SSE2-NEXT:    pand %xmm10, %xmm0
5286; SSE2-NEXT:    pandn %xmm4, %xmm10
5287; SSE2-NEXT:    por %xmm10, %xmm0
5288; SSE2-NEXT:    movdqa %xmm5, %xmm9
5289; SSE2-NEXT:    pxor %xmm8, %xmm9
5290; SSE2-NEXT:    movdqa %xmm1, %xmm4
5291; SSE2-NEXT:    pxor %xmm8, %xmm4
5292; SSE2-NEXT:    movdqa %xmm4, %xmm10
5293; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5294; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5295; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5296; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5297; SSE2-NEXT:    pand %xmm11, %xmm9
5298; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5299; SSE2-NEXT:    por %xmm9, %xmm4
5300; SSE2-NEXT:    pand %xmm4, %xmm1
5301; SSE2-NEXT:    pandn %xmm5, %xmm4
5302; SSE2-NEXT:    por %xmm4, %xmm1
5303; SSE2-NEXT:    movdqa %xmm6, %xmm4
5304; SSE2-NEXT:    pxor %xmm8, %xmm4
5305; SSE2-NEXT:    movdqa %xmm2, %xmm5
5306; SSE2-NEXT:    pxor %xmm8, %xmm5
5307; SSE2-NEXT:    movdqa %xmm5, %xmm9
5308; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5309; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5310; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5311; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5312; SSE2-NEXT:    pand %xmm10, %xmm4
5313; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5314; SSE2-NEXT:    por %xmm4, %xmm5
5315; SSE2-NEXT:    pand %xmm5, %xmm2
5316; SSE2-NEXT:    pandn %xmm6, %xmm5
5317; SSE2-NEXT:    por %xmm5, %xmm2
5318; SSE2-NEXT:    movdqa %xmm7, %xmm4
5319; SSE2-NEXT:    pxor %xmm8, %xmm4
5320; SSE2-NEXT:    pxor %xmm3, %xmm8
5321; SSE2-NEXT:    movdqa %xmm8, %xmm5
5322; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5323; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5324; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5325; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5326; SSE2-NEXT:    pand %xmm6, %xmm4
5327; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5328; SSE2-NEXT:    por %xmm4, %xmm5
5329; SSE2-NEXT:    pand %xmm5, %xmm3
5330; SSE2-NEXT:    pandn %xmm7, %xmm5
5331; SSE2-NEXT:    por %xmm5, %xmm3
5332; SSE2-NEXT:    retq
5333;
5334; SSE4-LABEL: test127:
5335; SSE4:       # %bb.0: # %entry
5336; SSE4-NEXT:    movdqa %xmm7, %xmm8
5337; SSE4-NEXT:    movdqa %xmm6, %xmm9
5338; SSE4-NEXT:    movdqa %xmm5, %xmm10
5339; SSE4-NEXT:    movdqa %xmm4, %xmm5
5340; SSE4-NEXT:    movdqa %xmm0, %xmm6
5341; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5342; SSE4-NEXT:    pxor %xmm7, %xmm4
5343; SSE4-NEXT:    pxor %xmm7, %xmm0
5344; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5345; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
5346; SSE4-NEXT:    movdqa %xmm10, %xmm4
5347; SSE4-NEXT:    pxor %xmm7, %xmm4
5348; SSE4-NEXT:    movdqa %xmm1, %xmm0
5349; SSE4-NEXT:    pxor %xmm7, %xmm0
5350; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5351; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5352; SSE4-NEXT:    movdqa %xmm9, %xmm1
5353; SSE4-NEXT:    pxor %xmm7, %xmm1
5354; SSE4-NEXT:    movdqa %xmm2, %xmm0
5355; SSE4-NEXT:    pxor %xmm7, %xmm0
5356; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5357; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5358; SSE4-NEXT:    movdqa %xmm8, %xmm0
5359; SSE4-NEXT:    pxor %xmm7, %xmm0
5360; SSE4-NEXT:    pxor %xmm3, %xmm7
5361; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5362; SSE4-NEXT:    movdqa %xmm7, %xmm0
5363; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5364; SSE4-NEXT:    movapd %xmm5, %xmm0
5365; SSE4-NEXT:    movapd %xmm10, %xmm1
5366; SSE4-NEXT:    movapd %xmm9, %xmm2
5367; SSE4-NEXT:    movapd %xmm8, %xmm3
5368; SSE4-NEXT:    retq
5369;
5370; AVX1-LABEL: test127:
5371; AVX1:       # %bb.0: # %entry
5372; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5373; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5374; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5375; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5376; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5377; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5378; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5379; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5380; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5381; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5382; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5383; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5384; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5385; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5386; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5387; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5388; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5389; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5390; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5391; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5392; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5393; AVX1-NEXT:    retq
5394;
5395; AVX2-LABEL: test127:
5396; AVX2:       # %bb.0: # %entry
5397; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5398; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5399; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5400; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5401; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5402; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5403; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5404; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5405; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5406; AVX2-NEXT:    retq
5407;
5408; AVX512-LABEL: test127:
5409; AVX512:       # %bb.0: # %entry
5410; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5411; AVX512-NEXT:    retq
5412entry:
5413  %cmp = icmp ugt <8 x i64> %a, %b
5414  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5415  ret <8 x i64> %sel
5416}
5417
5418define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5419; SSE2-LABEL: test128:
5420; SSE2:       # %bb.0: # %entry
5421; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
5422; SSE2-NEXT:    movdqa %xmm4, %xmm9
5423; SSE2-NEXT:    pxor %xmm8, %xmm9
5424; SSE2-NEXT:    movdqa %xmm0, %xmm10
5425; SSE2-NEXT:    pxor %xmm8, %xmm10
5426; SSE2-NEXT:    movdqa %xmm10, %xmm11
5427; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5428; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5429; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5430; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5431; SSE2-NEXT:    pand %xmm12, %xmm9
5432; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5433; SSE2-NEXT:    por %xmm9, %xmm10
5434; SSE2-NEXT:    pand %xmm10, %xmm0
5435; SSE2-NEXT:    pandn %xmm4, %xmm10
5436; SSE2-NEXT:    por %xmm10, %xmm0
5437; SSE2-NEXT:    movdqa %xmm5, %xmm9
5438; SSE2-NEXT:    pxor %xmm8, %xmm9
5439; SSE2-NEXT:    movdqa %xmm1, %xmm4
5440; SSE2-NEXT:    pxor %xmm8, %xmm4
5441; SSE2-NEXT:    movdqa %xmm4, %xmm10
5442; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5443; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5444; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5445; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5446; SSE2-NEXT:    pand %xmm11, %xmm9
5447; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5448; SSE2-NEXT:    por %xmm9, %xmm4
5449; SSE2-NEXT:    pand %xmm4, %xmm1
5450; SSE2-NEXT:    pandn %xmm5, %xmm4
5451; SSE2-NEXT:    por %xmm4, %xmm1
5452; SSE2-NEXT:    movdqa %xmm6, %xmm4
5453; SSE2-NEXT:    pxor %xmm8, %xmm4
5454; SSE2-NEXT:    movdqa %xmm2, %xmm5
5455; SSE2-NEXT:    pxor %xmm8, %xmm5
5456; SSE2-NEXT:    movdqa %xmm5, %xmm9
5457; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5458; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5459; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5460; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5461; SSE2-NEXT:    pand %xmm10, %xmm4
5462; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5463; SSE2-NEXT:    por %xmm4, %xmm5
5464; SSE2-NEXT:    pand %xmm5, %xmm2
5465; SSE2-NEXT:    pandn %xmm6, %xmm5
5466; SSE2-NEXT:    por %xmm5, %xmm2
5467; SSE2-NEXT:    movdqa %xmm7, %xmm4
5468; SSE2-NEXT:    pxor %xmm8, %xmm4
5469; SSE2-NEXT:    pxor %xmm3, %xmm8
5470; SSE2-NEXT:    movdqa %xmm8, %xmm5
5471; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5472; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5473; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5474; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5475; SSE2-NEXT:    pand %xmm6, %xmm4
5476; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5477; SSE2-NEXT:    por %xmm4, %xmm5
5478; SSE2-NEXT:    pand %xmm5, %xmm3
5479; SSE2-NEXT:    pandn %xmm7, %xmm5
5480; SSE2-NEXT:    por %xmm5, %xmm3
5481; SSE2-NEXT:    retq
5482;
5483; SSE4-LABEL: test128:
5484; SSE4:       # %bb.0: # %entry
5485; SSE4-NEXT:    movdqa %xmm7, %xmm8
5486; SSE4-NEXT:    movdqa %xmm6, %xmm9
5487; SSE4-NEXT:    movdqa %xmm5, %xmm10
5488; SSE4-NEXT:    movdqa %xmm4, %xmm5
5489; SSE4-NEXT:    movdqa %xmm0, %xmm6
5490; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
5491; SSE4-NEXT:    pxor %xmm7, %xmm4
5492; SSE4-NEXT:    pxor %xmm7, %xmm0
5493; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5494; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
5495; SSE4-NEXT:    movdqa %xmm10, %xmm4
5496; SSE4-NEXT:    pxor %xmm7, %xmm4
5497; SSE4-NEXT:    movdqa %xmm1, %xmm0
5498; SSE4-NEXT:    pxor %xmm7, %xmm0
5499; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5500; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
5501; SSE4-NEXT:    movdqa %xmm9, %xmm1
5502; SSE4-NEXT:    pxor %xmm7, %xmm1
5503; SSE4-NEXT:    movdqa %xmm2, %xmm0
5504; SSE4-NEXT:    pxor %xmm7, %xmm0
5505; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5506; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
5507; SSE4-NEXT:    movdqa %xmm8, %xmm0
5508; SSE4-NEXT:    pxor %xmm7, %xmm0
5509; SSE4-NEXT:    pxor %xmm3, %xmm7
5510; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
5511; SSE4-NEXT:    movdqa %xmm7, %xmm0
5512; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
5513; SSE4-NEXT:    movapd %xmm5, %xmm0
5514; SSE4-NEXT:    movapd %xmm10, %xmm1
5515; SSE4-NEXT:    movapd %xmm9, %xmm2
5516; SSE4-NEXT:    movapd %xmm8, %xmm3
5517; SSE4-NEXT:    retq
5518;
5519; AVX1-LABEL: test128:
5520; AVX1:       # %bb.0: # %entry
5521; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5522; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5523; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5524; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5525; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5526; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5527; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5528; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5529; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5530; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5531; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5532; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5533; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5534; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5535; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5536; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5537; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5538; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5539; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5540; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5541; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5542; AVX1-NEXT:    retq
5543;
5544; AVX2-LABEL: test128:
5545; AVX2:       # %bb.0: # %entry
5546; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5547; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5548; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5549; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5550; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5551; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5552; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5553; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5554; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5555; AVX2-NEXT:    retq
5556;
5557; AVX512-LABEL: test128:
5558; AVX512:       # %bb.0: # %entry
5559; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5560; AVX512-NEXT:    retq
5561entry:
5562  %cmp = icmp uge <8 x i64> %a, %b
5563  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5564  ret <8 x i64> %sel
5565}
5566
5567define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5568; SSE2-LABEL: test129:
5569; SSE2:       # %bb.0: # %entry
5570; SSE2-NEXT:    movdqa %xmm0, %xmm8
5571; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5572; SSE2-NEXT:    pand %xmm8, %xmm0
5573; SSE2-NEXT:    pandn %xmm4, %xmm8
5574; SSE2-NEXT:    por %xmm8, %xmm0
5575; SSE2-NEXT:    movdqa %xmm1, %xmm4
5576; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5577; SSE2-NEXT:    pand %xmm4, %xmm1
5578; SSE2-NEXT:    pandn %xmm5, %xmm4
5579; SSE2-NEXT:    por %xmm4, %xmm1
5580; SSE2-NEXT:    movdqa %xmm2, %xmm4
5581; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
5582; SSE2-NEXT:    pand %xmm4, %xmm2
5583; SSE2-NEXT:    pandn %xmm6, %xmm4
5584; SSE2-NEXT:    por %xmm4, %xmm2
5585; SSE2-NEXT:    movdqa %xmm3, %xmm4
5586; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
5587; SSE2-NEXT:    pand %xmm4, %xmm3
5588; SSE2-NEXT:    pandn %xmm7, %xmm4
5589; SSE2-NEXT:    por %xmm4, %xmm3
5590; SSE2-NEXT:    retq
5591;
5592; SSE4-LABEL: test129:
5593; SSE4:       # %bb.0: # %entry
5594; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5595; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5596; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5597; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5598; SSE4-NEXT:    retq
5599;
5600; AVX1-LABEL: test129:
5601; AVX1:       # %bb.0: # %entry
5602; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5603; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5604; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5605; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5606; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5607; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5608; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5609; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5610; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5611; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5612; AVX1-NEXT:    retq
5613;
5614; AVX2-LABEL: test129:
5615; AVX2:       # %bb.0: # %entry
5616; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5617; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5618; AVX2-NEXT:    retq
5619;
5620; AVX512F-LABEL: test129:
5621; AVX512F:       # %bb.0: # %entry
5622; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5623; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5624; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
5625; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
5626; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5627; AVX512F-NEXT:    retq
5628;
5629; AVX512BW-LABEL: test129:
5630; AVX512BW:       # %bb.0: # %entry
5631; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5632; AVX512BW-NEXT:    retq
5633entry:
5634  %cmp = icmp slt <64 x i8> %a, %b
5635  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5636  ret <64 x i8> %sel
5637}
5638
5639define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
5640; SSE2-LABEL: test130:
5641; SSE2:       # %bb.0: # %entry
5642; SSE2-NEXT:    movdqa %xmm0, %xmm8
5643; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5644; SSE2-NEXT:    pand %xmm8, %xmm0
5645; SSE2-NEXT:    pandn %xmm4, %xmm8
5646; SSE2-NEXT:    por %xmm8, %xmm0
5647; SSE2-NEXT:    movdqa %xmm1, %xmm4
5648; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5649; SSE2-NEXT:    pand %xmm4, %xmm1
5650; SSE2-NEXT:    pandn %xmm5, %xmm4
5651; SSE2-NEXT:    por %xmm4, %xmm1
5652; SSE2-NEXT:    movdqa %xmm2, %xmm4
5653; SSE2-NEXT:    pcmpgtb %xmm6, %xmm4
5654; SSE2-NEXT:    pand %xmm4, %xmm2
5655; SSE2-NEXT:    pandn %xmm6, %xmm4
5656; SSE2-NEXT:    por %xmm4, %xmm2
5657; SSE2-NEXT:    movdqa %xmm3, %xmm4
5658; SSE2-NEXT:    pcmpgtb %xmm7, %xmm4
5659; SSE2-NEXT:    pand %xmm4, %xmm3
5660; SSE2-NEXT:    pandn %xmm7, %xmm4
5661; SSE2-NEXT:    por %xmm4, %xmm3
5662; SSE2-NEXT:    retq
5663;
5664; SSE4-LABEL: test130:
5665; SSE4:       # %bb.0: # %entry
5666; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5667; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5668; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5669; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5670; SSE4-NEXT:    retq
5671;
5672; AVX1-LABEL: test130:
5673; AVX1:       # %bb.0: # %entry
5674; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5675; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5676; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5677; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5678; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5679; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5680; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5681; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5682; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5683; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5684; AVX1-NEXT:    retq
5685;
5686; AVX2-LABEL: test130:
5687; AVX2:       # %bb.0: # %entry
5688; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5689; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5690; AVX2-NEXT:    retq
5691;
5692; AVX512F-LABEL: test130:
5693; AVX512F:       # %bb.0: # %entry
5694; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5695; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5696; AVX512F-NEXT:    vpmaxsb %ymm2, %ymm3, %ymm2
5697; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
5698; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5699; AVX512F-NEXT:    retq
5700;
5701; AVX512BW-LABEL: test130:
5702; AVX512BW:       # %bb.0: # %entry
5703; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5704; AVX512BW-NEXT:    retq
5705entry:
5706  %cmp = icmp sle <64 x i8> %a, %b
5707  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5708  ret <64 x i8> %sel
5709}
5710
5711define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
5712; SSE2-LABEL: test131:
5713; SSE2:       # %bb.0: # %entry
5714; SSE2-NEXT:    movdqa %xmm4, %xmm8
5715; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5716; SSE2-NEXT:    pand %xmm8, %xmm0
5717; SSE2-NEXT:    pandn %xmm4, %xmm8
5718; SSE2-NEXT:    por %xmm8, %xmm0
5719; SSE2-NEXT:    movdqa %xmm5, %xmm4
5720; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5721; SSE2-NEXT:    pand %xmm4, %xmm1
5722; SSE2-NEXT:    pandn %xmm5, %xmm4
5723; SSE2-NEXT:    por %xmm4, %xmm1
5724; SSE2-NEXT:    movdqa %xmm6, %xmm4
5725; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5726; SSE2-NEXT:    pand %xmm4, %xmm2
5727; SSE2-NEXT:    pandn %xmm6, %xmm4
5728; SSE2-NEXT:    por %xmm4, %xmm2
5729; SSE2-NEXT:    movdqa %xmm7, %xmm4
5730; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5731; SSE2-NEXT:    pand %xmm4, %xmm3
5732; SSE2-NEXT:    pandn %xmm7, %xmm4
5733; SSE2-NEXT:    por %xmm4, %xmm3
5734; SSE2-NEXT:    retq
5735;
5736; SSE4-LABEL: test131:
5737; SSE4:       # %bb.0: # %entry
5738; SSE4-NEXT:    pminsb %xmm4, %xmm0
5739; SSE4-NEXT:    pminsb %xmm5, %xmm1
5740; SSE4-NEXT:    pminsb %xmm6, %xmm2
5741; SSE4-NEXT:    pminsb %xmm7, %xmm3
5742; SSE4-NEXT:    retq
5743;
5744; AVX1-LABEL: test131:
5745; AVX1:       # %bb.0: # %entry
5746; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5747; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5748; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5749; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5750; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5751; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5752; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5753; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5754; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5755; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5756; AVX1-NEXT:    retq
5757;
5758; AVX2-LABEL: test131:
5759; AVX2:       # %bb.0: # %entry
5760; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5761; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5762; AVX2-NEXT:    retq
5763;
5764; AVX512F-LABEL: test131:
5765; AVX512F:       # %bb.0: # %entry
5766; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5767; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5768; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
5769; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
5770; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5771; AVX512F-NEXT:    retq
5772;
5773; AVX512BW-LABEL: test131:
5774; AVX512BW:       # %bb.0: # %entry
5775; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5776; AVX512BW-NEXT:    retq
5777entry:
5778  %cmp = icmp sgt <64 x i8> %a, %b
5779  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5780  ret <64 x i8> %sel
5781}
5782
5783define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
5784; SSE2-LABEL: test132:
5785; SSE2:       # %bb.0: # %entry
5786; SSE2-NEXT:    movdqa %xmm4, %xmm8
5787; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5788; SSE2-NEXT:    pand %xmm8, %xmm0
5789; SSE2-NEXT:    pandn %xmm4, %xmm8
5790; SSE2-NEXT:    por %xmm8, %xmm0
5791; SSE2-NEXT:    movdqa %xmm5, %xmm4
5792; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5793; SSE2-NEXT:    pand %xmm4, %xmm1
5794; SSE2-NEXT:    pandn %xmm5, %xmm4
5795; SSE2-NEXT:    por %xmm4, %xmm1
5796; SSE2-NEXT:    movdqa %xmm6, %xmm4
5797; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5798; SSE2-NEXT:    pand %xmm4, %xmm2
5799; SSE2-NEXT:    pandn %xmm6, %xmm4
5800; SSE2-NEXT:    por %xmm4, %xmm2
5801; SSE2-NEXT:    movdqa %xmm7, %xmm4
5802; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5803; SSE2-NEXT:    pand %xmm4, %xmm3
5804; SSE2-NEXT:    pandn %xmm7, %xmm4
5805; SSE2-NEXT:    por %xmm4, %xmm3
5806; SSE2-NEXT:    retq
5807;
5808; SSE4-LABEL: test132:
5809; SSE4:       # %bb.0: # %entry
5810; SSE4-NEXT:    pminsb %xmm4, %xmm0
5811; SSE4-NEXT:    pminsb %xmm5, %xmm1
5812; SSE4-NEXT:    pminsb %xmm6, %xmm2
5813; SSE4-NEXT:    pminsb %xmm7, %xmm3
5814; SSE4-NEXT:    retq
5815;
5816; AVX1-LABEL: test132:
5817; AVX1:       # %bb.0: # %entry
5818; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5819; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5820; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5821; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5822; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5823; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5824; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5825; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5826; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5827; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5828; AVX1-NEXT:    retq
5829;
5830; AVX2-LABEL: test132:
5831; AVX2:       # %bb.0: # %entry
5832; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5833; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5834; AVX2-NEXT:    retq
5835;
5836; AVX512F-LABEL: test132:
5837; AVX512F:       # %bb.0: # %entry
5838; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5839; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5840; AVX512F-NEXT:    vpminsb %ymm2, %ymm3, %ymm2
5841; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
5842; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5843; AVX512F-NEXT:    retq
5844;
5845; AVX512BW-LABEL: test132:
5846; AVX512BW:       # %bb.0: # %entry
5847; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5848; AVX512BW-NEXT:    retq
5849entry:
5850  %cmp = icmp sge <64 x i8> %a, %b
5851  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5852  ret <64 x i8> %sel
5853}
5854
5855define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
5856; SSE-LABEL: test133:
5857; SSE:       # %bb.0: # %entry
5858; SSE-NEXT:    pmaxub %xmm4, %xmm0
5859; SSE-NEXT:    pmaxub %xmm5, %xmm1
5860; SSE-NEXT:    pmaxub %xmm6, %xmm2
5861; SSE-NEXT:    pmaxub %xmm7, %xmm3
5862; SSE-NEXT:    retq
5863;
5864; AVX1-LABEL: test133:
5865; AVX1:       # %bb.0: # %entry
5866; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5867; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5868; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5869; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5870; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5871; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5872; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5873; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5874; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5875; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5876; AVX1-NEXT:    retq
5877;
5878; AVX2-LABEL: test133:
5879; AVX2:       # %bb.0: # %entry
5880; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5881; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5882; AVX2-NEXT:    retq
5883;
5884; AVX512F-LABEL: test133:
5885; AVX512F:       # %bb.0: # %entry
5886; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5887; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5888; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
5889; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
5890; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5891; AVX512F-NEXT:    retq
5892;
5893; AVX512BW-LABEL: test133:
5894; AVX512BW:       # %bb.0: # %entry
5895; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5896; AVX512BW-NEXT:    retq
5897entry:
5898  %cmp = icmp ult <64 x i8> %a, %b
5899  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5900  ret <64 x i8> %sel
5901}
5902
5903define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
5904; SSE-LABEL: test134:
5905; SSE:       # %bb.0: # %entry
5906; SSE-NEXT:    pmaxub %xmm4, %xmm0
5907; SSE-NEXT:    pmaxub %xmm5, %xmm1
5908; SSE-NEXT:    pmaxub %xmm6, %xmm2
5909; SSE-NEXT:    pmaxub %xmm7, %xmm3
5910; SSE-NEXT:    retq
5911;
5912; AVX1-LABEL: test134:
5913; AVX1:       # %bb.0: # %entry
5914; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5915; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5916; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5917; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5918; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5919; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5920; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5921; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5922; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5923; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5924; AVX1-NEXT:    retq
5925;
5926; AVX2-LABEL: test134:
5927; AVX2:       # %bb.0: # %entry
5928; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5929; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5930; AVX2-NEXT:    retq
5931;
5932; AVX512F-LABEL: test134:
5933; AVX512F:       # %bb.0: # %entry
5934; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5935; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5936; AVX512F-NEXT:    vpmaxub %ymm2, %ymm3, %ymm2
5937; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
5938; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5939; AVX512F-NEXT:    retq
5940;
5941; AVX512BW-LABEL: test134:
5942; AVX512BW:       # %bb.0: # %entry
5943; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5944; AVX512BW-NEXT:    retq
5945entry:
5946  %cmp = icmp ule <64 x i8> %a, %b
5947  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5948  ret <64 x i8> %sel
5949}
5950
5951define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
5952; SSE-LABEL: test135:
5953; SSE:       # %bb.0: # %entry
5954; SSE-NEXT:    pminub %xmm4, %xmm0
5955; SSE-NEXT:    pminub %xmm5, %xmm1
5956; SSE-NEXT:    pminub %xmm6, %xmm2
5957; SSE-NEXT:    pminub %xmm7, %xmm3
5958; SSE-NEXT:    retq
5959;
5960; AVX1-LABEL: test135:
5961; AVX1:       # %bb.0: # %entry
5962; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5963; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5964; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
5965; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
5966; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5967; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5968; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5969; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
5970; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
5971; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5972; AVX1-NEXT:    retq
5973;
5974; AVX2-LABEL: test135:
5975; AVX2:       # %bb.0: # %entry
5976; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
5977; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
5978; AVX2-NEXT:    retq
5979;
5980; AVX512F-LABEL: test135:
5981; AVX512F:       # %bb.0: # %entry
5982; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
5983; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
5984; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
5985; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
5986; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
5987; AVX512F-NEXT:    retq
5988;
5989; AVX512BW-LABEL: test135:
5990; AVX512BW:       # %bb.0: # %entry
5991; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
5992; AVX512BW-NEXT:    retq
5993entry:
5994  %cmp = icmp ugt <64 x i8> %a, %b
5995  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5996  ret <64 x i8> %sel
5997}
5998
5999define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
6000; SSE-LABEL: test136:
6001; SSE:       # %bb.0: # %entry
6002; SSE-NEXT:    pminub %xmm4, %xmm0
6003; SSE-NEXT:    pminub %xmm5, %xmm1
6004; SSE-NEXT:    pminub %xmm6, %xmm2
6005; SSE-NEXT:    pminub %xmm7, %xmm3
6006; SSE-NEXT:    retq
6007;
6008; AVX1-LABEL: test136:
6009; AVX1:       # %bb.0: # %entry
6010; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6011; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6012; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
6013; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
6014; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6015; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6016; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6017; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
6018; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
6019; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6020; AVX1-NEXT:    retq
6021;
6022; AVX2-LABEL: test136:
6023; AVX2:       # %bb.0: # %entry
6024; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
6025; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
6026; AVX2-NEXT:    retq
6027;
6028; AVX512F-LABEL: test136:
6029; AVX512F:       # %bb.0: # %entry
6030; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6031; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6032; AVX512F-NEXT:    vpminub %ymm2, %ymm3, %ymm2
6033; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
6034; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6035; AVX512F-NEXT:    retq
6036;
6037; AVX512BW-LABEL: test136:
6038; AVX512BW:       # %bb.0: # %entry
6039; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
6040; AVX512BW-NEXT:    retq
6041entry:
6042  %cmp = icmp uge <64 x i8> %a, %b
6043  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6044  ret <64 x i8> %sel
6045}
6046
6047define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
6048; SSE-LABEL: test137:
6049; SSE:       # %bb.0: # %entry
6050; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6051; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6052; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6053; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6054; SSE-NEXT:    retq
6055;
6056; AVX1-LABEL: test137:
6057; AVX1:       # %bb.0: # %entry
6058; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6059; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6060; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6061; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6062; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6063; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6064; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6065; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6066; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6067; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6068; AVX1-NEXT:    retq
6069;
6070; AVX2-LABEL: test137:
6071; AVX2:       # %bb.0: # %entry
6072; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6073; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6074; AVX2-NEXT:    retq
6075;
6076; AVX512F-LABEL: test137:
6077; AVX512F:       # %bb.0: # %entry
6078; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6079; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6080; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
6081; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
6082; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6083; AVX512F-NEXT:    retq
6084;
6085; AVX512BW-LABEL: test137:
6086; AVX512BW:       # %bb.0: # %entry
6087; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6088; AVX512BW-NEXT:    retq
6089entry:
6090  %cmp = icmp slt <32 x i16> %a, %b
6091  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6092  ret <32 x i16> %sel
6093}
6094
6095define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
6096; SSE-LABEL: test138:
6097; SSE:       # %bb.0: # %entry
6098; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6099; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6100; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6101; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6102; SSE-NEXT:    retq
6103;
6104; AVX1-LABEL: test138:
6105; AVX1:       # %bb.0: # %entry
6106; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6107; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6108; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6109; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6110; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6111; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6112; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6113; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6114; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6115; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6116; AVX1-NEXT:    retq
6117;
6118; AVX2-LABEL: test138:
6119; AVX2:       # %bb.0: # %entry
6120; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6121; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6122; AVX2-NEXT:    retq
6123;
6124; AVX512F-LABEL: test138:
6125; AVX512F:       # %bb.0: # %entry
6126; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6127; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6128; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm3, %ymm2
6129; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
6130; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6131; AVX512F-NEXT:    retq
6132;
6133; AVX512BW-LABEL: test138:
6134; AVX512BW:       # %bb.0: # %entry
6135; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6136; AVX512BW-NEXT:    retq
6137entry:
6138  %cmp = icmp sle <32 x i16> %a, %b
6139  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6140  ret <32 x i16> %sel
6141}
6142
6143define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6144; SSE-LABEL: test139:
6145; SSE:       # %bb.0: # %entry
6146; SSE-NEXT:    pminsw %xmm4, %xmm0
6147; SSE-NEXT:    pminsw %xmm5, %xmm1
6148; SSE-NEXT:    pminsw %xmm6, %xmm2
6149; SSE-NEXT:    pminsw %xmm7, %xmm3
6150; SSE-NEXT:    retq
6151;
6152; AVX1-LABEL: test139:
6153; AVX1:       # %bb.0: # %entry
6154; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6155; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6156; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6157; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6158; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6159; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6160; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6161; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6162; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6163; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6164; AVX1-NEXT:    retq
6165;
6166; AVX2-LABEL: test139:
6167; AVX2:       # %bb.0: # %entry
6168; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6169; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6170; AVX2-NEXT:    retq
6171;
6172; AVX512F-LABEL: test139:
6173; AVX512F:       # %bb.0: # %entry
6174; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6175; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6176; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
6177; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
6178; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6179; AVX512F-NEXT:    retq
6180;
6181; AVX512BW-LABEL: test139:
6182; AVX512BW:       # %bb.0: # %entry
6183; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6184; AVX512BW-NEXT:    retq
6185entry:
6186  %cmp = icmp sgt <32 x i16> %a, %b
6187  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6188  ret <32 x i16> %sel
6189}
6190
6191define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6192; SSE-LABEL: test140:
6193; SSE:       # %bb.0: # %entry
6194; SSE-NEXT:    pminsw %xmm4, %xmm0
6195; SSE-NEXT:    pminsw %xmm5, %xmm1
6196; SSE-NEXT:    pminsw %xmm6, %xmm2
6197; SSE-NEXT:    pminsw %xmm7, %xmm3
6198; SSE-NEXT:    retq
6199;
6200; AVX1-LABEL: test140:
6201; AVX1:       # %bb.0: # %entry
6202; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6203; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6204; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6205; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6206; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6207; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6208; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6209; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6210; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6211; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6212; AVX1-NEXT:    retq
6213;
6214; AVX2-LABEL: test140:
6215; AVX2:       # %bb.0: # %entry
6216; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6217; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6218; AVX2-NEXT:    retq
6219;
6220; AVX512F-LABEL: test140:
6221; AVX512F:       # %bb.0: # %entry
6222; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6223; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6224; AVX512F-NEXT:    vpminsw %ymm2, %ymm3, %ymm2
6225; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
6226; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6227; AVX512F-NEXT:    retq
6228;
6229; AVX512BW-LABEL: test140:
6230; AVX512BW:       # %bb.0: # %entry
6231; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6232; AVX512BW-NEXT:    retq
6233entry:
6234  %cmp = icmp sge <32 x i16> %a, %b
6235  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6236  ret <32 x i16> %sel
6237}
6238
6239define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6240; SSE2-LABEL: test141:
6241; SSE2:       # %bb.0: # %entry
6242; SSE2-NEXT:    psubusw %xmm0, %xmm4
6243; SSE2-NEXT:    paddw %xmm4, %xmm0
6244; SSE2-NEXT:    psubusw %xmm1, %xmm5
6245; SSE2-NEXT:    paddw %xmm5, %xmm1
6246; SSE2-NEXT:    psubusw %xmm2, %xmm6
6247; SSE2-NEXT:    paddw %xmm6, %xmm2
6248; SSE2-NEXT:    psubusw %xmm3, %xmm7
6249; SSE2-NEXT:    paddw %xmm7, %xmm3
6250; SSE2-NEXT:    retq
6251;
6252; SSE4-LABEL: test141:
6253; SSE4:       # %bb.0: # %entry
6254; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6255; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6256; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6257; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6258; SSE4-NEXT:    retq
6259;
6260; AVX1-LABEL: test141:
6261; AVX1:       # %bb.0: # %entry
6262; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6263; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6264; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6265; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6266; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6267; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6268; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6269; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6270; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6271; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6272; AVX1-NEXT:    retq
6273;
6274; AVX2-LABEL: test141:
6275; AVX2:       # %bb.0: # %entry
6276; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6277; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6278; AVX2-NEXT:    retq
6279;
6280; AVX512F-LABEL: test141:
6281; AVX512F:       # %bb.0: # %entry
6282; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6283; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6284; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
6285; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
6286; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6287; AVX512F-NEXT:    retq
6288;
6289; AVX512BW-LABEL: test141:
6290; AVX512BW:       # %bb.0: # %entry
6291; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6292; AVX512BW-NEXT:    retq
6293entry:
6294  %cmp = icmp ult <32 x i16> %a, %b
6295  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6296  ret <32 x i16> %sel
6297}
6298
6299define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6300; SSE2-LABEL: test142:
6301; SSE2:       # %bb.0: # %entry
6302; SSE2-NEXT:    psubusw %xmm0, %xmm4
6303; SSE2-NEXT:    paddw %xmm4, %xmm0
6304; SSE2-NEXT:    psubusw %xmm1, %xmm5
6305; SSE2-NEXT:    paddw %xmm5, %xmm1
6306; SSE2-NEXT:    psubusw %xmm2, %xmm6
6307; SSE2-NEXT:    paddw %xmm6, %xmm2
6308; SSE2-NEXT:    psubusw %xmm3, %xmm7
6309; SSE2-NEXT:    paddw %xmm7, %xmm3
6310; SSE2-NEXT:    retq
6311;
6312; SSE4-LABEL: test142:
6313; SSE4:       # %bb.0: # %entry
6314; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6315; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6316; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6317; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6318; SSE4-NEXT:    retq
6319;
6320; AVX1-LABEL: test142:
6321; AVX1:       # %bb.0: # %entry
6322; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6323; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6324; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6325; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6326; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6327; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6328; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6329; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6330; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6331; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6332; AVX1-NEXT:    retq
6333;
6334; AVX2-LABEL: test142:
6335; AVX2:       # %bb.0: # %entry
6336; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6337; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6338; AVX2-NEXT:    retq
6339;
6340; AVX512F-LABEL: test142:
6341; AVX512F:       # %bb.0: # %entry
6342; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6343; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6344; AVX512F-NEXT:    vpmaxuw %ymm2, %ymm3, %ymm2
6345; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
6346; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6347; AVX512F-NEXT:    retq
6348;
6349; AVX512BW-LABEL: test142:
6350; AVX512BW:       # %bb.0: # %entry
6351; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6352; AVX512BW-NEXT:    retq
6353entry:
6354  %cmp = icmp ule <32 x i16> %a, %b
6355  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6356  ret <32 x i16> %sel
6357}
6358
6359define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6360; SSE2-LABEL: test143:
6361; SSE2:       # %bb.0: # %entry
6362; SSE2-NEXT:    movdqa %xmm0, %xmm8
6363; SSE2-NEXT:    psubusw %xmm4, %xmm8
6364; SSE2-NEXT:    psubw %xmm8, %xmm0
6365; SSE2-NEXT:    movdqa %xmm1, %xmm4
6366; SSE2-NEXT:    psubusw %xmm5, %xmm4
6367; SSE2-NEXT:    psubw %xmm4, %xmm1
6368; SSE2-NEXT:    movdqa %xmm2, %xmm4
6369; SSE2-NEXT:    psubusw %xmm6, %xmm4
6370; SSE2-NEXT:    psubw %xmm4, %xmm2
6371; SSE2-NEXT:    movdqa %xmm3, %xmm4
6372; SSE2-NEXT:    psubusw %xmm7, %xmm4
6373; SSE2-NEXT:    psubw %xmm4, %xmm3
6374; SSE2-NEXT:    retq
6375;
6376; SSE4-LABEL: test143:
6377; SSE4:       # %bb.0: # %entry
6378; SSE4-NEXT:    pminuw %xmm4, %xmm0
6379; SSE4-NEXT:    pminuw %xmm5, %xmm1
6380; SSE4-NEXT:    pminuw %xmm6, %xmm2
6381; SSE4-NEXT:    pminuw %xmm7, %xmm3
6382; SSE4-NEXT:    retq
6383;
6384; AVX1-LABEL: test143:
6385; AVX1:       # %bb.0: # %entry
6386; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6387; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6388; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6389; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6390; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6391; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6392; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6393; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6394; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6395; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6396; AVX1-NEXT:    retq
6397;
6398; AVX2-LABEL: test143:
6399; AVX2:       # %bb.0: # %entry
6400; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6401; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6402; AVX2-NEXT:    retq
6403;
6404; AVX512F-LABEL: test143:
6405; AVX512F:       # %bb.0: # %entry
6406; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6407; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6408; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
6409; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
6410; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6411; AVX512F-NEXT:    retq
6412;
6413; AVX512BW-LABEL: test143:
6414; AVX512BW:       # %bb.0: # %entry
6415; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6416; AVX512BW-NEXT:    retq
6417entry:
6418  %cmp = icmp ugt <32 x i16> %a, %b
6419  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6420  ret <32 x i16> %sel
6421}
6422
6423define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6424; SSE2-LABEL: test144:
6425; SSE2:       # %bb.0: # %entry
6426; SSE2-NEXT:    movdqa %xmm0, %xmm8
6427; SSE2-NEXT:    psubusw %xmm4, %xmm8
6428; SSE2-NEXT:    psubw %xmm8, %xmm0
6429; SSE2-NEXT:    movdqa %xmm1, %xmm4
6430; SSE2-NEXT:    psubusw %xmm5, %xmm4
6431; SSE2-NEXT:    psubw %xmm4, %xmm1
6432; SSE2-NEXT:    movdqa %xmm2, %xmm4
6433; SSE2-NEXT:    psubusw %xmm6, %xmm4
6434; SSE2-NEXT:    psubw %xmm4, %xmm2
6435; SSE2-NEXT:    movdqa %xmm3, %xmm4
6436; SSE2-NEXT:    psubusw %xmm7, %xmm4
6437; SSE2-NEXT:    psubw %xmm4, %xmm3
6438; SSE2-NEXT:    retq
6439;
6440; SSE4-LABEL: test144:
6441; SSE4:       # %bb.0: # %entry
6442; SSE4-NEXT:    pminuw %xmm4, %xmm0
6443; SSE4-NEXT:    pminuw %xmm5, %xmm1
6444; SSE4-NEXT:    pminuw %xmm6, %xmm2
6445; SSE4-NEXT:    pminuw %xmm7, %xmm3
6446; SSE4-NEXT:    retq
6447;
6448; AVX1-LABEL: test144:
6449; AVX1:       # %bb.0: # %entry
6450; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6451; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6452; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6453; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6454; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6455; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6456; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6457; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6458; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6459; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6460; AVX1-NEXT:    retq
6461;
6462; AVX2-LABEL: test144:
6463; AVX2:       # %bb.0: # %entry
6464; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6465; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6466; AVX2-NEXT:    retq
6467;
6468; AVX512F-LABEL: test144:
6469; AVX512F:       # %bb.0: # %entry
6470; AVX512F-NEXT:    vextracti64x4 $1, %zmm1, %ymm2
6471; AVX512F-NEXT:    vextracti64x4 $1, %zmm0, %ymm3
6472; AVX512F-NEXT:    vpminuw %ymm2, %ymm3, %ymm2
6473; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
6474; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm0, %zmm0
6475; AVX512F-NEXT:    retq
6476;
6477; AVX512BW-LABEL: test144:
6478; AVX512BW:       # %bb.0: # %entry
6479; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6480; AVX512BW-NEXT:    retq
6481entry:
6482  %cmp = icmp uge <32 x i16> %a, %b
6483  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6484  ret <32 x i16> %sel
6485}
6486
6487define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6488; SSE2-LABEL: test145:
6489; SSE2:       # %bb.0: # %entry
6490; SSE2-NEXT:    movdqa %xmm0, %xmm8
6491; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6492; SSE2-NEXT:    pand %xmm8, %xmm0
6493; SSE2-NEXT:    pandn %xmm4, %xmm8
6494; SSE2-NEXT:    por %xmm8, %xmm0
6495; SSE2-NEXT:    movdqa %xmm1, %xmm4
6496; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6497; SSE2-NEXT:    pand %xmm4, %xmm1
6498; SSE2-NEXT:    pandn %xmm5, %xmm4
6499; SSE2-NEXT:    por %xmm4, %xmm1
6500; SSE2-NEXT:    movdqa %xmm2, %xmm4
6501; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
6502; SSE2-NEXT:    pand %xmm4, %xmm2
6503; SSE2-NEXT:    pandn %xmm6, %xmm4
6504; SSE2-NEXT:    por %xmm4, %xmm2
6505; SSE2-NEXT:    movdqa %xmm3, %xmm4
6506; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
6507; SSE2-NEXT:    pand %xmm4, %xmm3
6508; SSE2-NEXT:    pandn %xmm7, %xmm4
6509; SSE2-NEXT:    por %xmm4, %xmm3
6510; SSE2-NEXT:    retq
6511;
6512; SSE4-LABEL: test145:
6513; SSE4:       # %bb.0: # %entry
6514; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6515; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6516; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6517; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6518; SSE4-NEXT:    retq
6519;
6520; AVX1-LABEL: test145:
6521; AVX1:       # %bb.0: # %entry
6522; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6523; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6524; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6525; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6526; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6527; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6528; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6529; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6530; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6531; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6532; AVX1-NEXT:    retq
6533;
6534; AVX2-LABEL: test145:
6535; AVX2:       # %bb.0: # %entry
6536; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6537; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6538; AVX2-NEXT:    retq
6539;
6540; AVX512-LABEL: test145:
6541; AVX512:       # %bb.0: # %entry
6542; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6543; AVX512-NEXT:    retq
6544entry:
6545  %cmp = icmp slt <16 x i32> %a, %b
6546  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6547  ret <16 x i32> %sel
6548}
6549
6550define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6551; SSE2-LABEL: test146:
6552; SSE2:       # %bb.0: # %entry
6553; SSE2-NEXT:    movdqa %xmm0, %xmm8
6554; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6555; SSE2-NEXT:    pand %xmm8, %xmm0
6556; SSE2-NEXT:    pandn %xmm4, %xmm8
6557; SSE2-NEXT:    por %xmm8, %xmm0
6558; SSE2-NEXT:    movdqa %xmm1, %xmm4
6559; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6560; SSE2-NEXT:    pand %xmm4, %xmm1
6561; SSE2-NEXT:    pandn %xmm5, %xmm4
6562; SSE2-NEXT:    por %xmm4, %xmm1
6563; SSE2-NEXT:    movdqa %xmm2, %xmm4
6564; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
6565; SSE2-NEXT:    pand %xmm4, %xmm2
6566; SSE2-NEXT:    pandn %xmm6, %xmm4
6567; SSE2-NEXT:    por %xmm4, %xmm2
6568; SSE2-NEXT:    movdqa %xmm3, %xmm4
6569; SSE2-NEXT:    pcmpgtd %xmm7, %xmm4
6570; SSE2-NEXT:    pand %xmm4, %xmm3
6571; SSE2-NEXT:    pandn %xmm7, %xmm4
6572; SSE2-NEXT:    por %xmm4, %xmm3
6573; SSE2-NEXT:    retq
6574;
6575; SSE4-LABEL: test146:
6576; SSE4:       # %bb.0: # %entry
6577; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6578; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6579; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6580; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6581; SSE4-NEXT:    retq
6582;
6583; AVX1-LABEL: test146:
6584; AVX1:       # %bb.0: # %entry
6585; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6586; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6587; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6588; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6589; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6590; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6591; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6592; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6593; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6594; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6595; AVX1-NEXT:    retq
6596;
6597; AVX2-LABEL: test146:
6598; AVX2:       # %bb.0: # %entry
6599; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6600; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6601; AVX2-NEXT:    retq
6602;
6603; AVX512-LABEL: test146:
6604; AVX512:       # %bb.0: # %entry
6605; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6606; AVX512-NEXT:    retq
6607entry:
6608  %cmp = icmp sle <16 x i32> %a, %b
6609  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6610  ret <16 x i32> %sel
6611}
6612
6613define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
6614; SSE2-LABEL: test147:
6615; SSE2:       # %bb.0: # %entry
6616; SSE2-NEXT:    movdqa %xmm4, %xmm8
6617; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6618; SSE2-NEXT:    pand %xmm8, %xmm0
6619; SSE2-NEXT:    pandn %xmm4, %xmm8
6620; SSE2-NEXT:    por %xmm8, %xmm0
6621; SSE2-NEXT:    movdqa %xmm5, %xmm4
6622; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6623; SSE2-NEXT:    pand %xmm4, %xmm1
6624; SSE2-NEXT:    pandn %xmm5, %xmm4
6625; SSE2-NEXT:    por %xmm4, %xmm1
6626; SSE2-NEXT:    movdqa %xmm6, %xmm4
6627; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6628; SSE2-NEXT:    pand %xmm4, %xmm2
6629; SSE2-NEXT:    pandn %xmm6, %xmm4
6630; SSE2-NEXT:    por %xmm4, %xmm2
6631; SSE2-NEXT:    movdqa %xmm7, %xmm4
6632; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6633; SSE2-NEXT:    pand %xmm4, %xmm3
6634; SSE2-NEXT:    pandn %xmm7, %xmm4
6635; SSE2-NEXT:    por %xmm4, %xmm3
6636; SSE2-NEXT:    retq
6637;
6638; SSE4-LABEL: test147:
6639; SSE4:       # %bb.0: # %entry
6640; SSE4-NEXT:    pminsd %xmm4, %xmm0
6641; SSE4-NEXT:    pminsd %xmm5, %xmm1
6642; SSE4-NEXT:    pminsd %xmm6, %xmm2
6643; SSE4-NEXT:    pminsd %xmm7, %xmm3
6644; SSE4-NEXT:    retq
6645;
6646; AVX1-LABEL: test147:
6647; AVX1:       # %bb.0: # %entry
6648; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6649; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6650; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6651; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6652; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6653; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6654; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6655; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6656; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6657; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6658; AVX1-NEXT:    retq
6659;
6660; AVX2-LABEL: test147:
6661; AVX2:       # %bb.0: # %entry
6662; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6663; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6664; AVX2-NEXT:    retq
6665;
6666; AVX512-LABEL: test147:
6667; AVX512:       # %bb.0: # %entry
6668; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6669; AVX512-NEXT:    retq
6670entry:
6671  %cmp = icmp sgt <16 x i32> %a, %b
6672  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6673  ret <16 x i32> %sel
6674}
6675
6676define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
6677; SSE2-LABEL: test148:
6678; SSE2:       # %bb.0: # %entry
6679; SSE2-NEXT:    movdqa %xmm4, %xmm8
6680; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6681; SSE2-NEXT:    pand %xmm8, %xmm0
6682; SSE2-NEXT:    pandn %xmm4, %xmm8
6683; SSE2-NEXT:    por %xmm8, %xmm0
6684; SSE2-NEXT:    movdqa %xmm5, %xmm4
6685; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6686; SSE2-NEXT:    pand %xmm4, %xmm1
6687; SSE2-NEXT:    pandn %xmm5, %xmm4
6688; SSE2-NEXT:    por %xmm4, %xmm1
6689; SSE2-NEXT:    movdqa %xmm6, %xmm4
6690; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6691; SSE2-NEXT:    pand %xmm4, %xmm2
6692; SSE2-NEXT:    pandn %xmm6, %xmm4
6693; SSE2-NEXT:    por %xmm4, %xmm2
6694; SSE2-NEXT:    movdqa %xmm7, %xmm4
6695; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6696; SSE2-NEXT:    pand %xmm4, %xmm3
6697; SSE2-NEXT:    pandn %xmm7, %xmm4
6698; SSE2-NEXT:    por %xmm4, %xmm3
6699; SSE2-NEXT:    retq
6700;
6701; SSE4-LABEL: test148:
6702; SSE4:       # %bb.0: # %entry
6703; SSE4-NEXT:    pminsd %xmm4, %xmm0
6704; SSE4-NEXT:    pminsd %xmm5, %xmm1
6705; SSE4-NEXT:    pminsd %xmm6, %xmm2
6706; SSE4-NEXT:    pminsd %xmm7, %xmm3
6707; SSE4-NEXT:    retq
6708;
6709; AVX1-LABEL: test148:
6710; AVX1:       # %bb.0: # %entry
6711; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6712; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6713; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6714; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6715; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6716; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6717; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6718; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6719; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6720; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6721; AVX1-NEXT:    retq
6722;
6723; AVX2-LABEL: test148:
6724; AVX2:       # %bb.0: # %entry
6725; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6726; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6727; AVX2-NEXT:    retq
6728;
6729; AVX512-LABEL: test148:
6730; AVX512:       # %bb.0: # %entry
6731; AVX512-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6732; AVX512-NEXT:    retq
6733entry:
6734  %cmp = icmp sge <16 x i32> %a, %b
6735  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6736  ret <16 x i32> %sel
6737}
6738
6739define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
6740; SSE2-LABEL: test149:
6741; SSE2:       # %bb.0: # %entry
6742; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6743; SSE2-NEXT:    movdqa %xmm4, %xmm9
6744; SSE2-NEXT:    pxor %xmm8, %xmm9
6745; SSE2-NEXT:    movdqa %xmm0, %xmm10
6746; SSE2-NEXT:    pxor %xmm8, %xmm10
6747; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6748; SSE2-NEXT:    pand %xmm10, %xmm0
6749; SSE2-NEXT:    pandn %xmm4, %xmm10
6750; SSE2-NEXT:    por %xmm10, %xmm0
6751; SSE2-NEXT:    movdqa %xmm5, %xmm9
6752; SSE2-NEXT:    pxor %xmm8, %xmm9
6753; SSE2-NEXT:    movdqa %xmm1, %xmm4
6754; SSE2-NEXT:    pxor %xmm8, %xmm4
6755; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6756; SSE2-NEXT:    pand %xmm4, %xmm1
6757; SSE2-NEXT:    pandn %xmm5, %xmm4
6758; SSE2-NEXT:    por %xmm4, %xmm1
6759; SSE2-NEXT:    movdqa %xmm6, %xmm4
6760; SSE2-NEXT:    pxor %xmm8, %xmm4
6761; SSE2-NEXT:    movdqa %xmm2, %xmm5
6762; SSE2-NEXT:    pxor %xmm8, %xmm5
6763; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6764; SSE2-NEXT:    pand %xmm5, %xmm2
6765; SSE2-NEXT:    pandn %xmm6, %xmm5
6766; SSE2-NEXT:    por %xmm5, %xmm2
6767; SSE2-NEXT:    movdqa %xmm7, %xmm4
6768; SSE2-NEXT:    pxor %xmm8, %xmm4
6769; SSE2-NEXT:    pxor %xmm3, %xmm8
6770; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6771; SSE2-NEXT:    pand %xmm8, %xmm3
6772; SSE2-NEXT:    pandn %xmm7, %xmm8
6773; SSE2-NEXT:    por %xmm8, %xmm3
6774; SSE2-NEXT:    retq
6775;
6776; SSE4-LABEL: test149:
6777; SSE4:       # %bb.0: # %entry
6778; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6779; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6780; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6781; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6782; SSE4-NEXT:    retq
6783;
6784; AVX1-LABEL: test149:
6785; AVX1:       # %bb.0: # %entry
6786; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6787; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6788; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6789; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6790; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6791; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6792; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6793; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6794; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6795; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6796; AVX1-NEXT:    retq
6797;
6798; AVX2-LABEL: test149:
6799; AVX2:       # %bb.0: # %entry
6800; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6801; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6802; AVX2-NEXT:    retq
6803;
6804; AVX512-LABEL: test149:
6805; AVX512:       # %bb.0: # %entry
6806; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6807; AVX512-NEXT:    retq
6808entry:
6809  %cmp = icmp ult <16 x i32> %a, %b
6810  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6811  ret <16 x i32> %sel
6812}
6813
6814define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
6815; SSE2-LABEL: test150:
6816; SSE2:       # %bb.0: # %entry
6817; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6818; SSE2-NEXT:    movdqa %xmm4, %xmm9
6819; SSE2-NEXT:    pxor %xmm8, %xmm9
6820; SSE2-NEXT:    movdqa %xmm0, %xmm10
6821; SSE2-NEXT:    pxor %xmm8, %xmm10
6822; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6823; SSE2-NEXT:    pand %xmm10, %xmm0
6824; SSE2-NEXT:    pandn %xmm4, %xmm10
6825; SSE2-NEXT:    por %xmm10, %xmm0
6826; SSE2-NEXT:    movdqa %xmm5, %xmm9
6827; SSE2-NEXT:    pxor %xmm8, %xmm9
6828; SSE2-NEXT:    movdqa %xmm1, %xmm4
6829; SSE2-NEXT:    pxor %xmm8, %xmm4
6830; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6831; SSE2-NEXT:    pand %xmm4, %xmm1
6832; SSE2-NEXT:    pandn %xmm5, %xmm4
6833; SSE2-NEXT:    por %xmm4, %xmm1
6834; SSE2-NEXT:    movdqa %xmm6, %xmm4
6835; SSE2-NEXT:    pxor %xmm8, %xmm4
6836; SSE2-NEXT:    movdqa %xmm2, %xmm5
6837; SSE2-NEXT:    pxor %xmm8, %xmm5
6838; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6839; SSE2-NEXT:    pand %xmm5, %xmm2
6840; SSE2-NEXT:    pandn %xmm6, %xmm5
6841; SSE2-NEXT:    por %xmm5, %xmm2
6842; SSE2-NEXT:    movdqa %xmm7, %xmm4
6843; SSE2-NEXT:    pxor %xmm8, %xmm4
6844; SSE2-NEXT:    pxor %xmm3, %xmm8
6845; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6846; SSE2-NEXT:    pand %xmm8, %xmm3
6847; SSE2-NEXT:    pandn %xmm7, %xmm8
6848; SSE2-NEXT:    por %xmm8, %xmm3
6849; SSE2-NEXT:    retq
6850;
6851; SSE4-LABEL: test150:
6852; SSE4:       # %bb.0: # %entry
6853; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6854; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6855; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6856; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6857; SSE4-NEXT:    retq
6858;
6859; AVX1-LABEL: test150:
6860; AVX1:       # %bb.0: # %entry
6861; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6862; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6863; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6864; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6865; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6866; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6867; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6868; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6869; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6870; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6871; AVX1-NEXT:    retq
6872;
6873; AVX2-LABEL: test150:
6874; AVX2:       # %bb.0: # %entry
6875; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6876; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6877; AVX2-NEXT:    retq
6878;
6879; AVX512-LABEL: test150:
6880; AVX512:       # %bb.0: # %entry
6881; AVX512-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6882; AVX512-NEXT:    retq
6883entry:
6884  %cmp = icmp ule <16 x i32> %a, %b
6885  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6886  ret <16 x i32> %sel
6887}
6888
6889define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
6890; SSE2-LABEL: test151:
6891; SSE2:       # %bb.0: # %entry
6892; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6893; SSE2-NEXT:    movdqa %xmm0, %xmm9
6894; SSE2-NEXT:    pxor %xmm8, %xmm9
6895; SSE2-NEXT:    movdqa %xmm4, %xmm10
6896; SSE2-NEXT:    pxor %xmm8, %xmm10
6897; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6898; SSE2-NEXT:    pand %xmm10, %xmm0
6899; SSE2-NEXT:    pandn %xmm4, %xmm10
6900; SSE2-NEXT:    por %xmm10, %xmm0
6901; SSE2-NEXT:    movdqa %xmm1, %xmm9
6902; SSE2-NEXT:    pxor %xmm8, %xmm9
6903; SSE2-NEXT:    movdqa %xmm5, %xmm4
6904; SSE2-NEXT:    pxor %xmm8, %xmm4
6905; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6906; SSE2-NEXT:    pand %xmm4, %xmm1
6907; SSE2-NEXT:    pandn %xmm5, %xmm4
6908; SSE2-NEXT:    por %xmm4, %xmm1
6909; SSE2-NEXT:    movdqa %xmm2, %xmm4
6910; SSE2-NEXT:    pxor %xmm8, %xmm4
6911; SSE2-NEXT:    movdqa %xmm6, %xmm5
6912; SSE2-NEXT:    pxor %xmm8, %xmm5
6913; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6914; SSE2-NEXT:    pand %xmm5, %xmm2
6915; SSE2-NEXT:    pandn %xmm6, %xmm5
6916; SSE2-NEXT:    por %xmm5, %xmm2
6917; SSE2-NEXT:    movdqa %xmm3, %xmm4
6918; SSE2-NEXT:    pxor %xmm8, %xmm4
6919; SSE2-NEXT:    pxor %xmm7, %xmm8
6920; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6921; SSE2-NEXT:    pand %xmm8, %xmm3
6922; SSE2-NEXT:    pandn %xmm7, %xmm8
6923; SSE2-NEXT:    por %xmm8, %xmm3
6924; SSE2-NEXT:    retq
6925;
6926; SSE4-LABEL: test151:
6927; SSE4:       # %bb.0: # %entry
6928; SSE4-NEXT:    pminud %xmm4, %xmm0
6929; SSE4-NEXT:    pminud %xmm5, %xmm1
6930; SSE4-NEXT:    pminud %xmm6, %xmm2
6931; SSE4-NEXT:    pminud %xmm7, %xmm3
6932; SSE4-NEXT:    retq
6933;
6934; AVX1-LABEL: test151:
6935; AVX1:       # %bb.0: # %entry
6936; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6937; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6938; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
6939; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
6940; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6941; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6942; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6943; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
6944; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
6945; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6946; AVX1-NEXT:    retq
6947;
6948; AVX2-LABEL: test151:
6949; AVX2:       # %bb.0: # %entry
6950; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
6951; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
6952; AVX2-NEXT:    retq
6953;
6954; AVX512-LABEL: test151:
6955; AVX512:       # %bb.0: # %entry
6956; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
6957; AVX512-NEXT:    retq
6958entry:
6959  %cmp = icmp ugt <16 x i32> %a, %b
6960  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6961  ret <16 x i32> %sel
6962}
6963
6964define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
6965; SSE2-LABEL: test152:
6966; SSE2:       # %bb.0: # %entry
6967; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6968; SSE2-NEXT:    movdqa %xmm0, %xmm9
6969; SSE2-NEXT:    pxor %xmm8, %xmm9
6970; SSE2-NEXT:    movdqa %xmm4, %xmm10
6971; SSE2-NEXT:    pxor %xmm8, %xmm10
6972; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6973; SSE2-NEXT:    pand %xmm10, %xmm0
6974; SSE2-NEXT:    pandn %xmm4, %xmm10
6975; SSE2-NEXT:    por %xmm10, %xmm0
6976; SSE2-NEXT:    movdqa %xmm1, %xmm9
6977; SSE2-NEXT:    pxor %xmm8, %xmm9
6978; SSE2-NEXT:    movdqa %xmm5, %xmm4
6979; SSE2-NEXT:    pxor %xmm8, %xmm4
6980; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6981; SSE2-NEXT:    pand %xmm4, %xmm1
6982; SSE2-NEXT:    pandn %xmm5, %xmm4
6983; SSE2-NEXT:    por %xmm4, %xmm1
6984; SSE2-NEXT:    movdqa %xmm2, %xmm4
6985; SSE2-NEXT:    pxor %xmm8, %xmm4
6986; SSE2-NEXT:    movdqa %xmm6, %xmm5
6987; SSE2-NEXT:    pxor %xmm8, %xmm5
6988; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6989; SSE2-NEXT:    pand %xmm5, %xmm2
6990; SSE2-NEXT:    pandn %xmm6, %xmm5
6991; SSE2-NEXT:    por %xmm5, %xmm2
6992; SSE2-NEXT:    movdqa %xmm3, %xmm4
6993; SSE2-NEXT:    pxor %xmm8, %xmm4
6994; SSE2-NEXT:    pxor %xmm7, %xmm8
6995; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6996; SSE2-NEXT:    pand %xmm8, %xmm3
6997; SSE2-NEXT:    pandn %xmm7, %xmm8
6998; SSE2-NEXT:    por %xmm8, %xmm3
6999; SSE2-NEXT:    retq
7000;
7001; SSE4-LABEL: test152:
7002; SSE4:       # %bb.0: # %entry
7003; SSE4-NEXT:    pminud %xmm4, %xmm0
7004; SSE4-NEXT:    pminud %xmm5, %xmm1
7005; SSE4-NEXT:    pminud %xmm6, %xmm2
7006; SSE4-NEXT:    pminud %xmm7, %xmm3
7007; SSE4-NEXT:    retq
7008;
7009; AVX1-LABEL: test152:
7010; AVX1:       # %bb.0: # %entry
7011; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7012; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7013; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
7014; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
7015; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7016; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7017; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7018; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
7019; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
7020; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7021; AVX1-NEXT:    retq
7022;
7023; AVX2-LABEL: test152:
7024; AVX2:       # %bb.0: # %entry
7025; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
7026; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
7027; AVX2-NEXT:    retq
7028;
7029; AVX512-LABEL: test152:
7030; AVX512:       # %bb.0: # %entry
7031; AVX512-NEXT:    vpminud %zmm1, %zmm0, %zmm0
7032; AVX512-NEXT:    retq
7033entry:
7034  %cmp = icmp uge <16 x i32> %a, %b
7035  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7036  ret <16 x i32> %sel
7037}
7038
7039; -----------------------
7040
7041define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
7042; SSE2-LABEL: test153:
7043; SSE2:       # %bb.0: # %entry
7044; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7045; SSE2-NEXT:    movdqa %xmm4, %xmm9
7046; SSE2-NEXT:    pxor %xmm8, %xmm9
7047; SSE2-NEXT:    movdqa %xmm0, %xmm10
7048; SSE2-NEXT:    pxor %xmm8, %xmm10
7049; SSE2-NEXT:    movdqa %xmm10, %xmm11
7050; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7051; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7052; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7053; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7054; SSE2-NEXT:    pand %xmm12, %xmm9
7055; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7056; SSE2-NEXT:    por %xmm9, %xmm10
7057; SSE2-NEXT:    pand %xmm10, %xmm0
7058; SSE2-NEXT:    pandn %xmm4, %xmm10
7059; SSE2-NEXT:    por %xmm10, %xmm0
7060; SSE2-NEXT:    movdqa %xmm5, %xmm9
7061; SSE2-NEXT:    pxor %xmm8, %xmm9
7062; SSE2-NEXT:    movdqa %xmm1, %xmm4
7063; SSE2-NEXT:    pxor %xmm8, %xmm4
7064; SSE2-NEXT:    movdqa %xmm4, %xmm10
7065; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7066; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7067; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7068; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7069; SSE2-NEXT:    pand %xmm11, %xmm9
7070; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7071; SSE2-NEXT:    por %xmm9, %xmm4
7072; SSE2-NEXT:    pand %xmm4, %xmm1
7073; SSE2-NEXT:    pandn %xmm5, %xmm4
7074; SSE2-NEXT:    por %xmm4, %xmm1
7075; SSE2-NEXT:    movdqa %xmm6, %xmm4
7076; SSE2-NEXT:    pxor %xmm8, %xmm4
7077; SSE2-NEXT:    movdqa %xmm2, %xmm5
7078; SSE2-NEXT:    pxor %xmm8, %xmm5
7079; SSE2-NEXT:    movdqa %xmm5, %xmm9
7080; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7081; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7082; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7083; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7084; SSE2-NEXT:    pand %xmm10, %xmm4
7085; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7086; SSE2-NEXT:    por %xmm4, %xmm5
7087; SSE2-NEXT:    pand %xmm5, %xmm2
7088; SSE2-NEXT:    pandn %xmm6, %xmm5
7089; SSE2-NEXT:    por %xmm5, %xmm2
7090; SSE2-NEXT:    movdqa %xmm7, %xmm4
7091; SSE2-NEXT:    pxor %xmm8, %xmm4
7092; SSE2-NEXT:    pxor %xmm3, %xmm8
7093; SSE2-NEXT:    movdqa %xmm8, %xmm5
7094; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7095; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7096; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7097; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7098; SSE2-NEXT:    pand %xmm6, %xmm4
7099; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7100; SSE2-NEXT:    por %xmm4, %xmm5
7101; SSE2-NEXT:    pand %xmm5, %xmm3
7102; SSE2-NEXT:    pandn %xmm7, %xmm5
7103; SSE2-NEXT:    por %xmm5, %xmm3
7104; SSE2-NEXT:    retq
7105;
7106; SSE4-LABEL: test153:
7107; SSE4:       # %bb.0: # %entry
7108; SSE4-NEXT:    movdqa %xmm7, %xmm8
7109; SSE4-NEXT:    movdqa %xmm0, %xmm7
7110; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7111; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7112; SSE4-NEXT:    movdqa %xmm1, %xmm0
7113; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7114; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7115; SSE4-NEXT:    movdqa %xmm2, %xmm0
7116; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7117; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7118; SSE4-NEXT:    movdqa %xmm3, %xmm0
7119; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7120; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7121; SSE4-NEXT:    movapd %xmm4, %xmm0
7122; SSE4-NEXT:    movapd %xmm5, %xmm1
7123; SSE4-NEXT:    movapd %xmm6, %xmm2
7124; SSE4-NEXT:    movapd %xmm8, %xmm3
7125; SSE4-NEXT:    retq
7126;
7127; AVX1-LABEL: test153:
7128; AVX1:       # %bb.0: # %entry
7129; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7130; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7131; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7132; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7133; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7134; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7135; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7136; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7137; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7138; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7139; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7140; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7141; AVX1-NEXT:    retq
7142;
7143; AVX2-LABEL: test153:
7144; AVX2:       # %bb.0: # %entry
7145; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7146; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7147; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7148; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7149; AVX2-NEXT:    retq
7150;
7151; AVX512-LABEL: test153:
7152; AVX512:       # %bb.0: # %entry
7153; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7154; AVX512-NEXT:    retq
7155entry:
7156  %cmp = icmp slt <8 x i64> %a, %b
7157  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7158  ret <8 x i64> %sel
7159}
7160
7161define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7162; SSE2-LABEL: test154:
7163; SSE2:       # %bb.0: # %entry
7164; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7165; SSE2-NEXT:    movdqa %xmm4, %xmm9
7166; SSE2-NEXT:    pxor %xmm8, %xmm9
7167; SSE2-NEXT:    movdqa %xmm0, %xmm10
7168; SSE2-NEXT:    pxor %xmm8, %xmm10
7169; SSE2-NEXT:    movdqa %xmm10, %xmm11
7170; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7171; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7172; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7173; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7174; SSE2-NEXT:    pand %xmm12, %xmm9
7175; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7176; SSE2-NEXT:    por %xmm9, %xmm10
7177; SSE2-NEXT:    pand %xmm10, %xmm0
7178; SSE2-NEXT:    pandn %xmm4, %xmm10
7179; SSE2-NEXT:    por %xmm10, %xmm0
7180; SSE2-NEXT:    movdqa %xmm5, %xmm9
7181; SSE2-NEXT:    pxor %xmm8, %xmm9
7182; SSE2-NEXT:    movdqa %xmm1, %xmm4
7183; SSE2-NEXT:    pxor %xmm8, %xmm4
7184; SSE2-NEXT:    movdqa %xmm4, %xmm10
7185; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7186; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7187; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7188; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7189; SSE2-NEXT:    pand %xmm11, %xmm9
7190; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7191; SSE2-NEXT:    por %xmm9, %xmm4
7192; SSE2-NEXT:    pand %xmm4, %xmm1
7193; SSE2-NEXT:    pandn %xmm5, %xmm4
7194; SSE2-NEXT:    por %xmm4, %xmm1
7195; SSE2-NEXT:    movdqa %xmm6, %xmm4
7196; SSE2-NEXT:    pxor %xmm8, %xmm4
7197; SSE2-NEXT:    movdqa %xmm2, %xmm5
7198; SSE2-NEXT:    pxor %xmm8, %xmm5
7199; SSE2-NEXT:    movdqa %xmm5, %xmm9
7200; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7201; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7202; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7203; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7204; SSE2-NEXT:    pand %xmm10, %xmm4
7205; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7206; SSE2-NEXT:    por %xmm4, %xmm5
7207; SSE2-NEXT:    pand %xmm5, %xmm2
7208; SSE2-NEXT:    pandn %xmm6, %xmm5
7209; SSE2-NEXT:    por %xmm5, %xmm2
7210; SSE2-NEXT:    movdqa %xmm7, %xmm4
7211; SSE2-NEXT:    pxor %xmm8, %xmm4
7212; SSE2-NEXT:    pxor %xmm3, %xmm8
7213; SSE2-NEXT:    movdqa %xmm8, %xmm5
7214; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7215; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7216; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7217; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7218; SSE2-NEXT:    pand %xmm6, %xmm4
7219; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7220; SSE2-NEXT:    por %xmm4, %xmm5
7221; SSE2-NEXT:    pand %xmm5, %xmm3
7222; SSE2-NEXT:    pandn %xmm7, %xmm5
7223; SSE2-NEXT:    por %xmm5, %xmm3
7224; SSE2-NEXT:    retq
7225;
7226; SSE4-LABEL: test154:
7227; SSE4:       # %bb.0: # %entry
7228; SSE4-NEXT:    movdqa %xmm7, %xmm8
7229; SSE4-NEXT:    movdqa %xmm0, %xmm7
7230; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7231; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7232; SSE4-NEXT:    movdqa %xmm1, %xmm0
7233; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7234; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7235; SSE4-NEXT:    movdqa %xmm2, %xmm0
7236; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7237; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7238; SSE4-NEXT:    movdqa %xmm3, %xmm0
7239; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7240; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7241; SSE4-NEXT:    movapd %xmm4, %xmm0
7242; SSE4-NEXT:    movapd %xmm5, %xmm1
7243; SSE4-NEXT:    movapd %xmm6, %xmm2
7244; SSE4-NEXT:    movapd %xmm8, %xmm3
7245; SSE4-NEXT:    retq
7246;
7247; AVX1-LABEL: test154:
7248; AVX1:       # %bb.0: # %entry
7249; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7250; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7251; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7252; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7253; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7254; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7255; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7256; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7257; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7258; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7259; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7260; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7261; AVX1-NEXT:    retq
7262;
7263; AVX2-LABEL: test154:
7264; AVX2:       # %bb.0: # %entry
7265; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7266; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7267; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7268; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7269; AVX2-NEXT:    retq
7270;
7271; AVX512-LABEL: test154:
7272; AVX512:       # %bb.0: # %entry
7273; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7274; AVX512-NEXT:    retq
7275entry:
7276  %cmp = icmp sle <8 x i64> %a, %b
7277  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7278  ret <8 x i64> %sel
7279}
7280
7281define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7282; SSE2-LABEL: test155:
7283; SSE2:       # %bb.0: # %entry
7284; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648]
7285; SSE2-NEXT:    movdqa %xmm0, %xmm9
7286; SSE2-NEXT:    pxor %xmm8, %xmm9
7287; SSE2-NEXT:    movdqa %xmm4, %xmm10
7288; SSE2-NEXT:    pxor %xmm8, %xmm10
7289; SSE2-NEXT:    movdqa %xmm10, %xmm11
7290; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7291; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7292; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7293; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7294; SSE2-NEXT:    pand %xmm12, %xmm9
7295; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7296; SSE2-NEXT:    por %xmm9, %xmm10
7297; SSE2-NEXT:    pand %xmm10, %xmm0
7298; SSE2-NEXT:    pandn %xmm4, %xmm10
7299; SSE2-NEXT:    por %xmm10, %xmm0
7300; SSE2-NEXT:    movdqa %xmm1, %xmm9
7301; SSE2-NEXT:    pxor %xmm8, %xmm9
7302; SSE2-NEXT:    movdqa %xmm5, %xmm4
7303; SSE2-NEXT:    pxor %xmm8, %xmm4
7304; SSE2-NEXT:    movdqa %xmm4, %xmm10
7305; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7306; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7307; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7308; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7309; SSE2-NEXT:    pand %xmm11, %xmm9
7310; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7311; SSE2-NEXT:    por %xmm9, %xmm4
7312; SSE2-NEXT:    pand %xmm4, %xmm1
7313; SSE2-NEXT:    pandn %xmm5, %xmm4
7314; SSE2-NEXT:    por %xmm4, %xmm1
7315; SSE2-NEXT:    movdqa %xmm2, %xmm4
7316; SSE2-NEXT:    pxor %xmm8, %xmm4
7317; SSE2-NEXT:    movdqa %xmm6, %xmm5
7318; SSE2-NEXT:    pxor %xmm8, %xmm5
7319; SSE2-NEXT:    movdqa %xmm5, %xmm9
7320; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7321; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7322; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7323; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7324; SSE2-NEXT:    pand %xmm10, %xmm4
7325; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7326; SSE2-NEXT:    por %xmm4, %xmm5
7327; SSE2-NEXT:    pand %xmm5, %xmm2
7328; SSE2-NEXT:    pandn %xmm6, %xmm5
7329; SSE2-NEXT:    por %xmm5, %xmm2
7330; SSE2-NEXT:    movdqa %xmm3, %xmm4
7331; SSE2-NEXT:    pxor %xmm8, %xmm4
7332; SSE2-NEXT:    pxor %xmm7, %xmm8
7333; SSE2-NEXT:    movdqa %xmm8, %xmm5
7334; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7335; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7336; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7337; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7338; SSE2-NEXT:    pand %xmm6, %xmm4
7339; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7340; SSE2-NEXT:    por %xmm4, %xmm5
7341; SSE2-NEXT:    pand %xmm5, %xmm3
7342; SSE2-NEXT:    pandn %xmm7, %xmm5
7343; SSE2-NEXT:    por %xmm5, %xmm3
7344; SSE2-NEXT:    retq
7345;
7346; SSE4-LABEL: test155:
7347; SSE4:       # %bb.0: # %entry
7348; SSE4-NEXT:    movdqa %xmm7, %xmm8
7349; SSE4-NEXT:    movdqa %xmm0, %xmm7
7350; SSE4-NEXT:    movdqa %xmm4, %xmm0
7351; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
7352; SSE4-NEXT:    blendvpd %xmm0, %xmm7, %xmm4
7353; SSE4-NEXT:    movdqa %xmm5, %xmm0
7354; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7355; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7356; SSE4-NEXT:    movdqa %xmm6, %xmm0
7357; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7358; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7359; SSE4-NEXT:    movdqa %xmm8, %xmm0
7360; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7361; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7362; SSE4-NEXT:    movapd %xmm4, %xmm0
7363; SSE4-NEXT:    movapd %xmm5, %xmm1
7364; SSE4-NEXT:    movapd %xmm6, %xmm2
7365; SSE4-NEXT:    movapd %xmm8, %xmm3
7366; SSE4-NEXT:    retq
7367;
7368; AVX1-LABEL: test155:
7369; AVX1:       # %bb.0: # %entry
7370; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7371; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
7372; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7373; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
7374; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7375; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7376; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7377; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7378; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7379; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
7380; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7381; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7382; AVX1-NEXT:    retq
7383;
7384; AVX2-LABEL: test155:
7385; AVX2:       # %bb.0: # %entry
7386; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
7387; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7388; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
7389; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7390; AVX2-NEXT:    retq
7391;
7392; AVX512-LABEL: test155:
7393; AVX512:       # %bb.0: # %entry
7394; AVX512-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7395; AVX512-NEXT:    retq
7396entry:
7397  %cmp = icmp sgt <8 x i64> %a, %b
7398  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7399  ret <8 x i64> %sel
7400}
7401
7402define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7403; SSE2-LABEL: test156:
7404; SSE2:       # %bb.0: # %entry
7405; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7406; SSE2-NEXT:    movdqa %xmm4, %xmm9
7407; SSE2-NEXT:    pxor %xmm8, %xmm9
7408; SSE2-NEXT:    movdqa %xmm0, %xmm10
7409; SSE2-NEXT:    pxor %xmm8, %xmm10
7410; SSE2-NEXT:    movdqa %xmm10, %xmm11
7411; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7412; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7413; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7414; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7415; SSE2-NEXT:    pand %xmm12, %xmm9
7416; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7417; SSE2-NEXT:    por %xmm9, %xmm10
7418; SSE2-NEXT:    pand %xmm10, %xmm0
7419; SSE2-NEXT:    pandn %xmm4, %xmm10
7420; SSE2-NEXT:    por %xmm10, %xmm0
7421; SSE2-NEXT:    movdqa %xmm5, %xmm9
7422; SSE2-NEXT:    pxor %xmm8, %xmm9
7423; SSE2-NEXT:    movdqa %xmm1, %xmm4
7424; SSE2-NEXT:    pxor %xmm8, %xmm4
7425; SSE2-NEXT:    movdqa %xmm4, %xmm10
7426; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7427; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7428; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7429; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7430; SSE2-NEXT:    pand %xmm11, %xmm9
7431; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7432; SSE2-NEXT:    por %xmm9, %xmm4
7433; SSE2-NEXT:    pand %xmm4, %xmm1
7434; SSE2-NEXT:    pandn %xmm5, %xmm4
7435; SSE2-NEXT:    por %xmm4, %xmm1
7436; SSE2-NEXT:    movdqa %xmm6, %xmm4
7437; SSE2-NEXT:    pxor %xmm8, %xmm4
7438; SSE2-NEXT:    movdqa %xmm2, %xmm5
7439; SSE2-NEXT:    pxor %xmm8, %xmm5
7440; SSE2-NEXT:    movdqa %xmm5, %xmm9
7441; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7442; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7443; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7444; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7445; SSE2-NEXT:    pand %xmm10, %xmm4
7446; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7447; SSE2-NEXT:    por %xmm4, %xmm5
7448; SSE2-NEXT:    pand %xmm5, %xmm2
7449; SSE2-NEXT:    pandn %xmm6, %xmm5
7450; SSE2-NEXT:    por %xmm5, %xmm2
7451; SSE2-NEXT:    movdqa %xmm7, %xmm4
7452; SSE2-NEXT:    pxor %xmm8, %xmm4
7453; SSE2-NEXT:    pxor %xmm3, %xmm8
7454; SSE2-NEXT:    movdqa %xmm8, %xmm5
7455; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7456; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7457; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7458; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7459; SSE2-NEXT:    pand %xmm6, %xmm4
7460; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7461; SSE2-NEXT:    por %xmm4, %xmm5
7462; SSE2-NEXT:    pand %xmm5, %xmm3
7463; SSE2-NEXT:    pandn %xmm7, %xmm5
7464; SSE2-NEXT:    por %xmm5, %xmm3
7465; SSE2-NEXT:    retq
7466;
7467; SSE4-LABEL: test156:
7468; SSE4:       # %bb.0: # %entry
7469; SSE4-NEXT:    movdqa %xmm7, %xmm8
7470; SSE4-NEXT:    movdqa %xmm6, %xmm9
7471; SSE4-NEXT:    movdqa %xmm5, %xmm10
7472; SSE4-NEXT:    movdqa %xmm4, %xmm5
7473; SSE4-NEXT:    movdqa %xmm0, %xmm6
7474; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7475; SSE4-NEXT:    pxor %xmm7, %xmm4
7476; SSE4-NEXT:    pxor %xmm7, %xmm0
7477; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7478; SSE4-NEXT:    blendvpd %xmm0, %xmm6, %xmm5
7479; SSE4-NEXT:    movdqa %xmm10, %xmm4
7480; SSE4-NEXT:    pxor %xmm7, %xmm4
7481; SSE4-NEXT:    movdqa %xmm1, %xmm0
7482; SSE4-NEXT:    pxor %xmm7, %xmm0
7483; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7484; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7485; SSE4-NEXT:    movdqa %xmm9, %xmm1
7486; SSE4-NEXT:    pxor %xmm7, %xmm1
7487; SSE4-NEXT:    movdqa %xmm2, %xmm0
7488; SSE4-NEXT:    pxor %xmm7, %xmm0
7489; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7490; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7491; SSE4-NEXT:    movdqa %xmm8, %xmm0
7492; SSE4-NEXT:    pxor %xmm7, %xmm0
7493; SSE4-NEXT:    pxor %xmm3, %xmm7
7494; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7495; SSE4-NEXT:    movdqa %xmm7, %xmm0
7496; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7497; SSE4-NEXT:    movapd %xmm5, %xmm0
7498; SSE4-NEXT:    movapd %xmm10, %xmm1
7499; SSE4-NEXT:    movapd %xmm9, %xmm2
7500; SSE4-NEXT:    movapd %xmm8, %xmm3
7501; SSE4-NEXT:    retq
7502;
7503; AVX1-LABEL: test156:
7504; AVX1:       # %bb.0: # %entry
7505; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7506; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7507; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7508; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7509; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7510; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7511; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
7512; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
7513; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7514; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7515; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7516; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7517; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7518; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7519; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7520; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7521; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
7522; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
7523; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7524; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7525; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7526; AVX1-NEXT:    retq
7527;
7528; AVX2-LABEL: test156:
7529; AVX2:       # %bb.0: # %entry
7530; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7531; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
7532; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
7533; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7534; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7535; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
7536; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
7537; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7538; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7539; AVX2-NEXT:    retq
7540;
7541; AVX512-LABEL: test156:
7542; AVX512:       # %bb.0: # %entry
7543; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
7544; AVX512-NEXT:    retq
7545entry:
7546  %cmp = icmp ule <8 x i64> %a, %b
7547  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7548  ret <8 x i64> %sel
7549}
7550
7551define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
7552; SSE2-LABEL: test159:
7553; SSE2:       # %bb.0: # %entry
7554; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7555; SSE2-NEXT:    movdqa %xmm0, %xmm9
7556; SSE2-NEXT:    pxor %xmm8, %xmm9
7557; SSE2-NEXT:    movdqa %xmm4, %xmm10
7558; SSE2-NEXT:    pxor %xmm8, %xmm10
7559; SSE2-NEXT:    movdqa %xmm10, %xmm11
7560; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7561; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7562; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7563; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7564; SSE2-NEXT:    pand %xmm12, %xmm9
7565; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7566; SSE2-NEXT:    por %xmm9, %xmm10
7567; SSE2-NEXT:    pand %xmm10, %xmm0
7568; SSE2-NEXT:    pandn %xmm4, %xmm10
7569; SSE2-NEXT:    por %xmm10, %xmm0
7570; SSE2-NEXT:    movdqa %xmm1, %xmm9
7571; SSE2-NEXT:    pxor %xmm8, %xmm9
7572; SSE2-NEXT:    movdqa %xmm5, %xmm4
7573; SSE2-NEXT:    pxor %xmm8, %xmm4
7574; SSE2-NEXT:    movdqa %xmm4, %xmm10
7575; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7576; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7577; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7578; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7579; SSE2-NEXT:    pand %xmm11, %xmm9
7580; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7581; SSE2-NEXT:    por %xmm9, %xmm4
7582; SSE2-NEXT:    pand %xmm4, %xmm1
7583; SSE2-NEXT:    pandn %xmm5, %xmm4
7584; SSE2-NEXT:    por %xmm4, %xmm1
7585; SSE2-NEXT:    movdqa %xmm2, %xmm4
7586; SSE2-NEXT:    pxor %xmm8, %xmm4
7587; SSE2-NEXT:    movdqa %xmm6, %xmm5
7588; SSE2-NEXT:    pxor %xmm8, %xmm5
7589; SSE2-NEXT:    movdqa %xmm5, %xmm9
7590; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7591; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7592; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7593; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7594; SSE2-NEXT:    pand %xmm10, %xmm4
7595; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7596; SSE2-NEXT:    por %xmm4, %xmm5
7597; SSE2-NEXT:    pand %xmm5, %xmm2
7598; SSE2-NEXT:    pandn %xmm6, %xmm5
7599; SSE2-NEXT:    por %xmm5, %xmm2
7600; SSE2-NEXT:    movdqa %xmm3, %xmm4
7601; SSE2-NEXT:    pxor %xmm8, %xmm4
7602; SSE2-NEXT:    pxor %xmm7, %xmm8
7603; SSE2-NEXT:    movdqa %xmm8, %xmm5
7604; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7605; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7606; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7607; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7608; SSE2-NEXT:    pand %xmm6, %xmm4
7609; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7610; SSE2-NEXT:    por %xmm4, %xmm5
7611; SSE2-NEXT:    pand %xmm5, %xmm3
7612; SSE2-NEXT:    pandn %xmm7, %xmm5
7613; SSE2-NEXT:    por %xmm5, %xmm3
7614; SSE2-NEXT:    retq
7615;
7616; SSE4-LABEL: test159:
7617; SSE4:       # %bb.0: # %entry
7618; SSE4-NEXT:    movdqa %xmm7, %xmm8
7619; SSE4-NEXT:    movdqa %xmm6, %xmm9
7620; SSE4-NEXT:    movdqa %xmm5, %xmm10
7621; SSE4-NEXT:    movdqa %xmm0, %xmm5
7622; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7623; SSE4-NEXT:    movdqa %xmm0, %xmm6
7624; SSE4-NEXT:    pxor %xmm7, %xmm6
7625; SSE4-NEXT:    movdqa %xmm4, %xmm0
7626; SSE4-NEXT:    pxor %xmm7, %xmm0
7627; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7628; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
7629; SSE4-NEXT:    movdqa %xmm1, %xmm5
7630; SSE4-NEXT:    pxor %xmm7, %xmm5
7631; SSE4-NEXT:    movdqa %xmm10, %xmm0
7632; SSE4-NEXT:    pxor %xmm7, %xmm0
7633; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7634; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7635; SSE4-NEXT:    movdqa %xmm2, %xmm1
7636; SSE4-NEXT:    pxor %xmm7, %xmm1
7637; SSE4-NEXT:    movdqa %xmm9, %xmm0
7638; SSE4-NEXT:    pxor %xmm7, %xmm0
7639; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7640; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7641; SSE4-NEXT:    movdqa %xmm3, %xmm0
7642; SSE4-NEXT:    pxor %xmm7, %xmm0
7643; SSE4-NEXT:    pxor %xmm8, %xmm7
7644; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7645; SSE4-NEXT:    movdqa %xmm7, %xmm0
7646; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7647; SSE4-NEXT:    movapd %xmm4, %xmm0
7648; SSE4-NEXT:    movapd %xmm10, %xmm1
7649; SSE4-NEXT:    movapd %xmm9, %xmm2
7650; SSE4-NEXT:    movapd %xmm8, %xmm3
7651; SSE4-NEXT:    retq
7652;
7653; AVX1-LABEL: test159:
7654; AVX1:       # %bb.0: # %entry
7655; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7656; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7657; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7658; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7659; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7660; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7661; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7662; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7663; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7664; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7665; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7666; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7667; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7668; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7669; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7670; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7671; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7672; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7673; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7674; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7675; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7676; AVX1-NEXT:    retq
7677;
7678; AVX2-LABEL: test159:
7679; AVX2:       # %bb.0: # %entry
7680; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7681; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7682; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7683; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7684; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7685; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7686; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7687; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7688; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7689; AVX2-NEXT:    retq
7690;
7691; AVX512-LABEL: test159:
7692; AVX512:       # %bb.0: # %entry
7693; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7694; AVX512-NEXT:    retq
7695entry:
7696  %cmp = icmp ugt <8 x i64> %a, %b
7697  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7698  ret <8 x i64> %sel
7699}
7700
7701define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
7702; SSE2-LABEL: test160:
7703; SSE2:       # %bb.0: # %entry
7704; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [9223372039002259456,9223372039002259456]
7705; SSE2-NEXT:    movdqa %xmm0, %xmm9
7706; SSE2-NEXT:    pxor %xmm8, %xmm9
7707; SSE2-NEXT:    movdqa %xmm4, %xmm10
7708; SSE2-NEXT:    pxor %xmm8, %xmm10
7709; SSE2-NEXT:    movdqa %xmm10, %xmm11
7710; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7711; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7712; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7713; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7714; SSE2-NEXT:    pand %xmm12, %xmm9
7715; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7716; SSE2-NEXT:    por %xmm9, %xmm10
7717; SSE2-NEXT:    pand %xmm10, %xmm0
7718; SSE2-NEXT:    pandn %xmm4, %xmm10
7719; SSE2-NEXT:    por %xmm10, %xmm0
7720; SSE2-NEXT:    movdqa %xmm1, %xmm9
7721; SSE2-NEXT:    pxor %xmm8, %xmm9
7722; SSE2-NEXT:    movdqa %xmm5, %xmm4
7723; SSE2-NEXT:    pxor %xmm8, %xmm4
7724; SSE2-NEXT:    movdqa %xmm4, %xmm10
7725; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7726; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7727; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7728; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7729; SSE2-NEXT:    pand %xmm11, %xmm9
7730; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7731; SSE2-NEXT:    por %xmm9, %xmm4
7732; SSE2-NEXT:    pand %xmm4, %xmm1
7733; SSE2-NEXT:    pandn %xmm5, %xmm4
7734; SSE2-NEXT:    por %xmm4, %xmm1
7735; SSE2-NEXT:    movdqa %xmm2, %xmm4
7736; SSE2-NEXT:    pxor %xmm8, %xmm4
7737; SSE2-NEXT:    movdqa %xmm6, %xmm5
7738; SSE2-NEXT:    pxor %xmm8, %xmm5
7739; SSE2-NEXT:    movdqa %xmm5, %xmm9
7740; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7741; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7742; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7743; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7744; SSE2-NEXT:    pand %xmm10, %xmm4
7745; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7746; SSE2-NEXT:    por %xmm4, %xmm5
7747; SSE2-NEXT:    pand %xmm5, %xmm2
7748; SSE2-NEXT:    pandn %xmm6, %xmm5
7749; SSE2-NEXT:    por %xmm5, %xmm2
7750; SSE2-NEXT:    movdqa %xmm3, %xmm4
7751; SSE2-NEXT:    pxor %xmm8, %xmm4
7752; SSE2-NEXT:    pxor %xmm7, %xmm8
7753; SSE2-NEXT:    movdqa %xmm8, %xmm5
7754; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7755; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7756; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7757; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7758; SSE2-NEXT:    pand %xmm6, %xmm4
7759; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7760; SSE2-NEXT:    por %xmm4, %xmm5
7761; SSE2-NEXT:    pand %xmm5, %xmm3
7762; SSE2-NEXT:    pandn %xmm7, %xmm5
7763; SSE2-NEXT:    por %xmm5, %xmm3
7764; SSE2-NEXT:    retq
7765;
7766; SSE4-LABEL: test160:
7767; SSE4:       # %bb.0: # %entry
7768; SSE4-NEXT:    movdqa %xmm7, %xmm8
7769; SSE4-NEXT:    movdqa %xmm6, %xmm9
7770; SSE4-NEXT:    movdqa %xmm5, %xmm10
7771; SSE4-NEXT:    movdqa %xmm0, %xmm5
7772; SSE4-NEXT:    movdqa {{.*#+}} xmm7 = [9223372036854775808,9223372036854775808]
7773; SSE4-NEXT:    movdqa %xmm0, %xmm6
7774; SSE4-NEXT:    pxor %xmm7, %xmm6
7775; SSE4-NEXT:    movdqa %xmm4, %xmm0
7776; SSE4-NEXT:    pxor %xmm7, %xmm0
7777; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7778; SSE4-NEXT:    blendvpd %xmm0, %xmm5, %xmm4
7779; SSE4-NEXT:    movdqa %xmm1, %xmm5
7780; SSE4-NEXT:    pxor %xmm7, %xmm5
7781; SSE4-NEXT:    movdqa %xmm10, %xmm0
7782; SSE4-NEXT:    pxor %xmm7, %xmm0
7783; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7784; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm10
7785; SSE4-NEXT:    movdqa %xmm2, %xmm1
7786; SSE4-NEXT:    pxor %xmm7, %xmm1
7787; SSE4-NEXT:    movdqa %xmm9, %xmm0
7788; SSE4-NEXT:    pxor %xmm7, %xmm0
7789; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7790; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm9
7791; SSE4-NEXT:    movdqa %xmm3, %xmm0
7792; SSE4-NEXT:    pxor %xmm7, %xmm0
7793; SSE4-NEXT:    pxor %xmm8, %xmm7
7794; SSE4-NEXT:    pcmpgtq %xmm0, %xmm7
7795; SSE4-NEXT:    movdqa %xmm7, %xmm0
7796; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm8
7797; SSE4-NEXT:    movapd %xmm4, %xmm0
7798; SSE4-NEXT:    movapd %xmm10, %xmm1
7799; SSE4-NEXT:    movapd %xmm9, %xmm2
7800; SSE4-NEXT:    movapd %xmm8, %xmm3
7801; SSE4-NEXT:    retq
7802;
7803; AVX1-LABEL: test160:
7804; AVX1:       # %bb.0: # %entry
7805; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7806; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7807; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7808; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7809; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7810; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7811; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7812; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7813; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7814; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7815; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7816; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7817; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7818; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7819; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7820; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7821; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7822; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7823; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7824; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7825; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7826; AVX1-NEXT:    retq
7827;
7828; AVX2-LABEL: test160:
7829; AVX2:       # %bb.0: # %entry
7830; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7831; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7832; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7833; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7834; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7835; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7836; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7837; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7838; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7839; AVX2-NEXT:    retq
7840;
7841; AVX512-LABEL: test160:
7842; AVX512:       # %bb.0: # %entry
7843; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7844; AVX512-NEXT:    retq
7845entry:
7846  %cmp = icmp uge <8 x i64> %a, %b
7847  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7848  ret <8 x i64> %sel
7849}
7850
7851define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
7852; SSE2-LABEL: test161:
7853; SSE2:       # %bb.0: # %entry
7854; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7855; SSE2-NEXT:    movdqa %xmm0, %xmm5
7856; SSE2-NEXT:    pxor %xmm4, %xmm5
7857; SSE2-NEXT:    movdqa %xmm2, %xmm6
7858; SSE2-NEXT:    pxor %xmm4, %xmm6
7859; SSE2-NEXT:    movdqa %xmm6, %xmm7
7860; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7861; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7862; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7863; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7864; SSE2-NEXT:    pand %xmm8, %xmm5
7865; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7866; SSE2-NEXT:    por %xmm5, %xmm6
7867; SSE2-NEXT:    pand %xmm6, %xmm0
7868; SSE2-NEXT:    pandn %xmm2, %xmm6
7869; SSE2-NEXT:    por %xmm6, %xmm0
7870; SSE2-NEXT:    movdqa %xmm1, %xmm2
7871; SSE2-NEXT:    pxor %xmm4, %xmm2
7872; SSE2-NEXT:    pxor %xmm3, %xmm4
7873; SSE2-NEXT:    movdqa %xmm4, %xmm5
7874; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7875; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7876; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7877; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7878; SSE2-NEXT:    pand %xmm6, %xmm2
7879; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7880; SSE2-NEXT:    por %xmm2, %xmm4
7881; SSE2-NEXT:    pand %xmm4, %xmm1
7882; SSE2-NEXT:    pandn %xmm3, %xmm4
7883; SSE2-NEXT:    por %xmm4, %xmm1
7884; SSE2-NEXT:    retq
7885;
7886; SSE4-LABEL: test161:
7887; SSE4:       # %bb.0: # %entry
7888; SSE4-NEXT:    movdqa %xmm0, %xmm4
7889; SSE4-NEXT:    movdqa %xmm2, %xmm0
7890; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7891; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7892; SSE4-NEXT:    movdqa %xmm3, %xmm0
7893; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7894; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7895; SSE4-NEXT:    movapd %xmm2, %xmm0
7896; SSE4-NEXT:    movapd %xmm3, %xmm1
7897; SSE4-NEXT:    retq
7898;
7899; AVX1-LABEL: test161:
7900; AVX1:       # %bb.0: # %entry
7901; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7902; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7903; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7904; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7905; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7906; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7907; AVX1-NEXT:    retq
7908;
7909; AVX2-LABEL: test161:
7910; AVX2:       # %bb.0: # %entry
7911; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7912; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7913; AVX2-NEXT:    retq
7914;
7915; AVX512F-LABEL: test161:
7916; AVX512F:       # %bb.0: # %entry
7917; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
7918; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
7919; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7920; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
7921; AVX512F-NEXT:    retq
7922;
7923; AVX512BW-LABEL: test161:
7924; AVX512BW:       # %bb.0: # %entry
7925; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7926; AVX512BW-NEXT:    retq
7927entry:
7928  %cmp = icmp slt <4 x i64> %a, %b
7929  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7930  ret <4 x i64> %sel
7931}
7932
7933define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
7934; SSE2-LABEL: test162:
7935; SSE2:       # %bb.0: # %entry
7936; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
7937; SSE2-NEXT:    movdqa %xmm0, %xmm5
7938; SSE2-NEXT:    pxor %xmm4, %xmm5
7939; SSE2-NEXT:    movdqa %xmm2, %xmm6
7940; SSE2-NEXT:    pxor %xmm4, %xmm6
7941; SSE2-NEXT:    movdqa %xmm6, %xmm7
7942; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7943; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7944; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7945; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7946; SSE2-NEXT:    pand %xmm8, %xmm5
7947; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7948; SSE2-NEXT:    por %xmm5, %xmm6
7949; SSE2-NEXT:    pand %xmm6, %xmm0
7950; SSE2-NEXT:    pandn %xmm2, %xmm6
7951; SSE2-NEXT:    por %xmm6, %xmm0
7952; SSE2-NEXT:    movdqa %xmm1, %xmm2
7953; SSE2-NEXT:    pxor %xmm4, %xmm2
7954; SSE2-NEXT:    pxor %xmm3, %xmm4
7955; SSE2-NEXT:    movdqa %xmm4, %xmm5
7956; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7957; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7958; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7959; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7960; SSE2-NEXT:    pand %xmm6, %xmm2
7961; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7962; SSE2-NEXT:    por %xmm2, %xmm4
7963; SSE2-NEXT:    pand %xmm4, %xmm1
7964; SSE2-NEXT:    pandn %xmm3, %xmm4
7965; SSE2-NEXT:    por %xmm4, %xmm1
7966; SSE2-NEXT:    retq
7967;
7968; SSE4-LABEL: test162:
7969; SSE4:       # %bb.0: # %entry
7970; SSE4-NEXT:    movdqa %xmm0, %xmm4
7971; SSE4-NEXT:    movdqa %xmm2, %xmm0
7972; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7973; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7974; SSE4-NEXT:    movdqa %xmm3, %xmm0
7975; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7976; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7977; SSE4-NEXT:    movapd %xmm2, %xmm0
7978; SSE4-NEXT:    movapd %xmm3, %xmm1
7979; SSE4-NEXT:    retq
7980;
7981; AVX1-LABEL: test162:
7982; AVX1:       # %bb.0: # %entry
7983; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7984; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7985; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7986; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7987; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7988; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7989; AVX1-NEXT:    retq
7990;
7991; AVX2-LABEL: test162:
7992; AVX2:       # %bb.0: # %entry
7993; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7994; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7995; AVX2-NEXT:    retq
7996;
7997; AVX512F-LABEL: test162:
7998; AVX512F:       # %bb.0: # %entry
7999; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8000; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8001; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8002; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8003; AVX512F-NEXT:    retq
8004;
8005; AVX512BW-LABEL: test162:
8006; AVX512BW:       # %bb.0: # %entry
8007; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8008; AVX512BW-NEXT:    retq
8009entry:
8010  %cmp = icmp sle <4 x i64> %a, %b
8011  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8012  ret <4 x i64> %sel
8013}
8014
8015define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
8016; SSE2-LABEL: test163:
8017; SSE2:       # %bb.0: # %entry
8018; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8019; SSE2-NEXT:    movdqa %xmm2, %xmm5
8020; SSE2-NEXT:    pxor %xmm4, %xmm5
8021; SSE2-NEXT:    movdqa %xmm0, %xmm6
8022; SSE2-NEXT:    pxor %xmm4, %xmm6
8023; SSE2-NEXT:    movdqa %xmm6, %xmm7
8024; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8025; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8026; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8027; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8028; SSE2-NEXT:    pand %xmm8, %xmm5
8029; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8030; SSE2-NEXT:    por %xmm5, %xmm6
8031; SSE2-NEXT:    pand %xmm6, %xmm0
8032; SSE2-NEXT:    pandn %xmm2, %xmm6
8033; SSE2-NEXT:    por %xmm6, %xmm0
8034; SSE2-NEXT:    movdqa %xmm3, %xmm2
8035; SSE2-NEXT:    pxor %xmm4, %xmm2
8036; SSE2-NEXT:    pxor %xmm1, %xmm4
8037; SSE2-NEXT:    movdqa %xmm4, %xmm5
8038; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8039; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8040; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8041; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8042; SSE2-NEXT:    pand %xmm6, %xmm2
8043; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8044; SSE2-NEXT:    por %xmm2, %xmm4
8045; SSE2-NEXT:    pand %xmm4, %xmm1
8046; SSE2-NEXT:    pandn %xmm3, %xmm4
8047; SSE2-NEXT:    por %xmm4, %xmm1
8048; SSE2-NEXT:    retq
8049;
8050; SSE4-LABEL: test163:
8051; SSE4:       # %bb.0: # %entry
8052; SSE4-NEXT:    movdqa %xmm0, %xmm4
8053; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8054; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8055; SSE4-NEXT:    movdqa %xmm1, %xmm0
8056; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8057; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8058; SSE4-NEXT:    movapd %xmm2, %xmm0
8059; SSE4-NEXT:    movapd %xmm3, %xmm1
8060; SSE4-NEXT:    retq
8061;
8062; AVX1-LABEL: test163:
8063; AVX1:       # %bb.0: # %entry
8064; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8065; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8066; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8067; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8068; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8069; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8070; AVX1-NEXT:    retq
8071;
8072; AVX2-LABEL: test163:
8073; AVX2:       # %bb.0: # %entry
8074; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8075; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8076; AVX2-NEXT:    retq
8077;
8078; AVX512F-LABEL: test163:
8079; AVX512F:       # %bb.0: # %entry
8080; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8081; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8082; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8083; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8084; AVX512F-NEXT:    retq
8085;
8086; AVX512BW-LABEL: test163:
8087; AVX512BW:       # %bb.0: # %entry
8088; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8089; AVX512BW-NEXT:    retq
8090entry:
8091  %cmp = icmp sgt <4 x i64> %a, %b
8092  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8093  ret <4 x i64> %sel
8094}
8095
8096define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
8097; SSE2-LABEL: test164:
8098; SSE2:       # %bb.0: # %entry
8099; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8100; SSE2-NEXT:    movdqa %xmm2, %xmm5
8101; SSE2-NEXT:    pxor %xmm4, %xmm5
8102; SSE2-NEXT:    movdqa %xmm0, %xmm6
8103; SSE2-NEXT:    pxor %xmm4, %xmm6
8104; SSE2-NEXT:    movdqa %xmm6, %xmm7
8105; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8106; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8107; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8108; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8109; SSE2-NEXT:    pand %xmm8, %xmm5
8110; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8111; SSE2-NEXT:    por %xmm5, %xmm6
8112; SSE2-NEXT:    pand %xmm6, %xmm0
8113; SSE2-NEXT:    pandn %xmm2, %xmm6
8114; SSE2-NEXT:    por %xmm6, %xmm0
8115; SSE2-NEXT:    movdqa %xmm3, %xmm2
8116; SSE2-NEXT:    pxor %xmm4, %xmm2
8117; SSE2-NEXT:    pxor %xmm1, %xmm4
8118; SSE2-NEXT:    movdqa %xmm4, %xmm5
8119; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8120; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8121; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8122; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8123; SSE2-NEXT:    pand %xmm6, %xmm2
8124; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8125; SSE2-NEXT:    por %xmm2, %xmm4
8126; SSE2-NEXT:    pand %xmm4, %xmm1
8127; SSE2-NEXT:    pandn %xmm3, %xmm4
8128; SSE2-NEXT:    por %xmm4, %xmm1
8129; SSE2-NEXT:    retq
8130;
8131; SSE4-LABEL: test164:
8132; SSE4:       # %bb.0: # %entry
8133; SSE4-NEXT:    movdqa %xmm0, %xmm4
8134; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8135; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8136; SSE4-NEXT:    movdqa %xmm1, %xmm0
8137; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8138; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8139; SSE4-NEXT:    movapd %xmm2, %xmm0
8140; SSE4-NEXT:    movapd %xmm3, %xmm1
8141; SSE4-NEXT:    retq
8142;
8143; AVX1-LABEL: test164:
8144; AVX1:       # %bb.0: # %entry
8145; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8146; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8147; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8148; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8149; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8150; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8151; AVX1-NEXT:    retq
8152;
8153; AVX2-LABEL: test164:
8154; AVX2:       # %bb.0: # %entry
8155; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8156; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8157; AVX2-NEXT:    retq
8158;
8159; AVX512F-LABEL: test164:
8160; AVX512F:       # %bb.0: # %entry
8161; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8162; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8163; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8164; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8165; AVX512F-NEXT:    retq
8166;
8167; AVX512BW-LABEL: test164:
8168; AVX512BW:       # %bb.0: # %entry
8169; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8170; AVX512BW-NEXT:    retq
8171entry:
8172  %cmp = icmp sge <4 x i64> %a, %b
8173  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8174  ret <4 x i64> %sel
8175}
8176
8177define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
8178; SSE2-LABEL: test165:
8179; SSE2:       # %bb.0: # %entry
8180; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8181; SSE2-NEXT:    movdqa %xmm0, %xmm5
8182; SSE2-NEXT:    pxor %xmm4, %xmm5
8183; SSE2-NEXT:    movdqa %xmm2, %xmm6
8184; SSE2-NEXT:    pxor %xmm4, %xmm6
8185; SSE2-NEXT:    movdqa %xmm6, %xmm7
8186; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8187; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8188; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8189; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8190; SSE2-NEXT:    pand %xmm8, %xmm5
8191; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8192; SSE2-NEXT:    por %xmm5, %xmm6
8193; SSE2-NEXT:    pand %xmm6, %xmm0
8194; SSE2-NEXT:    pandn %xmm2, %xmm6
8195; SSE2-NEXT:    por %xmm6, %xmm0
8196; SSE2-NEXT:    movdqa %xmm1, %xmm2
8197; SSE2-NEXT:    pxor %xmm4, %xmm2
8198; SSE2-NEXT:    pxor %xmm3, %xmm4
8199; SSE2-NEXT:    movdqa %xmm4, %xmm5
8200; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8201; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8202; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8203; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8204; SSE2-NEXT:    pand %xmm6, %xmm2
8205; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8206; SSE2-NEXT:    por %xmm2, %xmm4
8207; SSE2-NEXT:    pand %xmm4, %xmm1
8208; SSE2-NEXT:    pandn %xmm3, %xmm4
8209; SSE2-NEXT:    por %xmm4, %xmm1
8210; SSE2-NEXT:    retq
8211;
8212; SSE4-LABEL: test165:
8213; SSE4:       # %bb.0: # %entry
8214; SSE4-NEXT:    movdqa %xmm0, %xmm4
8215; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8216; SSE4-NEXT:    movdqa %xmm0, %xmm6
8217; SSE4-NEXT:    pxor %xmm5, %xmm6
8218; SSE4-NEXT:    movdqa %xmm2, %xmm0
8219; SSE4-NEXT:    pxor %xmm5, %xmm0
8220; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8221; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8222; SSE4-NEXT:    movdqa %xmm1, %xmm0
8223; SSE4-NEXT:    pxor %xmm5, %xmm0
8224; SSE4-NEXT:    pxor %xmm3, %xmm5
8225; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8226; SSE4-NEXT:    movdqa %xmm5, %xmm0
8227; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8228; SSE4-NEXT:    movapd %xmm2, %xmm0
8229; SSE4-NEXT:    movapd %xmm3, %xmm1
8230; SSE4-NEXT:    retq
8231;
8232; AVX1-LABEL: test165:
8233; AVX1:       # %bb.0: # %entry
8234; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8235; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8236; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8237; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8238; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8239; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8240; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8241; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8242; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8243; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8244; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8245; AVX1-NEXT:    retq
8246;
8247; AVX2-LABEL: test165:
8248; AVX2:       # %bb.0: # %entry
8249; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8250; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8251; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8252; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8253; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8254; AVX2-NEXT:    retq
8255;
8256; AVX512F-LABEL: test165:
8257; AVX512F:       # %bb.0: # %entry
8258; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8259; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8260; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8261; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8262; AVX512F-NEXT:    retq
8263;
8264; AVX512BW-LABEL: test165:
8265; AVX512BW:       # %bb.0: # %entry
8266; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8267; AVX512BW-NEXT:    retq
8268entry:
8269  %cmp = icmp ult <4 x i64> %a, %b
8270  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8271  ret <4 x i64> %sel
8272}
8273
8274define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
8275; SSE2-LABEL: test166:
8276; SSE2:       # %bb.0: # %entry
8277; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8278; SSE2-NEXT:    movdqa %xmm0, %xmm5
8279; SSE2-NEXT:    pxor %xmm4, %xmm5
8280; SSE2-NEXT:    movdqa %xmm2, %xmm6
8281; SSE2-NEXT:    pxor %xmm4, %xmm6
8282; SSE2-NEXT:    movdqa %xmm6, %xmm7
8283; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8284; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8285; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8286; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8287; SSE2-NEXT:    pand %xmm8, %xmm5
8288; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8289; SSE2-NEXT:    por %xmm5, %xmm6
8290; SSE2-NEXT:    pand %xmm6, %xmm0
8291; SSE2-NEXT:    pandn %xmm2, %xmm6
8292; SSE2-NEXT:    por %xmm6, %xmm0
8293; SSE2-NEXT:    movdqa %xmm1, %xmm2
8294; SSE2-NEXT:    pxor %xmm4, %xmm2
8295; SSE2-NEXT:    pxor %xmm3, %xmm4
8296; SSE2-NEXT:    movdqa %xmm4, %xmm5
8297; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8298; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8299; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8300; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8301; SSE2-NEXT:    pand %xmm6, %xmm2
8302; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8303; SSE2-NEXT:    por %xmm2, %xmm4
8304; SSE2-NEXT:    pand %xmm4, %xmm1
8305; SSE2-NEXT:    pandn %xmm3, %xmm4
8306; SSE2-NEXT:    por %xmm4, %xmm1
8307; SSE2-NEXT:    retq
8308;
8309; SSE4-LABEL: test166:
8310; SSE4:       # %bb.0: # %entry
8311; SSE4-NEXT:    movdqa %xmm0, %xmm4
8312; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8313; SSE4-NEXT:    movdqa %xmm0, %xmm6
8314; SSE4-NEXT:    pxor %xmm5, %xmm6
8315; SSE4-NEXT:    movdqa %xmm2, %xmm0
8316; SSE4-NEXT:    pxor %xmm5, %xmm0
8317; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8318; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8319; SSE4-NEXT:    movdqa %xmm1, %xmm0
8320; SSE4-NEXT:    pxor %xmm5, %xmm0
8321; SSE4-NEXT:    pxor %xmm3, %xmm5
8322; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8323; SSE4-NEXT:    movdqa %xmm5, %xmm0
8324; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8325; SSE4-NEXT:    movapd %xmm2, %xmm0
8326; SSE4-NEXT:    movapd %xmm3, %xmm1
8327; SSE4-NEXT:    retq
8328;
8329; AVX1-LABEL: test166:
8330; AVX1:       # %bb.0: # %entry
8331; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8332; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8333; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8334; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8335; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8336; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8337; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8338; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8339; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8340; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8341; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8342; AVX1-NEXT:    retq
8343;
8344; AVX2-LABEL: test166:
8345; AVX2:       # %bb.0: # %entry
8346; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8347; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8348; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8349; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8350; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8351; AVX2-NEXT:    retq
8352;
8353; AVX512F-LABEL: test166:
8354; AVX512F:       # %bb.0: # %entry
8355; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8356; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8357; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8358; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8359; AVX512F-NEXT:    retq
8360;
8361; AVX512BW-LABEL: test166:
8362; AVX512BW:       # %bb.0: # %entry
8363; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8364; AVX512BW-NEXT:    retq
8365entry:
8366  %cmp = icmp ule <4 x i64> %a, %b
8367  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8368  ret <4 x i64> %sel
8369}
8370
8371define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
8372; SSE2-LABEL: test167:
8373; SSE2:       # %bb.0: # %entry
8374; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8375; SSE2-NEXT:    movdqa %xmm2, %xmm5
8376; SSE2-NEXT:    pxor %xmm4, %xmm5
8377; SSE2-NEXT:    movdqa %xmm0, %xmm6
8378; SSE2-NEXT:    pxor %xmm4, %xmm6
8379; SSE2-NEXT:    movdqa %xmm6, %xmm7
8380; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8381; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8382; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8383; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8384; SSE2-NEXT:    pand %xmm8, %xmm5
8385; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8386; SSE2-NEXT:    por %xmm5, %xmm6
8387; SSE2-NEXT:    pand %xmm6, %xmm0
8388; SSE2-NEXT:    pandn %xmm2, %xmm6
8389; SSE2-NEXT:    por %xmm6, %xmm0
8390; SSE2-NEXT:    movdqa %xmm3, %xmm2
8391; SSE2-NEXT:    pxor %xmm4, %xmm2
8392; SSE2-NEXT:    pxor %xmm1, %xmm4
8393; SSE2-NEXT:    movdqa %xmm4, %xmm5
8394; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8395; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8396; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8397; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8398; SSE2-NEXT:    pand %xmm6, %xmm2
8399; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8400; SSE2-NEXT:    por %xmm2, %xmm4
8401; SSE2-NEXT:    pand %xmm4, %xmm1
8402; SSE2-NEXT:    pandn %xmm3, %xmm4
8403; SSE2-NEXT:    por %xmm4, %xmm1
8404; SSE2-NEXT:    retq
8405;
8406; SSE4-LABEL: test167:
8407; SSE4:       # %bb.0: # %entry
8408; SSE4-NEXT:    movdqa %xmm0, %xmm4
8409; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8410; SSE4-NEXT:    movdqa %xmm2, %xmm6
8411; SSE4-NEXT:    pxor %xmm5, %xmm6
8412; SSE4-NEXT:    pxor %xmm5, %xmm0
8413; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8414; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8415; SSE4-NEXT:    movdqa %xmm3, %xmm0
8416; SSE4-NEXT:    pxor %xmm5, %xmm0
8417; SSE4-NEXT:    pxor %xmm1, %xmm5
8418; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8419; SSE4-NEXT:    movdqa %xmm5, %xmm0
8420; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8421; SSE4-NEXT:    movapd %xmm2, %xmm0
8422; SSE4-NEXT:    movapd %xmm3, %xmm1
8423; SSE4-NEXT:    retq
8424;
8425; AVX1-LABEL: test167:
8426; AVX1:       # %bb.0: # %entry
8427; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8428; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8429; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8430; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8431; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8432; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8433; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8434; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8435; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8436; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8437; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8438; AVX1-NEXT:    retq
8439;
8440; AVX2-LABEL: test167:
8441; AVX2:       # %bb.0: # %entry
8442; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8443; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8444; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8445; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8446; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8447; AVX2-NEXT:    retq
8448;
8449; AVX512F-LABEL: test167:
8450; AVX512F:       # %bb.0: # %entry
8451; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8452; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8453; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8454; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8455; AVX512F-NEXT:    retq
8456;
8457; AVX512BW-LABEL: test167:
8458; AVX512BW:       # %bb.0: # %entry
8459; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8460; AVX512BW-NEXT:    retq
8461entry:
8462  %cmp = icmp ugt <4 x i64> %a, %b
8463  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8464  ret <4 x i64> %sel
8465}
8466
8467define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
8468; SSE2-LABEL: test168:
8469; SSE2:       # %bb.0: # %entry
8470; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8471; SSE2-NEXT:    movdqa %xmm2, %xmm5
8472; SSE2-NEXT:    pxor %xmm4, %xmm5
8473; SSE2-NEXT:    movdqa %xmm0, %xmm6
8474; SSE2-NEXT:    pxor %xmm4, %xmm6
8475; SSE2-NEXT:    movdqa %xmm6, %xmm7
8476; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8477; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8478; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8479; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8480; SSE2-NEXT:    pand %xmm8, %xmm5
8481; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8482; SSE2-NEXT:    por %xmm5, %xmm6
8483; SSE2-NEXT:    pand %xmm6, %xmm0
8484; SSE2-NEXT:    pandn %xmm2, %xmm6
8485; SSE2-NEXT:    por %xmm6, %xmm0
8486; SSE2-NEXT:    movdqa %xmm3, %xmm2
8487; SSE2-NEXT:    pxor %xmm4, %xmm2
8488; SSE2-NEXT:    pxor %xmm1, %xmm4
8489; SSE2-NEXT:    movdqa %xmm4, %xmm5
8490; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8491; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8492; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8493; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8494; SSE2-NEXT:    pand %xmm6, %xmm2
8495; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8496; SSE2-NEXT:    por %xmm2, %xmm4
8497; SSE2-NEXT:    pand %xmm4, %xmm1
8498; SSE2-NEXT:    pandn %xmm3, %xmm4
8499; SSE2-NEXT:    por %xmm4, %xmm1
8500; SSE2-NEXT:    retq
8501;
8502; SSE4-LABEL: test168:
8503; SSE4:       # %bb.0: # %entry
8504; SSE4-NEXT:    movdqa %xmm0, %xmm4
8505; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8506; SSE4-NEXT:    movdqa %xmm2, %xmm6
8507; SSE4-NEXT:    pxor %xmm5, %xmm6
8508; SSE4-NEXT:    pxor %xmm5, %xmm0
8509; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8510; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8511; SSE4-NEXT:    movdqa %xmm3, %xmm0
8512; SSE4-NEXT:    pxor %xmm5, %xmm0
8513; SSE4-NEXT:    pxor %xmm1, %xmm5
8514; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8515; SSE4-NEXT:    movdqa %xmm5, %xmm0
8516; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8517; SSE4-NEXT:    movapd %xmm2, %xmm0
8518; SSE4-NEXT:    movapd %xmm3, %xmm1
8519; SSE4-NEXT:    retq
8520;
8521; AVX1-LABEL: test168:
8522; AVX1:       # %bb.0: # %entry
8523; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8524; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8525; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8526; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8527; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8528; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8529; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8530; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8531; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8532; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8533; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8534; AVX1-NEXT:    retq
8535;
8536; AVX2-LABEL: test168:
8537; AVX2:       # %bb.0: # %entry
8538; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8539; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8540; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8541; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8542; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8543; AVX2-NEXT:    retq
8544;
8545; AVX512F-LABEL: test168:
8546; AVX512F:       # %bb.0: # %entry
8547; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8548; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8549; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8550; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8551; AVX512F-NEXT:    retq
8552;
8553; AVX512BW-LABEL: test168:
8554; AVX512BW:       # %bb.0: # %entry
8555; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8556; AVX512BW-NEXT:    retq
8557entry:
8558  %cmp = icmp uge <4 x i64> %a, %b
8559  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8560  ret <4 x i64> %sel
8561}
8562
8563define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
8564; SSE2-LABEL: test169:
8565; SSE2:       # %bb.0: # %entry
8566; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8567; SSE2-NEXT:    movdqa %xmm2, %xmm5
8568; SSE2-NEXT:    pxor %xmm4, %xmm5
8569; SSE2-NEXT:    movdqa %xmm0, %xmm6
8570; SSE2-NEXT:    pxor %xmm4, %xmm6
8571; SSE2-NEXT:    movdqa %xmm6, %xmm7
8572; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8573; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8574; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8575; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8576; SSE2-NEXT:    pand %xmm8, %xmm5
8577; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8578; SSE2-NEXT:    por %xmm5, %xmm6
8579; SSE2-NEXT:    pand %xmm6, %xmm0
8580; SSE2-NEXT:    pandn %xmm2, %xmm6
8581; SSE2-NEXT:    por %xmm6, %xmm0
8582; SSE2-NEXT:    movdqa %xmm3, %xmm2
8583; SSE2-NEXT:    pxor %xmm4, %xmm2
8584; SSE2-NEXT:    pxor %xmm1, %xmm4
8585; SSE2-NEXT:    movdqa %xmm4, %xmm5
8586; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8587; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8588; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8589; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8590; SSE2-NEXT:    pand %xmm6, %xmm2
8591; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8592; SSE2-NEXT:    por %xmm2, %xmm4
8593; SSE2-NEXT:    pand %xmm4, %xmm1
8594; SSE2-NEXT:    pandn %xmm3, %xmm4
8595; SSE2-NEXT:    por %xmm4, %xmm1
8596; SSE2-NEXT:    retq
8597;
8598; SSE4-LABEL: test169:
8599; SSE4:       # %bb.0: # %entry
8600; SSE4-NEXT:    movdqa %xmm0, %xmm4
8601; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8602; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8603; SSE4-NEXT:    movdqa %xmm1, %xmm0
8604; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8605; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8606; SSE4-NEXT:    movapd %xmm2, %xmm0
8607; SSE4-NEXT:    movapd %xmm3, %xmm1
8608; SSE4-NEXT:    retq
8609;
8610; AVX1-LABEL: test169:
8611; AVX1:       # %bb.0: # %entry
8612; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8613; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8614; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8615; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8616; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8617; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8618; AVX1-NEXT:    retq
8619;
8620; AVX2-LABEL: test169:
8621; AVX2:       # %bb.0: # %entry
8622; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8623; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8624; AVX2-NEXT:    retq
8625;
8626; AVX512F-LABEL: test169:
8627; AVX512F:       # %bb.0: # %entry
8628; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8629; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8630; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8631; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8632; AVX512F-NEXT:    retq
8633;
8634; AVX512BW-LABEL: test169:
8635; AVX512BW:       # %bb.0: # %entry
8636; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8637; AVX512BW-NEXT:    retq
8638entry:
8639  %cmp = icmp slt <4 x i64> %a, %b
8640  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8641  ret <4 x i64> %sel
8642}
8643
8644define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
8645; SSE2-LABEL: test170:
8646; SSE2:       # %bb.0: # %entry
8647; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8648; SSE2-NEXT:    movdqa %xmm2, %xmm5
8649; SSE2-NEXT:    pxor %xmm4, %xmm5
8650; SSE2-NEXT:    movdqa %xmm0, %xmm6
8651; SSE2-NEXT:    pxor %xmm4, %xmm6
8652; SSE2-NEXT:    movdqa %xmm6, %xmm7
8653; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8654; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8655; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8656; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8657; SSE2-NEXT:    pand %xmm8, %xmm5
8658; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8659; SSE2-NEXT:    por %xmm5, %xmm6
8660; SSE2-NEXT:    pand %xmm6, %xmm0
8661; SSE2-NEXT:    pandn %xmm2, %xmm6
8662; SSE2-NEXT:    por %xmm6, %xmm0
8663; SSE2-NEXT:    movdqa %xmm3, %xmm2
8664; SSE2-NEXT:    pxor %xmm4, %xmm2
8665; SSE2-NEXT:    pxor %xmm1, %xmm4
8666; SSE2-NEXT:    movdqa %xmm4, %xmm5
8667; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8668; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8669; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8670; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8671; SSE2-NEXT:    pand %xmm6, %xmm2
8672; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8673; SSE2-NEXT:    por %xmm2, %xmm4
8674; SSE2-NEXT:    pand %xmm4, %xmm1
8675; SSE2-NEXT:    pandn %xmm3, %xmm4
8676; SSE2-NEXT:    por %xmm4, %xmm1
8677; SSE2-NEXT:    retq
8678;
8679; SSE4-LABEL: test170:
8680; SSE4:       # %bb.0: # %entry
8681; SSE4-NEXT:    movdqa %xmm0, %xmm4
8682; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8683; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8684; SSE4-NEXT:    movdqa %xmm1, %xmm0
8685; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8686; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8687; SSE4-NEXT:    movapd %xmm2, %xmm0
8688; SSE4-NEXT:    movapd %xmm3, %xmm1
8689; SSE4-NEXT:    retq
8690;
8691; AVX1-LABEL: test170:
8692; AVX1:       # %bb.0: # %entry
8693; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8694; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8695; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8696; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8697; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8698; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8699; AVX1-NEXT:    retq
8700;
8701; AVX2-LABEL: test170:
8702; AVX2:       # %bb.0: # %entry
8703; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8704; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8705; AVX2-NEXT:    retq
8706;
8707; AVX512F-LABEL: test170:
8708; AVX512F:       # %bb.0: # %entry
8709; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8710; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8711; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
8712; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8713; AVX512F-NEXT:    retq
8714;
8715; AVX512BW-LABEL: test170:
8716; AVX512BW:       # %bb.0: # %entry
8717; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8718; AVX512BW-NEXT:    retq
8719entry:
8720  %cmp = icmp sle <4 x i64> %a, %b
8721  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8722  ret <4 x i64> %sel
8723}
8724
8725define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
8726; SSE2-LABEL: test171:
8727; SSE2:       # %bb.0: # %entry
8728; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8729; SSE2-NEXT:    movdqa %xmm0, %xmm5
8730; SSE2-NEXT:    pxor %xmm4, %xmm5
8731; SSE2-NEXT:    movdqa %xmm2, %xmm6
8732; SSE2-NEXT:    pxor %xmm4, %xmm6
8733; SSE2-NEXT:    movdqa %xmm6, %xmm7
8734; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8735; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8736; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8737; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8738; SSE2-NEXT:    pand %xmm8, %xmm5
8739; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8740; SSE2-NEXT:    por %xmm5, %xmm6
8741; SSE2-NEXT:    pand %xmm6, %xmm0
8742; SSE2-NEXT:    pandn %xmm2, %xmm6
8743; SSE2-NEXT:    por %xmm6, %xmm0
8744; SSE2-NEXT:    movdqa %xmm1, %xmm2
8745; SSE2-NEXT:    pxor %xmm4, %xmm2
8746; SSE2-NEXT:    pxor %xmm3, %xmm4
8747; SSE2-NEXT:    movdqa %xmm4, %xmm5
8748; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8749; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8750; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8751; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8752; SSE2-NEXT:    pand %xmm6, %xmm2
8753; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8754; SSE2-NEXT:    por %xmm2, %xmm4
8755; SSE2-NEXT:    pand %xmm4, %xmm1
8756; SSE2-NEXT:    pandn %xmm3, %xmm4
8757; SSE2-NEXT:    por %xmm4, %xmm1
8758; SSE2-NEXT:    retq
8759;
8760; SSE4-LABEL: test171:
8761; SSE4:       # %bb.0: # %entry
8762; SSE4-NEXT:    movdqa %xmm0, %xmm4
8763; SSE4-NEXT:    movdqa %xmm2, %xmm0
8764; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8765; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8766; SSE4-NEXT:    movdqa %xmm3, %xmm0
8767; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8768; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8769; SSE4-NEXT:    movapd %xmm2, %xmm0
8770; SSE4-NEXT:    movapd %xmm3, %xmm1
8771; SSE4-NEXT:    retq
8772;
8773; AVX1-LABEL: test171:
8774; AVX1:       # %bb.0: # %entry
8775; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8776; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8777; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8778; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8779; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8780; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8781; AVX1-NEXT:    retq
8782;
8783; AVX2-LABEL: test171:
8784; AVX2:       # %bb.0: # %entry
8785; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8786; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8787; AVX2-NEXT:    retq
8788;
8789; AVX512F-LABEL: test171:
8790; AVX512F:       # %bb.0: # %entry
8791; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8792; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8793; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8794; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8795; AVX512F-NEXT:    retq
8796;
8797; AVX512BW-LABEL: test171:
8798; AVX512BW:       # %bb.0: # %entry
8799; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8800; AVX512BW-NEXT:    retq
8801entry:
8802  %cmp = icmp sgt <4 x i64> %a, %b
8803  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8804  ret <4 x i64> %sel
8805}
8806
8807define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
8808; SSE2-LABEL: test172:
8809; SSE2:       # %bb.0: # %entry
8810; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648]
8811; SSE2-NEXT:    movdqa %xmm0, %xmm5
8812; SSE2-NEXT:    pxor %xmm4, %xmm5
8813; SSE2-NEXT:    movdqa %xmm2, %xmm6
8814; SSE2-NEXT:    pxor %xmm4, %xmm6
8815; SSE2-NEXT:    movdqa %xmm6, %xmm7
8816; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8817; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8818; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8819; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8820; SSE2-NEXT:    pand %xmm8, %xmm5
8821; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8822; SSE2-NEXT:    por %xmm5, %xmm6
8823; SSE2-NEXT:    pand %xmm6, %xmm0
8824; SSE2-NEXT:    pandn %xmm2, %xmm6
8825; SSE2-NEXT:    por %xmm6, %xmm0
8826; SSE2-NEXT:    movdqa %xmm1, %xmm2
8827; SSE2-NEXT:    pxor %xmm4, %xmm2
8828; SSE2-NEXT:    pxor %xmm3, %xmm4
8829; SSE2-NEXT:    movdqa %xmm4, %xmm5
8830; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8831; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8832; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8833; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8834; SSE2-NEXT:    pand %xmm6, %xmm2
8835; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8836; SSE2-NEXT:    por %xmm2, %xmm4
8837; SSE2-NEXT:    pand %xmm4, %xmm1
8838; SSE2-NEXT:    pandn %xmm3, %xmm4
8839; SSE2-NEXT:    por %xmm4, %xmm1
8840; SSE2-NEXT:    retq
8841;
8842; SSE4-LABEL: test172:
8843; SSE4:       # %bb.0: # %entry
8844; SSE4-NEXT:    movdqa %xmm0, %xmm4
8845; SSE4-NEXT:    movdqa %xmm2, %xmm0
8846; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8847; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8848; SSE4-NEXT:    movdqa %xmm3, %xmm0
8849; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8850; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8851; SSE4-NEXT:    movapd %xmm2, %xmm0
8852; SSE4-NEXT:    movapd %xmm3, %xmm1
8853; SSE4-NEXT:    retq
8854;
8855; AVX1-LABEL: test172:
8856; AVX1:       # %bb.0: # %entry
8857; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8858; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8859; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8860; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8861; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8862; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8863; AVX1-NEXT:    retq
8864;
8865; AVX2-LABEL: test172:
8866; AVX2:       # %bb.0: # %entry
8867; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8868; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8869; AVX2-NEXT:    retq
8870;
8871; AVX512F-LABEL: test172:
8872; AVX512F:       # %bb.0: # %entry
8873; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8874; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8875; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8876; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8877; AVX512F-NEXT:    retq
8878;
8879; AVX512BW-LABEL: test172:
8880; AVX512BW:       # %bb.0: # %entry
8881; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8882; AVX512BW-NEXT:    retq
8883entry:
8884  %cmp = icmp sge <4 x i64> %a, %b
8885  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8886  ret <4 x i64> %sel
8887}
8888
8889define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
8890; SSE2-LABEL: test173:
8891; SSE2:       # %bb.0: # %entry
8892; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8893; SSE2-NEXT:    movdqa %xmm2, %xmm5
8894; SSE2-NEXT:    pxor %xmm4, %xmm5
8895; SSE2-NEXT:    movdqa %xmm0, %xmm6
8896; SSE2-NEXT:    pxor %xmm4, %xmm6
8897; SSE2-NEXT:    movdqa %xmm6, %xmm7
8898; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8899; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8900; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8901; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8902; SSE2-NEXT:    pand %xmm8, %xmm5
8903; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8904; SSE2-NEXT:    por %xmm5, %xmm6
8905; SSE2-NEXT:    pand %xmm6, %xmm0
8906; SSE2-NEXT:    pandn %xmm2, %xmm6
8907; SSE2-NEXT:    por %xmm6, %xmm0
8908; SSE2-NEXT:    movdqa %xmm3, %xmm2
8909; SSE2-NEXT:    pxor %xmm4, %xmm2
8910; SSE2-NEXT:    pxor %xmm1, %xmm4
8911; SSE2-NEXT:    movdqa %xmm4, %xmm5
8912; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8913; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8914; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8915; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8916; SSE2-NEXT:    pand %xmm6, %xmm2
8917; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8918; SSE2-NEXT:    por %xmm2, %xmm4
8919; SSE2-NEXT:    pand %xmm4, %xmm1
8920; SSE2-NEXT:    pandn %xmm3, %xmm4
8921; SSE2-NEXT:    por %xmm4, %xmm1
8922; SSE2-NEXT:    retq
8923;
8924; SSE4-LABEL: test173:
8925; SSE4:       # %bb.0: # %entry
8926; SSE4-NEXT:    movdqa %xmm0, %xmm4
8927; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8928; SSE4-NEXT:    movdqa %xmm2, %xmm6
8929; SSE4-NEXT:    pxor %xmm5, %xmm6
8930; SSE4-NEXT:    pxor %xmm5, %xmm0
8931; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8932; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8933; SSE4-NEXT:    movdqa %xmm3, %xmm0
8934; SSE4-NEXT:    pxor %xmm5, %xmm0
8935; SSE4-NEXT:    pxor %xmm1, %xmm5
8936; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8937; SSE4-NEXT:    movdqa %xmm5, %xmm0
8938; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8939; SSE4-NEXT:    movapd %xmm2, %xmm0
8940; SSE4-NEXT:    movapd %xmm3, %xmm1
8941; SSE4-NEXT:    retq
8942;
8943; AVX1-LABEL: test173:
8944; AVX1:       # %bb.0: # %entry
8945; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8946; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8947; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8948; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8949; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8950; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8951; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8952; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8953; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8954; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8955; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8956; AVX1-NEXT:    retq
8957;
8958; AVX2-LABEL: test173:
8959; AVX2:       # %bb.0: # %entry
8960; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8961; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8962; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8963; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8964; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8965; AVX2-NEXT:    retq
8966;
8967; AVX512F-LABEL: test173:
8968; AVX512F:       # %bb.0: # %entry
8969; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
8970; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
8971; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8972; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
8973; AVX512F-NEXT:    retq
8974;
8975; AVX512BW-LABEL: test173:
8976; AVX512BW:       # %bb.0: # %entry
8977; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8978; AVX512BW-NEXT:    retq
8979entry:
8980  %cmp = icmp ult <4 x i64> %a, %b
8981  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8982  ret <4 x i64> %sel
8983}
8984
8985define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
8986; SSE2-LABEL: test174:
8987; SSE2:       # %bb.0: # %entry
8988; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
8989; SSE2-NEXT:    movdqa %xmm2, %xmm5
8990; SSE2-NEXT:    pxor %xmm4, %xmm5
8991; SSE2-NEXT:    movdqa %xmm0, %xmm6
8992; SSE2-NEXT:    pxor %xmm4, %xmm6
8993; SSE2-NEXT:    movdqa %xmm6, %xmm7
8994; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8995; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8996; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8997; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8998; SSE2-NEXT:    pand %xmm8, %xmm5
8999; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9000; SSE2-NEXT:    por %xmm5, %xmm6
9001; SSE2-NEXT:    pand %xmm6, %xmm0
9002; SSE2-NEXT:    pandn %xmm2, %xmm6
9003; SSE2-NEXT:    por %xmm6, %xmm0
9004; SSE2-NEXT:    movdqa %xmm3, %xmm2
9005; SSE2-NEXT:    pxor %xmm4, %xmm2
9006; SSE2-NEXT:    pxor %xmm1, %xmm4
9007; SSE2-NEXT:    movdqa %xmm4, %xmm5
9008; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9009; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9010; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9011; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9012; SSE2-NEXT:    pand %xmm6, %xmm2
9013; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9014; SSE2-NEXT:    por %xmm2, %xmm4
9015; SSE2-NEXT:    pand %xmm4, %xmm1
9016; SSE2-NEXT:    pandn %xmm3, %xmm4
9017; SSE2-NEXT:    por %xmm4, %xmm1
9018; SSE2-NEXT:    retq
9019;
9020; SSE4-LABEL: test174:
9021; SSE4:       # %bb.0: # %entry
9022; SSE4-NEXT:    movdqa %xmm0, %xmm4
9023; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9024; SSE4-NEXT:    movdqa %xmm2, %xmm6
9025; SSE4-NEXT:    pxor %xmm5, %xmm6
9026; SSE4-NEXT:    pxor %xmm5, %xmm0
9027; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9028; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9029; SSE4-NEXT:    movdqa %xmm3, %xmm0
9030; SSE4-NEXT:    pxor %xmm5, %xmm0
9031; SSE4-NEXT:    pxor %xmm1, %xmm5
9032; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9033; SSE4-NEXT:    movdqa %xmm5, %xmm0
9034; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9035; SSE4-NEXT:    movapd %xmm2, %xmm0
9036; SSE4-NEXT:    movapd %xmm3, %xmm1
9037; SSE4-NEXT:    retq
9038;
9039; AVX1-LABEL: test174:
9040; AVX1:       # %bb.0: # %entry
9041; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9042; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9043; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9044; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9045; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9046; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9047; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
9048; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
9049; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9050; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9051; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9052; AVX1-NEXT:    retq
9053;
9054; AVX2-LABEL: test174:
9055; AVX2:       # %bb.0: # %entry
9056; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9057; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9058; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9059; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9060; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9061; AVX2-NEXT:    retq
9062;
9063; AVX512F-LABEL: test174:
9064; AVX512F:       # %bb.0: # %entry
9065; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9066; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9067; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
9068; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9069; AVX512F-NEXT:    retq
9070;
9071; AVX512BW-LABEL: test174:
9072; AVX512BW:       # %bb.0: # %entry
9073; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9074; AVX512BW-NEXT:    retq
9075entry:
9076  %cmp = icmp ule <4 x i64> %a, %b
9077  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9078  ret <4 x i64> %sel
9079}
9080
9081define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
9082; SSE2-LABEL: test175:
9083; SSE2:       # %bb.0: # %entry
9084; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9085; SSE2-NEXT:    movdqa %xmm0, %xmm5
9086; SSE2-NEXT:    pxor %xmm4, %xmm5
9087; SSE2-NEXT:    movdqa %xmm2, %xmm6
9088; SSE2-NEXT:    pxor %xmm4, %xmm6
9089; SSE2-NEXT:    movdqa %xmm6, %xmm7
9090; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9091; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9092; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9093; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9094; SSE2-NEXT:    pand %xmm8, %xmm5
9095; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9096; SSE2-NEXT:    por %xmm5, %xmm6
9097; SSE2-NEXT:    pand %xmm6, %xmm0
9098; SSE2-NEXT:    pandn %xmm2, %xmm6
9099; SSE2-NEXT:    por %xmm6, %xmm0
9100; SSE2-NEXT:    movdqa %xmm1, %xmm2
9101; SSE2-NEXT:    pxor %xmm4, %xmm2
9102; SSE2-NEXT:    pxor %xmm3, %xmm4
9103; SSE2-NEXT:    movdqa %xmm4, %xmm5
9104; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9105; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9106; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9107; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9108; SSE2-NEXT:    pand %xmm6, %xmm2
9109; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9110; SSE2-NEXT:    por %xmm2, %xmm4
9111; SSE2-NEXT:    pand %xmm4, %xmm1
9112; SSE2-NEXT:    pandn %xmm3, %xmm4
9113; SSE2-NEXT:    por %xmm4, %xmm1
9114; SSE2-NEXT:    retq
9115;
9116; SSE4-LABEL: test175:
9117; SSE4:       # %bb.0: # %entry
9118; SSE4-NEXT:    movdqa %xmm0, %xmm4
9119; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9120; SSE4-NEXT:    movdqa %xmm0, %xmm6
9121; SSE4-NEXT:    pxor %xmm5, %xmm6
9122; SSE4-NEXT:    movdqa %xmm2, %xmm0
9123; SSE4-NEXT:    pxor %xmm5, %xmm0
9124; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9125; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9126; SSE4-NEXT:    movdqa %xmm1, %xmm0
9127; SSE4-NEXT:    pxor %xmm5, %xmm0
9128; SSE4-NEXT:    pxor %xmm3, %xmm5
9129; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9130; SSE4-NEXT:    movdqa %xmm5, %xmm0
9131; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9132; SSE4-NEXT:    movapd %xmm2, %xmm0
9133; SSE4-NEXT:    movapd %xmm3, %xmm1
9134; SSE4-NEXT:    retq
9135;
9136; AVX1-LABEL: test175:
9137; AVX1:       # %bb.0: # %entry
9138; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9139; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9140; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9141; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9142; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9143; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9144; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9145; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9146; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9147; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9148; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9149; AVX1-NEXT:    retq
9150;
9151; AVX2-LABEL: test175:
9152; AVX2:       # %bb.0: # %entry
9153; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9154; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9155; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9156; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9157; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9158; AVX2-NEXT:    retq
9159;
9160; AVX512F-LABEL: test175:
9161; AVX512F:       # %bb.0: # %entry
9162; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9163; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9164; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9165; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9166; AVX512F-NEXT:    retq
9167;
9168; AVX512BW-LABEL: test175:
9169; AVX512BW:       # %bb.0: # %entry
9170; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9171; AVX512BW-NEXT:    retq
9172entry:
9173  %cmp = icmp ugt <4 x i64> %a, %b
9174  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9175  ret <4 x i64> %sel
9176}
9177
9178define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
9179; SSE2-LABEL: test176:
9180; SSE2:       # %bb.0: # %entry
9181; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [9223372039002259456,9223372039002259456]
9182; SSE2-NEXT:    movdqa %xmm0, %xmm5
9183; SSE2-NEXT:    pxor %xmm4, %xmm5
9184; SSE2-NEXT:    movdqa %xmm2, %xmm6
9185; SSE2-NEXT:    pxor %xmm4, %xmm6
9186; SSE2-NEXT:    movdqa %xmm6, %xmm7
9187; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9188; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9189; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9190; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9191; SSE2-NEXT:    pand %xmm8, %xmm5
9192; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9193; SSE2-NEXT:    por %xmm5, %xmm6
9194; SSE2-NEXT:    pand %xmm6, %xmm0
9195; SSE2-NEXT:    pandn %xmm2, %xmm6
9196; SSE2-NEXT:    por %xmm6, %xmm0
9197; SSE2-NEXT:    movdqa %xmm1, %xmm2
9198; SSE2-NEXT:    pxor %xmm4, %xmm2
9199; SSE2-NEXT:    pxor %xmm3, %xmm4
9200; SSE2-NEXT:    movdqa %xmm4, %xmm5
9201; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
9202; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
9203; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
9204; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
9205; SSE2-NEXT:    pand %xmm6, %xmm2
9206; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9207; SSE2-NEXT:    por %xmm2, %xmm4
9208; SSE2-NEXT:    pand %xmm4, %xmm1
9209; SSE2-NEXT:    pandn %xmm3, %xmm4
9210; SSE2-NEXT:    por %xmm4, %xmm1
9211; SSE2-NEXT:    retq
9212;
9213; SSE4-LABEL: test176:
9214; SSE4:       # %bb.0: # %entry
9215; SSE4-NEXT:    movdqa %xmm0, %xmm4
9216; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
9217; SSE4-NEXT:    movdqa %xmm0, %xmm6
9218; SSE4-NEXT:    pxor %xmm5, %xmm6
9219; SSE4-NEXT:    movdqa %xmm2, %xmm0
9220; SSE4-NEXT:    pxor %xmm5, %xmm0
9221; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9222; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
9223; SSE4-NEXT:    movdqa %xmm1, %xmm0
9224; SSE4-NEXT:    pxor %xmm5, %xmm0
9225; SSE4-NEXT:    pxor %xmm3, %xmm5
9226; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
9227; SSE4-NEXT:    movdqa %xmm5, %xmm0
9228; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
9229; SSE4-NEXT:    movapd %xmm2, %xmm0
9230; SSE4-NEXT:    movapd %xmm3, %xmm1
9231; SSE4-NEXT:    retq
9232;
9233; AVX1-LABEL: test176:
9234; AVX1:       # %bb.0: # %entry
9235; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9236; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9237; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9238; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9239; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
9240; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9241; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
9242; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
9243; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9244; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9245; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9246; AVX1-NEXT:    retq
9247;
9248; AVX2-LABEL: test176:
9249; AVX2:       # %bb.0: # %entry
9250; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
9251; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9252; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9253; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9254; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9255; AVX2-NEXT:    retq
9256;
9257; AVX512F-LABEL: test176:
9258; AVX512F:       # %bb.0: # %entry
9259; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
9260; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
9261; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
9262; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
9263; AVX512F-NEXT:    retq
9264;
9265; AVX512BW-LABEL: test176:
9266; AVX512BW:       # %bb.0: # %entry
9267; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9268; AVX512BW-NEXT:    retq
9269entry:
9270  %cmp = icmp uge <4 x i64> %a, %b
9271  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9272  ret <4 x i64> %sel
9273}
9274
9275define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
9276; SSE2-LABEL: test177:
9277; SSE2:       # %bb.0: # %entry
9278; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9279; SSE2-NEXT:    movdqa %xmm0, %xmm3
9280; SSE2-NEXT:    pxor %xmm2, %xmm3
9281; SSE2-NEXT:    pxor %xmm1, %xmm2
9282; SSE2-NEXT:    movdqa %xmm2, %xmm4
9283; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9284; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9285; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9286; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9287; SSE2-NEXT:    pand %xmm5, %xmm2
9288; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9289; SSE2-NEXT:    por %xmm2, %xmm3
9290; SSE2-NEXT:    pand %xmm3, %xmm0
9291; SSE2-NEXT:    pandn %xmm1, %xmm3
9292; SSE2-NEXT:    por %xmm3, %xmm0
9293; SSE2-NEXT:    retq
9294;
9295; SSE4-LABEL: test177:
9296; SSE4:       # %bb.0: # %entry
9297; SSE4-NEXT:    movdqa %xmm0, %xmm2
9298; SSE4-NEXT:    movdqa %xmm1, %xmm0
9299; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9300; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9301; SSE4-NEXT:    movapd %xmm1, %xmm0
9302; SSE4-NEXT:    retq
9303;
9304; AVX1-LABEL: test177:
9305; AVX1:       # %bb.0: # %entry
9306; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9307; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9308; AVX1-NEXT:    retq
9309;
9310; AVX2-LABEL: test177:
9311; AVX2:       # %bb.0: # %entry
9312; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9313; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9314; AVX2-NEXT:    retq
9315;
9316; AVX512F-LABEL: test177:
9317; AVX512F:       # %bb.0: # %entry
9318; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9319; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9320; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9321; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9322; AVX512F-NEXT:    retq
9323;
9324; AVX512BW-LABEL: test177:
9325; AVX512BW:       # %bb.0: # %entry
9326; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9327; AVX512BW-NEXT:    retq
9328entry:
9329  %cmp = icmp slt <2 x i64> %a, %b
9330  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9331  ret <2 x i64> %sel
9332}
9333
9334define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
9335; SSE2-LABEL: test178:
9336; SSE2:       # %bb.0: # %entry
9337; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9338; SSE2-NEXT:    movdqa %xmm0, %xmm3
9339; SSE2-NEXT:    pxor %xmm2, %xmm3
9340; SSE2-NEXT:    pxor %xmm1, %xmm2
9341; SSE2-NEXT:    movdqa %xmm2, %xmm4
9342; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9343; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9344; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9345; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9346; SSE2-NEXT:    pand %xmm5, %xmm2
9347; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9348; SSE2-NEXT:    por %xmm2, %xmm3
9349; SSE2-NEXT:    pand %xmm3, %xmm0
9350; SSE2-NEXT:    pandn %xmm1, %xmm3
9351; SSE2-NEXT:    por %xmm3, %xmm0
9352; SSE2-NEXT:    retq
9353;
9354; SSE4-LABEL: test178:
9355; SSE4:       # %bb.0: # %entry
9356; SSE4-NEXT:    movdqa %xmm0, %xmm2
9357; SSE4-NEXT:    movdqa %xmm1, %xmm0
9358; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9359; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9360; SSE4-NEXT:    movapd %xmm1, %xmm0
9361; SSE4-NEXT:    retq
9362;
9363; AVX1-LABEL: test178:
9364; AVX1:       # %bb.0: # %entry
9365; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9366; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9367; AVX1-NEXT:    retq
9368;
9369; AVX2-LABEL: test178:
9370; AVX2:       # %bb.0: # %entry
9371; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9372; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9373; AVX2-NEXT:    retq
9374;
9375; AVX512F-LABEL: test178:
9376; AVX512F:       # %bb.0: # %entry
9377; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9378; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9379; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9380; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9381; AVX512F-NEXT:    retq
9382;
9383; AVX512BW-LABEL: test178:
9384; AVX512BW:       # %bb.0: # %entry
9385; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9386; AVX512BW-NEXT:    retq
9387entry:
9388  %cmp = icmp sle <2 x i64> %a, %b
9389  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9390  ret <2 x i64> %sel
9391}
9392
9393define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
9394; SSE2-LABEL: test179:
9395; SSE2:       # %bb.0: # %entry
9396; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9397; SSE2-NEXT:    movdqa %xmm1, %xmm3
9398; SSE2-NEXT:    pxor %xmm2, %xmm3
9399; SSE2-NEXT:    pxor %xmm0, %xmm2
9400; SSE2-NEXT:    movdqa %xmm2, %xmm4
9401; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9402; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9403; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9404; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9405; SSE2-NEXT:    pand %xmm5, %xmm2
9406; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9407; SSE2-NEXT:    por %xmm2, %xmm3
9408; SSE2-NEXT:    pand %xmm3, %xmm0
9409; SSE2-NEXT:    pandn %xmm1, %xmm3
9410; SSE2-NEXT:    por %xmm3, %xmm0
9411; SSE2-NEXT:    retq
9412;
9413; SSE4-LABEL: test179:
9414; SSE4:       # %bb.0: # %entry
9415; SSE4-NEXT:    movdqa %xmm0, %xmm2
9416; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9417; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9418; SSE4-NEXT:    movapd %xmm1, %xmm0
9419; SSE4-NEXT:    retq
9420;
9421; AVX1-LABEL: test179:
9422; AVX1:       # %bb.0: # %entry
9423; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9424; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9425; AVX1-NEXT:    retq
9426;
9427; AVX2-LABEL: test179:
9428; AVX2:       # %bb.0: # %entry
9429; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9430; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9431; AVX2-NEXT:    retq
9432;
9433; AVX512F-LABEL: test179:
9434; AVX512F:       # %bb.0: # %entry
9435; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9436; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9437; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9438; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9439; AVX512F-NEXT:    retq
9440;
9441; AVX512BW-LABEL: test179:
9442; AVX512BW:       # %bb.0: # %entry
9443; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9444; AVX512BW-NEXT:    retq
9445entry:
9446  %cmp = icmp sgt <2 x i64> %a, %b
9447  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9448  ret <2 x i64> %sel
9449}
9450
9451define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
9452; SSE2-LABEL: test180:
9453; SSE2:       # %bb.0: # %entry
9454; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9455; SSE2-NEXT:    movdqa %xmm1, %xmm3
9456; SSE2-NEXT:    pxor %xmm2, %xmm3
9457; SSE2-NEXT:    pxor %xmm0, %xmm2
9458; SSE2-NEXT:    movdqa %xmm2, %xmm4
9459; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9460; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9461; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9462; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9463; SSE2-NEXT:    pand %xmm5, %xmm2
9464; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9465; SSE2-NEXT:    por %xmm2, %xmm3
9466; SSE2-NEXT:    pand %xmm3, %xmm0
9467; SSE2-NEXT:    pandn %xmm1, %xmm3
9468; SSE2-NEXT:    por %xmm3, %xmm0
9469; SSE2-NEXT:    retq
9470;
9471; SSE4-LABEL: test180:
9472; SSE4:       # %bb.0: # %entry
9473; SSE4-NEXT:    movdqa %xmm0, %xmm2
9474; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9475; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9476; SSE4-NEXT:    movapd %xmm1, %xmm0
9477; SSE4-NEXT:    retq
9478;
9479; AVX1-LABEL: test180:
9480; AVX1:       # %bb.0: # %entry
9481; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9482; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9483; AVX1-NEXT:    retq
9484;
9485; AVX2-LABEL: test180:
9486; AVX2:       # %bb.0: # %entry
9487; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9488; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9489; AVX2-NEXT:    retq
9490;
9491; AVX512F-LABEL: test180:
9492; AVX512F:       # %bb.0: # %entry
9493; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9494; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9495; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9496; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9497; AVX512F-NEXT:    retq
9498;
9499; AVX512BW-LABEL: test180:
9500; AVX512BW:       # %bb.0: # %entry
9501; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9502; AVX512BW-NEXT:    retq
9503entry:
9504  %cmp = icmp sge <2 x i64> %a, %b
9505  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9506  ret <2 x i64> %sel
9507}
9508
9509define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
9510; SSE2-LABEL: test181:
9511; SSE2:       # %bb.0: # %entry
9512; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9513; SSE2-NEXT:    movdqa %xmm0, %xmm3
9514; SSE2-NEXT:    pxor %xmm2, %xmm3
9515; SSE2-NEXT:    pxor %xmm1, %xmm2
9516; SSE2-NEXT:    movdqa %xmm2, %xmm4
9517; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9518; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9519; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9520; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9521; SSE2-NEXT:    pand %xmm5, %xmm2
9522; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9523; SSE2-NEXT:    por %xmm2, %xmm3
9524; SSE2-NEXT:    pand %xmm3, %xmm0
9525; SSE2-NEXT:    pandn %xmm1, %xmm3
9526; SSE2-NEXT:    por %xmm3, %xmm0
9527; SSE2-NEXT:    retq
9528;
9529; SSE4-LABEL: test181:
9530; SSE4:       # %bb.0: # %entry
9531; SSE4-NEXT:    movdqa %xmm0, %xmm2
9532; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9533; SSE4-NEXT:    movdqa %xmm2, %xmm3
9534; SSE4-NEXT:    pxor %xmm0, %xmm3
9535; SSE4-NEXT:    pxor %xmm1, %xmm0
9536; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9537; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9538; SSE4-NEXT:    movapd %xmm1, %xmm0
9539; SSE4-NEXT:    retq
9540;
9541; AVX1-LABEL: test181:
9542; AVX1:       # %bb.0: # %entry
9543; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9544; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9545; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9546; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9547; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9548; AVX1-NEXT:    retq
9549;
9550; AVX2-LABEL: test181:
9551; AVX2:       # %bb.0: # %entry
9552; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9553; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9554; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9555; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9556; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9557; AVX2-NEXT:    retq
9558;
9559; AVX512F-LABEL: test181:
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:    vpminuq %zmm1, %zmm0, %zmm0
9564; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9565; AVX512F-NEXT:    retq
9566;
9567; AVX512BW-LABEL: test181:
9568; AVX512BW:       # %bb.0: # %entry
9569; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9570; AVX512BW-NEXT:    retq
9571entry:
9572  %cmp = icmp ult <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> @test182(<2 x i64> %a, <2 x i64> %b) {
9578; SSE2-LABEL: test182:
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: test182:
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: test182:
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: test182:
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: test182:
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: test182:
9636; AVX512BW:       # %bb.0: # %entry
9637; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9638; AVX512BW-NEXT:    retq
9639entry:
9640  %cmp = icmp ule <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> @test183(<2 x i64> %a, <2 x i64> %b) {
9646; SSE2-LABEL: test183:
9647; SSE2:       # %bb.0: # %entry
9648; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
9649; SSE2-NEXT:    movdqa %xmm1, %xmm3
9650; SSE2-NEXT:    pxor %xmm2, %xmm3
9651; SSE2-NEXT:    pxor %xmm0, %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: test183:
9666; SSE4:       # %bb.0: # %entry
9667; SSE4-NEXT:    movdqa %xmm0, %xmm2
9668; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9669; SSE4-NEXT:    movdqa %xmm1, %xmm3
9670; SSE4-NEXT:    pxor %xmm0, %xmm3
9671; SSE4-NEXT:    pxor %xmm2, %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: test183:
9678; AVX1:       # %bb.0: # %entry
9679; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9680; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9681; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9682; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9683; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9684; AVX1-NEXT:    retq
9685;
9686; AVX2-LABEL: test183:
9687; AVX2:       # %bb.0: # %entry
9688; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9689; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9690; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9691; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9692; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9693; AVX2-NEXT:    retq
9694;
9695; AVX512F-LABEL: test183:
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:    vpmaxuq %zmm1, %zmm0, %zmm0
9700; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9701; AVX512F-NEXT:    retq
9702;
9703; AVX512BW-LABEL: test183:
9704; AVX512BW:       # %bb.0: # %entry
9705; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9706; AVX512BW-NEXT:    retq
9707entry:
9708  %cmp = icmp ugt <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> @test184(<2 x i64> %a, <2 x i64> %b) {
9714; SSE2-LABEL: test184:
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: test184:
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: test184:
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: test184:
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: test184:
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: test184:
9772; AVX512BW:       # %bb.0: # %entry
9773; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9774; AVX512BW-NEXT:    retq
9775entry:
9776  %cmp = icmp uge <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> @test185(<2 x i64> %a, <2 x i64> %b) {
9782; SSE2-LABEL: test185:
9783; SSE2:       # %bb.0: # %entry
9784; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
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: test185:
9802; SSE4:       # %bb.0: # %entry
9803; SSE4-NEXT:    movdqa %xmm0, %xmm2
9804; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9805; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9806; SSE4-NEXT:    movapd %xmm1, %xmm0
9807; SSE4-NEXT:    retq
9808;
9809; AVX1-LABEL: test185:
9810; AVX1:       # %bb.0: # %entry
9811; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9812; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9813; AVX1-NEXT:    retq
9814;
9815; AVX2-LABEL: test185:
9816; AVX2:       # %bb.0: # %entry
9817; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9818; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9819; AVX2-NEXT:    retq
9820;
9821; AVX512F-LABEL: test185:
9822; AVX512F:       # %bb.0: # %entry
9823; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9824; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9825; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9826; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9827; AVX512F-NEXT:    retq
9828;
9829; AVX512BW-LABEL: test185:
9830; AVX512BW:       # %bb.0: # %entry
9831; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9832; AVX512BW-NEXT:    retq
9833entry:
9834  %cmp = icmp slt <2 x i64> %a, %b
9835  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9836  ret <2 x i64> %sel
9837}
9838
9839define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
9840; SSE2-LABEL: test186:
9841; SSE2:       # %bb.0: # %entry
9842; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9843; SSE2-NEXT:    movdqa %xmm1, %xmm3
9844; SSE2-NEXT:    pxor %xmm2, %xmm3
9845; SSE2-NEXT:    pxor %xmm0, %xmm2
9846; SSE2-NEXT:    movdqa %xmm2, %xmm4
9847; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9848; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9849; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9850; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9851; SSE2-NEXT:    pand %xmm5, %xmm2
9852; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9853; SSE2-NEXT:    por %xmm2, %xmm3
9854; SSE2-NEXT:    pand %xmm3, %xmm0
9855; SSE2-NEXT:    pandn %xmm1, %xmm3
9856; SSE2-NEXT:    por %xmm3, %xmm0
9857; SSE2-NEXT:    retq
9858;
9859; SSE4-LABEL: test186:
9860; SSE4:       # %bb.0: # %entry
9861; SSE4-NEXT:    movdqa %xmm0, %xmm2
9862; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9863; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9864; SSE4-NEXT:    movapd %xmm1, %xmm0
9865; SSE4-NEXT:    retq
9866;
9867; AVX1-LABEL: test186:
9868; AVX1:       # %bb.0: # %entry
9869; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9870; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9871; AVX1-NEXT:    retq
9872;
9873; AVX2-LABEL: test186:
9874; AVX2:       # %bb.0: # %entry
9875; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9876; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9877; AVX2-NEXT:    retq
9878;
9879; AVX512F-LABEL: test186:
9880; AVX512F:       # %bb.0: # %entry
9881; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9882; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9883; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
9884; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9885; AVX512F-NEXT:    retq
9886;
9887; AVX512BW-LABEL: test186:
9888; AVX512BW:       # %bb.0: # %entry
9889; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9890; AVX512BW-NEXT:    retq
9891entry:
9892  %cmp = icmp sle <2 x i64> %a, %b
9893  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9894  ret <2 x i64> %sel
9895}
9896
9897define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
9898; SSE2-LABEL: test187:
9899; SSE2:       # %bb.0: # %entry
9900; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9901; SSE2-NEXT:    movdqa %xmm0, %xmm3
9902; SSE2-NEXT:    pxor %xmm2, %xmm3
9903; SSE2-NEXT:    pxor %xmm1, %xmm2
9904; SSE2-NEXT:    movdqa %xmm2, %xmm4
9905; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9906; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9907; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9908; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9909; SSE2-NEXT:    pand %xmm5, %xmm2
9910; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9911; SSE2-NEXT:    por %xmm2, %xmm3
9912; SSE2-NEXT:    pand %xmm3, %xmm0
9913; SSE2-NEXT:    pandn %xmm1, %xmm3
9914; SSE2-NEXT:    por %xmm3, %xmm0
9915; SSE2-NEXT:    retq
9916;
9917; SSE4-LABEL: test187:
9918; SSE4:       # %bb.0: # %entry
9919; SSE4-NEXT:    movdqa %xmm0, %xmm2
9920; SSE4-NEXT:    movdqa %xmm1, %xmm0
9921; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9922; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9923; SSE4-NEXT:    movapd %xmm1, %xmm0
9924; SSE4-NEXT:    retq
9925;
9926; AVX1-LABEL: test187:
9927; AVX1:       # %bb.0: # %entry
9928; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9929; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9930; AVX1-NEXT:    retq
9931;
9932; AVX2-LABEL: test187:
9933; AVX2:       # %bb.0: # %entry
9934; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9935; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9936; AVX2-NEXT:    retq
9937;
9938; AVX512F-LABEL: test187:
9939; AVX512F:       # %bb.0: # %entry
9940; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
9941; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
9942; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
9943; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
9944; AVX512F-NEXT:    retq
9945;
9946; AVX512BW-LABEL: test187:
9947; AVX512BW:       # %bb.0: # %entry
9948; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9949; AVX512BW-NEXT:    retq
9950entry:
9951  %cmp = icmp sgt <2 x i64> %a, %b
9952  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9953  ret <2 x i64> %sel
9954}
9955
9956define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
9957; SSE2-LABEL: test188:
9958; SSE2:       # %bb.0: # %entry
9959; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
9960; SSE2-NEXT:    movdqa %xmm0, %xmm3
9961; SSE2-NEXT:    pxor %xmm2, %xmm3
9962; SSE2-NEXT:    pxor %xmm1, %xmm2
9963; SSE2-NEXT:    movdqa %xmm2, %xmm4
9964; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9965; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9966; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9967; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9968; SSE2-NEXT:    pand %xmm5, %xmm2
9969; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9970; SSE2-NEXT:    por %xmm2, %xmm3
9971; SSE2-NEXT:    pand %xmm3, %xmm0
9972; SSE2-NEXT:    pandn %xmm1, %xmm3
9973; SSE2-NEXT:    por %xmm3, %xmm0
9974; SSE2-NEXT:    retq
9975;
9976; SSE4-LABEL: test188:
9977; SSE4:       # %bb.0: # %entry
9978; SSE4-NEXT:    movdqa %xmm0, %xmm2
9979; SSE4-NEXT:    movdqa %xmm1, %xmm0
9980; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9981; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9982; SSE4-NEXT:    movapd %xmm1, %xmm0
9983; SSE4-NEXT:    retq
9984;
9985; AVX1-LABEL: test188:
9986; AVX1:       # %bb.0: # %entry
9987; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9988; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9989; AVX1-NEXT:    retq
9990;
9991; AVX2-LABEL: test188:
9992; AVX2:       # %bb.0: # %entry
9993; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9994; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9995; AVX2-NEXT:    retq
9996;
9997; AVX512F-LABEL: test188:
9998; AVX512F:       # %bb.0: # %entry
9999; AVX512F-NEXT:    # kill: def $xmm1 killed $xmm1 def $zmm1
10000; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0
10001; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
10002; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10003; AVX512F-NEXT:    retq
10004;
10005; AVX512BW-LABEL: test188:
10006; AVX512BW:       # %bb.0: # %entry
10007; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
10008; AVX512BW-NEXT:    retq
10009entry:
10010  %cmp = icmp sge <2 x i64> %a, %b
10011  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10012  ret <2 x i64> %sel
10013}
10014
10015define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
10016; SSE2-LABEL: test189:
10017; SSE2:       # %bb.0: # %entry
10018; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10019; SSE2-NEXT:    movdqa %xmm1, %xmm3
10020; SSE2-NEXT:    pxor %xmm2, %xmm3
10021; SSE2-NEXT:    pxor %xmm0, %xmm2
10022; SSE2-NEXT:    movdqa %xmm2, %xmm4
10023; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10024; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10025; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10026; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10027; SSE2-NEXT:    pand %xmm5, %xmm2
10028; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10029; SSE2-NEXT:    por %xmm2, %xmm3
10030; SSE2-NEXT:    pand %xmm3, %xmm0
10031; SSE2-NEXT:    pandn %xmm1, %xmm3
10032; SSE2-NEXT:    por %xmm3, %xmm0
10033; SSE2-NEXT:    retq
10034;
10035; SSE4-LABEL: test189:
10036; SSE4:       # %bb.0: # %entry
10037; SSE4-NEXT:    movdqa %xmm0, %xmm2
10038; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10039; SSE4-NEXT:    movdqa %xmm1, %xmm3
10040; SSE4-NEXT:    pxor %xmm0, %xmm3
10041; SSE4-NEXT:    pxor %xmm2, %xmm0
10042; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10043; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
10044; SSE4-NEXT:    movapd %xmm1, %xmm0
10045; SSE4-NEXT:    retq
10046;
10047; AVX1-LABEL: test189:
10048; AVX1:       # %bb.0: # %entry
10049; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10050; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10051; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10052; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10053; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10054; AVX1-NEXT:    retq
10055;
10056; AVX2-LABEL: test189:
10057; AVX2:       # %bb.0: # %entry
10058; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10059; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10060; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10061; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10062; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10063; AVX2-NEXT:    retq
10064;
10065; AVX512F-LABEL: test189:
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:    vpmaxuq %zmm1, %zmm0, %zmm0
10070; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10071; AVX512F-NEXT:    retq
10072;
10073; AVX512BW-LABEL: test189:
10074; AVX512BW:       # %bb.0: # %entry
10075; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10076; AVX512BW-NEXT:    retq
10077entry:
10078  %cmp = icmp ult <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> @test190(<2 x i64> %a, <2 x i64> %b) {
10084; SSE2-LABEL: test190:
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: test190:
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: test190:
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: test190:
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: test190:
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: test190:
10142; AVX512BW:       # %bb.0: # %entry
10143; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10144; AVX512BW-NEXT:    retq
10145entry:
10146  %cmp = icmp ule <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> @test191(<2 x i64> %a, <2 x i64> %b) {
10152; SSE2-LABEL: test191:
10153; SSE2:       # %bb.0: # %entry
10154; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [9223372039002259456,9223372039002259456]
10155; SSE2-NEXT:    movdqa %xmm0, %xmm3
10156; SSE2-NEXT:    pxor %xmm2, %xmm3
10157; SSE2-NEXT:    pxor %xmm1, %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: test191:
10172; SSE4:       # %bb.0: # %entry
10173; SSE4-NEXT:    movdqa %xmm0, %xmm2
10174; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10175; SSE4-NEXT:    movdqa %xmm2, %xmm3
10176; SSE4-NEXT:    pxor %xmm0, %xmm3
10177; SSE4-NEXT:    pxor %xmm1, %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: test191:
10184; AVX1:       # %bb.0: # %entry
10185; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10186; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10187; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10188; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10189; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10190; AVX1-NEXT:    retq
10191;
10192; AVX2-LABEL: test191:
10193; AVX2:       # %bb.0: # %entry
10194; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10195; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10196; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10197; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10198; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10199; AVX2-NEXT:    retq
10200;
10201; AVX512F-LABEL: test191:
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:    vpminuq %zmm1, %zmm0, %zmm0
10206; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
10207; AVX512F-NEXT:    retq
10208;
10209; AVX512BW-LABEL: test191:
10210; AVX512BW:       # %bb.0: # %entry
10211; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10212; AVX512BW-NEXT:    retq
10213entry:
10214  %cmp = icmp ugt <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> @test192(<2 x i64> %a, <2 x i64> %b) {
10220; SSE2-LABEL: test192:
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: test192:
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: test192:
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: test192:
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: test192:
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: test192:
10278; AVX512BW:       # %bb.0: # %entry
10279; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10280; AVX512BW-NEXT:    retq
10281entry:
10282  %cmp = icmp uge <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
10287; FIXME: comparisons for smin/smax patterns can be reused
10288define <8 x i64> @concat_smin_smax(<4 x i64> %a0, <4 x i64> %a1) {
10289; SSE2-LABEL: concat_smin_smax:
10290; SSE2:       # %bb.0:
10291; SSE2-NEXT:    movdqa %xmm0, %xmm8
10292; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648]
10293; SSE2-NEXT:    movdqa %xmm0, %xmm6
10294; SSE2-NEXT:    pxor %xmm11, %xmm6
10295; SSE2-NEXT:    movdqa %xmm2, %xmm9
10296; SSE2-NEXT:    pxor %xmm11, %xmm9
10297; SSE2-NEXT:    movdqa %xmm9, %xmm0
10298; SSE2-NEXT:    pcmpgtd %xmm6, %xmm0
10299; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[0,0,2,2]
10300; SSE2-NEXT:    movdqa %xmm9, %xmm5
10301; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
10302; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[1,1,3,3]
10303; SSE2-NEXT:    pand %xmm10, %xmm4
10304; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
10305; SSE2-NEXT:    por %xmm4, %xmm0
10306; SSE2-NEXT:    movdqa %xmm8, %xmm4
10307; SSE2-NEXT:    pand %xmm0, %xmm4
10308; SSE2-NEXT:    pandn %xmm2, %xmm0
10309; SSE2-NEXT:    por %xmm4, %xmm0
10310; SSE2-NEXT:    movdqa %xmm1, %xmm4
10311; SSE2-NEXT:    pxor %xmm11, %xmm4
10312; SSE2-NEXT:    pxor %xmm3, %xmm11
10313; SSE2-NEXT:    movdqa %xmm11, %xmm5
10314; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
10315; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm5[0,0,2,2]
10316; SSE2-NEXT:    movdqa %xmm11, %xmm7
10317; SSE2-NEXT:    pcmpeqd %xmm4, %xmm7
10318; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
10319; SSE2-NEXT:    pand %xmm13, %xmm12
10320; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
10321; SSE2-NEXT:    por %xmm12, %xmm5
10322; SSE2-NEXT:    movdqa %xmm1, %xmm7
10323; SSE2-NEXT:    pand %xmm5, %xmm7
10324; SSE2-NEXT:    pandn %xmm3, %xmm5
10325; SSE2-NEXT:    por %xmm7, %xmm5
10326; SSE2-NEXT:    pcmpgtd %xmm9, %xmm6
10327; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
10328; SSE2-NEXT:    pand %xmm10, %xmm7
10329; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
10330; SSE2-NEXT:    por %xmm7, %xmm6
10331; SSE2-NEXT:    pand %xmm6, %xmm8
10332; SSE2-NEXT:    pandn %xmm2, %xmm6
10333; SSE2-NEXT:    por %xmm8, %xmm6
10334; SSE2-NEXT:    pcmpgtd %xmm11, %xmm4
10335; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[0,0,2,2]
10336; SSE2-NEXT:    pand %xmm13, %xmm2
10337; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
10338; SSE2-NEXT:    por %xmm2, %xmm4
10339; SSE2-NEXT:    pand %xmm4, %xmm1
10340; SSE2-NEXT:    pandn %xmm3, %xmm4
10341; SSE2-NEXT:    por %xmm1, %xmm4
10342; SSE2-NEXT:    movdqa %xmm5, %xmm1
10343; SSE2-NEXT:    movdqa %xmm6, %xmm2
10344; SSE2-NEXT:    movdqa %xmm4, %xmm3
10345; SSE2-NEXT:    retq
10346;
10347; SSE4-LABEL: concat_smin_smax:
10348; SSE4:       # %bb.0:
10349; SSE4-NEXT:    movdqa %xmm0, %xmm4
10350; SSE4-NEXT:    movdqa %xmm2, %xmm0
10351; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
10352; SSE4-NEXT:    movdqa %xmm2, %xmm5
10353; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm5
10354; SSE4-NEXT:    movdqa %xmm3, %xmm0
10355; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
10356; SSE4-NEXT:    movdqa %xmm3, %xmm6
10357; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm6
10358; SSE4-NEXT:    movdqa %xmm4, %xmm0
10359; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
10360; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
10361; SSE4-NEXT:    movdqa %xmm1, %xmm0
10362; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10363; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
10364; SSE4-NEXT:    movapd %xmm5, %xmm0
10365; SSE4-NEXT:    movapd %xmm6, %xmm1
10366; SSE4-NEXT:    retq
10367;
10368; AVX1-LABEL: concat_smin_smax:
10369; AVX1:       # %bb.0:
10370; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
10371; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
10372; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm2
10373; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm5
10374; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm5, %ymm2
10375; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm2
10376; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
10377; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm4
10378; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm3
10379; AVX1-NEXT:    vblendvpd %ymm3, %ymm0, %ymm1, %ymm1
10380; AVX1-NEXT:    vmovapd %ymm2, %ymm0
10381; AVX1-NEXT:    retq
10382;
10383; AVX2-LABEL: concat_smin_smax:
10384; AVX2:       # %bb.0:
10385; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
10386; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm2
10387; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm3
10388; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm1, %ymm1
10389; AVX2-NEXT:    vmovapd %ymm2, %ymm0
10390; AVX2-NEXT:    retq
10391;
10392; AVX512F-LABEL: concat_smin_smax:
10393; AVX512F:       # %bb.0:
10394; AVX512F-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
10395; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
10396; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm2
10397; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
10398; AVX512F-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
10399; AVX512F-NEXT:    retq
10400;
10401; AVX512BW-LABEL: concat_smin_smax:
10402; AVX512BW:       # %bb.0:
10403; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm2
10404; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
10405; AVX512BW-NEXT:    vinserti64x4 $1, %ymm0, %zmm2, %zmm0
10406; AVX512BW-NEXT:    retq
10407  %cmp = icmp slt <4 x i64> %a0, %a1
10408  %min = select <4 x i1> %cmp, <4 x i64> %a0, <4 x i64> %a1
10409  %max = select <4 x i1> %cmp, <4 x i64> %a1, <4 x i64> %a0
10410  %res = shufflevector <4 x i64> %min, <4 x i64> %max, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
10411  ret <8 x i64> %res
10412}
10413