• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE4
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=knl | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=skx | FileCheck %s --check-prefix=AVX --check-prefix=AVX512F --check-prefix=AVX512BW --check-prefix=AVX512VL
8
9define <16 x i8> @test1(<16 x i8> %a, <16 x i8> %b) {
10; SSE2-LABEL: test1:
11; SSE2:       # %bb.0: # %entry
12; SSE2-NEXT:    movdqa %xmm1, %xmm2
13; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
14; SSE2-NEXT:    pand %xmm2, %xmm0
15; SSE2-NEXT:    pandn %xmm1, %xmm2
16; SSE2-NEXT:    por %xmm2, %xmm0
17; SSE2-NEXT:    retq
18;
19; SSE4-LABEL: test1:
20; SSE4:       # %bb.0: # %entry
21; SSE4-NEXT:    pminsb %xmm1, %xmm0
22; SSE4-NEXT:    retq
23;
24; AVX-LABEL: test1:
25; AVX:       # %bb.0: # %entry
26; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
27; AVX-NEXT:    retq
28entry:
29  %cmp = icmp slt <16 x i8> %a, %b
30  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
31  ret <16 x i8> %sel
32}
33
34define <16 x i8> @test2(<16 x i8> %a, <16 x i8> %b) {
35; SSE2-LABEL: test2:
36; SSE2:       # %bb.0: # %entry
37; SSE2-NEXT:    movdqa %xmm1, %xmm2
38; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
39; SSE2-NEXT:    pand %xmm2, %xmm0
40; SSE2-NEXT:    pandn %xmm1, %xmm2
41; SSE2-NEXT:    por %xmm2, %xmm0
42; SSE2-NEXT:    retq
43;
44; SSE4-LABEL: test2:
45; SSE4:       # %bb.0: # %entry
46; SSE4-NEXT:    pminsb %xmm1, %xmm0
47; SSE4-NEXT:    retq
48;
49; AVX-LABEL: test2:
50; AVX:       # %bb.0: # %entry
51; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
52; AVX-NEXT:    retq
53entry:
54  %cmp = icmp sle <16 x i8> %a, %b
55  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
56  ret <16 x i8> %sel
57}
58
59define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
60; SSE2-LABEL: test3:
61; SSE2:       # %bb.0: # %entry
62; SSE2-NEXT:    movdqa %xmm0, %xmm2
63; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
64; SSE2-NEXT:    pand %xmm2, %xmm0
65; SSE2-NEXT:    pandn %xmm1, %xmm2
66; SSE2-NEXT:    por %xmm0, %xmm2
67; SSE2-NEXT:    movdqa %xmm2, %xmm0
68; SSE2-NEXT:    retq
69;
70; SSE4-LABEL: test3:
71; SSE4:       # %bb.0: # %entry
72; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
73; SSE4-NEXT:    retq
74;
75; AVX-LABEL: test3:
76; AVX:       # %bb.0: # %entry
77; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
78; AVX-NEXT:    retq
79entry:
80  %cmp = icmp sgt <16 x i8> %a, %b
81  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
82  ret <16 x i8> %sel
83}
84
85define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
86; SSE2-LABEL: test4:
87; SSE2:       # %bb.0: # %entry
88; SSE2-NEXT:    movdqa %xmm0, %xmm2
89; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
90; SSE2-NEXT:    pand %xmm2, %xmm0
91; SSE2-NEXT:    pandn %xmm1, %xmm2
92; SSE2-NEXT:    por %xmm0, %xmm2
93; SSE2-NEXT:    movdqa %xmm2, %xmm0
94; SSE2-NEXT:    retq
95;
96; SSE4-LABEL: test4:
97; SSE4:       # %bb.0: # %entry
98; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
99; SSE4-NEXT:    retq
100;
101; AVX-LABEL: test4:
102; AVX:       # %bb.0: # %entry
103; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
104; AVX-NEXT:    retq
105entry:
106  %cmp = icmp sge <16 x i8> %a, %b
107  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
108  ret <16 x i8> %sel
109}
110
111define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
112; SSE-LABEL: test5:
113; SSE:       # %bb.0: # %entry
114; SSE-NEXT:    pminub %xmm1, %xmm0
115; SSE-NEXT:    retq
116;
117; AVX-LABEL: test5:
118; AVX:       # %bb.0: # %entry
119; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
120; AVX-NEXT:    retq
121entry:
122  %cmp = icmp ult <16 x i8> %a, %b
123  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
124  ret <16 x i8> %sel
125}
126
127define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
128; SSE-LABEL: test6:
129; SSE:       # %bb.0: # %entry
130; SSE-NEXT:    pminub %xmm1, %xmm0
131; SSE-NEXT:    retq
132;
133; AVX-LABEL: test6:
134; AVX:       # %bb.0: # %entry
135; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
136; AVX-NEXT:    retq
137entry:
138  %cmp = icmp ule <16 x i8> %a, %b
139  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
140  ret <16 x i8> %sel
141}
142
143define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
144; SSE-LABEL: test7:
145; SSE:       # %bb.0: # %entry
146; SSE-NEXT:    pmaxub %xmm1, %xmm0
147; SSE-NEXT:    retq
148;
149; AVX-LABEL: test7:
150; AVX:       # %bb.0: # %entry
151; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
152; AVX-NEXT:    retq
153entry:
154  %cmp = icmp ugt <16 x i8> %a, %b
155  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
156  ret <16 x i8> %sel
157}
158
159define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
160; SSE-LABEL: test8:
161; SSE:       # %bb.0: # %entry
162; SSE-NEXT:    pmaxub %xmm1, %xmm0
163; SSE-NEXT:    retq
164;
165; AVX-LABEL: test8:
166; AVX:       # %bb.0: # %entry
167; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
168; AVX-NEXT:    retq
169entry:
170  %cmp = icmp uge <16 x i8> %a, %b
171  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
172  ret <16 x i8> %sel
173}
174
175define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
176; SSE-LABEL: test9:
177; SSE:       # %bb.0: # %entry
178; SSE-NEXT:    pminsw %xmm1, %xmm0
179; SSE-NEXT:    retq
180;
181; AVX-LABEL: test9:
182; AVX:       # %bb.0: # %entry
183; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
184; AVX-NEXT:    retq
185entry:
186  %cmp = icmp slt <8 x i16> %a, %b
187  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
188  ret <8 x i16> %sel
189}
190
191define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
192; SSE-LABEL: test10:
193; SSE:       # %bb.0: # %entry
194; SSE-NEXT:    pminsw %xmm1, %xmm0
195; SSE-NEXT:    retq
196;
197; AVX-LABEL: test10:
198; AVX:       # %bb.0: # %entry
199; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
200; AVX-NEXT:    retq
201entry:
202  %cmp = icmp sle <8 x i16> %a, %b
203  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
204  ret <8 x i16> %sel
205}
206
207define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
208; SSE-LABEL: test11:
209; SSE:       # %bb.0: # %entry
210; SSE-NEXT:    pmaxsw %xmm1, %xmm0
211; SSE-NEXT:    retq
212;
213; AVX-LABEL: test11:
214; AVX:       # %bb.0: # %entry
215; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
216; AVX-NEXT:    retq
217entry:
218  %cmp = icmp sgt <8 x i16> %a, %b
219  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
220  ret <8 x i16> %sel
221}
222
223define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
224; SSE-LABEL: test12:
225; SSE:       # %bb.0: # %entry
226; SSE-NEXT:    pmaxsw %xmm1, %xmm0
227; SSE-NEXT:    retq
228;
229; AVX-LABEL: test12:
230; AVX:       # %bb.0: # %entry
231; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
232; AVX-NEXT:    retq
233entry:
234  %cmp = icmp sge <8 x i16> %a, %b
235  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
236  ret <8 x i16> %sel
237}
238
239define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
240; SSE2-LABEL: test13:
241; SSE2:       # %bb.0: # %entry
242; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
243; SSE2-NEXT:    pxor %xmm2, %xmm1
244; SSE2-NEXT:    pxor %xmm2, %xmm0
245; SSE2-NEXT:    pminsw %xmm1, %xmm0
246; SSE2-NEXT:    pxor %xmm2, %xmm0
247; SSE2-NEXT:    retq
248;
249; SSE4-LABEL: test13:
250; SSE4:       # %bb.0: # %entry
251; SSE4-NEXT:    pminuw %xmm1, %xmm0
252; SSE4-NEXT:    retq
253;
254; AVX-LABEL: test13:
255; AVX:       # %bb.0: # %entry
256; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
257; AVX-NEXT:    retq
258entry:
259  %cmp = icmp ult <8 x i16> %a, %b
260  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
261  ret <8 x i16> %sel
262}
263
264define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
265; SSE2-LABEL: test14:
266; SSE2:       # %bb.0: # %entry
267; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
268; SSE2-NEXT:    pxor %xmm2, %xmm1
269; SSE2-NEXT:    pxor %xmm2, %xmm0
270; SSE2-NEXT:    pminsw %xmm1, %xmm0
271; SSE2-NEXT:    pxor %xmm2, %xmm0
272; SSE2-NEXT:    retq
273;
274; SSE4-LABEL: test14:
275; SSE4:       # %bb.0: # %entry
276; SSE4-NEXT:    pminuw %xmm1, %xmm0
277; SSE4-NEXT:    retq
278;
279; AVX-LABEL: test14:
280; AVX:       # %bb.0: # %entry
281; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
282; AVX-NEXT:    retq
283entry:
284  %cmp = icmp ule <8 x i16> %a, %b
285  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
286  ret <8 x i16> %sel
287}
288
289define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
290; SSE2-LABEL: test15:
291; SSE2:       # %bb.0: # %entry
292; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
293; SSE2-NEXT:    pxor %xmm2, %xmm1
294; SSE2-NEXT:    pxor %xmm2, %xmm0
295; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
296; SSE2-NEXT:    pxor %xmm2, %xmm0
297; SSE2-NEXT:    retq
298;
299; SSE4-LABEL: test15:
300; SSE4:       # %bb.0: # %entry
301; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
302; SSE4-NEXT:    retq
303;
304; AVX-LABEL: test15:
305; AVX:       # %bb.0: # %entry
306; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
307; AVX-NEXT:    retq
308entry:
309  %cmp = icmp ugt <8 x i16> %a, %b
310  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
311  ret <8 x i16> %sel
312}
313
314define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
315; SSE2-LABEL: test16:
316; SSE2:       # %bb.0: # %entry
317; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
318; SSE2-NEXT:    pxor %xmm2, %xmm1
319; SSE2-NEXT:    pxor %xmm2, %xmm0
320; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
321; SSE2-NEXT:    pxor %xmm2, %xmm0
322; SSE2-NEXT:    retq
323;
324; SSE4-LABEL: test16:
325; SSE4:       # %bb.0: # %entry
326; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
327; SSE4-NEXT:    retq
328;
329; AVX-LABEL: test16:
330; AVX:       # %bb.0: # %entry
331; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
332; AVX-NEXT:    retq
333entry:
334  %cmp = icmp uge <8 x i16> %a, %b
335  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
336  ret <8 x i16> %sel
337}
338
339define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
340; SSE2-LABEL: test17:
341; SSE2:       # %bb.0: # %entry
342; SSE2-NEXT:    movdqa %xmm1, %xmm2
343; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
344; SSE2-NEXT:    pand %xmm2, %xmm0
345; SSE2-NEXT:    pandn %xmm1, %xmm2
346; SSE2-NEXT:    por %xmm2, %xmm0
347; SSE2-NEXT:    retq
348;
349; SSE4-LABEL: test17:
350; SSE4:       # %bb.0: # %entry
351; SSE4-NEXT:    pminsd %xmm1, %xmm0
352; SSE4-NEXT:    retq
353;
354; AVX-LABEL: test17:
355; AVX:       # %bb.0: # %entry
356; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
357; AVX-NEXT:    retq
358entry:
359  %cmp = icmp slt <4 x i32> %a, %b
360  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
361  ret <4 x i32> %sel
362}
363
364define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
365; SSE2-LABEL: test18:
366; SSE2:       # %bb.0: # %entry
367; SSE2-NEXT:    movdqa %xmm1, %xmm2
368; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
369; SSE2-NEXT:    pand %xmm2, %xmm0
370; SSE2-NEXT:    pandn %xmm1, %xmm2
371; SSE2-NEXT:    por %xmm2, %xmm0
372; SSE2-NEXT:    retq
373;
374; SSE4-LABEL: test18:
375; SSE4:       # %bb.0: # %entry
376; SSE4-NEXT:    pminsd %xmm1, %xmm0
377; SSE4-NEXT:    retq
378;
379; AVX-LABEL: test18:
380; AVX:       # %bb.0: # %entry
381; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
382; AVX-NEXT:    retq
383entry:
384  %cmp = icmp sle <4 x i32> %a, %b
385  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
386  ret <4 x i32> %sel
387}
388
389define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
390; SSE2-LABEL: test19:
391; SSE2:       # %bb.0: # %entry
392; SSE2-NEXT:    movdqa %xmm0, %xmm2
393; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
394; SSE2-NEXT:    pand %xmm2, %xmm0
395; SSE2-NEXT:    pandn %xmm1, %xmm2
396; SSE2-NEXT:    por %xmm0, %xmm2
397; SSE2-NEXT:    movdqa %xmm2, %xmm0
398; SSE2-NEXT:    retq
399;
400; SSE4-LABEL: test19:
401; SSE4:       # %bb.0: # %entry
402; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
403; SSE4-NEXT:    retq
404;
405; AVX-LABEL: test19:
406; AVX:       # %bb.0: # %entry
407; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
408; AVX-NEXT:    retq
409entry:
410  %cmp = icmp sgt <4 x i32> %a, %b
411  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
412  ret <4 x i32> %sel
413}
414
415define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
416; SSE2-LABEL: test20:
417; SSE2:       # %bb.0: # %entry
418; SSE2-NEXT:    movdqa %xmm0, %xmm2
419; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
420; SSE2-NEXT:    pand %xmm2, %xmm0
421; SSE2-NEXT:    pandn %xmm1, %xmm2
422; SSE2-NEXT:    por %xmm0, %xmm2
423; SSE2-NEXT:    movdqa %xmm2, %xmm0
424; SSE2-NEXT:    retq
425;
426; SSE4-LABEL: test20:
427; SSE4:       # %bb.0: # %entry
428; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
429; SSE4-NEXT:    retq
430;
431; AVX-LABEL: test20:
432; AVX:       # %bb.0: # %entry
433; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
434; AVX-NEXT:    retq
435entry:
436  %cmp = icmp sge <4 x i32> %a, %b
437  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
438  ret <4 x i32> %sel
439}
440
441define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
442; SSE2-LABEL: test21:
443; SSE2:       # %bb.0: # %entry
444; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
445; SSE2-NEXT:    movdqa %xmm0, %xmm3
446; SSE2-NEXT:    pxor %xmm2, %xmm3
447; SSE2-NEXT:    pxor %xmm1, %xmm2
448; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
449; SSE2-NEXT:    pand %xmm2, %xmm0
450; SSE2-NEXT:    pandn %xmm1, %xmm2
451; SSE2-NEXT:    por %xmm2, %xmm0
452; SSE2-NEXT:    retq
453;
454; SSE4-LABEL: test21:
455; SSE4:       # %bb.0: # %entry
456; SSE4-NEXT:    pminud %xmm1, %xmm0
457; SSE4-NEXT:    retq
458;
459; AVX-LABEL: test21:
460; AVX:       # %bb.0: # %entry
461; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
462; AVX-NEXT:    retq
463entry:
464  %cmp = icmp ult <4 x i32> %a, %b
465  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
466  ret <4 x i32> %sel
467}
468
469define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
470; SSE2-LABEL: test22:
471; SSE2:       # %bb.0: # %entry
472; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
473; SSE2-NEXT:    movdqa %xmm0, %xmm3
474; SSE2-NEXT:    pxor %xmm2, %xmm3
475; SSE2-NEXT:    pxor %xmm1, %xmm2
476; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
477; SSE2-NEXT:    pand %xmm2, %xmm0
478; SSE2-NEXT:    pandn %xmm1, %xmm2
479; SSE2-NEXT:    por %xmm2, %xmm0
480; SSE2-NEXT:    retq
481;
482; SSE4-LABEL: test22:
483; SSE4:       # %bb.0: # %entry
484; SSE4-NEXT:    pminud %xmm1, %xmm0
485; SSE4-NEXT:    retq
486;
487; AVX-LABEL: test22:
488; AVX:       # %bb.0: # %entry
489; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
490; AVX-NEXT:    retq
491entry:
492  %cmp = icmp ule <4 x i32> %a, %b
493  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
494  ret <4 x i32> %sel
495}
496
497define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
498; SSE2-LABEL: test23:
499; SSE2:       # %bb.0: # %entry
500; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
501; SSE2-NEXT:    movdqa %xmm1, %xmm3
502; SSE2-NEXT:    pxor %xmm2, %xmm3
503; SSE2-NEXT:    pxor %xmm0, %xmm2
504; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
505; SSE2-NEXT:    pand %xmm2, %xmm0
506; SSE2-NEXT:    pandn %xmm1, %xmm2
507; SSE2-NEXT:    por %xmm2, %xmm0
508; SSE2-NEXT:    retq
509;
510; SSE4-LABEL: test23:
511; SSE4:       # %bb.0: # %entry
512; SSE4-NEXT:    pmaxud %xmm1, %xmm0
513; SSE4-NEXT:    retq
514;
515; AVX-LABEL: test23:
516; AVX:       # %bb.0: # %entry
517; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
518; AVX-NEXT:    retq
519entry:
520  %cmp = icmp ugt <4 x i32> %a, %b
521  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
522  ret <4 x i32> %sel
523}
524
525define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
526; SSE2-LABEL: test24:
527; SSE2:       # %bb.0: # %entry
528; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
529; SSE2-NEXT:    movdqa %xmm1, %xmm3
530; SSE2-NEXT:    pxor %xmm2, %xmm3
531; SSE2-NEXT:    pxor %xmm0, %xmm2
532; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
533; SSE2-NEXT:    pand %xmm2, %xmm0
534; SSE2-NEXT:    pandn %xmm1, %xmm2
535; SSE2-NEXT:    por %xmm2, %xmm0
536; SSE2-NEXT:    retq
537;
538; SSE4-LABEL: test24:
539; SSE4:       # %bb.0: # %entry
540; SSE4-NEXT:    pmaxud %xmm1, %xmm0
541; SSE4-NEXT:    retq
542;
543; AVX-LABEL: test24:
544; AVX:       # %bb.0: # %entry
545; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
546; AVX-NEXT:    retq
547entry:
548  %cmp = icmp uge <4 x i32> %a, %b
549  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
550  ret <4 x i32> %sel
551}
552
553define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
554; SSE2-LABEL: test25:
555; SSE2:       # %bb.0: # %entry
556; SSE2-NEXT:    movdqa %xmm2, %xmm4
557; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
558; SSE2-NEXT:    pand %xmm4, %xmm0
559; SSE2-NEXT:    pandn %xmm2, %xmm4
560; SSE2-NEXT:    por %xmm4, %xmm0
561; SSE2-NEXT:    movdqa %xmm3, %xmm2
562; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
563; SSE2-NEXT:    pand %xmm2, %xmm1
564; SSE2-NEXT:    pandn %xmm3, %xmm2
565; SSE2-NEXT:    por %xmm2, %xmm1
566; SSE2-NEXT:    retq
567;
568; SSE4-LABEL: test25:
569; SSE4:       # %bb.0: # %entry
570; SSE4-NEXT:    pminsb %xmm2, %xmm0
571; SSE4-NEXT:    pminsb %xmm3, %xmm1
572; SSE4-NEXT:    retq
573;
574; AVX1-LABEL: test25:
575; AVX1:       # %bb.0: # %entry
576; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
577; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
578; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
579; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
580; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
581; AVX1-NEXT:    retq
582;
583; AVX2-LABEL: test25:
584; AVX2:       # %bb.0: # %entry
585; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
586; AVX2-NEXT:    retq
587;
588; AVX512F-LABEL: test25:
589; AVX512F:       # %bb.0: # %entry
590; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
591; AVX512F-NEXT:    retq
592entry:
593  %cmp = icmp slt <32 x i8> %a, %b
594  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
595  ret <32 x i8> %sel
596}
597
598define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
599; SSE2-LABEL: test26:
600; SSE2:       # %bb.0: # %entry
601; SSE2-NEXT:    movdqa %xmm2, %xmm4
602; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
603; SSE2-NEXT:    pand %xmm4, %xmm0
604; SSE2-NEXT:    pandn %xmm2, %xmm4
605; SSE2-NEXT:    por %xmm4, %xmm0
606; SSE2-NEXT:    movdqa %xmm3, %xmm2
607; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
608; SSE2-NEXT:    pand %xmm2, %xmm1
609; SSE2-NEXT:    pandn %xmm3, %xmm2
610; SSE2-NEXT:    por %xmm2, %xmm1
611; SSE2-NEXT:    retq
612;
613; SSE4-LABEL: test26:
614; SSE4:       # %bb.0: # %entry
615; SSE4-NEXT:    pminsb %xmm2, %xmm0
616; SSE4-NEXT:    pminsb %xmm3, %xmm1
617; SSE4-NEXT:    retq
618;
619; AVX1-LABEL: test26:
620; AVX1:       # %bb.0: # %entry
621; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
622; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
623; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
624; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
625; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
626; AVX1-NEXT:    retq
627;
628; AVX2-LABEL: test26:
629; AVX2:       # %bb.0: # %entry
630; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
631; AVX2-NEXT:    retq
632;
633; AVX512F-LABEL: test26:
634; AVX512F:       # %bb.0: # %entry
635; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
636; AVX512F-NEXT:    retq
637entry:
638  %cmp = icmp sle <32 x i8> %a, %b
639  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
640  ret <32 x i8> %sel
641}
642
643define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
644; SSE2-LABEL: test27:
645; SSE2:       # %bb.0: # %entry
646; SSE2-NEXT:    movdqa %xmm0, %xmm4
647; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
648; SSE2-NEXT:    pand %xmm4, %xmm0
649; SSE2-NEXT:    pandn %xmm2, %xmm4
650; SSE2-NEXT:    por %xmm0, %xmm4
651; SSE2-NEXT:    movdqa %xmm1, %xmm2
652; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
653; SSE2-NEXT:    pand %xmm2, %xmm1
654; SSE2-NEXT:    pandn %xmm3, %xmm2
655; SSE2-NEXT:    por %xmm1, %xmm2
656; SSE2-NEXT:    movdqa %xmm4, %xmm0
657; SSE2-NEXT:    movdqa %xmm2, %xmm1
658; SSE2-NEXT:    retq
659;
660; SSE4-LABEL: test27:
661; SSE4:       # %bb.0: # %entry
662; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
663; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
664; SSE4-NEXT:    retq
665;
666; AVX1-LABEL: test27:
667; AVX1:       # %bb.0: # %entry
668; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
669; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
670; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
671; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
672; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
673; AVX1-NEXT:    retq
674;
675; AVX2-LABEL: test27:
676; AVX2:       # %bb.0: # %entry
677; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
678; AVX2-NEXT:    retq
679;
680; AVX512F-LABEL: test27:
681; AVX512F:       # %bb.0: # %entry
682; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
683; AVX512F-NEXT:    retq
684entry:
685  %cmp = icmp sgt <32 x i8> %a, %b
686  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
687  ret <32 x i8> %sel
688}
689
690define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
691; SSE2-LABEL: test28:
692; SSE2:       # %bb.0: # %entry
693; SSE2-NEXT:    movdqa %xmm0, %xmm4
694; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
695; SSE2-NEXT:    pand %xmm4, %xmm0
696; SSE2-NEXT:    pandn %xmm2, %xmm4
697; SSE2-NEXT:    por %xmm0, %xmm4
698; SSE2-NEXT:    movdqa %xmm1, %xmm2
699; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
700; SSE2-NEXT:    pand %xmm2, %xmm1
701; SSE2-NEXT:    pandn %xmm3, %xmm2
702; SSE2-NEXT:    por %xmm1, %xmm2
703; SSE2-NEXT:    movdqa %xmm4, %xmm0
704; SSE2-NEXT:    movdqa %xmm2, %xmm1
705; SSE2-NEXT:    retq
706;
707; SSE4-LABEL: test28:
708; SSE4:       # %bb.0: # %entry
709; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
710; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
711; SSE4-NEXT:    retq
712;
713; AVX1-LABEL: test28:
714; AVX1:       # %bb.0: # %entry
715; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
716; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
717; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
718; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
719; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
720; AVX1-NEXT:    retq
721;
722; AVX2-LABEL: test28:
723; AVX2:       # %bb.0: # %entry
724; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
725; AVX2-NEXT:    retq
726;
727; AVX512F-LABEL: test28:
728; AVX512F:       # %bb.0: # %entry
729; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
730; AVX512F-NEXT:    retq
731entry:
732  %cmp = icmp sge <32 x i8> %a, %b
733  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
734  ret <32 x i8> %sel
735}
736
737define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
738; SSE-LABEL: test29:
739; SSE:       # %bb.0: # %entry
740; SSE-NEXT:    pminub %xmm2, %xmm0
741; SSE-NEXT:    pminub %xmm3, %xmm1
742; SSE-NEXT:    retq
743;
744; AVX1-LABEL: test29:
745; AVX1:       # %bb.0: # %entry
746; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
747; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
748; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
749; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
750; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
751; AVX1-NEXT:    retq
752;
753; AVX2-LABEL: test29:
754; AVX2:       # %bb.0: # %entry
755; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
756; AVX2-NEXT:    retq
757;
758; AVX512F-LABEL: test29:
759; AVX512F:       # %bb.0: # %entry
760; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
761; AVX512F-NEXT:    retq
762entry:
763  %cmp = icmp ult <32 x i8> %a, %b
764  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
765  ret <32 x i8> %sel
766}
767
768define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
769; SSE-LABEL: test30:
770; SSE:       # %bb.0: # %entry
771; SSE-NEXT:    pminub %xmm2, %xmm0
772; SSE-NEXT:    pminub %xmm3, %xmm1
773; SSE-NEXT:    retq
774;
775; AVX1-LABEL: test30:
776; AVX1:       # %bb.0: # %entry
777; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
778; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
779; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
780; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
781; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
782; AVX1-NEXT:    retq
783;
784; AVX2-LABEL: test30:
785; AVX2:       # %bb.0: # %entry
786; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
787; AVX2-NEXT:    retq
788;
789; AVX512F-LABEL: test30:
790; AVX512F:       # %bb.0: # %entry
791; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
792; AVX512F-NEXT:    retq
793entry:
794  %cmp = icmp ule <32 x i8> %a, %b
795  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
796  ret <32 x i8> %sel
797}
798
799define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
800; SSE-LABEL: test31:
801; SSE:       # %bb.0: # %entry
802; SSE-NEXT:    pmaxub %xmm2, %xmm0
803; SSE-NEXT:    pmaxub %xmm3, %xmm1
804; SSE-NEXT:    retq
805;
806; AVX1-LABEL: test31:
807; AVX1:       # %bb.0: # %entry
808; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
809; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
810; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
811; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
812; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
813; AVX1-NEXT:    retq
814;
815; AVX2-LABEL: test31:
816; AVX2:       # %bb.0: # %entry
817; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
818; AVX2-NEXT:    retq
819;
820; AVX512F-LABEL: test31:
821; AVX512F:       # %bb.0: # %entry
822; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
823; AVX512F-NEXT:    retq
824entry:
825  %cmp = icmp ugt <32 x i8> %a, %b
826  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
827  ret <32 x i8> %sel
828}
829
830define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
831; SSE-LABEL: test32:
832; SSE:       # %bb.0: # %entry
833; SSE-NEXT:    pmaxub %xmm2, %xmm0
834; SSE-NEXT:    pmaxub %xmm3, %xmm1
835; SSE-NEXT:    retq
836;
837; AVX1-LABEL: test32:
838; AVX1:       # %bb.0: # %entry
839; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
840; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
841; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
842; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
843; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
844; AVX1-NEXT:    retq
845;
846; AVX2-LABEL: test32:
847; AVX2:       # %bb.0: # %entry
848; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
849; AVX2-NEXT:    retq
850;
851; AVX512F-LABEL: test32:
852; AVX512F:       # %bb.0: # %entry
853; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
854; AVX512F-NEXT:    retq
855entry:
856  %cmp = icmp uge <32 x i8> %a, %b
857  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
858  ret <32 x i8> %sel
859}
860
861define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
862; SSE-LABEL: test33:
863; SSE:       # %bb.0: # %entry
864; SSE-NEXT:    pminsw %xmm2, %xmm0
865; SSE-NEXT:    pminsw %xmm3, %xmm1
866; SSE-NEXT:    retq
867;
868; AVX1-LABEL: test33:
869; AVX1:       # %bb.0: # %entry
870; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
871; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
872; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
873; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
874; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
875; AVX1-NEXT:    retq
876;
877; AVX2-LABEL: test33:
878; AVX2:       # %bb.0: # %entry
879; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
880; AVX2-NEXT:    retq
881;
882; AVX512F-LABEL: test33:
883; AVX512F:       # %bb.0: # %entry
884; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
885; AVX512F-NEXT:    retq
886entry:
887  %cmp = icmp slt <16 x i16> %a, %b
888  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
889  ret <16 x i16> %sel
890}
891
892define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
893; SSE-LABEL: test34:
894; SSE:       # %bb.0: # %entry
895; SSE-NEXT:    pminsw %xmm2, %xmm0
896; SSE-NEXT:    pminsw %xmm3, %xmm1
897; SSE-NEXT:    retq
898;
899; AVX1-LABEL: test34:
900; AVX1:       # %bb.0: # %entry
901; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
902; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
903; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
904; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
905; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
906; AVX1-NEXT:    retq
907;
908; AVX2-LABEL: test34:
909; AVX2:       # %bb.0: # %entry
910; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
911; AVX2-NEXT:    retq
912;
913; AVX512F-LABEL: test34:
914; AVX512F:       # %bb.0: # %entry
915; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
916; AVX512F-NEXT:    retq
917entry:
918  %cmp = icmp sle <16 x i16> %a, %b
919  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
920  ret <16 x i16> %sel
921}
922
923define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
924; SSE-LABEL: test35:
925; SSE:       # %bb.0: # %entry
926; SSE-NEXT:    pmaxsw %xmm2, %xmm0
927; SSE-NEXT:    pmaxsw %xmm3, %xmm1
928; SSE-NEXT:    retq
929;
930; AVX1-LABEL: test35:
931; AVX1:       # %bb.0: # %entry
932; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
933; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
934; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
935; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
936; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
937; AVX1-NEXT:    retq
938;
939; AVX2-LABEL: test35:
940; AVX2:       # %bb.0: # %entry
941; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
942; AVX2-NEXT:    retq
943;
944; AVX512F-LABEL: test35:
945; AVX512F:       # %bb.0: # %entry
946; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
947; AVX512F-NEXT:    retq
948entry:
949  %cmp = icmp sgt <16 x i16> %a, %b
950  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
951  ret <16 x i16> %sel
952}
953
954define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
955; SSE-LABEL: test36:
956; SSE:       # %bb.0: # %entry
957; SSE-NEXT:    pmaxsw %xmm2, %xmm0
958; SSE-NEXT:    pmaxsw %xmm3, %xmm1
959; SSE-NEXT:    retq
960;
961; AVX1-LABEL: test36:
962; AVX1:       # %bb.0: # %entry
963; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
964; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
965; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
966; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
967; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
968; AVX1-NEXT:    retq
969;
970; AVX2-LABEL: test36:
971; AVX2:       # %bb.0: # %entry
972; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
973; AVX2-NEXT:    retq
974;
975; AVX512F-LABEL: test36:
976; AVX512F:       # %bb.0: # %entry
977; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
978; AVX512F-NEXT:    retq
979entry:
980  %cmp = icmp sge <16 x i16> %a, %b
981  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
982  ret <16 x i16> %sel
983}
984
985define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
986; SSE2-LABEL: test37:
987; SSE2:       # %bb.0: # %entry
988; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
989; SSE2-NEXT:    pxor %xmm4, %xmm2
990; SSE2-NEXT:    pxor %xmm4, %xmm0
991; SSE2-NEXT:    pminsw %xmm2, %xmm0
992; SSE2-NEXT:    pxor %xmm4, %xmm0
993; SSE2-NEXT:    pxor %xmm4, %xmm3
994; SSE2-NEXT:    pxor %xmm4, %xmm1
995; SSE2-NEXT:    pminsw %xmm3, %xmm1
996; SSE2-NEXT:    pxor %xmm4, %xmm1
997; SSE2-NEXT:    retq
998;
999; SSE4-LABEL: test37:
1000; SSE4:       # %bb.0: # %entry
1001; SSE4-NEXT:    pminuw %xmm2, %xmm0
1002; SSE4-NEXT:    pminuw %xmm3, %xmm1
1003; SSE4-NEXT:    retq
1004;
1005; AVX1-LABEL: test37:
1006; AVX1:       # %bb.0: # %entry
1007; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1008; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1009; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1010; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1011; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1012; AVX1-NEXT:    retq
1013;
1014; AVX2-LABEL: test37:
1015; AVX2:       # %bb.0: # %entry
1016; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1017; AVX2-NEXT:    retq
1018;
1019; AVX512F-LABEL: test37:
1020; AVX512F:       # %bb.0: # %entry
1021; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1022; AVX512F-NEXT:    retq
1023entry:
1024  %cmp = icmp ult <16 x i16> %a, %b
1025  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1026  ret <16 x i16> %sel
1027}
1028
1029define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1030; SSE2-LABEL: test38:
1031; SSE2:       # %bb.0: # %entry
1032; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1033; SSE2-NEXT:    pxor %xmm4, %xmm2
1034; SSE2-NEXT:    pxor %xmm4, %xmm0
1035; SSE2-NEXT:    pminsw %xmm2, %xmm0
1036; SSE2-NEXT:    pxor %xmm4, %xmm0
1037; SSE2-NEXT:    pxor %xmm4, %xmm3
1038; SSE2-NEXT:    pxor %xmm4, %xmm1
1039; SSE2-NEXT:    pminsw %xmm3, %xmm1
1040; SSE2-NEXT:    pxor %xmm4, %xmm1
1041; SSE2-NEXT:    retq
1042;
1043; SSE4-LABEL: test38:
1044; SSE4:       # %bb.0: # %entry
1045; SSE4-NEXT:    pminuw %xmm2, %xmm0
1046; SSE4-NEXT:    pminuw %xmm3, %xmm1
1047; SSE4-NEXT:    retq
1048;
1049; AVX1-LABEL: test38:
1050; AVX1:       # %bb.0: # %entry
1051; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1052; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1053; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1054; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1055; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1056; AVX1-NEXT:    retq
1057;
1058; AVX2-LABEL: test38:
1059; AVX2:       # %bb.0: # %entry
1060; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1061; AVX2-NEXT:    retq
1062;
1063; AVX512F-LABEL: test38:
1064; AVX512F:       # %bb.0: # %entry
1065; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1066; AVX512F-NEXT:    retq
1067entry:
1068  %cmp = icmp ule <16 x i16> %a, %b
1069  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1070  ret <16 x i16> %sel
1071}
1072
1073define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1074; SSE2-LABEL: test39:
1075; SSE2:       # %bb.0: # %entry
1076; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1077; SSE2-NEXT:    pxor %xmm4, %xmm2
1078; SSE2-NEXT:    pxor %xmm4, %xmm0
1079; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
1080; SSE2-NEXT:    pxor %xmm4, %xmm0
1081; SSE2-NEXT:    pxor %xmm4, %xmm3
1082; SSE2-NEXT:    pxor %xmm4, %xmm1
1083; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
1084; SSE2-NEXT:    pxor %xmm4, %xmm1
1085; SSE2-NEXT:    retq
1086;
1087; SSE4-LABEL: test39:
1088; SSE4:       # %bb.0: # %entry
1089; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1090; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1091; SSE4-NEXT:    retq
1092;
1093; AVX1-LABEL: test39:
1094; AVX1:       # %bb.0: # %entry
1095; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1096; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1097; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1098; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1099; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1100; AVX1-NEXT:    retq
1101;
1102; AVX2-LABEL: test39:
1103; AVX2:       # %bb.0: # %entry
1104; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1105; AVX2-NEXT:    retq
1106;
1107; AVX512F-LABEL: test39:
1108; AVX512F:       # %bb.0: # %entry
1109; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1110; AVX512F-NEXT:    retq
1111entry:
1112  %cmp = icmp ugt <16 x i16> %a, %b
1113  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1114  ret <16 x i16> %sel
1115}
1116
1117define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1118; SSE2-LABEL: test40:
1119; SSE2:       # %bb.0: # %entry
1120; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1121; SSE2-NEXT:    pxor %xmm4, %xmm2
1122; SSE2-NEXT:    pxor %xmm4, %xmm0
1123; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
1124; SSE2-NEXT:    pxor %xmm4, %xmm0
1125; SSE2-NEXT:    pxor %xmm4, %xmm3
1126; SSE2-NEXT:    pxor %xmm4, %xmm1
1127; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
1128; SSE2-NEXT:    pxor %xmm4, %xmm1
1129; SSE2-NEXT:    retq
1130;
1131; SSE4-LABEL: test40:
1132; SSE4:       # %bb.0: # %entry
1133; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1134; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1135; SSE4-NEXT:    retq
1136;
1137; AVX1-LABEL: test40:
1138; AVX1:       # %bb.0: # %entry
1139; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1140; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1141; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1142; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1143; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1144; AVX1-NEXT:    retq
1145;
1146; AVX2-LABEL: test40:
1147; AVX2:       # %bb.0: # %entry
1148; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1149; AVX2-NEXT:    retq
1150;
1151; AVX512F-LABEL: test40:
1152; AVX512F:       # %bb.0: # %entry
1153; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1154; AVX512F-NEXT:    retq
1155entry:
1156  %cmp = icmp uge <16 x i16> %a, %b
1157  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1158  ret <16 x i16> %sel
1159}
1160
1161define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1162; SSE2-LABEL: test41:
1163; SSE2:       # %bb.0: # %entry
1164; SSE2-NEXT:    movdqa %xmm2, %xmm4
1165; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1166; SSE2-NEXT:    pand %xmm4, %xmm0
1167; SSE2-NEXT:    pandn %xmm2, %xmm4
1168; SSE2-NEXT:    por %xmm4, %xmm0
1169; SSE2-NEXT:    movdqa %xmm3, %xmm2
1170; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1171; SSE2-NEXT:    pand %xmm2, %xmm1
1172; SSE2-NEXT:    pandn %xmm3, %xmm2
1173; SSE2-NEXT:    por %xmm2, %xmm1
1174; SSE2-NEXT:    retq
1175;
1176; SSE4-LABEL: test41:
1177; SSE4:       # %bb.0: # %entry
1178; SSE4-NEXT:    pminsd %xmm2, %xmm0
1179; SSE4-NEXT:    pminsd %xmm3, %xmm1
1180; SSE4-NEXT:    retq
1181;
1182; AVX1-LABEL: test41:
1183; AVX1:       # %bb.0: # %entry
1184; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1185; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1186; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1187; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1188; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1189; AVX1-NEXT:    retq
1190;
1191; AVX2-LABEL: test41:
1192; AVX2:       # %bb.0: # %entry
1193; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1194; AVX2-NEXT:    retq
1195;
1196; AVX512F-LABEL: test41:
1197; AVX512F:       # %bb.0: # %entry
1198; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1199; AVX512F-NEXT:    retq
1200entry:
1201  %cmp = icmp slt <8 x i32> %a, %b
1202  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1203  ret <8 x i32> %sel
1204}
1205
1206define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1207; SSE2-LABEL: test42:
1208; SSE2:       # %bb.0: # %entry
1209; SSE2-NEXT:    movdqa %xmm2, %xmm4
1210; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
1211; SSE2-NEXT:    pand %xmm4, %xmm0
1212; SSE2-NEXT:    pandn %xmm2, %xmm4
1213; SSE2-NEXT:    por %xmm4, %xmm0
1214; SSE2-NEXT:    movdqa %xmm3, %xmm2
1215; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1216; SSE2-NEXT:    pand %xmm2, %xmm1
1217; SSE2-NEXT:    pandn %xmm3, %xmm2
1218; SSE2-NEXT:    por %xmm2, %xmm1
1219; SSE2-NEXT:    retq
1220;
1221; SSE4-LABEL: test42:
1222; SSE4:       # %bb.0: # %entry
1223; SSE4-NEXT:    pminsd %xmm2, %xmm0
1224; SSE4-NEXT:    pminsd %xmm3, %xmm1
1225; SSE4-NEXT:    retq
1226;
1227; AVX1-LABEL: test42:
1228; AVX1:       # %bb.0: # %entry
1229; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1230; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1231; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1232; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1233; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1234; AVX1-NEXT:    retq
1235;
1236; AVX2-LABEL: test42:
1237; AVX2:       # %bb.0: # %entry
1238; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1239; AVX2-NEXT:    retq
1240;
1241; AVX512F-LABEL: test42:
1242; AVX512F:       # %bb.0: # %entry
1243; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1244; AVX512F-NEXT:    retq
1245entry:
1246  %cmp = icmp sle <8 x i32> %a, %b
1247  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1248  ret <8 x i32> %sel
1249}
1250
1251define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1252; SSE2-LABEL: test43:
1253; SSE2:       # %bb.0: # %entry
1254; SSE2-NEXT:    movdqa %xmm0, %xmm4
1255; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1256; SSE2-NEXT:    pand %xmm4, %xmm0
1257; SSE2-NEXT:    pandn %xmm2, %xmm4
1258; SSE2-NEXT:    por %xmm0, %xmm4
1259; SSE2-NEXT:    movdqa %xmm1, %xmm2
1260; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1261; SSE2-NEXT:    pand %xmm2, %xmm1
1262; SSE2-NEXT:    pandn %xmm3, %xmm2
1263; SSE2-NEXT:    por %xmm1, %xmm2
1264; SSE2-NEXT:    movdqa %xmm4, %xmm0
1265; SSE2-NEXT:    movdqa %xmm2, %xmm1
1266; SSE2-NEXT:    retq
1267;
1268; SSE4-LABEL: test43:
1269; SSE4:       # %bb.0: # %entry
1270; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1271; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1272; SSE4-NEXT:    retq
1273;
1274; AVX1-LABEL: test43:
1275; AVX1:       # %bb.0: # %entry
1276; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1277; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1278; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1279; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1280; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1281; AVX1-NEXT:    retq
1282;
1283; AVX2-LABEL: test43:
1284; AVX2:       # %bb.0: # %entry
1285; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1286; AVX2-NEXT:    retq
1287;
1288; AVX512F-LABEL: test43:
1289; AVX512F:       # %bb.0: # %entry
1290; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1291; AVX512F-NEXT:    retq
1292entry:
1293  %cmp = icmp sgt <8 x i32> %a, %b
1294  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1295  ret <8 x i32> %sel
1296}
1297
1298define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1299; SSE2-LABEL: test44:
1300; SSE2:       # %bb.0: # %entry
1301; SSE2-NEXT:    movdqa %xmm0, %xmm4
1302; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1303; SSE2-NEXT:    pand %xmm4, %xmm0
1304; SSE2-NEXT:    pandn %xmm2, %xmm4
1305; SSE2-NEXT:    por %xmm0, %xmm4
1306; SSE2-NEXT:    movdqa %xmm1, %xmm2
1307; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1308; SSE2-NEXT:    pand %xmm2, %xmm1
1309; SSE2-NEXT:    pandn %xmm3, %xmm2
1310; SSE2-NEXT:    por %xmm1, %xmm2
1311; SSE2-NEXT:    movdqa %xmm4, %xmm0
1312; SSE2-NEXT:    movdqa %xmm2, %xmm1
1313; SSE2-NEXT:    retq
1314;
1315; SSE4-LABEL: test44:
1316; SSE4:       # %bb.0: # %entry
1317; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1318; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1319; SSE4-NEXT:    retq
1320;
1321; AVX1-LABEL: test44:
1322; AVX1:       # %bb.0: # %entry
1323; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1324; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1325; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1326; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1327; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1328; AVX1-NEXT:    retq
1329;
1330; AVX2-LABEL: test44:
1331; AVX2:       # %bb.0: # %entry
1332; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1333; AVX2-NEXT:    retq
1334;
1335; AVX512F-LABEL: test44:
1336; AVX512F:       # %bb.0: # %entry
1337; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1338; AVX512F-NEXT:    retq
1339entry:
1340  %cmp = icmp sge <8 x i32> %a, %b
1341  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1342  ret <8 x i32> %sel
1343}
1344
1345define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1346; SSE2-LABEL: test45:
1347; SSE2:       # %bb.0: # %entry
1348; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1349; SSE2-NEXT:    movdqa %xmm0, %xmm5
1350; SSE2-NEXT:    pxor %xmm4, %xmm5
1351; SSE2-NEXT:    movdqa %xmm2, %xmm6
1352; SSE2-NEXT:    pxor %xmm4, %xmm6
1353; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1354; SSE2-NEXT:    pand %xmm6, %xmm0
1355; SSE2-NEXT:    pandn %xmm2, %xmm6
1356; SSE2-NEXT:    por %xmm6, %xmm0
1357; SSE2-NEXT:    movdqa %xmm1, %xmm2
1358; SSE2-NEXT:    pxor %xmm4, %xmm2
1359; SSE2-NEXT:    pxor %xmm3, %xmm4
1360; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1361; SSE2-NEXT:    pand %xmm4, %xmm1
1362; SSE2-NEXT:    pandn %xmm3, %xmm4
1363; SSE2-NEXT:    por %xmm4, %xmm1
1364; SSE2-NEXT:    retq
1365;
1366; SSE4-LABEL: test45:
1367; SSE4:       # %bb.0: # %entry
1368; SSE4-NEXT:    pminud %xmm2, %xmm0
1369; SSE4-NEXT:    pminud %xmm3, %xmm1
1370; SSE4-NEXT:    retq
1371;
1372; AVX1-LABEL: test45:
1373; AVX1:       # %bb.0: # %entry
1374; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1375; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1376; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1377; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1378; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1379; AVX1-NEXT:    retq
1380;
1381; AVX2-LABEL: test45:
1382; AVX2:       # %bb.0: # %entry
1383; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1384; AVX2-NEXT:    retq
1385;
1386; AVX512F-LABEL: test45:
1387; AVX512F:       # %bb.0: # %entry
1388; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1389; AVX512F-NEXT:    retq
1390entry:
1391  %cmp = icmp ult <8 x i32> %a, %b
1392  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1393  ret <8 x i32> %sel
1394}
1395
1396define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1397; SSE2-LABEL: test46:
1398; SSE2:       # %bb.0: # %entry
1399; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1400; SSE2-NEXT:    movdqa %xmm0, %xmm5
1401; SSE2-NEXT:    pxor %xmm4, %xmm5
1402; SSE2-NEXT:    movdqa %xmm2, %xmm6
1403; SSE2-NEXT:    pxor %xmm4, %xmm6
1404; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1405; SSE2-NEXT:    pand %xmm6, %xmm0
1406; SSE2-NEXT:    pandn %xmm2, %xmm6
1407; SSE2-NEXT:    por %xmm6, %xmm0
1408; SSE2-NEXT:    movdqa %xmm1, %xmm2
1409; SSE2-NEXT:    pxor %xmm4, %xmm2
1410; SSE2-NEXT:    pxor %xmm3, %xmm4
1411; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
1412; SSE2-NEXT:    pand %xmm4, %xmm1
1413; SSE2-NEXT:    pandn %xmm3, %xmm4
1414; SSE2-NEXT:    por %xmm4, %xmm1
1415; SSE2-NEXT:    retq
1416;
1417; SSE4-LABEL: test46:
1418; SSE4:       # %bb.0: # %entry
1419; SSE4-NEXT:    pminud %xmm2, %xmm0
1420; SSE4-NEXT:    pminud %xmm3, %xmm1
1421; SSE4-NEXT:    retq
1422;
1423; AVX1-LABEL: test46:
1424; AVX1:       # %bb.0: # %entry
1425; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1426; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1427; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1428; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1429; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1430; AVX1-NEXT:    retq
1431;
1432; AVX2-LABEL: test46:
1433; AVX2:       # %bb.0: # %entry
1434; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1435; AVX2-NEXT:    retq
1436;
1437; AVX512F-LABEL: test46:
1438; AVX512F:       # %bb.0: # %entry
1439; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1440; AVX512F-NEXT:    retq
1441entry:
1442  %cmp = icmp ule <8 x i32> %a, %b
1443  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1444  ret <8 x i32> %sel
1445}
1446
1447define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1448; SSE2-LABEL: test47:
1449; SSE2:       # %bb.0: # %entry
1450; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1451; SSE2-NEXT:    movdqa %xmm2, %xmm6
1452; SSE2-NEXT:    pxor %xmm5, %xmm6
1453; SSE2-NEXT:    movdqa %xmm0, %xmm4
1454; SSE2-NEXT:    pxor %xmm5, %xmm4
1455; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
1456; SSE2-NEXT:    pand %xmm4, %xmm0
1457; SSE2-NEXT:    pandn %xmm2, %xmm4
1458; SSE2-NEXT:    por %xmm0, %xmm4
1459; SSE2-NEXT:    movdqa %xmm3, %xmm0
1460; SSE2-NEXT:    pxor %xmm5, %xmm0
1461; SSE2-NEXT:    pxor %xmm1, %xmm5
1462; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
1463; SSE2-NEXT:    pand %xmm5, %xmm1
1464; SSE2-NEXT:    pandn %xmm3, %xmm5
1465; SSE2-NEXT:    por %xmm5, %xmm1
1466; SSE2-NEXT:    movdqa %xmm4, %xmm0
1467; SSE2-NEXT:    retq
1468;
1469; SSE4-LABEL: test47:
1470; SSE4:       # %bb.0: # %entry
1471; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1472; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1473; SSE4-NEXT:    retq
1474;
1475; AVX1-LABEL: test47:
1476; AVX1:       # %bb.0: # %entry
1477; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1478; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1479; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1480; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1481; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1482; AVX1-NEXT:    retq
1483;
1484; AVX2-LABEL: test47:
1485; AVX2:       # %bb.0: # %entry
1486; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1487; AVX2-NEXT:    retq
1488;
1489; AVX512F-LABEL: test47:
1490; AVX512F:       # %bb.0: # %entry
1491; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1492; AVX512F-NEXT:    retq
1493entry:
1494  %cmp = icmp ugt <8 x i32> %a, %b
1495  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1496  ret <8 x i32> %sel
1497}
1498
1499define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1500; SSE2-LABEL: test48:
1501; SSE2:       # %bb.0: # %entry
1502; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1503; SSE2-NEXT:    movdqa %xmm2, %xmm6
1504; SSE2-NEXT:    pxor %xmm5, %xmm6
1505; SSE2-NEXT:    movdqa %xmm0, %xmm4
1506; SSE2-NEXT:    pxor %xmm5, %xmm4
1507; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
1508; SSE2-NEXT:    pand %xmm4, %xmm0
1509; SSE2-NEXT:    pandn %xmm2, %xmm4
1510; SSE2-NEXT:    por %xmm0, %xmm4
1511; SSE2-NEXT:    movdqa %xmm3, %xmm0
1512; SSE2-NEXT:    pxor %xmm5, %xmm0
1513; SSE2-NEXT:    pxor %xmm1, %xmm5
1514; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
1515; SSE2-NEXT:    pand %xmm5, %xmm1
1516; SSE2-NEXT:    pandn %xmm3, %xmm5
1517; SSE2-NEXT:    por %xmm5, %xmm1
1518; SSE2-NEXT:    movdqa %xmm4, %xmm0
1519; SSE2-NEXT:    retq
1520;
1521; SSE4-LABEL: test48:
1522; SSE4:       # %bb.0: # %entry
1523; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1524; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1525; SSE4-NEXT:    retq
1526;
1527; AVX1-LABEL: test48:
1528; AVX1:       # %bb.0: # %entry
1529; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1530; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1531; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1532; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1533; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1534; AVX1-NEXT:    retq
1535;
1536; AVX2-LABEL: test48:
1537; AVX2:       # %bb.0: # %entry
1538; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1539; AVX2-NEXT:    retq
1540;
1541; AVX512F-LABEL: test48:
1542; AVX512F:       # %bb.0: # %entry
1543; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1544; AVX512F-NEXT:    retq
1545entry:
1546  %cmp = icmp uge <8 x i32> %a, %b
1547  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1548  ret <8 x i32> %sel
1549}
1550
1551define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1552; SSE2-LABEL: test49:
1553; SSE2:       # %bb.0: # %entry
1554; SSE2-NEXT:    movdqa %xmm0, %xmm2
1555; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1556; SSE2-NEXT:    pand %xmm2, %xmm0
1557; SSE2-NEXT:    pandn %xmm1, %xmm2
1558; SSE2-NEXT:    por %xmm0, %xmm2
1559; SSE2-NEXT:    movdqa %xmm2, %xmm0
1560; SSE2-NEXT:    retq
1561;
1562; SSE4-LABEL: test49:
1563; SSE4:       # %bb.0: # %entry
1564; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1565; SSE4-NEXT:    retq
1566;
1567; AVX-LABEL: test49:
1568; AVX:       # %bb.0: # %entry
1569; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1570; AVX-NEXT:    retq
1571entry:
1572  %cmp = icmp slt <16 x i8> %a, %b
1573  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1574  ret <16 x i8> %sel
1575}
1576
1577define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1578; SSE2-LABEL: test50:
1579; SSE2:       # %bb.0: # %entry
1580; SSE2-NEXT:    movdqa %xmm0, %xmm2
1581; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1582; SSE2-NEXT:    pand %xmm2, %xmm0
1583; SSE2-NEXT:    pandn %xmm1, %xmm2
1584; SSE2-NEXT:    por %xmm0, %xmm2
1585; SSE2-NEXT:    movdqa %xmm2, %xmm0
1586; SSE2-NEXT:    retq
1587;
1588; SSE4-LABEL: test50:
1589; SSE4:       # %bb.0: # %entry
1590; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1591; SSE4-NEXT:    retq
1592;
1593; AVX-LABEL: test50:
1594; AVX:       # %bb.0: # %entry
1595; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1596; AVX-NEXT:    retq
1597entry:
1598  %cmp = icmp sle <16 x i8> %a, %b
1599  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1600  ret <16 x i8> %sel
1601}
1602
1603define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1604; SSE2-LABEL: test51:
1605; SSE2:       # %bb.0: # %entry
1606; SSE2-NEXT:    movdqa %xmm1, %xmm2
1607; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1608; SSE2-NEXT:    pand %xmm2, %xmm0
1609; SSE2-NEXT:    pandn %xmm1, %xmm2
1610; SSE2-NEXT:    por %xmm2, %xmm0
1611; SSE2-NEXT:    retq
1612;
1613; SSE4-LABEL: test51:
1614; SSE4:       # %bb.0: # %entry
1615; SSE4-NEXT:    pminsb %xmm1, %xmm0
1616; SSE4-NEXT:    retq
1617;
1618; AVX-LABEL: test51:
1619; AVX:       # %bb.0: # %entry
1620; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1621; AVX-NEXT:    retq
1622entry:
1623  %cmp = icmp sgt <16 x i8> %a, %b
1624  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1625  ret <16 x i8> %sel
1626}
1627
1628define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1629; SSE2-LABEL: test52:
1630; SSE2:       # %bb.0: # %entry
1631; SSE2-NEXT:    movdqa %xmm1, %xmm2
1632; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1633; SSE2-NEXT:    pand %xmm2, %xmm0
1634; SSE2-NEXT:    pandn %xmm1, %xmm2
1635; SSE2-NEXT:    por %xmm2, %xmm0
1636; SSE2-NEXT:    retq
1637;
1638; SSE4-LABEL: test52:
1639; SSE4:       # %bb.0: # %entry
1640; SSE4-NEXT:    pminsb %xmm1, %xmm0
1641; SSE4-NEXT:    retq
1642;
1643; AVX-LABEL: test52:
1644; AVX:       # %bb.0: # %entry
1645; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1646; AVX-NEXT:    retq
1647entry:
1648  %cmp = icmp sge <16 x i8> %a, %b
1649  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1650  ret <16 x i8> %sel
1651}
1652
1653define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
1654; SSE-LABEL: test53:
1655; SSE:       # %bb.0: # %entry
1656; SSE-NEXT:    pmaxub %xmm1, %xmm0
1657; SSE-NEXT:    retq
1658;
1659; AVX-LABEL: test53:
1660; AVX:       # %bb.0: # %entry
1661; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1662; AVX-NEXT:    retq
1663entry:
1664  %cmp = icmp ult <16 x i8> %a, %b
1665  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1666  ret <16 x i8> %sel
1667}
1668
1669define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
1670; SSE-LABEL: test54:
1671; SSE:       # %bb.0: # %entry
1672; SSE-NEXT:    pmaxub %xmm1, %xmm0
1673; SSE-NEXT:    retq
1674;
1675; AVX-LABEL: test54:
1676; AVX:       # %bb.0: # %entry
1677; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1678; AVX-NEXT:    retq
1679entry:
1680  %cmp = icmp ule <16 x i8> %a, %b
1681  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1682  ret <16 x i8> %sel
1683}
1684
1685define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
1686; SSE-LABEL: test55:
1687; SSE:       # %bb.0: # %entry
1688; SSE-NEXT:    pminub %xmm1, %xmm0
1689; SSE-NEXT:    retq
1690;
1691; AVX-LABEL: test55:
1692; AVX:       # %bb.0: # %entry
1693; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1694; AVX-NEXT:    retq
1695entry:
1696  %cmp = icmp ugt <16 x i8> %a, %b
1697  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1698  ret <16 x i8> %sel
1699}
1700
1701define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1702; SSE-LABEL: test56:
1703; SSE:       # %bb.0: # %entry
1704; SSE-NEXT:    pminub %xmm1, %xmm0
1705; SSE-NEXT:    retq
1706;
1707; AVX-LABEL: test56:
1708; AVX:       # %bb.0: # %entry
1709; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1710; AVX-NEXT:    retq
1711entry:
1712  %cmp = icmp uge <16 x i8> %a, %b
1713  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1714  ret <16 x i8> %sel
1715}
1716
1717define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1718; SSE-LABEL: test57:
1719; SSE:       # %bb.0: # %entry
1720; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1721; SSE-NEXT:    retq
1722;
1723; AVX-LABEL: test57:
1724; AVX:       # %bb.0: # %entry
1725; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1726; AVX-NEXT:    retq
1727entry:
1728  %cmp = icmp slt <8 x i16> %a, %b
1729  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1730  ret <8 x i16> %sel
1731}
1732
1733define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
1734; SSE-LABEL: test58:
1735; SSE:       # %bb.0: # %entry
1736; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1737; SSE-NEXT:    retq
1738;
1739; AVX-LABEL: test58:
1740; AVX:       # %bb.0: # %entry
1741; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1742; AVX-NEXT:    retq
1743entry:
1744  %cmp = icmp sle <8 x i16> %a, %b
1745  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1746  ret <8 x i16> %sel
1747}
1748
1749define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
1750; SSE-LABEL: test59:
1751; SSE:       # %bb.0: # %entry
1752; SSE-NEXT:    pminsw %xmm1, %xmm0
1753; SSE-NEXT:    retq
1754;
1755; AVX-LABEL: test59:
1756; AVX:       # %bb.0: # %entry
1757; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1758; AVX-NEXT:    retq
1759entry:
1760  %cmp = icmp sgt <8 x i16> %a, %b
1761  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1762  ret <8 x i16> %sel
1763}
1764
1765define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
1766; SSE-LABEL: test60:
1767; SSE:       # %bb.0: # %entry
1768; SSE-NEXT:    pminsw %xmm1, %xmm0
1769; SSE-NEXT:    retq
1770;
1771; AVX-LABEL: test60:
1772; AVX:       # %bb.0: # %entry
1773; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1774; AVX-NEXT:    retq
1775entry:
1776  %cmp = icmp sge <8 x i16> %a, %b
1777  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1778  ret <8 x i16> %sel
1779}
1780
1781define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1782; SSE2-LABEL: test61:
1783; SSE2:       # %bb.0: # %entry
1784; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1785; SSE2-NEXT:    pxor %xmm2, %xmm1
1786; SSE2-NEXT:    pxor %xmm2, %xmm0
1787; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
1788; SSE2-NEXT:    pxor %xmm2, %xmm0
1789; SSE2-NEXT:    retq
1790;
1791; SSE4-LABEL: test61:
1792; SSE4:       # %bb.0: # %entry
1793; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1794; SSE4-NEXT:    retq
1795;
1796; AVX-LABEL: test61:
1797; AVX:       # %bb.0: # %entry
1798; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1799; AVX-NEXT:    retq
1800entry:
1801  %cmp = icmp ult <8 x i16> %a, %b
1802  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1803  ret <8 x i16> %sel
1804}
1805
1806define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1807; SSE2-LABEL: test62:
1808; SSE2:       # %bb.0: # %entry
1809; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1810; SSE2-NEXT:    pxor %xmm2, %xmm1
1811; SSE2-NEXT:    pxor %xmm2, %xmm0
1812; SSE2-NEXT:    pmaxsw %xmm1, %xmm0
1813; SSE2-NEXT:    pxor %xmm2, %xmm0
1814; SSE2-NEXT:    retq
1815;
1816; SSE4-LABEL: test62:
1817; SSE4:       # %bb.0: # %entry
1818; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1819; SSE4-NEXT:    retq
1820;
1821; AVX-LABEL: test62:
1822; AVX:       # %bb.0: # %entry
1823; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1824; AVX-NEXT:    retq
1825entry:
1826  %cmp = icmp ule <8 x i16> %a, %b
1827  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1828  ret <8 x i16> %sel
1829}
1830
1831define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1832; SSE2-LABEL: test63:
1833; SSE2:       # %bb.0: # %entry
1834; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1835; SSE2-NEXT:    pxor %xmm2, %xmm1
1836; SSE2-NEXT:    pxor %xmm2, %xmm0
1837; SSE2-NEXT:    pminsw %xmm1, %xmm0
1838; SSE2-NEXT:    pxor %xmm2, %xmm0
1839; SSE2-NEXT:    retq
1840;
1841; SSE4-LABEL: test63:
1842; SSE4:       # %bb.0: # %entry
1843; SSE4-NEXT:    pminuw %xmm1, %xmm0
1844; SSE4-NEXT:    retq
1845;
1846; AVX-LABEL: test63:
1847; AVX:       # %bb.0: # %entry
1848; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1849; AVX-NEXT:    retq
1850entry:
1851  %cmp = icmp ugt <8 x i16> %a, %b
1852  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1853  ret <8 x i16> %sel
1854}
1855
1856define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1857; SSE2-LABEL: test64:
1858; SSE2:       # %bb.0: # %entry
1859; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1860; SSE2-NEXT:    pxor %xmm2, %xmm1
1861; SSE2-NEXT:    pxor %xmm2, %xmm0
1862; SSE2-NEXT:    pminsw %xmm1, %xmm0
1863; SSE2-NEXT:    pxor %xmm2, %xmm0
1864; SSE2-NEXT:    retq
1865;
1866; SSE4-LABEL: test64:
1867; SSE4:       # %bb.0: # %entry
1868; SSE4-NEXT:    pminuw %xmm1, %xmm0
1869; SSE4-NEXT:    retq
1870;
1871; AVX-LABEL: test64:
1872; AVX:       # %bb.0: # %entry
1873; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1874; AVX-NEXT:    retq
1875entry:
1876  %cmp = icmp uge <8 x i16> %a, %b
1877  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1878  ret <8 x i16> %sel
1879}
1880
1881define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1882; SSE2-LABEL: test65:
1883; SSE2:       # %bb.0: # %entry
1884; SSE2-NEXT:    movdqa %xmm0, %xmm2
1885; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1886; SSE2-NEXT:    pand %xmm2, %xmm0
1887; SSE2-NEXT:    pandn %xmm1, %xmm2
1888; SSE2-NEXT:    por %xmm0, %xmm2
1889; SSE2-NEXT:    movdqa %xmm2, %xmm0
1890; SSE2-NEXT:    retq
1891;
1892; SSE4-LABEL: test65:
1893; SSE4:       # %bb.0: # %entry
1894; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1895; SSE4-NEXT:    retq
1896;
1897; AVX-LABEL: test65:
1898; AVX:       # %bb.0: # %entry
1899; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1900; AVX-NEXT:    retq
1901entry:
1902  %cmp = icmp slt <4 x i32> %a, %b
1903  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1904  ret <4 x i32> %sel
1905}
1906
1907define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
1908; SSE2-LABEL: test66:
1909; SSE2:       # %bb.0: # %entry
1910; SSE2-NEXT:    movdqa %xmm0, %xmm2
1911; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
1912; SSE2-NEXT:    pand %xmm2, %xmm0
1913; SSE2-NEXT:    pandn %xmm1, %xmm2
1914; SSE2-NEXT:    por %xmm0, %xmm2
1915; SSE2-NEXT:    movdqa %xmm2, %xmm0
1916; SSE2-NEXT:    retq
1917;
1918; SSE4-LABEL: test66:
1919; SSE4:       # %bb.0: # %entry
1920; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1921; SSE4-NEXT:    retq
1922;
1923; AVX-LABEL: test66:
1924; AVX:       # %bb.0: # %entry
1925; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1926; AVX-NEXT:    retq
1927entry:
1928  %cmp = icmp sle <4 x i32> %a, %b
1929  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1930  ret <4 x i32> %sel
1931}
1932
1933define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
1934; SSE2-LABEL: test67:
1935; SSE2:       # %bb.0: # %entry
1936; SSE2-NEXT:    movdqa %xmm1, %xmm2
1937; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1938; SSE2-NEXT:    pand %xmm2, %xmm0
1939; SSE2-NEXT:    pandn %xmm1, %xmm2
1940; SSE2-NEXT:    por %xmm2, %xmm0
1941; SSE2-NEXT:    retq
1942;
1943; SSE4-LABEL: test67:
1944; SSE4:       # %bb.0: # %entry
1945; SSE4-NEXT:    pminsd %xmm1, %xmm0
1946; SSE4-NEXT:    retq
1947;
1948; AVX-LABEL: test67:
1949; AVX:       # %bb.0: # %entry
1950; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1951; AVX-NEXT:    retq
1952entry:
1953  %cmp = icmp sgt <4 x i32> %a, %b
1954  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1955  ret <4 x i32> %sel
1956}
1957
1958define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
1959; SSE2-LABEL: test68:
1960; SSE2:       # %bb.0: # %entry
1961; SSE2-NEXT:    movdqa %xmm1, %xmm2
1962; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1963; SSE2-NEXT:    pand %xmm2, %xmm0
1964; SSE2-NEXT:    pandn %xmm1, %xmm2
1965; SSE2-NEXT:    por %xmm2, %xmm0
1966; SSE2-NEXT:    retq
1967;
1968; SSE4-LABEL: test68:
1969; SSE4:       # %bb.0: # %entry
1970; SSE4-NEXT:    pminsd %xmm1, %xmm0
1971; SSE4-NEXT:    retq
1972;
1973; AVX-LABEL: test68:
1974; AVX:       # %bb.0: # %entry
1975; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1976; AVX-NEXT:    retq
1977entry:
1978  %cmp = icmp sge <4 x i32> %a, %b
1979  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
1980  ret <4 x i32> %sel
1981}
1982
1983define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
1984; SSE2-LABEL: test69:
1985; SSE2:       # %bb.0: # %entry
1986; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1987; SSE2-NEXT:    movdqa %xmm1, %xmm3
1988; SSE2-NEXT:    pxor %xmm2, %xmm3
1989; SSE2-NEXT:    pxor %xmm0, %xmm2
1990; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1991; SSE2-NEXT:    pand %xmm2, %xmm0
1992; SSE2-NEXT:    pandn %xmm1, %xmm2
1993; SSE2-NEXT:    por %xmm2, %xmm0
1994; SSE2-NEXT:    retq
1995;
1996; SSE4-LABEL: test69:
1997; SSE4:       # %bb.0: # %entry
1998; SSE4-NEXT:    pmaxud %xmm1, %xmm0
1999; SSE4-NEXT:    retq
2000;
2001; AVX-LABEL: test69:
2002; AVX:       # %bb.0: # %entry
2003; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2004; AVX-NEXT:    retq
2005entry:
2006  %cmp = icmp ult <4 x i32> %a, %b
2007  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2008  ret <4 x i32> %sel
2009}
2010
2011define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
2012; SSE2-LABEL: test70:
2013; SSE2:       # %bb.0: # %entry
2014; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2015; SSE2-NEXT:    movdqa %xmm1, %xmm3
2016; SSE2-NEXT:    pxor %xmm2, %xmm3
2017; SSE2-NEXT:    pxor %xmm0, %xmm2
2018; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2019; SSE2-NEXT:    pand %xmm2, %xmm0
2020; SSE2-NEXT:    pandn %xmm1, %xmm2
2021; SSE2-NEXT:    por %xmm2, %xmm0
2022; SSE2-NEXT:    retq
2023;
2024; SSE4-LABEL: test70:
2025; SSE4:       # %bb.0: # %entry
2026; SSE4-NEXT:    pmaxud %xmm1, %xmm0
2027; SSE4-NEXT:    retq
2028;
2029; AVX-LABEL: test70:
2030; AVX:       # %bb.0: # %entry
2031; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2032; AVX-NEXT:    retq
2033entry:
2034  %cmp = icmp ule <4 x i32> %a, %b
2035  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2036  ret <4 x i32> %sel
2037}
2038
2039define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
2040; SSE2-LABEL: test71:
2041; SSE2:       # %bb.0: # %entry
2042; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2043; SSE2-NEXT:    movdqa %xmm0, %xmm3
2044; SSE2-NEXT:    pxor %xmm2, %xmm3
2045; SSE2-NEXT:    pxor %xmm1, %xmm2
2046; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2047; SSE2-NEXT:    pand %xmm2, %xmm0
2048; SSE2-NEXT:    pandn %xmm1, %xmm2
2049; SSE2-NEXT:    por %xmm2, %xmm0
2050; SSE2-NEXT:    retq
2051;
2052; SSE4-LABEL: test71:
2053; SSE4:       # %bb.0: # %entry
2054; SSE4-NEXT:    pminud %xmm1, %xmm0
2055; SSE4-NEXT:    retq
2056;
2057; AVX-LABEL: test71:
2058; AVX:       # %bb.0: # %entry
2059; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2060; AVX-NEXT:    retq
2061entry:
2062  %cmp = icmp ugt <4 x i32> %a, %b
2063  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2064  ret <4 x i32> %sel
2065}
2066
2067define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2068; SSE2-LABEL: test72:
2069; SSE2:       # %bb.0: # %entry
2070; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2071; SSE2-NEXT:    movdqa %xmm0, %xmm3
2072; SSE2-NEXT:    pxor %xmm2, %xmm3
2073; SSE2-NEXT:    pxor %xmm1, %xmm2
2074; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2075; SSE2-NEXT:    pand %xmm2, %xmm0
2076; SSE2-NEXT:    pandn %xmm1, %xmm2
2077; SSE2-NEXT:    por %xmm2, %xmm0
2078; SSE2-NEXT:    retq
2079;
2080; SSE4-LABEL: test72:
2081; SSE4:       # %bb.0: # %entry
2082; SSE4-NEXT:    pminud %xmm1, %xmm0
2083; SSE4-NEXT:    retq
2084;
2085; AVX-LABEL: test72:
2086; AVX:       # %bb.0: # %entry
2087; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2088; AVX-NEXT:    retq
2089entry:
2090  %cmp = icmp uge <4 x i32> %a, %b
2091  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2092  ret <4 x i32> %sel
2093}
2094
2095define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2096; SSE2-LABEL: test73:
2097; SSE2:       # %bb.0: # %entry
2098; SSE2-NEXT:    movdqa %xmm0, %xmm4
2099; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2100; SSE2-NEXT:    pand %xmm4, %xmm0
2101; SSE2-NEXT:    pandn %xmm2, %xmm4
2102; SSE2-NEXT:    por %xmm0, %xmm4
2103; SSE2-NEXT:    movdqa %xmm1, %xmm2
2104; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2105; SSE2-NEXT:    pand %xmm2, %xmm1
2106; SSE2-NEXT:    pandn %xmm3, %xmm2
2107; SSE2-NEXT:    por %xmm1, %xmm2
2108; SSE2-NEXT:    movdqa %xmm4, %xmm0
2109; SSE2-NEXT:    movdqa %xmm2, %xmm1
2110; SSE2-NEXT:    retq
2111;
2112; SSE4-LABEL: test73:
2113; SSE4:       # %bb.0: # %entry
2114; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2115; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2116; SSE4-NEXT:    retq
2117;
2118; AVX1-LABEL: test73:
2119; AVX1:       # %bb.0: # %entry
2120; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2121; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2122; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2123; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2124; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2125; AVX1-NEXT:    retq
2126;
2127; AVX2-LABEL: test73:
2128; AVX2:       # %bb.0: # %entry
2129; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2130; AVX2-NEXT:    retq
2131;
2132; AVX512F-LABEL: test73:
2133; AVX512F:       # %bb.0: # %entry
2134; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2135; AVX512F-NEXT:    retq
2136entry:
2137  %cmp = icmp slt <32 x i8> %a, %b
2138  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2139  ret <32 x i8> %sel
2140}
2141
2142define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2143; SSE2-LABEL: test74:
2144; SSE2:       # %bb.0: # %entry
2145; SSE2-NEXT:    movdqa %xmm0, %xmm4
2146; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
2147; SSE2-NEXT:    pand %xmm4, %xmm0
2148; SSE2-NEXT:    pandn %xmm2, %xmm4
2149; SSE2-NEXT:    por %xmm0, %xmm4
2150; SSE2-NEXT:    movdqa %xmm1, %xmm2
2151; SSE2-NEXT:    pcmpgtb %xmm3, %xmm2
2152; SSE2-NEXT:    pand %xmm2, %xmm1
2153; SSE2-NEXT:    pandn %xmm3, %xmm2
2154; SSE2-NEXT:    por %xmm1, %xmm2
2155; SSE2-NEXT:    movdqa %xmm4, %xmm0
2156; SSE2-NEXT:    movdqa %xmm2, %xmm1
2157; SSE2-NEXT:    retq
2158;
2159; SSE4-LABEL: test74:
2160; SSE4:       # %bb.0: # %entry
2161; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2162; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2163; SSE4-NEXT:    retq
2164;
2165; AVX1-LABEL: test74:
2166; AVX1:       # %bb.0: # %entry
2167; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2168; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2169; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2170; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2171; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2172; AVX1-NEXT:    retq
2173;
2174; AVX2-LABEL: test74:
2175; AVX2:       # %bb.0: # %entry
2176; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2177; AVX2-NEXT:    retq
2178;
2179; AVX512F-LABEL: test74:
2180; AVX512F:       # %bb.0: # %entry
2181; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2182; AVX512F-NEXT:    retq
2183entry:
2184  %cmp = icmp sle <32 x i8> %a, %b
2185  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2186  ret <32 x i8> %sel
2187}
2188
2189define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2190; SSE2-LABEL: test75:
2191; SSE2:       # %bb.0: # %entry
2192; SSE2-NEXT:    movdqa %xmm2, %xmm4
2193; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2194; SSE2-NEXT:    pand %xmm4, %xmm0
2195; SSE2-NEXT:    pandn %xmm2, %xmm4
2196; SSE2-NEXT:    por %xmm4, %xmm0
2197; SSE2-NEXT:    movdqa %xmm3, %xmm2
2198; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2199; SSE2-NEXT:    pand %xmm2, %xmm1
2200; SSE2-NEXT:    pandn %xmm3, %xmm2
2201; SSE2-NEXT:    por %xmm2, %xmm1
2202; SSE2-NEXT:    retq
2203;
2204; SSE4-LABEL: test75:
2205; SSE4:       # %bb.0: # %entry
2206; SSE4-NEXT:    pminsb %xmm2, %xmm0
2207; SSE4-NEXT:    pminsb %xmm3, %xmm1
2208; SSE4-NEXT:    retq
2209;
2210; AVX1-LABEL: test75:
2211; AVX1:       # %bb.0: # %entry
2212; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2213; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2214; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2215; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2216; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2217; AVX1-NEXT:    retq
2218;
2219; AVX2-LABEL: test75:
2220; AVX2:       # %bb.0: # %entry
2221; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2222; AVX2-NEXT:    retq
2223;
2224; AVX512F-LABEL: test75:
2225; AVX512F:       # %bb.0: # %entry
2226; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2227; AVX512F-NEXT:    retq
2228entry:
2229  %cmp = icmp sgt <32 x i8> %a, %b
2230  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2231  ret <32 x i8> %sel
2232}
2233
2234define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2235; SSE2-LABEL: test76:
2236; SSE2:       # %bb.0: # %entry
2237; SSE2-NEXT:    movdqa %xmm2, %xmm4
2238; SSE2-NEXT:    pcmpgtb %xmm0, %xmm4
2239; SSE2-NEXT:    pand %xmm4, %xmm0
2240; SSE2-NEXT:    pandn %xmm2, %xmm4
2241; SSE2-NEXT:    por %xmm4, %xmm0
2242; SSE2-NEXT:    movdqa %xmm3, %xmm2
2243; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
2244; SSE2-NEXT:    pand %xmm2, %xmm1
2245; SSE2-NEXT:    pandn %xmm3, %xmm2
2246; SSE2-NEXT:    por %xmm2, %xmm1
2247; SSE2-NEXT:    retq
2248;
2249; SSE4-LABEL: test76:
2250; SSE4:       # %bb.0: # %entry
2251; SSE4-NEXT:    pminsb %xmm2, %xmm0
2252; SSE4-NEXT:    pminsb %xmm3, %xmm1
2253; SSE4-NEXT:    retq
2254;
2255; AVX1-LABEL: test76:
2256; AVX1:       # %bb.0: # %entry
2257; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2258; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2259; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2260; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2261; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2262; AVX1-NEXT:    retq
2263;
2264; AVX2-LABEL: test76:
2265; AVX2:       # %bb.0: # %entry
2266; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2267; AVX2-NEXT:    retq
2268;
2269; AVX512F-LABEL: test76:
2270; AVX512F:       # %bb.0: # %entry
2271; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2272; AVX512F-NEXT:    retq
2273entry:
2274  %cmp = icmp sge <32 x i8> %a, %b
2275  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2276  ret <32 x i8> %sel
2277}
2278
2279define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2280; SSE-LABEL: test77:
2281; SSE:       # %bb.0: # %entry
2282; SSE-NEXT:    pmaxub %xmm2, %xmm0
2283; SSE-NEXT:    pmaxub %xmm3, %xmm1
2284; SSE-NEXT:    retq
2285;
2286; AVX1-LABEL: test77:
2287; AVX1:       # %bb.0: # %entry
2288; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2289; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2290; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2291; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2292; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2293; AVX1-NEXT:    retq
2294;
2295; AVX2-LABEL: test77:
2296; AVX2:       # %bb.0: # %entry
2297; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2298; AVX2-NEXT:    retq
2299;
2300; AVX512F-LABEL: test77:
2301; AVX512F:       # %bb.0: # %entry
2302; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2303; AVX512F-NEXT:    retq
2304entry:
2305  %cmp = icmp ult <32 x i8> %a, %b
2306  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2307  ret <32 x i8> %sel
2308}
2309
2310define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2311; SSE-LABEL: test78:
2312; SSE:       # %bb.0: # %entry
2313; SSE-NEXT:    pmaxub %xmm2, %xmm0
2314; SSE-NEXT:    pmaxub %xmm3, %xmm1
2315; SSE-NEXT:    retq
2316;
2317; AVX1-LABEL: test78:
2318; AVX1:       # %bb.0: # %entry
2319; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2320; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2321; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2322; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2323; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2324; AVX1-NEXT:    retq
2325;
2326; AVX2-LABEL: test78:
2327; AVX2:       # %bb.0: # %entry
2328; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2329; AVX2-NEXT:    retq
2330;
2331; AVX512F-LABEL: test78:
2332; AVX512F:       # %bb.0: # %entry
2333; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2334; AVX512F-NEXT:    retq
2335entry:
2336  %cmp = icmp ule <32 x i8> %a, %b
2337  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2338  ret <32 x i8> %sel
2339}
2340
2341define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2342; SSE-LABEL: test79:
2343; SSE:       # %bb.0: # %entry
2344; SSE-NEXT:    pminub %xmm2, %xmm0
2345; SSE-NEXT:    pminub %xmm3, %xmm1
2346; SSE-NEXT:    retq
2347;
2348; AVX1-LABEL: test79:
2349; AVX1:       # %bb.0: # %entry
2350; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2351; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2352; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2353; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2354; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2355; AVX1-NEXT:    retq
2356;
2357; AVX2-LABEL: test79:
2358; AVX2:       # %bb.0: # %entry
2359; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2360; AVX2-NEXT:    retq
2361;
2362; AVX512F-LABEL: test79:
2363; AVX512F:       # %bb.0: # %entry
2364; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2365; AVX512F-NEXT:    retq
2366entry:
2367  %cmp = icmp ugt <32 x i8> %a, %b
2368  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2369  ret <32 x i8> %sel
2370}
2371
2372define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2373; SSE-LABEL: test80:
2374; SSE:       # %bb.0: # %entry
2375; SSE-NEXT:    pminub %xmm2, %xmm0
2376; SSE-NEXT:    pminub %xmm3, %xmm1
2377; SSE-NEXT:    retq
2378;
2379; AVX1-LABEL: test80:
2380; AVX1:       # %bb.0: # %entry
2381; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2382; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2383; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2384; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2385; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2386; AVX1-NEXT:    retq
2387;
2388; AVX2-LABEL: test80:
2389; AVX2:       # %bb.0: # %entry
2390; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2391; AVX2-NEXT:    retq
2392;
2393; AVX512F-LABEL: test80:
2394; AVX512F:       # %bb.0: # %entry
2395; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2396; AVX512F-NEXT:    retq
2397entry:
2398  %cmp = icmp uge <32 x i8> %a, %b
2399  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2400  ret <32 x i8> %sel
2401}
2402
2403define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2404; SSE-LABEL: test81:
2405; SSE:       # %bb.0: # %entry
2406; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2407; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2408; SSE-NEXT:    retq
2409;
2410; AVX1-LABEL: test81:
2411; AVX1:       # %bb.0: # %entry
2412; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2413; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2414; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2415; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2416; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2417; AVX1-NEXT:    retq
2418;
2419; AVX2-LABEL: test81:
2420; AVX2:       # %bb.0: # %entry
2421; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2422; AVX2-NEXT:    retq
2423;
2424; AVX512F-LABEL: test81:
2425; AVX512F:       # %bb.0: # %entry
2426; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2427; AVX512F-NEXT:    retq
2428entry:
2429  %cmp = icmp slt <16 x i16> %a, %b
2430  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2431  ret <16 x i16> %sel
2432}
2433
2434define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2435; SSE-LABEL: test82:
2436; SSE:       # %bb.0: # %entry
2437; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2438; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2439; SSE-NEXT:    retq
2440;
2441; AVX1-LABEL: test82:
2442; AVX1:       # %bb.0: # %entry
2443; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2444; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2445; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2446; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2447; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2448; AVX1-NEXT:    retq
2449;
2450; AVX2-LABEL: test82:
2451; AVX2:       # %bb.0: # %entry
2452; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2453; AVX2-NEXT:    retq
2454;
2455; AVX512F-LABEL: test82:
2456; AVX512F:       # %bb.0: # %entry
2457; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2458; AVX512F-NEXT:    retq
2459entry:
2460  %cmp = icmp sle <16 x i16> %a, %b
2461  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2462  ret <16 x i16> %sel
2463}
2464
2465define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2466; SSE-LABEL: test83:
2467; SSE:       # %bb.0: # %entry
2468; SSE-NEXT:    pminsw %xmm2, %xmm0
2469; SSE-NEXT:    pminsw %xmm3, %xmm1
2470; SSE-NEXT:    retq
2471;
2472; AVX1-LABEL: test83:
2473; AVX1:       # %bb.0: # %entry
2474; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2475; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2476; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2477; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2478; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2479; AVX1-NEXT:    retq
2480;
2481; AVX2-LABEL: test83:
2482; AVX2:       # %bb.0: # %entry
2483; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2484; AVX2-NEXT:    retq
2485;
2486; AVX512F-LABEL: test83:
2487; AVX512F:       # %bb.0: # %entry
2488; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2489; AVX512F-NEXT:    retq
2490entry:
2491  %cmp = icmp sgt <16 x i16> %a, %b
2492  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2493  ret <16 x i16> %sel
2494}
2495
2496define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2497; SSE-LABEL: test84:
2498; SSE:       # %bb.0: # %entry
2499; SSE-NEXT:    pminsw %xmm2, %xmm0
2500; SSE-NEXT:    pminsw %xmm3, %xmm1
2501; SSE-NEXT:    retq
2502;
2503; AVX1-LABEL: test84:
2504; AVX1:       # %bb.0: # %entry
2505; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2506; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2507; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2508; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2509; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2510; AVX1-NEXT:    retq
2511;
2512; AVX2-LABEL: test84:
2513; AVX2:       # %bb.0: # %entry
2514; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2515; AVX2-NEXT:    retq
2516;
2517; AVX512F-LABEL: test84:
2518; AVX512F:       # %bb.0: # %entry
2519; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2520; AVX512F-NEXT:    retq
2521entry:
2522  %cmp = icmp sge <16 x i16> %a, %b
2523  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2524  ret <16 x i16> %sel
2525}
2526
2527define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2528; SSE2-LABEL: test85:
2529; SSE2:       # %bb.0: # %entry
2530; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2531; SSE2-NEXT:    pxor %xmm4, %xmm2
2532; SSE2-NEXT:    pxor %xmm4, %xmm0
2533; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
2534; SSE2-NEXT:    pxor %xmm4, %xmm0
2535; SSE2-NEXT:    pxor %xmm4, %xmm3
2536; SSE2-NEXT:    pxor %xmm4, %xmm1
2537; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
2538; SSE2-NEXT:    pxor %xmm4, %xmm1
2539; SSE2-NEXT:    retq
2540;
2541; SSE4-LABEL: test85:
2542; SSE4:       # %bb.0: # %entry
2543; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2544; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2545; SSE4-NEXT:    retq
2546;
2547; AVX1-LABEL: test85:
2548; AVX1:       # %bb.0: # %entry
2549; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2550; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2551; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2552; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2553; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2554; AVX1-NEXT:    retq
2555;
2556; AVX2-LABEL: test85:
2557; AVX2:       # %bb.0: # %entry
2558; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2559; AVX2-NEXT:    retq
2560;
2561; AVX512F-LABEL: test85:
2562; AVX512F:       # %bb.0: # %entry
2563; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2564; AVX512F-NEXT:    retq
2565entry:
2566  %cmp = icmp ult <16 x i16> %a, %b
2567  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2568  ret <16 x i16> %sel
2569}
2570
2571define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2572; SSE2-LABEL: test86:
2573; SSE2:       # %bb.0: # %entry
2574; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2575; SSE2-NEXT:    pxor %xmm4, %xmm2
2576; SSE2-NEXT:    pxor %xmm4, %xmm0
2577; SSE2-NEXT:    pmaxsw %xmm2, %xmm0
2578; SSE2-NEXT:    pxor %xmm4, %xmm0
2579; SSE2-NEXT:    pxor %xmm4, %xmm3
2580; SSE2-NEXT:    pxor %xmm4, %xmm1
2581; SSE2-NEXT:    pmaxsw %xmm3, %xmm1
2582; SSE2-NEXT:    pxor %xmm4, %xmm1
2583; SSE2-NEXT:    retq
2584;
2585; SSE4-LABEL: test86:
2586; SSE4:       # %bb.0: # %entry
2587; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2588; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2589; SSE4-NEXT:    retq
2590;
2591; AVX1-LABEL: test86:
2592; AVX1:       # %bb.0: # %entry
2593; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2594; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2595; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2596; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2597; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2598; AVX1-NEXT:    retq
2599;
2600; AVX2-LABEL: test86:
2601; AVX2:       # %bb.0: # %entry
2602; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2603; AVX2-NEXT:    retq
2604;
2605; AVX512F-LABEL: test86:
2606; AVX512F:       # %bb.0: # %entry
2607; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2608; AVX512F-NEXT:    retq
2609entry:
2610  %cmp = icmp ule <16 x i16> %a, %b
2611  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2612  ret <16 x i16> %sel
2613}
2614
2615define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2616; SSE2-LABEL: test87:
2617; SSE2:       # %bb.0: # %entry
2618; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2619; SSE2-NEXT:    pxor %xmm4, %xmm2
2620; SSE2-NEXT:    pxor %xmm4, %xmm0
2621; SSE2-NEXT:    pminsw %xmm2, %xmm0
2622; SSE2-NEXT:    pxor %xmm4, %xmm0
2623; SSE2-NEXT:    pxor %xmm4, %xmm3
2624; SSE2-NEXT:    pxor %xmm4, %xmm1
2625; SSE2-NEXT:    pminsw %xmm3, %xmm1
2626; SSE2-NEXT:    pxor %xmm4, %xmm1
2627; SSE2-NEXT:    retq
2628;
2629; SSE4-LABEL: test87:
2630; SSE4:       # %bb.0: # %entry
2631; SSE4-NEXT:    pminuw %xmm2, %xmm0
2632; SSE4-NEXT:    pminuw %xmm3, %xmm1
2633; SSE4-NEXT:    retq
2634;
2635; AVX1-LABEL: test87:
2636; AVX1:       # %bb.0: # %entry
2637; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2638; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2639; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2640; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2641; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2642; AVX1-NEXT:    retq
2643;
2644; AVX2-LABEL: test87:
2645; AVX2:       # %bb.0: # %entry
2646; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2647; AVX2-NEXT:    retq
2648;
2649; AVX512F-LABEL: test87:
2650; AVX512F:       # %bb.0: # %entry
2651; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2652; AVX512F-NEXT:    retq
2653entry:
2654  %cmp = icmp ugt <16 x i16> %a, %b
2655  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2656  ret <16 x i16> %sel
2657}
2658
2659define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2660; SSE2-LABEL: test88:
2661; SSE2:       # %bb.0: # %entry
2662; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2663; SSE2-NEXT:    pxor %xmm4, %xmm2
2664; SSE2-NEXT:    pxor %xmm4, %xmm0
2665; SSE2-NEXT:    pminsw %xmm2, %xmm0
2666; SSE2-NEXT:    pxor %xmm4, %xmm0
2667; SSE2-NEXT:    pxor %xmm4, %xmm3
2668; SSE2-NEXT:    pxor %xmm4, %xmm1
2669; SSE2-NEXT:    pminsw %xmm3, %xmm1
2670; SSE2-NEXT:    pxor %xmm4, %xmm1
2671; SSE2-NEXT:    retq
2672;
2673; SSE4-LABEL: test88:
2674; SSE4:       # %bb.0: # %entry
2675; SSE4-NEXT:    pminuw %xmm2, %xmm0
2676; SSE4-NEXT:    pminuw %xmm3, %xmm1
2677; SSE4-NEXT:    retq
2678;
2679; AVX1-LABEL: test88:
2680; AVX1:       # %bb.0: # %entry
2681; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2682; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2683; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2684; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2685; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2686; AVX1-NEXT:    retq
2687;
2688; AVX2-LABEL: test88:
2689; AVX2:       # %bb.0: # %entry
2690; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2691; AVX2-NEXT:    retq
2692;
2693; AVX512F-LABEL: test88:
2694; AVX512F:       # %bb.0: # %entry
2695; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2696; AVX512F-NEXT:    retq
2697entry:
2698  %cmp = icmp uge <16 x i16> %a, %b
2699  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2700  ret <16 x i16> %sel
2701}
2702
2703define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2704; SSE2-LABEL: test89:
2705; SSE2:       # %bb.0: # %entry
2706; SSE2-NEXT:    movdqa %xmm0, %xmm4
2707; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2708; SSE2-NEXT:    pand %xmm4, %xmm0
2709; SSE2-NEXT:    pandn %xmm2, %xmm4
2710; SSE2-NEXT:    por %xmm0, %xmm4
2711; SSE2-NEXT:    movdqa %xmm1, %xmm2
2712; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2713; SSE2-NEXT:    pand %xmm2, %xmm1
2714; SSE2-NEXT:    pandn %xmm3, %xmm2
2715; SSE2-NEXT:    por %xmm1, %xmm2
2716; SSE2-NEXT:    movdqa %xmm4, %xmm0
2717; SSE2-NEXT:    movdqa %xmm2, %xmm1
2718; SSE2-NEXT:    retq
2719;
2720; SSE4-LABEL: test89:
2721; SSE4:       # %bb.0: # %entry
2722; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2723; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2724; SSE4-NEXT:    retq
2725;
2726; AVX1-LABEL: test89:
2727; AVX1:       # %bb.0: # %entry
2728; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2729; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2730; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2731; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2732; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2733; AVX1-NEXT:    retq
2734;
2735; AVX2-LABEL: test89:
2736; AVX2:       # %bb.0: # %entry
2737; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2738; AVX2-NEXT:    retq
2739;
2740; AVX512F-LABEL: test89:
2741; AVX512F:       # %bb.0: # %entry
2742; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2743; AVX512F-NEXT:    retq
2744entry:
2745  %cmp = icmp slt <8 x i32> %a, %b
2746  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2747  ret <8 x i32> %sel
2748}
2749
2750define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2751; SSE2-LABEL: test90:
2752; SSE2:       # %bb.0: # %entry
2753; SSE2-NEXT:    movdqa %xmm0, %xmm4
2754; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
2755; SSE2-NEXT:    pand %xmm4, %xmm0
2756; SSE2-NEXT:    pandn %xmm2, %xmm4
2757; SSE2-NEXT:    por %xmm0, %xmm4
2758; SSE2-NEXT:    movdqa %xmm1, %xmm2
2759; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2760; SSE2-NEXT:    pand %xmm2, %xmm1
2761; SSE2-NEXT:    pandn %xmm3, %xmm2
2762; SSE2-NEXT:    por %xmm1, %xmm2
2763; SSE2-NEXT:    movdqa %xmm4, %xmm0
2764; SSE2-NEXT:    movdqa %xmm2, %xmm1
2765; SSE2-NEXT:    retq
2766;
2767; SSE4-LABEL: test90:
2768; SSE4:       # %bb.0: # %entry
2769; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2770; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2771; SSE4-NEXT:    retq
2772;
2773; AVX1-LABEL: test90:
2774; AVX1:       # %bb.0: # %entry
2775; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2776; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2777; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2778; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2779; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2780; AVX1-NEXT:    retq
2781;
2782; AVX2-LABEL: test90:
2783; AVX2:       # %bb.0: # %entry
2784; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2785; AVX2-NEXT:    retq
2786;
2787; AVX512F-LABEL: test90:
2788; AVX512F:       # %bb.0: # %entry
2789; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2790; AVX512F-NEXT:    retq
2791entry:
2792  %cmp = icmp sle <8 x i32> %a, %b
2793  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2794  ret <8 x i32> %sel
2795}
2796
2797define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2798; SSE2-LABEL: test91:
2799; SSE2:       # %bb.0: # %entry
2800; SSE2-NEXT:    movdqa %xmm2, %xmm4
2801; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2802; SSE2-NEXT:    pand %xmm4, %xmm0
2803; SSE2-NEXT:    pandn %xmm2, %xmm4
2804; SSE2-NEXT:    por %xmm4, %xmm0
2805; SSE2-NEXT:    movdqa %xmm3, %xmm2
2806; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2807; SSE2-NEXT:    pand %xmm2, %xmm1
2808; SSE2-NEXT:    pandn %xmm3, %xmm2
2809; SSE2-NEXT:    por %xmm2, %xmm1
2810; SSE2-NEXT:    retq
2811;
2812; SSE4-LABEL: test91:
2813; SSE4:       # %bb.0: # %entry
2814; SSE4-NEXT:    pminsd %xmm2, %xmm0
2815; SSE4-NEXT:    pminsd %xmm3, %xmm1
2816; SSE4-NEXT:    retq
2817;
2818; AVX1-LABEL: test91:
2819; AVX1:       # %bb.0: # %entry
2820; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2821; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2822; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2823; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2824; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2825; AVX1-NEXT:    retq
2826;
2827; AVX2-LABEL: test91:
2828; AVX2:       # %bb.0: # %entry
2829; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2830; AVX2-NEXT:    retq
2831;
2832; AVX512F-LABEL: test91:
2833; AVX512F:       # %bb.0: # %entry
2834; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2835; AVX512F-NEXT:    retq
2836entry:
2837  %cmp = icmp sgt <8 x i32> %a, %b
2838  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2839  ret <8 x i32> %sel
2840}
2841
2842define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
2843; SSE2-LABEL: test92:
2844; SSE2:       # %bb.0: # %entry
2845; SSE2-NEXT:    movdqa %xmm2, %xmm4
2846; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
2847; SSE2-NEXT:    pand %xmm4, %xmm0
2848; SSE2-NEXT:    pandn %xmm2, %xmm4
2849; SSE2-NEXT:    por %xmm4, %xmm0
2850; SSE2-NEXT:    movdqa %xmm3, %xmm2
2851; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2852; SSE2-NEXT:    pand %xmm2, %xmm1
2853; SSE2-NEXT:    pandn %xmm3, %xmm2
2854; SSE2-NEXT:    por %xmm2, %xmm1
2855; SSE2-NEXT:    retq
2856;
2857; SSE4-LABEL: test92:
2858; SSE4:       # %bb.0: # %entry
2859; SSE4-NEXT:    pminsd %xmm2, %xmm0
2860; SSE4-NEXT:    pminsd %xmm3, %xmm1
2861; SSE4-NEXT:    retq
2862;
2863; AVX1-LABEL: test92:
2864; AVX1:       # %bb.0: # %entry
2865; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2866; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2867; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2868; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2869; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2870; AVX1-NEXT:    retq
2871;
2872; AVX2-LABEL: test92:
2873; AVX2:       # %bb.0: # %entry
2874; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2875; AVX2-NEXT:    retq
2876;
2877; AVX512F-LABEL: test92:
2878; AVX512F:       # %bb.0: # %entry
2879; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2880; AVX512F-NEXT:    retq
2881entry:
2882  %cmp = icmp sge <8 x i32> %a, %b
2883  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2884  ret <8 x i32> %sel
2885}
2886
2887define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
2888; SSE2-LABEL: test93:
2889; SSE2:       # %bb.0: # %entry
2890; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
2891; SSE2-NEXT:    movdqa %xmm2, %xmm6
2892; SSE2-NEXT:    pxor %xmm5, %xmm6
2893; SSE2-NEXT:    movdqa %xmm0, %xmm4
2894; SSE2-NEXT:    pxor %xmm5, %xmm4
2895; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
2896; SSE2-NEXT:    pand %xmm4, %xmm0
2897; SSE2-NEXT:    pandn %xmm2, %xmm4
2898; SSE2-NEXT:    por %xmm0, %xmm4
2899; SSE2-NEXT:    movdqa %xmm3, %xmm0
2900; SSE2-NEXT:    pxor %xmm5, %xmm0
2901; SSE2-NEXT:    pxor %xmm1, %xmm5
2902; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
2903; SSE2-NEXT:    pand %xmm5, %xmm1
2904; SSE2-NEXT:    pandn %xmm3, %xmm5
2905; SSE2-NEXT:    por %xmm5, %xmm1
2906; SSE2-NEXT:    movdqa %xmm4, %xmm0
2907; SSE2-NEXT:    retq
2908;
2909; SSE4-LABEL: test93:
2910; SSE4:       # %bb.0: # %entry
2911; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2912; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2913; SSE4-NEXT:    retq
2914;
2915; AVX1-LABEL: test93:
2916; AVX1:       # %bb.0: # %entry
2917; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2918; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2919; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2920; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2921; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2922; AVX1-NEXT:    retq
2923;
2924; AVX2-LABEL: test93:
2925; AVX2:       # %bb.0: # %entry
2926; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2927; AVX2-NEXT:    retq
2928;
2929; AVX512F-LABEL: test93:
2930; AVX512F:       # %bb.0: # %entry
2931; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2932; AVX512F-NEXT:    retq
2933entry:
2934  %cmp = icmp ult <8 x i32> %a, %b
2935  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2936  ret <8 x i32> %sel
2937}
2938
2939define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
2940; SSE2-LABEL: test94:
2941; SSE2:       # %bb.0: # %entry
2942; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
2943; SSE2-NEXT:    movdqa %xmm2, %xmm6
2944; SSE2-NEXT:    pxor %xmm5, %xmm6
2945; SSE2-NEXT:    movdqa %xmm0, %xmm4
2946; SSE2-NEXT:    pxor %xmm5, %xmm4
2947; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
2948; SSE2-NEXT:    pand %xmm4, %xmm0
2949; SSE2-NEXT:    pandn %xmm2, %xmm4
2950; SSE2-NEXT:    por %xmm0, %xmm4
2951; SSE2-NEXT:    movdqa %xmm3, %xmm0
2952; SSE2-NEXT:    pxor %xmm5, %xmm0
2953; SSE2-NEXT:    pxor %xmm1, %xmm5
2954; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
2955; SSE2-NEXT:    pand %xmm5, %xmm1
2956; SSE2-NEXT:    pandn %xmm3, %xmm5
2957; SSE2-NEXT:    por %xmm5, %xmm1
2958; SSE2-NEXT:    movdqa %xmm4, %xmm0
2959; SSE2-NEXT:    retq
2960;
2961; SSE4-LABEL: test94:
2962; SSE4:       # %bb.0: # %entry
2963; SSE4-NEXT:    pmaxud %xmm2, %xmm0
2964; SSE4-NEXT:    pmaxud %xmm3, %xmm1
2965; SSE4-NEXT:    retq
2966;
2967; AVX1-LABEL: test94:
2968; AVX1:       # %bb.0: # %entry
2969; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2970; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2971; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
2972; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2973; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2974; AVX1-NEXT:    retq
2975;
2976; AVX2-LABEL: test94:
2977; AVX2:       # %bb.0: # %entry
2978; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2979; AVX2-NEXT:    retq
2980;
2981; AVX512F-LABEL: test94:
2982; AVX512F:       # %bb.0: # %entry
2983; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
2984; AVX512F-NEXT:    retq
2985entry:
2986  %cmp = icmp ule <8 x i32> %a, %b
2987  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2988  ret <8 x i32> %sel
2989}
2990
2991define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
2992; SSE2-LABEL: test95:
2993; SSE2:       # %bb.0: # %entry
2994; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
2995; SSE2-NEXT:    movdqa %xmm0, %xmm5
2996; SSE2-NEXT:    pxor %xmm4, %xmm5
2997; SSE2-NEXT:    movdqa %xmm2, %xmm6
2998; SSE2-NEXT:    pxor %xmm4, %xmm6
2999; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
3000; SSE2-NEXT:    pand %xmm6, %xmm0
3001; SSE2-NEXT:    pandn %xmm2, %xmm6
3002; SSE2-NEXT:    por %xmm6, %xmm0
3003; SSE2-NEXT:    movdqa %xmm1, %xmm2
3004; SSE2-NEXT:    pxor %xmm4, %xmm2
3005; SSE2-NEXT:    pxor %xmm3, %xmm4
3006; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3007; SSE2-NEXT:    pand %xmm4, %xmm1
3008; SSE2-NEXT:    pandn %xmm3, %xmm4
3009; SSE2-NEXT:    por %xmm4, %xmm1
3010; SSE2-NEXT:    retq
3011;
3012; SSE4-LABEL: test95:
3013; SSE4:       # %bb.0: # %entry
3014; SSE4-NEXT:    pminud %xmm2, %xmm0
3015; SSE4-NEXT:    pminud %xmm3, %xmm1
3016; SSE4-NEXT:    retq
3017;
3018; AVX1-LABEL: test95:
3019; AVX1:       # %bb.0: # %entry
3020; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3021; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3022; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
3023; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
3024; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3025; AVX1-NEXT:    retq
3026;
3027; AVX2-LABEL: test95:
3028; AVX2:       # %bb.0: # %entry
3029; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3030; AVX2-NEXT:    retq
3031;
3032; AVX512F-LABEL: test95:
3033; AVX512F:       # %bb.0: # %entry
3034; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3035; AVX512F-NEXT:    retq
3036entry:
3037  %cmp = icmp ugt <8 x i32> %a, %b
3038  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3039  ret <8 x i32> %sel
3040}
3041
3042define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
3043; SSE2-LABEL: test96:
3044; SSE2:       # %bb.0: # %entry
3045; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
3046; SSE2-NEXT:    movdqa %xmm0, %xmm5
3047; SSE2-NEXT:    pxor %xmm4, %xmm5
3048; SSE2-NEXT:    movdqa %xmm2, %xmm6
3049; SSE2-NEXT:    pxor %xmm4, %xmm6
3050; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
3051; SSE2-NEXT:    pand %xmm6, %xmm0
3052; SSE2-NEXT:    pandn %xmm2, %xmm6
3053; SSE2-NEXT:    por %xmm6, %xmm0
3054; SSE2-NEXT:    movdqa %xmm1, %xmm2
3055; SSE2-NEXT:    pxor %xmm4, %xmm2
3056; SSE2-NEXT:    pxor %xmm3, %xmm4
3057; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3058; SSE2-NEXT:    pand %xmm4, %xmm1
3059; SSE2-NEXT:    pandn %xmm3, %xmm4
3060; SSE2-NEXT:    por %xmm4, %xmm1
3061; SSE2-NEXT:    retq
3062;
3063; SSE4-LABEL: test96:
3064; SSE4:       # %bb.0: # %entry
3065; SSE4-NEXT:    pminud %xmm2, %xmm0
3066; SSE4-NEXT:    pminud %xmm3, %xmm1
3067; SSE4-NEXT:    retq
3068;
3069; AVX1-LABEL: test96:
3070; AVX1:       # %bb.0: # %entry
3071; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3072; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3073; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
3074; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
3075; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3076; AVX1-NEXT:    retq
3077;
3078; AVX2-LABEL: test96:
3079; AVX2:       # %bb.0: # %entry
3080; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3081; AVX2-NEXT:    retq
3082;
3083; AVX512F-LABEL: test96:
3084; AVX512F:       # %bb.0: # %entry
3085; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3086; AVX512F-NEXT:    retq
3087entry:
3088  %cmp = icmp uge <8 x i32> %a, %b
3089  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3090  ret <8 x i32> %sel
3091}
3092
3093; ----------------------------
3094
3095define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3096; SSE2-LABEL: test97:
3097; SSE2:       # %bb.0: # %entry
3098; SSE2-NEXT:    movdqa %xmm4, %xmm8
3099; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3100; SSE2-NEXT:    pand %xmm8, %xmm0
3101; SSE2-NEXT:    pandn %xmm4, %xmm8
3102; SSE2-NEXT:    por %xmm8, %xmm0
3103; SSE2-NEXT:    movdqa %xmm5, %xmm4
3104; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3105; SSE2-NEXT:    pand %xmm4, %xmm1
3106; SSE2-NEXT:    pandn %xmm5, %xmm4
3107; SSE2-NEXT:    por %xmm4, %xmm1
3108; SSE2-NEXT:    movdqa %xmm6, %xmm4
3109; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3110; SSE2-NEXT:    pand %xmm4, %xmm2
3111; SSE2-NEXT:    pandn %xmm6, %xmm4
3112; SSE2-NEXT:    por %xmm4, %xmm2
3113; SSE2-NEXT:    movdqa %xmm7, %xmm4
3114; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3115; SSE2-NEXT:    pand %xmm4, %xmm3
3116; SSE2-NEXT:    pandn %xmm7, %xmm4
3117; SSE2-NEXT:    por %xmm4, %xmm3
3118; SSE2-NEXT:    retq
3119;
3120; SSE4-LABEL: test97:
3121; SSE4:       # %bb.0: # %entry
3122; SSE4-NEXT:    pminsb %xmm4, %xmm0
3123; SSE4-NEXT:    pminsb %xmm5, %xmm1
3124; SSE4-NEXT:    pminsb %xmm6, %xmm2
3125; SSE4-NEXT:    pminsb %xmm7, %xmm3
3126; SSE4-NEXT:    retq
3127;
3128; AVX1-LABEL: test97:
3129; AVX1:       # %bb.0: # %entry
3130; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3131; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3132; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3133; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3134; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3135; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3136; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3137; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3138; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3139; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3140; AVX1-NEXT:    retq
3141;
3142; AVX2-LABEL: test97:
3143; AVX2:       # %bb.0: # %entry
3144; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3145; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3146; AVX2-NEXT:    retq
3147;
3148; AVX512BW-LABEL: test97:
3149; AVX512BW:       # %bb.0: # %entry
3150; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3151; AVX512BW-NEXT:    retq
3152entry:
3153  %cmp = icmp slt <64 x i8> %a, %b
3154  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3155  ret <64 x i8> %sel
3156}
3157
3158define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3159; SSE2-LABEL: test98:
3160; SSE2:       # %bb.0: # %entry
3161; SSE2-NEXT:    movdqa %xmm4, %xmm8
3162; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
3163; SSE2-NEXT:    pand %xmm8, %xmm0
3164; SSE2-NEXT:    pandn %xmm4, %xmm8
3165; SSE2-NEXT:    por %xmm8, %xmm0
3166; SSE2-NEXT:    movdqa %xmm5, %xmm4
3167; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
3168; SSE2-NEXT:    pand %xmm4, %xmm1
3169; SSE2-NEXT:    pandn %xmm5, %xmm4
3170; SSE2-NEXT:    por %xmm4, %xmm1
3171; SSE2-NEXT:    movdqa %xmm6, %xmm4
3172; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
3173; SSE2-NEXT:    pand %xmm4, %xmm2
3174; SSE2-NEXT:    pandn %xmm6, %xmm4
3175; SSE2-NEXT:    por %xmm4, %xmm2
3176; SSE2-NEXT:    movdqa %xmm7, %xmm4
3177; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
3178; SSE2-NEXT:    pand %xmm4, %xmm3
3179; SSE2-NEXT:    pandn %xmm7, %xmm4
3180; SSE2-NEXT:    por %xmm4, %xmm3
3181; SSE2-NEXT:    retq
3182;
3183; SSE4-LABEL: test98:
3184; SSE4:       # %bb.0: # %entry
3185; SSE4-NEXT:    pminsb %xmm4, %xmm0
3186; SSE4-NEXT:    pminsb %xmm5, %xmm1
3187; SSE4-NEXT:    pminsb %xmm6, %xmm2
3188; SSE4-NEXT:    pminsb %xmm7, %xmm3
3189; SSE4-NEXT:    retq
3190;
3191; AVX1-LABEL: test98:
3192; AVX1:       # %bb.0: # %entry
3193; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3194; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3195; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3196; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3197; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3198; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3199; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3200; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3201; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3202; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3203; AVX1-NEXT:    retq
3204;
3205; AVX2-LABEL: test98:
3206; AVX2:       # %bb.0: # %entry
3207; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3208; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3209; AVX2-NEXT:    retq
3210;
3211; AVX512BW-LABEL: test98:
3212; AVX512BW:       # %bb.0: # %entry
3213; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3214; AVX512BW-NEXT:    retq
3215entry:
3216  %cmp = icmp sle <64 x i8> %a, %b
3217  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3218  ret <64 x i8> %sel
3219}
3220
3221define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3222; SSE2-LABEL: test99:
3223; SSE2:       # %bb.0: # %entry
3224; SSE2-NEXT:    movdqa %xmm0, %xmm8
3225; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3226; SSE2-NEXT:    pand %xmm8, %xmm0
3227; SSE2-NEXT:    pandn %xmm4, %xmm8
3228; SSE2-NEXT:    por %xmm0, %xmm8
3229; SSE2-NEXT:    movdqa %xmm1, %xmm4
3230; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3231; SSE2-NEXT:    pand %xmm4, %xmm1
3232; SSE2-NEXT:    pandn %xmm5, %xmm4
3233; SSE2-NEXT:    por %xmm1, %xmm4
3234; SSE2-NEXT:    movdqa %xmm2, %xmm5
3235; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
3236; SSE2-NEXT:    pand %xmm5, %xmm2
3237; SSE2-NEXT:    pandn %xmm6, %xmm5
3238; SSE2-NEXT:    por %xmm2, %xmm5
3239; SSE2-NEXT:    movdqa %xmm3, %xmm6
3240; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
3241; SSE2-NEXT:    pand %xmm6, %xmm3
3242; SSE2-NEXT:    pandn %xmm7, %xmm6
3243; SSE2-NEXT:    por %xmm3, %xmm6
3244; SSE2-NEXT:    movdqa %xmm8, %xmm0
3245; SSE2-NEXT:    movdqa %xmm4, %xmm1
3246; SSE2-NEXT:    movdqa %xmm5, %xmm2
3247; SSE2-NEXT:    movdqa %xmm6, %xmm3
3248; SSE2-NEXT:    retq
3249;
3250; SSE4-LABEL: test99:
3251; SSE4:       # %bb.0: # %entry
3252; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3253; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3254; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3255; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3256; SSE4-NEXT:    retq
3257;
3258; AVX1-LABEL: test99:
3259; AVX1:       # %bb.0: # %entry
3260; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3261; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3262; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3263; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3264; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3265; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3266; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3267; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3268; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3269; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3270; AVX1-NEXT:    retq
3271;
3272; AVX2-LABEL: test99:
3273; AVX2:       # %bb.0: # %entry
3274; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3275; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3276; AVX2-NEXT:    retq
3277;
3278; AVX512BW-LABEL: test99:
3279; AVX512BW:       # %bb.0: # %entry
3280; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3281; AVX512BW-NEXT:    retq
3282entry:
3283  %cmp = icmp sgt <64 x i8> %a, %b
3284  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3285  ret <64 x i8> %sel
3286}
3287
3288define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3289; SSE2-LABEL: test100:
3290; SSE2:       # %bb.0: # %entry
3291; SSE2-NEXT:    movdqa %xmm0, %xmm8
3292; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
3293; SSE2-NEXT:    pand %xmm8, %xmm0
3294; SSE2-NEXT:    pandn %xmm4, %xmm8
3295; SSE2-NEXT:    por %xmm0, %xmm8
3296; SSE2-NEXT:    movdqa %xmm1, %xmm4
3297; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
3298; SSE2-NEXT:    pand %xmm4, %xmm1
3299; SSE2-NEXT:    pandn %xmm5, %xmm4
3300; SSE2-NEXT:    por %xmm1, %xmm4
3301; SSE2-NEXT:    movdqa %xmm2, %xmm5
3302; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
3303; SSE2-NEXT:    pand %xmm5, %xmm2
3304; SSE2-NEXT:    pandn %xmm6, %xmm5
3305; SSE2-NEXT:    por %xmm2, %xmm5
3306; SSE2-NEXT:    movdqa %xmm3, %xmm6
3307; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
3308; SSE2-NEXT:    pand %xmm6, %xmm3
3309; SSE2-NEXT:    pandn %xmm7, %xmm6
3310; SSE2-NEXT:    por %xmm3, %xmm6
3311; SSE2-NEXT:    movdqa %xmm8, %xmm0
3312; SSE2-NEXT:    movdqa %xmm4, %xmm1
3313; SSE2-NEXT:    movdqa %xmm5, %xmm2
3314; SSE2-NEXT:    movdqa %xmm6, %xmm3
3315; SSE2-NEXT:    retq
3316;
3317; SSE4-LABEL: test100:
3318; SSE4:       # %bb.0: # %entry
3319; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3320; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3321; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3322; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3323; SSE4-NEXT:    retq
3324;
3325; AVX1-LABEL: test100:
3326; AVX1:       # %bb.0: # %entry
3327; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3328; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3329; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3330; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3331; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3332; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3333; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3334; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3335; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3336; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3337; AVX1-NEXT:    retq
3338;
3339; AVX2-LABEL: test100:
3340; AVX2:       # %bb.0: # %entry
3341; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3342; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3343; AVX2-NEXT:    retq
3344;
3345; AVX512BW-LABEL: test100:
3346; AVX512BW:       # %bb.0: # %entry
3347; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3348; AVX512BW-NEXT:    retq
3349entry:
3350  %cmp = icmp sge <64 x i8> %a, %b
3351  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3352  ret <64 x i8> %sel
3353}
3354
3355define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3356; SSE-LABEL: test101:
3357; SSE:       # %bb.0: # %entry
3358; SSE-NEXT:    pminub %xmm4, %xmm0
3359; SSE-NEXT:    pminub %xmm5, %xmm1
3360; SSE-NEXT:    pminub %xmm6, %xmm2
3361; SSE-NEXT:    pminub %xmm7, %xmm3
3362; SSE-NEXT:    retq
3363;
3364; AVX1-LABEL: test101:
3365; AVX1:       # %bb.0: # %entry
3366; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3367; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3368; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3369; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3370; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3371; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3372; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3373; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3374; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3375; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3376; AVX1-NEXT:    retq
3377;
3378; AVX2-LABEL: test101:
3379; AVX2:       # %bb.0: # %entry
3380; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3381; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3382; AVX2-NEXT:    retq
3383;
3384; AVX512BW-LABEL: test101:
3385; AVX512BW:       # %bb.0: # %entry
3386; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3387; AVX512BW-NEXT:    retq
3388entry:
3389  %cmp = icmp ult <64 x i8> %a, %b
3390  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3391  ret <64 x i8> %sel
3392}
3393
3394define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3395; SSE-LABEL: test102:
3396; SSE:       # %bb.0: # %entry
3397; SSE-NEXT:    pminub %xmm4, %xmm0
3398; SSE-NEXT:    pminub %xmm5, %xmm1
3399; SSE-NEXT:    pminub %xmm6, %xmm2
3400; SSE-NEXT:    pminub %xmm7, %xmm3
3401; SSE-NEXT:    retq
3402;
3403; AVX1-LABEL: test102:
3404; AVX1:       # %bb.0: # %entry
3405; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3406; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3407; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3408; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3409; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3410; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3411; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3412; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3413; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3414; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3415; AVX1-NEXT:    retq
3416;
3417; AVX2-LABEL: test102:
3418; AVX2:       # %bb.0: # %entry
3419; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3420; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3421; AVX2-NEXT:    retq
3422;
3423; AVX512BW-LABEL: test102:
3424; AVX512BW:       # %bb.0: # %entry
3425; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3426; AVX512BW-NEXT:    retq
3427entry:
3428  %cmp = icmp ule <64 x i8> %a, %b
3429  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3430  ret <64 x i8> %sel
3431}
3432
3433define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3434; SSE-LABEL: test103:
3435; SSE:       # %bb.0: # %entry
3436; SSE-NEXT:    pmaxub %xmm4, %xmm0
3437; SSE-NEXT:    pmaxub %xmm5, %xmm1
3438; SSE-NEXT:    pmaxub %xmm6, %xmm2
3439; SSE-NEXT:    pmaxub %xmm7, %xmm3
3440; SSE-NEXT:    retq
3441;
3442; AVX1-LABEL: test103:
3443; AVX1:       # %bb.0: # %entry
3444; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3445; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3446; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3447; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3448; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3449; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3450; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3451; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3452; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3453; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3454; AVX1-NEXT:    retq
3455;
3456; AVX2-LABEL: test103:
3457; AVX2:       # %bb.0: # %entry
3458; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3459; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3460; AVX2-NEXT:    retq
3461;
3462; AVX512BW-LABEL: test103:
3463; AVX512BW:       # %bb.0: # %entry
3464; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3465; AVX512BW-NEXT:    retq
3466entry:
3467  %cmp = icmp ugt <64 x i8> %a, %b
3468  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3469  ret <64 x i8> %sel
3470}
3471
3472define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3473; SSE-LABEL: test104:
3474; SSE:       # %bb.0: # %entry
3475; SSE-NEXT:    pmaxub %xmm4, %xmm0
3476; SSE-NEXT:    pmaxub %xmm5, %xmm1
3477; SSE-NEXT:    pmaxub %xmm6, %xmm2
3478; SSE-NEXT:    pmaxub %xmm7, %xmm3
3479; SSE-NEXT:    retq
3480;
3481; AVX1-LABEL: test104:
3482; AVX1:       # %bb.0: # %entry
3483; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3484; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3485; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3486; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3487; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3488; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3489; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3490; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3491; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3492; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3493; AVX1-NEXT:    retq
3494;
3495; AVX2-LABEL: test104:
3496; AVX2:       # %bb.0: # %entry
3497; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3498; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3499; AVX2-NEXT:    retq
3500;
3501; AVX512BW-LABEL: test104:
3502; AVX512BW:       # %bb.0: # %entry
3503; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3504; AVX512BW-NEXT:    retq
3505entry:
3506  %cmp = icmp uge <64 x i8> %a, %b
3507  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3508  ret <64 x i8> %sel
3509}
3510
3511define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3512; SSE-LABEL: test105:
3513; SSE:       # %bb.0: # %entry
3514; SSE-NEXT:    pminsw %xmm4, %xmm0
3515; SSE-NEXT:    pminsw %xmm5, %xmm1
3516; SSE-NEXT:    pminsw %xmm6, %xmm2
3517; SSE-NEXT:    pminsw %xmm7, %xmm3
3518; SSE-NEXT:    retq
3519;
3520; AVX1-LABEL: test105:
3521; AVX1:       # %bb.0: # %entry
3522; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3523; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3524; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3525; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3526; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3527; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3528; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3529; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3530; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3531; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3532; AVX1-NEXT:    retq
3533;
3534; AVX2-LABEL: test105:
3535; AVX2:       # %bb.0: # %entry
3536; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3537; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3538; AVX2-NEXT:    retq
3539;
3540; AVX512BW-LABEL: test105:
3541; AVX512BW:       # %bb.0: # %entry
3542; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3543; AVX512BW-NEXT:    retq
3544entry:
3545  %cmp = icmp slt <32 x i16> %a, %b
3546  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3547  ret <32 x i16> %sel
3548}
3549
3550define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3551; SSE-LABEL: test106:
3552; SSE:       # %bb.0: # %entry
3553; SSE-NEXT:    pminsw %xmm4, %xmm0
3554; SSE-NEXT:    pminsw %xmm5, %xmm1
3555; SSE-NEXT:    pminsw %xmm6, %xmm2
3556; SSE-NEXT:    pminsw %xmm7, %xmm3
3557; SSE-NEXT:    retq
3558;
3559; AVX1-LABEL: test106:
3560; AVX1:       # %bb.0: # %entry
3561; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3562; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3563; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3564; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3565; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3566; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3567; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3568; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3569; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3570; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3571; AVX1-NEXT:    retq
3572;
3573; AVX2-LABEL: test106:
3574; AVX2:       # %bb.0: # %entry
3575; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3576; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3577; AVX2-NEXT:    retq
3578;
3579; AVX512BW-LABEL: test106:
3580; AVX512BW:       # %bb.0: # %entry
3581; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3582; AVX512BW-NEXT:    retq
3583entry:
3584  %cmp = icmp sle <32 x i16> %a, %b
3585  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3586  ret <32 x i16> %sel
3587}
3588
3589define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3590; SSE-LABEL: test107:
3591; SSE:       # %bb.0: # %entry
3592; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3593; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3594; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3595; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3596; SSE-NEXT:    retq
3597;
3598; AVX1-LABEL: test107:
3599; AVX1:       # %bb.0: # %entry
3600; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3601; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3602; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3603; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3604; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3605; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3606; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3607; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3608; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3609; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3610; AVX1-NEXT:    retq
3611;
3612; AVX2-LABEL: test107:
3613; AVX2:       # %bb.0: # %entry
3614; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3615; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3616; AVX2-NEXT:    retq
3617;
3618; AVX512BW-LABEL: test107:
3619; AVX512BW:       # %bb.0: # %entry
3620; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3621; AVX512BW-NEXT:    retq
3622entry:
3623  %cmp = icmp sgt <32 x i16> %a, %b
3624  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3625  ret <32 x i16> %sel
3626}
3627
3628define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3629; SSE-LABEL: test108:
3630; SSE:       # %bb.0: # %entry
3631; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3632; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3633; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3634; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3635; SSE-NEXT:    retq
3636;
3637; AVX1-LABEL: test108:
3638; AVX1:       # %bb.0: # %entry
3639; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3640; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3641; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3642; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3643; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3644; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3645; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3646; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3647; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3648; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3649; AVX1-NEXT:    retq
3650;
3651; AVX2-LABEL: test108:
3652; AVX2:       # %bb.0: # %entry
3653; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3654; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3655; AVX2-NEXT:    retq
3656;
3657; AVX512BW-LABEL: test108:
3658; AVX512BW:       # %bb.0: # %entry
3659; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3660; AVX512BW-NEXT:    retq
3661entry:
3662  %cmp = icmp sge <32 x i16> %a, %b
3663  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3664  ret <32 x i16> %sel
3665}
3666
3667define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3668; SSE2-LABEL: test109:
3669; SSE2:       # %bb.0: # %entry
3670; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3671; SSE2-NEXT:    pxor %xmm8, %xmm4
3672; SSE2-NEXT:    pxor %xmm8, %xmm0
3673; SSE2-NEXT:    pminsw %xmm4, %xmm0
3674; SSE2-NEXT:    pxor %xmm8, %xmm0
3675; SSE2-NEXT:    pxor %xmm8, %xmm5
3676; SSE2-NEXT:    pxor %xmm8, %xmm1
3677; SSE2-NEXT:    pminsw %xmm5, %xmm1
3678; SSE2-NEXT:    pxor %xmm8, %xmm1
3679; SSE2-NEXT:    pxor %xmm8, %xmm6
3680; SSE2-NEXT:    pxor %xmm8, %xmm2
3681; SSE2-NEXT:    pminsw %xmm6, %xmm2
3682; SSE2-NEXT:    pxor %xmm8, %xmm2
3683; SSE2-NEXT:    pxor %xmm8, %xmm7
3684; SSE2-NEXT:    pxor %xmm8, %xmm3
3685; SSE2-NEXT:    pminsw %xmm7, %xmm3
3686; SSE2-NEXT:    pxor %xmm8, %xmm3
3687; SSE2-NEXT:    retq
3688;
3689; SSE4-LABEL: test109:
3690; SSE4:       # %bb.0: # %entry
3691; SSE4-NEXT:    pminuw %xmm4, %xmm0
3692; SSE4-NEXT:    pminuw %xmm5, %xmm1
3693; SSE4-NEXT:    pminuw %xmm6, %xmm2
3694; SSE4-NEXT:    pminuw %xmm7, %xmm3
3695; SSE4-NEXT:    retq
3696;
3697; AVX1-LABEL: test109:
3698; AVX1:       # %bb.0: # %entry
3699; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3700; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3701; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3702; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3703; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3704; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3705; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3706; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3707; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3708; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3709; AVX1-NEXT:    retq
3710;
3711; AVX2-LABEL: test109:
3712; AVX2:       # %bb.0: # %entry
3713; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3714; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3715; AVX2-NEXT:    retq
3716;
3717; AVX512BW-LABEL: test109:
3718; AVX512BW:       # %bb.0: # %entry
3719; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3720; AVX512BW-NEXT:    retq
3721entry:
3722  %cmp = icmp ult <32 x i16> %a, %b
3723  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3724  ret <32 x i16> %sel
3725}
3726
3727define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3728; SSE2-LABEL: test110:
3729; SSE2:       # %bb.0: # %entry
3730; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3731; SSE2-NEXT:    pxor %xmm8, %xmm4
3732; SSE2-NEXT:    pxor %xmm8, %xmm0
3733; SSE2-NEXT:    pminsw %xmm4, %xmm0
3734; SSE2-NEXT:    pxor %xmm8, %xmm0
3735; SSE2-NEXT:    pxor %xmm8, %xmm5
3736; SSE2-NEXT:    pxor %xmm8, %xmm1
3737; SSE2-NEXT:    pminsw %xmm5, %xmm1
3738; SSE2-NEXT:    pxor %xmm8, %xmm1
3739; SSE2-NEXT:    pxor %xmm8, %xmm6
3740; SSE2-NEXT:    pxor %xmm8, %xmm2
3741; SSE2-NEXT:    pminsw %xmm6, %xmm2
3742; SSE2-NEXT:    pxor %xmm8, %xmm2
3743; SSE2-NEXT:    pxor %xmm8, %xmm7
3744; SSE2-NEXT:    pxor %xmm8, %xmm3
3745; SSE2-NEXT:    pminsw %xmm7, %xmm3
3746; SSE2-NEXT:    pxor %xmm8, %xmm3
3747; SSE2-NEXT:    retq
3748;
3749; SSE4-LABEL: test110:
3750; SSE4:       # %bb.0: # %entry
3751; SSE4-NEXT:    pminuw %xmm4, %xmm0
3752; SSE4-NEXT:    pminuw %xmm5, %xmm1
3753; SSE4-NEXT:    pminuw %xmm6, %xmm2
3754; SSE4-NEXT:    pminuw %xmm7, %xmm3
3755; SSE4-NEXT:    retq
3756;
3757; AVX1-LABEL: test110:
3758; AVX1:       # %bb.0: # %entry
3759; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3760; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3761; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3762; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3763; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3764; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3765; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3766; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3767; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3768; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3769; AVX1-NEXT:    retq
3770;
3771; AVX2-LABEL: test110:
3772; AVX2:       # %bb.0: # %entry
3773; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3774; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3775; AVX2-NEXT:    retq
3776;
3777; AVX512BW-LABEL: test110:
3778; AVX512BW:       # %bb.0: # %entry
3779; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3780; AVX512BW-NEXT:    retq
3781entry:
3782  %cmp = icmp ule <32 x i16> %a, %b
3783  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3784  ret <32 x i16> %sel
3785}
3786
3787define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
3788; SSE2-LABEL: test111:
3789; SSE2:       # %bb.0: # %entry
3790; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3791; SSE2-NEXT:    pxor %xmm8, %xmm4
3792; SSE2-NEXT:    pxor %xmm8, %xmm0
3793; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
3794; SSE2-NEXT:    pxor %xmm8, %xmm0
3795; SSE2-NEXT:    pxor %xmm8, %xmm5
3796; SSE2-NEXT:    pxor %xmm8, %xmm1
3797; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
3798; SSE2-NEXT:    pxor %xmm8, %xmm1
3799; SSE2-NEXT:    pxor %xmm8, %xmm6
3800; SSE2-NEXT:    pxor %xmm8, %xmm2
3801; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
3802; SSE2-NEXT:    pxor %xmm8, %xmm2
3803; SSE2-NEXT:    pxor %xmm8, %xmm7
3804; SSE2-NEXT:    pxor %xmm8, %xmm3
3805; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
3806; SSE2-NEXT:    pxor %xmm8, %xmm3
3807; SSE2-NEXT:    retq
3808;
3809; SSE4-LABEL: test111:
3810; SSE4:       # %bb.0: # %entry
3811; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3812; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3813; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3814; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3815; SSE4-NEXT:    retq
3816;
3817; AVX1-LABEL: test111:
3818; AVX1:       # %bb.0: # %entry
3819; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3820; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3821; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3822; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3823; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3824; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3825; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3826; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3827; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3828; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3829; AVX1-NEXT:    retq
3830;
3831; AVX2-LABEL: test111:
3832; AVX2:       # %bb.0: # %entry
3833; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3834; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3835; AVX2-NEXT:    retq
3836;
3837; AVX512BW-LABEL: test111:
3838; AVX512BW:       # %bb.0: # %entry
3839; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3840; AVX512BW-NEXT:    retq
3841entry:
3842  %cmp = icmp ugt <32 x i16> %a, %b
3843  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3844  ret <32 x i16> %sel
3845}
3846
3847define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
3848; SSE2-LABEL: test112:
3849; SSE2:       # %bb.0: # %entry
3850; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
3851; SSE2-NEXT:    pxor %xmm8, %xmm4
3852; SSE2-NEXT:    pxor %xmm8, %xmm0
3853; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
3854; SSE2-NEXT:    pxor %xmm8, %xmm0
3855; SSE2-NEXT:    pxor %xmm8, %xmm5
3856; SSE2-NEXT:    pxor %xmm8, %xmm1
3857; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
3858; SSE2-NEXT:    pxor %xmm8, %xmm1
3859; SSE2-NEXT:    pxor %xmm8, %xmm6
3860; SSE2-NEXT:    pxor %xmm8, %xmm2
3861; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
3862; SSE2-NEXT:    pxor %xmm8, %xmm2
3863; SSE2-NEXT:    pxor %xmm8, %xmm7
3864; SSE2-NEXT:    pxor %xmm8, %xmm3
3865; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
3866; SSE2-NEXT:    pxor %xmm8, %xmm3
3867; SSE2-NEXT:    retq
3868;
3869; SSE4-LABEL: test112:
3870; SSE4:       # %bb.0: # %entry
3871; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
3872; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
3873; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
3874; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
3875; SSE4-NEXT:    retq
3876;
3877; AVX1-LABEL: test112:
3878; AVX1:       # %bb.0: # %entry
3879; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3880; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3881; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
3882; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
3883; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3884; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3885; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3886; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
3887; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
3888; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3889; AVX1-NEXT:    retq
3890;
3891; AVX2-LABEL: test112:
3892; AVX2:       # %bb.0: # %entry
3893; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
3894; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
3895; AVX2-NEXT:    retq
3896;
3897; AVX512BW-LABEL: test112:
3898; AVX512BW:       # %bb.0: # %entry
3899; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
3900; AVX512BW-NEXT:    retq
3901entry:
3902  %cmp = icmp uge <32 x i16> %a, %b
3903  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3904  ret <32 x i16> %sel
3905}
3906
3907define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
3908; SSE2-LABEL: test113:
3909; SSE2:       # %bb.0: # %entry
3910; SSE2-NEXT:    movdqa %xmm4, %xmm8
3911; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
3912; SSE2-NEXT:    pand %xmm8, %xmm0
3913; SSE2-NEXT:    pandn %xmm4, %xmm8
3914; SSE2-NEXT:    por %xmm8, %xmm0
3915; SSE2-NEXT:    movdqa %xmm5, %xmm4
3916; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
3917; SSE2-NEXT:    pand %xmm4, %xmm1
3918; SSE2-NEXT:    pandn %xmm5, %xmm4
3919; SSE2-NEXT:    por %xmm4, %xmm1
3920; SSE2-NEXT:    movdqa %xmm6, %xmm4
3921; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3922; SSE2-NEXT:    pand %xmm4, %xmm2
3923; SSE2-NEXT:    pandn %xmm6, %xmm4
3924; SSE2-NEXT:    por %xmm4, %xmm2
3925; SSE2-NEXT:    movdqa %xmm7, %xmm4
3926; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
3927; SSE2-NEXT:    pand %xmm4, %xmm3
3928; SSE2-NEXT:    pandn %xmm7, %xmm4
3929; SSE2-NEXT:    por %xmm4, %xmm3
3930; SSE2-NEXT:    retq
3931;
3932; SSE4-LABEL: test113:
3933; SSE4:       # %bb.0: # %entry
3934; SSE4-NEXT:    pminsd %xmm4, %xmm0
3935; SSE4-NEXT:    pminsd %xmm5, %xmm1
3936; SSE4-NEXT:    pminsd %xmm6, %xmm2
3937; SSE4-NEXT:    pminsd %xmm7, %xmm3
3938; SSE4-NEXT:    retq
3939;
3940; AVX1-LABEL: test113:
3941; AVX1:       # %bb.0: # %entry
3942; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3943; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3944; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
3945; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
3946; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3947; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3948; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3949; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
3950; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
3951; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3952; AVX1-NEXT:    retq
3953;
3954; AVX2-LABEL: test113:
3955; AVX2:       # %bb.0: # %entry
3956; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
3957; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
3958; AVX2-NEXT:    retq
3959;
3960; AVX512F-LABEL: test113:
3961; AVX512F:       # %bb.0: # %entry
3962; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
3963; AVX512F-NEXT:    retq
3964entry:
3965  %cmp = icmp slt <16 x i32> %a, %b
3966  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
3967  ret <16 x i32> %sel
3968}
3969
3970define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
3971; SSE2-LABEL: test114:
3972; SSE2:       # %bb.0: # %entry
3973; SSE2-NEXT:    movdqa %xmm4, %xmm8
3974; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
3975; SSE2-NEXT:    pand %xmm8, %xmm0
3976; SSE2-NEXT:    pandn %xmm4, %xmm8
3977; SSE2-NEXT:    por %xmm8, %xmm0
3978; SSE2-NEXT:    movdqa %xmm5, %xmm4
3979; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
3980; SSE2-NEXT:    pand %xmm4, %xmm1
3981; SSE2-NEXT:    pandn %xmm5, %xmm4
3982; SSE2-NEXT:    por %xmm4, %xmm1
3983; SSE2-NEXT:    movdqa %xmm6, %xmm4
3984; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
3985; SSE2-NEXT:    pand %xmm4, %xmm2
3986; SSE2-NEXT:    pandn %xmm6, %xmm4
3987; SSE2-NEXT:    por %xmm4, %xmm2
3988; SSE2-NEXT:    movdqa %xmm7, %xmm4
3989; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
3990; SSE2-NEXT:    pand %xmm4, %xmm3
3991; SSE2-NEXT:    pandn %xmm7, %xmm4
3992; SSE2-NEXT:    por %xmm4, %xmm3
3993; SSE2-NEXT:    retq
3994;
3995; SSE4-LABEL: test114:
3996; SSE4:       # %bb.0: # %entry
3997; SSE4-NEXT:    pminsd %xmm4, %xmm0
3998; SSE4-NEXT:    pminsd %xmm5, %xmm1
3999; SSE4-NEXT:    pminsd %xmm6, %xmm2
4000; SSE4-NEXT:    pminsd %xmm7, %xmm3
4001; SSE4-NEXT:    retq
4002;
4003; AVX1-LABEL: test114:
4004; AVX1:       # %bb.0: # %entry
4005; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4006; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4007; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4008; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4009; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4010; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4011; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4012; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4013; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4014; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4015; AVX1-NEXT:    retq
4016;
4017; AVX2-LABEL: test114:
4018; AVX2:       # %bb.0: # %entry
4019; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4020; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4021; AVX2-NEXT:    retq
4022;
4023; AVX512F-LABEL: test114:
4024; AVX512F:       # %bb.0: # %entry
4025; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4026; AVX512F-NEXT:    retq
4027entry:
4028  %cmp = icmp sle <16 x i32> %a, %b
4029  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4030  ret <16 x i32> %sel
4031}
4032
4033define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4034; SSE2-LABEL: test115:
4035; SSE2:       # %bb.0: # %entry
4036; SSE2-NEXT:    movdqa %xmm0, %xmm8
4037; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4038; SSE2-NEXT:    pand %xmm8, %xmm0
4039; SSE2-NEXT:    pandn %xmm4, %xmm8
4040; SSE2-NEXT:    por %xmm0, %xmm8
4041; SSE2-NEXT:    movdqa %xmm1, %xmm4
4042; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4043; SSE2-NEXT:    pand %xmm4, %xmm1
4044; SSE2-NEXT:    pandn %xmm5, %xmm4
4045; SSE2-NEXT:    por %xmm1, %xmm4
4046; SSE2-NEXT:    movdqa %xmm2, %xmm5
4047; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
4048; SSE2-NEXT:    pand %xmm5, %xmm2
4049; SSE2-NEXT:    pandn %xmm6, %xmm5
4050; SSE2-NEXT:    por %xmm2, %xmm5
4051; SSE2-NEXT:    movdqa %xmm3, %xmm6
4052; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
4053; SSE2-NEXT:    pand %xmm6, %xmm3
4054; SSE2-NEXT:    pandn %xmm7, %xmm6
4055; SSE2-NEXT:    por %xmm3, %xmm6
4056; SSE2-NEXT:    movdqa %xmm8, %xmm0
4057; SSE2-NEXT:    movdqa %xmm4, %xmm1
4058; SSE2-NEXT:    movdqa %xmm5, %xmm2
4059; SSE2-NEXT:    movdqa %xmm6, %xmm3
4060; SSE2-NEXT:    retq
4061;
4062; SSE4-LABEL: test115:
4063; SSE4:       # %bb.0: # %entry
4064; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4065; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4066; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4067; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4068; SSE4-NEXT:    retq
4069;
4070; AVX1-LABEL: test115:
4071; AVX1:       # %bb.0: # %entry
4072; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4073; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4074; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4075; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4076; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4077; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4078; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4079; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4080; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4081; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4082; AVX1-NEXT:    retq
4083;
4084; AVX2-LABEL: test115:
4085; AVX2:       # %bb.0: # %entry
4086; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4087; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4088; AVX2-NEXT:    retq
4089;
4090; AVX512F-LABEL: test115:
4091; AVX512F:       # %bb.0: # %entry
4092; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4093; AVX512F-NEXT:    retq
4094entry:
4095  %cmp = icmp sgt <16 x i32> %a, %b
4096  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4097  ret <16 x i32> %sel
4098}
4099
4100define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4101; SSE2-LABEL: test116:
4102; SSE2:       # %bb.0: # %entry
4103; SSE2-NEXT:    movdqa %xmm0, %xmm8
4104; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4105; SSE2-NEXT:    pand %xmm8, %xmm0
4106; SSE2-NEXT:    pandn %xmm4, %xmm8
4107; SSE2-NEXT:    por %xmm0, %xmm8
4108; SSE2-NEXT:    movdqa %xmm1, %xmm4
4109; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4110; SSE2-NEXT:    pand %xmm4, %xmm1
4111; SSE2-NEXT:    pandn %xmm5, %xmm4
4112; SSE2-NEXT:    por %xmm1, %xmm4
4113; SSE2-NEXT:    movdqa %xmm2, %xmm5
4114; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
4115; SSE2-NEXT:    pand %xmm5, %xmm2
4116; SSE2-NEXT:    pandn %xmm6, %xmm5
4117; SSE2-NEXT:    por %xmm2, %xmm5
4118; SSE2-NEXT:    movdqa %xmm3, %xmm6
4119; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
4120; SSE2-NEXT:    pand %xmm6, %xmm3
4121; SSE2-NEXT:    pandn %xmm7, %xmm6
4122; SSE2-NEXT:    por %xmm3, %xmm6
4123; SSE2-NEXT:    movdqa %xmm8, %xmm0
4124; SSE2-NEXT:    movdqa %xmm4, %xmm1
4125; SSE2-NEXT:    movdqa %xmm5, %xmm2
4126; SSE2-NEXT:    movdqa %xmm6, %xmm3
4127; SSE2-NEXT:    retq
4128;
4129; SSE4-LABEL: test116:
4130; SSE4:       # %bb.0: # %entry
4131; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4132; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4133; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4134; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4135; SSE4-NEXT:    retq
4136;
4137; AVX1-LABEL: test116:
4138; AVX1:       # %bb.0: # %entry
4139; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4140; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4141; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4142; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4143; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4144; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4145; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4146; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4147; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4148; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4149; AVX1-NEXT:    retq
4150;
4151; AVX2-LABEL: test116:
4152; AVX2:       # %bb.0: # %entry
4153; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4154; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4155; AVX2-NEXT:    retq
4156;
4157; AVX512F-LABEL: test116:
4158; AVX512F:       # %bb.0: # %entry
4159; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4160; AVX512F-NEXT:    retq
4161entry:
4162  %cmp = icmp sge <16 x i32> %a, %b
4163  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4164  ret <16 x i32> %sel
4165}
4166
4167define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4168; SSE2-LABEL: test117:
4169; SSE2:       # %bb.0: # %entry
4170; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4171; SSE2-NEXT:    movdqa %xmm0, %xmm9
4172; SSE2-NEXT:    pxor %xmm8, %xmm9
4173; SSE2-NEXT:    movdqa %xmm4, %xmm10
4174; SSE2-NEXT:    pxor %xmm8, %xmm10
4175; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4176; SSE2-NEXT:    pand %xmm10, %xmm0
4177; SSE2-NEXT:    pandn %xmm4, %xmm10
4178; SSE2-NEXT:    por %xmm10, %xmm0
4179; SSE2-NEXT:    movdqa %xmm1, %xmm9
4180; SSE2-NEXT:    pxor %xmm8, %xmm9
4181; SSE2-NEXT:    movdqa %xmm5, %xmm4
4182; SSE2-NEXT:    pxor %xmm8, %xmm4
4183; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4184; SSE2-NEXT:    pand %xmm4, %xmm1
4185; SSE2-NEXT:    pandn %xmm5, %xmm4
4186; SSE2-NEXT:    por %xmm4, %xmm1
4187; SSE2-NEXT:    movdqa %xmm2, %xmm4
4188; SSE2-NEXT:    pxor %xmm8, %xmm4
4189; SSE2-NEXT:    movdqa %xmm6, %xmm5
4190; SSE2-NEXT:    pxor %xmm8, %xmm5
4191; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4192; SSE2-NEXT:    pand %xmm5, %xmm2
4193; SSE2-NEXT:    pandn %xmm6, %xmm5
4194; SSE2-NEXT:    por %xmm5, %xmm2
4195; SSE2-NEXT:    movdqa %xmm3, %xmm4
4196; SSE2-NEXT:    pxor %xmm8, %xmm4
4197; SSE2-NEXT:    pxor %xmm7, %xmm8
4198; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4199; SSE2-NEXT:    pand %xmm8, %xmm3
4200; SSE2-NEXT:    pandn %xmm7, %xmm8
4201; SSE2-NEXT:    por %xmm8, %xmm3
4202; SSE2-NEXT:    retq
4203;
4204; SSE4-LABEL: test117:
4205; SSE4:       # %bb.0: # %entry
4206; SSE4-NEXT:    pminud %xmm4, %xmm0
4207; SSE4-NEXT:    pminud %xmm5, %xmm1
4208; SSE4-NEXT:    pminud %xmm6, %xmm2
4209; SSE4-NEXT:    pminud %xmm7, %xmm3
4210; SSE4-NEXT:    retq
4211;
4212; AVX1-LABEL: test117:
4213; AVX1:       # %bb.0: # %entry
4214; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4215; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4216; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4217; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4218; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4219; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4220; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4221; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4222; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4223; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4224; AVX1-NEXT:    retq
4225;
4226; AVX2-LABEL: test117:
4227; AVX2:       # %bb.0: # %entry
4228; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4229; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4230; AVX2-NEXT:    retq
4231;
4232; AVX512F-LABEL: test117:
4233; AVX512F:       # %bb.0: # %entry
4234; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4235; AVX512F-NEXT:    retq
4236entry:
4237  %cmp = icmp ult <16 x i32> %a, %b
4238  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4239  ret <16 x i32> %sel
4240}
4241
4242define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4243; SSE2-LABEL: test118:
4244; SSE2:       # %bb.0: # %entry
4245; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4246; SSE2-NEXT:    movdqa %xmm0, %xmm9
4247; SSE2-NEXT:    pxor %xmm8, %xmm9
4248; SSE2-NEXT:    movdqa %xmm4, %xmm10
4249; SSE2-NEXT:    pxor %xmm8, %xmm10
4250; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4251; SSE2-NEXT:    pand %xmm10, %xmm0
4252; SSE2-NEXT:    pandn %xmm4, %xmm10
4253; SSE2-NEXT:    por %xmm10, %xmm0
4254; SSE2-NEXT:    movdqa %xmm1, %xmm9
4255; SSE2-NEXT:    pxor %xmm8, %xmm9
4256; SSE2-NEXT:    movdqa %xmm5, %xmm4
4257; SSE2-NEXT:    pxor %xmm8, %xmm4
4258; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
4259; SSE2-NEXT:    pand %xmm4, %xmm1
4260; SSE2-NEXT:    pandn %xmm5, %xmm4
4261; SSE2-NEXT:    por %xmm4, %xmm1
4262; SSE2-NEXT:    movdqa %xmm2, %xmm4
4263; SSE2-NEXT:    pxor %xmm8, %xmm4
4264; SSE2-NEXT:    movdqa %xmm6, %xmm5
4265; SSE2-NEXT:    pxor %xmm8, %xmm5
4266; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4267; SSE2-NEXT:    pand %xmm5, %xmm2
4268; SSE2-NEXT:    pandn %xmm6, %xmm5
4269; SSE2-NEXT:    por %xmm5, %xmm2
4270; SSE2-NEXT:    movdqa %xmm3, %xmm4
4271; SSE2-NEXT:    pxor %xmm8, %xmm4
4272; SSE2-NEXT:    pxor %xmm7, %xmm8
4273; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
4274; SSE2-NEXT:    pand %xmm8, %xmm3
4275; SSE2-NEXT:    pandn %xmm7, %xmm8
4276; SSE2-NEXT:    por %xmm8, %xmm3
4277; SSE2-NEXT:    retq
4278;
4279; SSE4-LABEL: test118:
4280; SSE4:       # %bb.0: # %entry
4281; SSE4-NEXT:    pminud %xmm4, %xmm0
4282; SSE4-NEXT:    pminud %xmm5, %xmm1
4283; SSE4-NEXT:    pminud %xmm6, %xmm2
4284; SSE4-NEXT:    pminud %xmm7, %xmm3
4285; SSE4-NEXT:    retq
4286;
4287; AVX1-LABEL: test118:
4288; AVX1:       # %bb.0: # %entry
4289; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4290; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4291; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4292; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4293; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4294; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4295; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4296; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4297; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4298; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4299; AVX1-NEXT:    retq
4300;
4301; AVX2-LABEL: test118:
4302; AVX2:       # %bb.0: # %entry
4303; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4304; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4305; AVX2-NEXT:    retq
4306;
4307; AVX512F-LABEL: test118:
4308; AVX512F:       # %bb.0: # %entry
4309; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4310; AVX512F-NEXT:    retq
4311entry:
4312  %cmp = icmp ule <16 x i32> %a, %b
4313  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4314  ret <16 x i32> %sel
4315}
4316
4317define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4318; SSE2-LABEL: test119:
4319; SSE2:       # %bb.0: # %entry
4320; SSE2-NEXT:    movdqa %xmm1, %xmm8
4321; SSE2-NEXT:    movdqa %xmm0, %xmm10
4322; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
4323; SSE2-NEXT:    movdqa %xmm4, %xmm1
4324; SSE2-NEXT:    pxor %xmm9, %xmm1
4325; SSE2-NEXT:    pxor %xmm9, %xmm0
4326; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
4327; SSE2-NEXT:    pand %xmm0, %xmm10
4328; SSE2-NEXT:    pandn %xmm4, %xmm0
4329; SSE2-NEXT:    por %xmm10, %xmm0
4330; SSE2-NEXT:    movdqa %xmm5, %xmm4
4331; SSE2-NEXT:    pxor %xmm9, %xmm4
4332; SSE2-NEXT:    movdqa %xmm8, %xmm1
4333; SSE2-NEXT:    pxor %xmm9, %xmm1
4334; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
4335; SSE2-NEXT:    pand %xmm1, %xmm8
4336; SSE2-NEXT:    pandn %xmm5, %xmm1
4337; SSE2-NEXT:    por %xmm8, %xmm1
4338; SSE2-NEXT:    movdqa %xmm6, %xmm5
4339; SSE2-NEXT:    pxor %xmm9, %xmm5
4340; SSE2-NEXT:    movdqa %xmm2, %xmm4
4341; SSE2-NEXT:    pxor %xmm9, %xmm4
4342; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4343; SSE2-NEXT:    pand %xmm4, %xmm2
4344; SSE2-NEXT:    pandn %xmm6, %xmm4
4345; SSE2-NEXT:    por %xmm2, %xmm4
4346; SSE2-NEXT:    movdqa %xmm7, %xmm2
4347; SSE2-NEXT:    pxor %xmm9, %xmm2
4348; SSE2-NEXT:    pxor %xmm3, %xmm9
4349; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
4350; SSE2-NEXT:    pand %xmm9, %xmm3
4351; SSE2-NEXT:    pandn %xmm7, %xmm9
4352; SSE2-NEXT:    por %xmm9, %xmm3
4353; SSE2-NEXT:    movdqa %xmm4, %xmm2
4354; SSE2-NEXT:    retq
4355;
4356; SSE4-LABEL: test119:
4357; SSE4:       # %bb.0: # %entry
4358; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4359; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4360; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4361; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4362; SSE4-NEXT:    retq
4363;
4364; AVX1-LABEL: test119:
4365; AVX1:       # %bb.0: # %entry
4366; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4367; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4368; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4369; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4370; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4371; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4372; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4373; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4374; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4375; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4376; AVX1-NEXT:    retq
4377;
4378; AVX2-LABEL: test119:
4379; AVX2:       # %bb.0: # %entry
4380; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4381; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4382; AVX2-NEXT:    retq
4383;
4384; AVX512F-LABEL: test119:
4385; AVX512F:       # %bb.0: # %entry
4386; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4387; AVX512F-NEXT:    retq
4388entry:
4389  %cmp = icmp ugt <16 x i32> %a, %b
4390  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4391  ret <16 x i32> %sel
4392}
4393
4394define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4395; SSE2-LABEL: test120:
4396; SSE2:       # %bb.0: # %entry
4397; SSE2-NEXT:    movdqa %xmm1, %xmm8
4398; SSE2-NEXT:    movdqa %xmm0, %xmm10
4399; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
4400; SSE2-NEXT:    movdqa %xmm4, %xmm1
4401; SSE2-NEXT:    pxor %xmm9, %xmm1
4402; SSE2-NEXT:    pxor %xmm9, %xmm0
4403; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
4404; SSE2-NEXT:    pand %xmm0, %xmm10
4405; SSE2-NEXT:    pandn %xmm4, %xmm0
4406; SSE2-NEXT:    por %xmm10, %xmm0
4407; SSE2-NEXT:    movdqa %xmm5, %xmm4
4408; SSE2-NEXT:    pxor %xmm9, %xmm4
4409; SSE2-NEXT:    movdqa %xmm8, %xmm1
4410; SSE2-NEXT:    pxor %xmm9, %xmm1
4411; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
4412; SSE2-NEXT:    pand %xmm1, %xmm8
4413; SSE2-NEXT:    pandn %xmm5, %xmm1
4414; SSE2-NEXT:    por %xmm8, %xmm1
4415; SSE2-NEXT:    movdqa %xmm6, %xmm5
4416; SSE2-NEXT:    pxor %xmm9, %xmm5
4417; SSE2-NEXT:    movdqa %xmm2, %xmm4
4418; SSE2-NEXT:    pxor %xmm9, %xmm4
4419; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
4420; SSE2-NEXT:    pand %xmm4, %xmm2
4421; SSE2-NEXT:    pandn %xmm6, %xmm4
4422; SSE2-NEXT:    por %xmm2, %xmm4
4423; SSE2-NEXT:    movdqa %xmm7, %xmm2
4424; SSE2-NEXT:    pxor %xmm9, %xmm2
4425; SSE2-NEXT:    pxor %xmm3, %xmm9
4426; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
4427; SSE2-NEXT:    pand %xmm9, %xmm3
4428; SSE2-NEXT:    pandn %xmm7, %xmm9
4429; SSE2-NEXT:    por %xmm9, %xmm3
4430; SSE2-NEXT:    movdqa %xmm4, %xmm2
4431; SSE2-NEXT:    retq
4432;
4433; SSE4-LABEL: test120:
4434; SSE4:       # %bb.0: # %entry
4435; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4436; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4437; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4438; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4439; SSE4-NEXT:    retq
4440;
4441; AVX1-LABEL: test120:
4442; AVX1:       # %bb.0: # %entry
4443; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4444; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4445; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4446; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4447; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4448; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4449; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4450; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4451; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4452; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4453; AVX1-NEXT:    retq
4454;
4455; AVX2-LABEL: test120:
4456; AVX2:       # %bb.0: # %entry
4457; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4458; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4459; AVX2-NEXT:    retq
4460;
4461; AVX512F-LABEL: test120:
4462; AVX512F:       # %bb.0: # %entry
4463; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4464; AVX512F-NEXT:    retq
4465entry:
4466  %cmp = icmp uge <16 x i32> %a, %b
4467  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4468  ret <16 x i32> %sel
4469}
4470
4471define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4472; SSE2-LABEL: test121:
4473; SSE2:       # %bb.0: # %entry
4474; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
4475; SSE2-NEXT:    movdqa %xmm0, %xmm9
4476; SSE2-NEXT:    pxor %xmm8, %xmm9
4477; SSE2-NEXT:    movdqa %xmm4, %xmm10
4478; SSE2-NEXT:    pxor %xmm8, %xmm10
4479; SSE2-NEXT:    movdqa %xmm10, %xmm11
4480; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4481; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4482; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4483; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4484; SSE2-NEXT:    pand %xmm12, %xmm9
4485; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4486; SSE2-NEXT:    por %xmm9, %xmm10
4487; SSE2-NEXT:    pand %xmm10, %xmm0
4488; SSE2-NEXT:    pandn %xmm4, %xmm10
4489; SSE2-NEXT:    por %xmm10, %xmm0
4490; SSE2-NEXT:    movdqa %xmm1, %xmm9
4491; SSE2-NEXT:    pxor %xmm8, %xmm9
4492; SSE2-NEXT:    movdqa %xmm5, %xmm4
4493; SSE2-NEXT:    pxor %xmm8, %xmm4
4494; SSE2-NEXT:    movdqa %xmm4, %xmm10
4495; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4496; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4497; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4498; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4499; SSE2-NEXT:    pand %xmm11, %xmm9
4500; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4501; SSE2-NEXT:    por %xmm9, %xmm4
4502; SSE2-NEXT:    pand %xmm4, %xmm1
4503; SSE2-NEXT:    pandn %xmm5, %xmm4
4504; SSE2-NEXT:    por %xmm4, %xmm1
4505; SSE2-NEXT:    movdqa %xmm2, %xmm4
4506; SSE2-NEXT:    pxor %xmm8, %xmm4
4507; SSE2-NEXT:    movdqa %xmm6, %xmm5
4508; SSE2-NEXT:    pxor %xmm8, %xmm5
4509; SSE2-NEXT:    movdqa %xmm5, %xmm9
4510; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4511; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4512; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4513; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4514; SSE2-NEXT:    pand %xmm10, %xmm4
4515; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4516; SSE2-NEXT:    por %xmm4, %xmm5
4517; SSE2-NEXT:    pand %xmm5, %xmm2
4518; SSE2-NEXT:    pandn %xmm6, %xmm5
4519; SSE2-NEXT:    por %xmm5, %xmm2
4520; SSE2-NEXT:    movdqa %xmm3, %xmm4
4521; SSE2-NEXT:    pxor %xmm8, %xmm4
4522; SSE2-NEXT:    pxor %xmm7, %xmm8
4523; SSE2-NEXT:    movdqa %xmm8, %xmm5
4524; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4525; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4526; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4527; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4528; SSE2-NEXT:    pand %xmm6, %xmm4
4529; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4530; SSE2-NEXT:    por %xmm4, %xmm5
4531; SSE2-NEXT:    pand %xmm5, %xmm3
4532; SSE2-NEXT:    pandn %xmm7, %xmm5
4533; SSE2-NEXT:    por %xmm5, %xmm3
4534; SSE2-NEXT:    retq
4535;
4536; SSE4-LABEL: test121:
4537; SSE4:       # %bb.0: # %entry
4538; SSE4-NEXT:    movdqa %xmm0, %xmm8
4539; SSE4-NEXT:    movdqa %xmm4, %xmm0
4540; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4541; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4542; SSE4-NEXT:    movdqa %xmm5, %xmm0
4543; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4544; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4545; SSE4-NEXT:    movdqa %xmm6, %xmm0
4546; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4547; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4548; SSE4-NEXT:    movdqa %xmm7, %xmm0
4549; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4550; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4551; SSE4-NEXT:    movapd %xmm4, %xmm0
4552; SSE4-NEXT:    movapd %xmm5, %xmm1
4553; SSE4-NEXT:    movapd %xmm6, %xmm2
4554; SSE4-NEXT:    movapd %xmm7, %xmm3
4555; SSE4-NEXT:    retq
4556;
4557; AVX1-LABEL: test121:
4558; AVX1:       # %bb.0: # %entry
4559; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4560; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4561; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4562; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4563; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4564; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4565; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4566; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4567; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4568; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4569; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4570; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4571; AVX1-NEXT:    retq
4572;
4573; AVX2-LABEL: test121:
4574; AVX2:       # %bb.0: # %entry
4575; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4576; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4577; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4578; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4579; AVX2-NEXT:    retq
4580;
4581; AVX512F-LABEL: test121:
4582; AVX512F:       # %bb.0: # %entry
4583; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4584; AVX512F-NEXT:    retq
4585entry:
4586  %cmp = icmp slt <8 x i64> %a, %b
4587  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4588  ret <8 x i64> %sel
4589}
4590
4591define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4592; SSE2-LABEL: test122:
4593; SSE2:       # %bb.0: # %entry
4594; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
4595; SSE2-NEXT:    movdqa %xmm0, %xmm9
4596; SSE2-NEXT:    pxor %xmm8, %xmm9
4597; SSE2-NEXT:    movdqa %xmm4, %xmm10
4598; SSE2-NEXT:    pxor %xmm8, %xmm10
4599; SSE2-NEXT:    movdqa %xmm10, %xmm11
4600; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4601; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4602; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4603; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4604; SSE2-NEXT:    pand %xmm12, %xmm9
4605; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4606; SSE2-NEXT:    por %xmm9, %xmm10
4607; SSE2-NEXT:    pand %xmm10, %xmm0
4608; SSE2-NEXT:    pandn %xmm4, %xmm10
4609; SSE2-NEXT:    por %xmm10, %xmm0
4610; SSE2-NEXT:    movdqa %xmm1, %xmm9
4611; SSE2-NEXT:    pxor %xmm8, %xmm9
4612; SSE2-NEXT:    movdqa %xmm5, %xmm4
4613; SSE2-NEXT:    pxor %xmm8, %xmm4
4614; SSE2-NEXT:    movdqa %xmm4, %xmm10
4615; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4616; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4617; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4618; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4619; SSE2-NEXT:    pand %xmm11, %xmm9
4620; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4621; SSE2-NEXT:    por %xmm9, %xmm4
4622; SSE2-NEXT:    pand %xmm4, %xmm1
4623; SSE2-NEXT:    pandn %xmm5, %xmm4
4624; SSE2-NEXT:    por %xmm4, %xmm1
4625; SSE2-NEXT:    movdqa %xmm2, %xmm4
4626; SSE2-NEXT:    pxor %xmm8, %xmm4
4627; SSE2-NEXT:    movdqa %xmm6, %xmm5
4628; SSE2-NEXT:    pxor %xmm8, %xmm5
4629; SSE2-NEXT:    movdqa %xmm5, %xmm9
4630; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4631; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4632; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4633; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4634; SSE2-NEXT:    pand %xmm10, %xmm4
4635; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4636; SSE2-NEXT:    por %xmm4, %xmm5
4637; SSE2-NEXT:    pand %xmm5, %xmm2
4638; SSE2-NEXT:    pandn %xmm6, %xmm5
4639; SSE2-NEXT:    por %xmm5, %xmm2
4640; SSE2-NEXT:    movdqa %xmm3, %xmm4
4641; SSE2-NEXT:    pxor %xmm8, %xmm4
4642; SSE2-NEXT:    pxor %xmm7, %xmm8
4643; SSE2-NEXT:    movdqa %xmm8, %xmm5
4644; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4645; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4646; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4647; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4648; SSE2-NEXT:    pand %xmm6, %xmm4
4649; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4650; SSE2-NEXT:    por %xmm4, %xmm5
4651; SSE2-NEXT:    pand %xmm5, %xmm3
4652; SSE2-NEXT:    pandn %xmm7, %xmm5
4653; SSE2-NEXT:    por %xmm5, %xmm3
4654; SSE2-NEXT:    retq
4655;
4656; SSE4-LABEL: test122:
4657; SSE4:       # %bb.0: # %entry
4658; SSE4-NEXT:    movdqa %xmm0, %xmm8
4659; SSE4-NEXT:    movdqa %xmm4, %xmm0
4660; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4661; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4662; SSE4-NEXT:    movdqa %xmm5, %xmm0
4663; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
4664; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4665; SSE4-NEXT:    movdqa %xmm6, %xmm0
4666; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
4667; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4668; SSE4-NEXT:    movdqa %xmm7, %xmm0
4669; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
4670; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4671; SSE4-NEXT:    movapd %xmm4, %xmm0
4672; SSE4-NEXT:    movapd %xmm5, %xmm1
4673; SSE4-NEXT:    movapd %xmm6, %xmm2
4674; SSE4-NEXT:    movapd %xmm7, %xmm3
4675; SSE4-NEXT:    retq
4676;
4677; AVX1-LABEL: test122:
4678; AVX1:       # %bb.0: # %entry
4679; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
4680; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
4681; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4682; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
4683; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4684; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4685; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
4686; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
4687; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4688; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
4689; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4690; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4691; AVX1-NEXT:    retq
4692;
4693; AVX2-LABEL: test122:
4694; AVX2:       # %bb.0: # %entry
4695; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
4696; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4697; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
4698; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4699; AVX2-NEXT:    retq
4700;
4701; AVX512F-LABEL: test122:
4702; AVX512F:       # %bb.0: # %entry
4703; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4704; AVX512F-NEXT:    retq
4705entry:
4706  %cmp = icmp sle <8 x i64> %a, %b
4707  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4708  ret <8 x i64> %sel
4709}
4710
4711define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
4712; SSE2-LABEL: test123:
4713; SSE2:       # %bb.0: # %entry
4714; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
4715; SSE2-NEXT:    movdqa %xmm4, %xmm9
4716; SSE2-NEXT:    pxor %xmm8, %xmm9
4717; SSE2-NEXT:    movdqa %xmm0, %xmm10
4718; SSE2-NEXT:    pxor %xmm8, %xmm10
4719; SSE2-NEXT:    movdqa %xmm10, %xmm11
4720; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4721; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4722; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4723; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4724; SSE2-NEXT:    pand %xmm12, %xmm9
4725; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4726; SSE2-NEXT:    por %xmm9, %xmm10
4727; SSE2-NEXT:    pand %xmm10, %xmm0
4728; SSE2-NEXT:    pandn %xmm4, %xmm10
4729; SSE2-NEXT:    por %xmm10, %xmm0
4730; SSE2-NEXT:    movdqa %xmm5, %xmm9
4731; SSE2-NEXT:    pxor %xmm8, %xmm9
4732; SSE2-NEXT:    movdqa %xmm1, %xmm4
4733; SSE2-NEXT:    pxor %xmm8, %xmm4
4734; SSE2-NEXT:    movdqa %xmm4, %xmm10
4735; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4736; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4737; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4738; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4739; SSE2-NEXT:    pand %xmm11, %xmm9
4740; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4741; SSE2-NEXT:    por %xmm9, %xmm4
4742; SSE2-NEXT:    pand %xmm4, %xmm1
4743; SSE2-NEXT:    pandn %xmm5, %xmm4
4744; SSE2-NEXT:    por %xmm4, %xmm1
4745; SSE2-NEXT:    movdqa %xmm6, %xmm4
4746; SSE2-NEXT:    pxor %xmm8, %xmm4
4747; SSE2-NEXT:    movdqa %xmm2, %xmm5
4748; SSE2-NEXT:    pxor %xmm8, %xmm5
4749; SSE2-NEXT:    movdqa %xmm5, %xmm9
4750; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4751; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4752; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4753; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4754; SSE2-NEXT:    pand %xmm10, %xmm4
4755; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4756; SSE2-NEXT:    por %xmm4, %xmm5
4757; SSE2-NEXT:    pand %xmm5, %xmm2
4758; SSE2-NEXT:    pandn %xmm6, %xmm5
4759; SSE2-NEXT:    por %xmm5, %xmm2
4760; SSE2-NEXT:    movdqa %xmm7, %xmm4
4761; SSE2-NEXT:    pxor %xmm8, %xmm4
4762; SSE2-NEXT:    pxor %xmm3, %xmm8
4763; SSE2-NEXT:    movdqa %xmm8, %xmm5
4764; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4765; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4766; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4767; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4768; SSE2-NEXT:    pand %xmm6, %xmm4
4769; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4770; SSE2-NEXT:    por %xmm4, %xmm5
4771; SSE2-NEXT:    pand %xmm5, %xmm3
4772; SSE2-NEXT:    pandn %xmm7, %xmm5
4773; SSE2-NEXT:    por %xmm5, %xmm3
4774; SSE2-NEXT:    retq
4775;
4776; SSE4-LABEL: test123:
4777; SSE4:       # %bb.0: # %entry
4778; SSE4-NEXT:    movdqa %xmm0, %xmm8
4779; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4780; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4781; SSE4-NEXT:    movdqa %xmm1, %xmm0
4782; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4783; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4784; SSE4-NEXT:    movdqa %xmm2, %xmm0
4785; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4786; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4787; SSE4-NEXT:    movdqa %xmm3, %xmm0
4788; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4789; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4790; SSE4-NEXT:    movapd %xmm4, %xmm0
4791; SSE4-NEXT:    movapd %xmm5, %xmm1
4792; SSE4-NEXT:    movapd %xmm6, %xmm2
4793; SSE4-NEXT:    movapd %xmm7, %xmm3
4794; SSE4-NEXT:    retq
4795;
4796; AVX1-LABEL: test123:
4797; AVX1:       # %bb.0: # %entry
4798; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4799; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4800; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4801; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4802; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4803; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4804; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4805; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4806; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4807; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4808; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4809; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4810; AVX1-NEXT:    retq
4811;
4812; AVX2-LABEL: test123:
4813; AVX2:       # %bb.0: # %entry
4814; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4815; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4816; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4817; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4818; AVX2-NEXT:    retq
4819;
4820; AVX512F-LABEL: test123:
4821; AVX512F:       # %bb.0: # %entry
4822; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4823; AVX512F-NEXT:    retq
4824entry:
4825  %cmp = icmp sgt <8 x i64> %a, %b
4826  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4827  ret <8 x i64> %sel
4828}
4829
4830define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
4831; SSE2-LABEL: test124:
4832; SSE2:       # %bb.0: # %entry
4833; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
4834; SSE2-NEXT:    movdqa %xmm4, %xmm9
4835; SSE2-NEXT:    pxor %xmm8, %xmm9
4836; SSE2-NEXT:    movdqa %xmm0, %xmm10
4837; SSE2-NEXT:    pxor %xmm8, %xmm10
4838; SSE2-NEXT:    movdqa %xmm10, %xmm11
4839; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4840; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4841; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4842; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4843; SSE2-NEXT:    pand %xmm12, %xmm9
4844; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4845; SSE2-NEXT:    por %xmm9, %xmm10
4846; SSE2-NEXT:    pand %xmm10, %xmm0
4847; SSE2-NEXT:    pandn %xmm4, %xmm10
4848; SSE2-NEXT:    por %xmm10, %xmm0
4849; SSE2-NEXT:    movdqa %xmm5, %xmm9
4850; SSE2-NEXT:    pxor %xmm8, %xmm9
4851; SSE2-NEXT:    movdqa %xmm1, %xmm4
4852; SSE2-NEXT:    pxor %xmm8, %xmm4
4853; SSE2-NEXT:    movdqa %xmm4, %xmm10
4854; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4855; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4856; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4857; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4858; SSE2-NEXT:    pand %xmm11, %xmm9
4859; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4860; SSE2-NEXT:    por %xmm9, %xmm4
4861; SSE2-NEXT:    pand %xmm4, %xmm1
4862; SSE2-NEXT:    pandn %xmm5, %xmm4
4863; SSE2-NEXT:    por %xmm4, %xmm1
4864; SSE2-NEXT:    movdqa %xmm6, %xmm4
4865; SSE2-NEXT:    pxor %xmm8, %xmm4
4866; SSE2-NEXT:    movdqa %xmm2, %xmm5
4867; SSE2-NEXT:    pxor %xmm8, %xmm5
4868; SSE2-NEXT:    movdqa %xmm5, %xmm9
4869; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4870; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4871; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4872; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4873; SSE2-NEXT:    pand %xmm10, %xmm4
4874; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4875; SSE2-NEXT:    por %xmm4, %xmm5
4876; SSE2-NEXT:    pand %xmm5, %xmm2
4877; SSE2-NEXT:    pandn %xmm6, %xmm5
4878; SSE2-NEXT:    por %xmm5, %xmm2
4879; SSE2-NEXT:    movdqa %xmm7, %xmm4
4880; SSE2-NEXT:    pxor %xmm8, %xmm4
4881; SSE2-NEXT:    pxor %xmm3, %xmm8
4882; SSE2-NEXT:    movdqa %xmm8, %xmm5
4883; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
4884; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
4885; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
4886; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
4887; SSE2-NEXT:    pand %xmm6, %xmm4
4888; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
4889; SSE2-NEXT:    por %xmm4, %xmm5
4890; SSE2-NEXT:    pand %xmm5, %xmm3
4891; SSE2-NEXT:    pandn %xmm7, %xmm5
4892; SSE2-NEXT:    por %xmm5, %xmm3
4893; SSE2-NEXT:    retq
4894;
4895; SSE4-LABEL: test124:
4896; SSE4:       # %bb.0: # %entry
4897; SSE4-NEXT:    movdqa %xmm0, %xmm8
4898; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4899; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
4900; SSE4-NEXT:    movdqa %xmm1, %xmm0
4901; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
4902; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
4903; SSE4-NEXT:    movdqa %xmm2, %xmm0
4904; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
4905; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
4906; SSE4-NEXT:    movdqa %xmm3, %xmm0
4907; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
4908; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
4909; SSE4-NEXT:    movapd %xmm4, %xmm0
4910; SSE4-NEXT:    movapd %xmm5, %xmm1
4911; SSE4-NEXT:    movapd %xmm6, %xmm2
4912; SSE4-NEXT:    movapd %xmm7, %xmm3
4913; SSE4-NEXT:    retq
4914;
4915; AVX1-LABEL: test124:
4916; AVX1:       # %bb.0: # %entry
4917; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4918; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4919; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4920; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
4921; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4922; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4923; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4924; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4925; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
4926; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
4927; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
4928; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4929; AVX1-NEXT:    retq
4930;
4931; AVX2-LABEL: test124:
4932; AVX2:       # %bb.0: # %entry
4933; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
4934; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
4935; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
4936; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
4937; AVX2-NEXT:    retq
4938;
4939; AVX512F-LABEL: test124:
4940; AVX512F:       # %bb.0: # %entry
4941; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
4942; AVX512F-NEXT:    retq
4943entry:
4944  %cmp = icmp sge <8 x i64> %a, %b
4945  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4946  ret <8 x i64> %sel
4947}
4948
4949define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
4950; SSE2-LABEL: test125:
4951; SSE2:       # %bb.0: # %entry
4952; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
4953; SSE2-NEXT:    movdqa %xmm0, %xmm9
4954; SSE2-NEXT:    pxor %xmm8, %xmm9
4955; SSE2-NEXT:    movdqa %xmm4, %xmm10
4956; SSE2-NEXT:    pxor %xmm8, %xmm10
4957; SSE2-NEXT:    movdqa %xmm10, %xmm11
4958; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
4959; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4960; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
4961; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
4962; SSE2-NEXT:    pand %xmm12, %xmm9
4963; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
4964; SSE2-NEXT:    por %xmm9, %xmm10
4965; SSE2-NEXT:    pand %xmm10, %xmm0
4966; SSE2-NEXT:    pandn %xmm4, %xmm10
4967; SSE2-NEXT:    por %xmm10, %xmm0
4968; SSE2-NEXT:    movdqa %xmm1, %xmm9
4969; SSE2-NEXT:    pxor %xmm8, %xmm9
4970; SSE2-NEXT:    movdqa %xmm5, %xmm4
4971; SSE2-NEXT:    pxor %xmm8, %xmm4
4972; SSE2-NEXT:    movdqa %xmm4, %xmm10
4973; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
4974; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
4975; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
4976; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
4977; SSE2-NEXT:    pand %xmm11, %xmm9
4978; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
4979; SSE2-NEXT:    por %xmm9, %xmm4
4980; SSE2-NEXT:    pand %xmm4, %xmm1
4981; SSE2-NEXT:    pandn %xmm5, %xmm4
4982; SSE2-NEXT:    por %xmm4, %xmm1
4983; SSE2-NEXT:    movdqa %xmm2, %xmm4
4984; SSE2-NEXT:    pxor %xmm8, %xmm4
4985; SSE2-NEXT:    movdqa %xmm6, %xmm5
4986; SSE2-NEXT:    pxor %xmm8, %xmm5
4987; SSE2-NEXT:    movdqa %xmm5, %xmm9
4988; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
4989; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
4990; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
4991; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
4992; SSE2-NEXT:    pand %xmm10, %xmm4
4993; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
4994; SSE2-NEXT:    por %xmm4, %xmm5
4995; SSE2-NEXT:    pand %xmm5, %xmm2
4996; SSE2-NEXT:    pandn %xmm6, %xmm5
4997; SSE2-NEXT:    por %xmm5, %xmm2
4998; SSE2-NEXT:    movdqa %xmm3, %xmm4
4999; SSE2-NEXT:    pxor %xmm8, %xmm4
5000; SSE2-NEXT:    pxor %xmm7, %xmm8
5001; SSE2-NEXT:    movdqa %xmm8, %xmm5
5002; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5003; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5004; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5005; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5006; SSE2-NEXT:    pand %xmm6, %xmm4
5007; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5008; SSE2-NEXT:    por %xmm4, %xmm5
5009; SSE2-NEXT:    pand %xmm5, %xmm3
5010; SSE2-NEXT:    pandn %xmm7, %xmm5
5011; SSE2-NEXT:    por %xmm5, %xmm3
5012; SSE2-NEXT:    retq
5013;
5014; SSE4-LABEL: test125:
5015; SSE4:       # %bb.0: # %entry
5016; SSE4-NEXT:    movdqa %xmm0, %xmm9
5017; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5018; SSE4-NEXT:    movdqa %xmm0, %xmm10
5019; SSE4-NEXT:    pxor %xmm8, %xmm10
5020; SSE4-NEXT:    movdqa %xmm4, %xmm0
5021; SSE4-NEXT:    pxor %xmm8, %xmm0
5022; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5023; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5024; SSE4-NEXT:    movdqa %xmm1, %xmm9
5025; SSE4-NEXT:    pxor %xmm8, %xmm9
5026; SSE4-NEXT:    movdqa %xmm5, %xmm0
5027; SSE4-NEXT:    pxor %xmm8, %xmm0
5028; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5029; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5030; SSE4-NEXT:    movdqa %xmm2, %xmm1
5031; SSE4-NEXT:    pxor %xmm8, %xmm1
5032; SSE4-NEXT:    movdqa %xmm6, %xmm0
5033; SSE4-NEXT:    pxor %xmm8, %xmm0
5034; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5035; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5036; SSE4-NEXT:    movdqa %xmm3, %xmm0
5037; SSE4-NEXT:    pxor %xmm8, %xmm0
5038; SSE4-NEXT:    pxor %xmm7, %xmm8
5039; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5040; SSE4-NEXT:    movdqa %xmm8, %xmm0
5041; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5042; SSE4-NEXT:    movapd %xmm4, %xmm0
5043; SSE4-NEXT:    movapd %xmm5, %xmm1
5044; SSE4-NEXT:    movapd %xmm6, %xmm2
5045; SSE4-NEXT:    movapd %xmm7, %xmm3
5046; SSE4-NEXT:    retq
5047;
5048; AVX1-LABEL: test125:
5049; AVX1:       # %bb.0: # %entry
5050; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5051; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5052; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5053; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5054; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5055; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5056; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5057; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5058; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5059; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5060; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5061; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5062; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5063; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5064; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5065; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5066; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5067; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5068; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5069; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5070; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5071; AVX1-NEXT:    retq
5072;
5073; AVX2-LABEL: test125:
5074; AVX2:       # %bb.0: # %entry
5075; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5076; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5077; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5078; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5079; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5080; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5081; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5082; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5083; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5084; AVX2-NEXT:    retq
5085;
5086; AVX512F-LABEL: test125:
5087; AVX512F:       # %bb.0: # %entry
5088; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5089; AVX512F-NEXT:    retq
5090entry:
5091  %cmp = icmp ult <8 x i64> %a, %b
5092  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5093  ret <8 x i64> %sel
5094}
5095
5096define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5097; SSE2-LABEL: test126:
5098; SSE2:       # %bb.0: # %entry
5099; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
5100; SSE2-NEXT:    movdqa %xmm0, %xmm9
5101; SSE2-NEXT:    pxor %xmm8, %xmm9
5102; SSE2-NEXT:    movdqa %xmm4, %xmm10
5103; SSE2-NEXT:    pxor %xmm8, %xmm10
5104; SSE2-NEXT:    movdqa %xmm10, %xmm11
5105; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5106; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5107; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5108; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5109; SSE2-NEXT:    pand %xmm12, %xmm9
5110; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5111; SSE2-NEXT:    por %xmm9, %xmm10
5112; SSE2-NEXT:    pand %xmm10, %xmm0
5113; SSE2-NEXT:    pandn %xmm4, %xmm10
5114; SSE2-NEXT:    por %xmm10, %xmm0
5115; SSE2-NEXT:    movdqa %xmm1, %xmm9
5116; SSE2-NEXT:    pxor %xmm8, %xmm9
5117; SSE2-NEXT:    movdqa %xmm5, %xmm4
5118; SSE2-NEXT:    pxor %xmm8, %xmm4
5119; SSE2-NEXT:    movdqa %xmm4, %xmm10
5120; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5121; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5122; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5123; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5124; SSE2-NEXT:    pand %xmm11, %xmm9
5125; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5126; SSE2-NEXT:    por %xmm9, %xmm4
5127; SSE2-NEXT:    pand %xmm4, %xmm1
5128; SSE2-NEXT:    pandn %xmm5, %xmm4
5129; SSE2-NEXT:    por %xmm4, %xmm1
5130; SSE2-NEXT:    movdqa %xmm2, %xmm4
5131; SSE2-NEXT:    pxor %xmm8, %xmm4
5132; SSE2-NEXT:    movdqa %xmm6, %xmm5
5133; SSE2-NEXT:    pxor %xmm8, %xmm5
5134; SSE2-NEXT:    movdqa %xmm5, %xmm9
5135; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5136; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5137; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5138; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5139; SSE2-NEXT:    pand %xmm10, %xmm4
5140; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5141; SSE2-NEXT:    por %xmm4, %xmm5
5142; SSE2-NEXT:    pand %xmm5, %xmm2
5143; SSE2-NEXT:    pandn %xmm6, %xmm5
5144; SSE2-NEXT:    por %xmm5, %xmm2
5145; SSE2-NEXT:    movdqa %xmm3, %xmm4
5146; SSE2-NEXT:    pxor %xmm8, %xmm4
5147; SSE2-NEXT:    pxor %xmm7, %xmm8
5148; SSE2-NEXT:    movdqa %xmm8, %xmm5
5149; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5150; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5151; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5152; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5153; SSE2-NEXT:    pand %xmm6, %xmm4
5154; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5155; SSE2-NEXT:    por %xmm4, %xmm5
5156; SSE2-NEXT:    pand %xmm5, %xmm3
5157; SSE2-NEXT:    pandn %xmm7, %xmm5
5158; SSE2-NEXT:    por %xmm5, %xmm3
5159; SSE2-NEXT:    retq
5160;
5161; SSE4-LABEL: test126:
5162; SSE4:       # %bb.0: # %entry
5163; SSE4-NEXT:    movdqa %xmm0, %xmm9
5164; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5165; SSE4-NEXT:    movdqa %xmm0, %xmm10
5166; SSE4-NEXT:    pxor %xmm8, %xmm10
5167; SSE4-NEXT:    movdqa %xmm4, %xmm0
5168; SSE4-NEXT:    pxor %xmm8, %xmm0
5169; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5170; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5171; SSE4-NEXT:    movdqa %xmm1, %xmm9
5172; SSE4-NEXT:    pxor %xmm8, %xmm9
5173; SSE4-NEXT:    movdqa %xmm5, %xmm0
5174; SSE4-NEXT:    pxor %xmm8, %xmm0
5175; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5176; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5177; SSE4-NEXT:    movdqa %xmm2, %xmm1
5178; SSE4-NEXT:    pxor %xmm8, %xmm1
5179; SSE4-NEXT:    movdqa %xmm6, %xmm0
5180; SSE4-NEXT:    pxor %xmm8, %xmm0
5181; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5182; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5183; SSE4-NEXT:    movdqa %xmm3, %xmm0
5184; SSE4-NEXT:    pxor %xmm8, %xmm0
5185; SSE4-NEXT:    pxor %xmm7, %xmm8
5186; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5187; SSE4-NEXT:    movdqa %xmm8, %xmm0
5188; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5189; SSE4-NEXT:    movapd %xmm4, %xmm0
5190; SSE4-NEXT:    movapd %xmm5, %xmm1
5191; SSE4-NEXT:    movapd %xmm6, %xmm2
5192; SSE4-NEXT:    movapd %xmm7, %xmm3
5193; SSE4-NEXT:    retq
5194;
5195; AVX1-LABEL: test126:
5196; AVX1:       # %bb.0: # %entry
5197; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
5198; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5199; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5200; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5201; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5202; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5203; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
5204; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
5205; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5206; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5207; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5208; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
5209; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5210; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5211; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5212; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5213; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
5214; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
5215; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5216; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5217; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5218; AVX1-NEXT:    retq
5219;
5220; AVX2-LABEL: test126:
5221; AVX2:       # %bb.0: # %entry
5222; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5223; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
5224; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5225; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5226; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5227; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
5228; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
5229; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5230; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5231; AVX2-NEXT:    retq
5232;
5233; AVX512F-LABEL: test126:
5234; AVX512F:       # %bb.0: # %entry
5235; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5236; AVX512F-NEXT:    retq
5237entry:
5238  %cmp = icmp ule <8 x i64> %a, %b
5239  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5240  ret <8 x i64> %sel
5241}
5242
5243define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5244; SSE2-LABEL: test127:
5245; SSE2:       # %bb.0: # %entry
5246; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
5247; SSE2-NEXT:    movdqa %xmm4, %xmm9
5248; SSE2-NEXT:    pxor %xmm8, %xmm9
5249; SSE2-NEXT:    movdqa %xmm0, %xmm10
5250; SSE2-NEXT:    pxor %xmm8, %xmm10
5251; SSE2-NEXT:    movdqa %xmm10, %xmm11
5252; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5253; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5254; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5255; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5256; SSE2-NEXT:    pand %xmm12, %xmm9
5257; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5258; SSE2-NEXT:    por %xmm9, %xmm10
5259; SSE2-NEXT:    pand %xmm10, %xmm0
5260; SSE2-NEXT:    pandn %xmm4, %xmm10
5261; SSE2-NEXT:    por %xmm10, %xmm0
5262; SSE2-NEXT:    movdqa %xmm5, %xmm9
5263; SSE2-NEXT:    pxor %xmm8, %xmm9
5264; SSE2-NEXT:    movdqa %xmm1, %xmm4
5265; SSE2-NEXT:    pxor %xmm8, %xmm4
5266; SSE2-NEXT:    movdqa %xmm4, %xmm10
5267; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5268; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5269; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5270; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5271; SSE2-NEXT:    pand %xmm11, %xmm9
5272; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5273; SSE2-NEXT:    por %xmm9, %xmm4
5274; SSE2-NEXT:    pand %xmm4, %xmm1
5275; SSE2-NEXT:    pandn %xmm5, %xmm4
5276; SSE2-NEXT:    por %xmm4, %xmm1
5277; SSE2-NEXT:    movdqa %xmm6, %xmm4
5278; SSE2-NEXT:    pxor %xmm8, %xmm4
5279; SSE2-NEXT:    movdqa %xmm2, %xmm5
5280; SSE2-NEXT:    pxor %xmm8, %xmm5
5281; SSE2-NEXT:    movdqa %xmm5, %xmm9
5282; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5283; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5284; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5285; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5286; SSE2-NEXT:    pand %xmm10, %xmm4
5287; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5288; SSE2-NEXT:    por %xmm4, %xmm5
5289; SSE2-NEXT:    pand %xmm5, %xmm2
5290; SSE2-NEXT:    pandn %xmm6, %xmm5
5291; SSE2-NEXT:    por %xmm5, %xmm2
5292; SSE2-NEXT:    movdqa %xmm7, %xmm4
5293; SSE2-NEXT:    pxor %xmm8, %xmm4
5294; SSE2-NEXT:    pxor %xmm3, %xmm8
5295; SSE2-NEXT:    movdqa %xmm8, %xmm5
5296; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5297; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5298; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5299; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5300; SSE2-NEXT:    pand %xmm6, %xmm4
5301; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5302; SSE2-NEXT:    por %xmm4, %xmm5
5303; SSE2-NEXT:    pand %xmm5, %xmm3
5304; SSE2-NEXT:    pandn %xmm7, %xmm5
5305; SSE2-NEXT:    por %xmm5, %xmm3
5306; SSE2-NEXT:    retq
5307;
5308; SSE4-LABEL: test127:
5309; SSE4:       # %bb.0: # %entry
5310; SSE4-NEXT:    movdqa %xmm0, %xmm9
5311; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5312; SSE4-NEXT:    movdqa %xmm4, %xmm10
5313; SSE4-NEXT:    pxor %xmm8, %xmm10
5314; SSE4-NEXT:    pxor %xmm8, %xmm0
5315; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5316; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5317; SSE4-NEXT:    movdqa %xmm5, %xmm9
5318; SSE4-NEXT:    pxor %xmm8, %xmm9
5319; SSE4-NEXT:    movdqa %xmm1, %xmm0
5320; SSE4-NEXT:    pxor %xmm8, %xmm0
5321; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5322; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5323; SSE4-NEXT:    movdqa %xmm6, %xmm1
5324; SSE4-NEXT:    pxor %xmm8, %xmm1
5325; SSE4-NEXT:    movdqa %xmm2, %xmm0
5326; SSE4-NEXT:    pxor %xmm8, %xmm0
5327; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5328; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5329; SSE4-NEXT:    movdqa %xmm7, %xmm0
5330; SSE4-NEXT:    pxor %xmm8, %xmm0
5331; SSE4-NEXT:    pxor %xmm3, %xmm8
5332; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5333; SSE4-NEXT:    movdqa %xmm8, %xmm0
5334; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5335; SSE4-NEXT:    movapd %xmm4, %xmm0
5336; SSE4-NEXT:    movapd %xmm5, %xmm1
5337; SSE4-NEXT:    movapd %xmm6, %xmm2
5338; SSE4-NEXT:    movapd %xmm7, %xmm3
5339; SSE4-NEXT:    retq
5340;
5341; AVX1-LABEL: test127:
5342; AVX1:       # %bb.0: # %entry
5343; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5344; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5345; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5346; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5347; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5348; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5349; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5350; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5351; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5352; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5353; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5354; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5355; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5356; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5357; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5358; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5359; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5360; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5361; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5362; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5363; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5364; AVX1-NEXT:    retq
5365;
5366; AVX2-LABEL: test127:
5367; AVX2:       # %bb.0: # %entry
5368; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5369; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5370; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5371; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5372; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5373; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5374; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5375; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5376; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5377; AVX2-NEXT:    retq
5378;
5379; AVX512F-LABEL: test127:
5380; AVX512F:       # %bb.0: # %entry
5381; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5382; AVX512F-NEXT:    retq
5383entry:
5384  %cmp = icmp ugt <8 x i64> %a, %b
5385  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5386  ret <8 x i64> %sel
5387}
5388
5389define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5390; SSE2-LABEL: test128:
5391; SSE2:       # %bb.0: # %entry
5392; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
5393; SSE2-NEXT:    movdqa %xmm4, %xmm9
5394; SSE2-NEXT:    pxor %xmm8, %xmm9
5395; SSE2-NEXT:    movdqa %xmm0, %xmm10
5396; SSE2-NEXT:    pxor %xmm8, %xmm10
5397; SSE2-NEXT:    movdqa %xmm10, %xmm11
5398; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
5399; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5400; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
5401; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
5402; SSE2-NEXT:    pand %xmm12, %xmm9
5403; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
5404; SSE2-NEXT:    por %xmm9, %xmm10
5405; SSE2-NEXT:    pand %xmm10, %xmm0
5406; SSE2-NEXT:    pandn %xmm4, %xmm10
5407; SSE2-NEXT:    por %xmm10, %xmm0
5408; SSE2-NEXT:    movdqa %xmm5, %xmm9
5409; SSE2-NEXT:    pxor %xmm8, %xmm9
5410; SSE2-NEXT:    movdqa %xmm1, %xmm4
5411; SSE2-NEXT:    pxor %xmm8, %xmm4
5412; SSE2-NEXT:    movdqa %xmm4, %xmm10
5413; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
5414; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
5415; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
5416; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
5417; SSE2-NEXT:    pand %xmm11, %xmm9
5418; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
5419; SSE2-NEXT:    por %xmm9, %xmm4
5420; SSE2-NEXT:    pand %xmm4, %xmm1
5421; SSE2-NEXT:    pandn %xmm5, %xmm4
5422; SSE2-NEXT:    por %xmm4, %xmm1
5423; SSE2-NEXT:    movdqa %xmm6, %xmm4
5424; SSE2-NEXT:    pxor %xmm8, %xmm4
5425; SSE2-NEXT:    movdqa %xmm2, %xmm5
5426; SSE2-NEXT:    pxor %xmm8, %xmm5
5427; SSE2-NEXT:    movdqa %xmm5, %xmm9
5428; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
5429; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
5430; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
5431; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
5432; SSE2-NEXT:    pand %xmm10, %xmm4
5433; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
5434; SSE2-NEXT:    por %xmm4, %xmm5
5435; SSE2-NEXT:    pand %xmm5, %xmm2
5436; SSE2-NEXT:    pandn %xmm6, %xmm5
5437; SSE2-NEXT:    por %xmm5, %xmm2
5438; SSE2-NEXT:    movdqa %xmm7, %xmm4
5439; SSE2-NEXT:    pxor %xmm8, %xmm4
5440; SSE2-NEXT:    pxor %xmm3, %xmm8
5441; SSE2-NEXT:    movdqa %xmm8, %xmm5
5442; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
5443; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
5444; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
5445; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
5446; SSE2-NEXT:    pand %xmm6, %xmm4
5447; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
5448; SSE2-NEXT:    por %xmm4, %xmm5
5449; SSE2-NEXT:    pand %xmm5, %xmm3
5450; SSE2-NEXT:    pandn %xmm7, %xmm5
5451; SSE2-NEXT:    por %xmm5, %xmm3
5452; SSE2-NEXT:    retq
5453;
5454; SSE4-LABEL: test128:
5455; SSE4:       # %bb.0: # %entry
5456; SSE4-NEXT:    movdqa %xmm0, %xmm9
5457; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
5458; SSE4-NEXT:    movdqa %xmm4, %xmm10
5459; SSE4-NEXT:    pxor %xmm8, %xmm10
5460; SSE4-NEXT:    pxor %xmm8, %xmm0
5461; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
5462; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
5463; SSE4-NEXT:    movdqa %xmm5, %xmm9
5464; SSE4-NEXT:    pxor %xmm8, %xmm9
5465; SSE4-NEXT:    movdqa %xmm1, %xmm0
5466; SSE4-NEXT:    pxor %xmm8, %xmm0
5467; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
5468; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
5469; SSE4-NEXT:    movdqa %xmm6, %xmm1
5470; SSE4-NEXT:    pxor %xmm8, %xmm1
5471; SSE4-NEXT:    movdqa %xmm2, %xmm0
5472; SSE4-NEXT:    pxor %xmm8, %xmm0
5473; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
5474; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
5475; SSE4-NEXT:    movdqa %xmm7, %xmm0
5476; SSE4-NEXT:    pxor %xmm8, %xmm0
5477; SSE4-NEXT:    pxor %xmm3, %xmm8
5478; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
5479; SSE4-NEXT:    movdqa %xmm8, %xmm0
5480; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
5481; SSE4-NEXT:    movapd %xmm4, %xmm0
5482; SSE4-NEXT:    movapd %xmm5, %xmm1
5483; SSE4-NEXT:    movapd %xmm6, %xmm2
5484; SSE4-NEXT:    movapd %xmm7, %xmm3
5485; SSE4-NEXT:    retq
5486;
5487; AVX1-LABEL: test128:
5488; AVX1:       # %bb.0: # %entry
5489; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5490; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5491; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5492; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5493; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5494; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5495; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
5496; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
5497; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5498; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5499; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5500; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5501; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
5502; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5503; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5504; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
5505; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
5506; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
5507; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5508; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
5509; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5510; AVX1-NEXT:    retq
5511;
5512; AVX2-LABEL: test128:
5513; AVX2:       # %bb.0: # %entry
5514; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
5515; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
5516; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5517; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5518; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5519; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
5520; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
5521; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
5522; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
5523; AVX2-NEXT:    retq
5524;
5525; AVX512F-LABEL: test128:
5526; AVX512F:       # %bb.0: # %entry
5527; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5528; AVX512F-NEXT:    retq
5529entry:
5530  %cmp = icmp uge <8 x i64> %a, %b
5531  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5532  ret <8 x i64> %sel
5533}
5534
5535define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5536; SSE2-LABEL: test129:
5537; SSE2:       # %bb.0: # %entry
5538; SSE2-NEXT:    movdqa %xmm0, %xmm8
5539; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5540; SSE2-NEXT:    pand %xmm8, %xmm0
5541; SSE2-NEXT:    pandn %xmm4, %xmm8
5542; SSE2-NEXT:    por %xmm0, %xmm8
5543; SSE2-NEXT:    movdqa %xmm1, %xmm4
5544; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5545; SSE2-NEXT:    pand %xmm4, %xmm1
5546; SSE2-NEXT:    pandn %xmm5, %xmm4
5547; SSE2-NEXT:    por %xmm1, %xmm4
5548; SSE2-NEXT:    movdqa %xmm2, %xmm5
5549; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
5550; SSE2-NEXT:    pand %xmm5, %xmm2
5551; SSE2-NEXT:    pandn %xmm6, %xmm5
5552; SSE2-NEXT:    por %xmm2, %xmm5
5553; SSE2-NEXT:    movdqa %xmm3, %xmm6
5554; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
5555; SSE2-NEXT:    pand %xmm6, %xmm3
5556; SSE2-NEXT:    pandn %xmm7, %xmm6
5557; SSE2-NEXT:    por %xmm3, %xmm6
5558; SSE2-NEXT:    movdqa %xmm8, %xmm0
5559; SSE2-NEXT:    movdqa %xmm4, %xmm1
5560; SSE2-NEXT:    movdqa %xmm5, %xmm2
5561; SSE2-NEXT:    movdqa %xmm6, %xmm3
5562; SSE2-NEXT:    retq
5563;
5564; SSE4-LABEL: test129:
5565; SSE4:       # %bb.0: # %entry
5566; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5567; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5568; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5569; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5570; SSE4-NEXT:    retq
5571;
5572; AVX1-LABEL: test129:
5573; AVX1:       # %bb.0: # %entry
5574; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5575; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5576; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5577; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5578; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5579; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5580; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5581; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5582; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5583; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5584; AVX1-NEXT:    retq
5585;
5586; AVX2-LABEL: test129:
5587; AVX2:       # %bb.0: # %entry
5588; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5589; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5590; AVX2-NEXT:    retq
5591;
5592; AVX512BW-LABEL: test129:
5593; AVX512BW:       # %bb.0: # %entry
5594; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5595; AVX512BW-NEXT:    retq
5596entry:
5597  %cmp = icmp slt <64 x i8> %a, %b
5598  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5599  ret <64 x i8> %sel
5600}
5601
5602define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
5603; SSE2-LABEL: test130:
5604; SSE2:       # %bb.0: # %entry
5605; SSE2-NEXT:    movdqa %xmm0, %xmm8
5606; SSE2-NEXT:    pcmpgtb %xmm4, %xmm8
5607; SSE2-NEXT:    pand %xmm8, %xmm0
5608; SSE2-NEXT:    pandn %xmm4, %xmm8
5609; SSE2-NEXT:    por %xmm0, %xmm8
5610; SSE2-NEXT:    movdqa %xmm1, %xmm4
5611; SSE2-NEXT:    pcmpgtb %xmm5, %xmm4
5612; SSE2-NEXT:    pand %xmm4, %xmm1
5613; SSE2-NEXT:    pandn %xmm5, %xmm4
5614; SSE2-NEXT:    por %xmm1, %xmm4
5615; SSE2-NEXT:    movdqa %xmm2, %xmm5
5616; SSE2-NEXT:    pcmpgtb %xmm6, %xmm5
5617; SSE2-NEXT:    pand %xmm5, %xmm2
5618; SSE2-NEXT:    pandn %xmm6, %xmm5
5619; SSE2-NEXT:    por %xmm2, %xmm5
5620; SSE2-NEXT:    movdqa %xmm3, %xmm6
5621; SSE2-NEXT:    pcmpgtb %xmm7, %xmm6
5622; SSE2-NEXT:    pand %xmm6, %xmm3
5623; SSE2-NEXT:    pandn %xmm7, %xmm6
5624; SSE2-NEXT:    por %xmm3, %xmm6
5625; SSE2-NEXT:    movdqa %xmm8, %xmm0
5626; SSE2-NEXT:    movdqa %xmm4, %xmm1
5627; SSE2-NEXT:    movdqa %xmm5, %xmm2
5628; SSE2-NEXT:    movdqa %xmm6, %xmm3
5629; SSE2-NEXT:    retq
5630;
5631; SSE4-LABEL: test130:
5632; SSE4:       # %bb.0: # %entry
5633; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
5634; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
5635; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
5636; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
5637; SSE4-NEXT:    retq
5638;
5639; AVX1-LABEL: test130:
5640; AVX1:       # %bb.0: # %entry
5641; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5642; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5643; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
5644; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
5645; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5646; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5647; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5648; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
5649; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
5650; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5651; AVX1-NEXT:    retq
5652;
5653; AVX2-LABEL: test130:
5654; AVX2:       # %bb.0: # %entry
5655; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
5656; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
5657; AVX2-NEXT:    retq
5658;
5659; AVX512BW-LABEL: test130:
5660; AVX512BW:       # %bb.0: # %entry
5661; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
5662; AVX512BW-NEXT:    retq
5663entry:
5664  %cmp = icmp sle <64 x i8> %a, %b
5665  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5666  ret <64 x i8> %sel
5667}
5668
5669define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
5670; SSE2-LABEL: test131:
5671; SSE2:       # %bb.0: # %entry
5672; SSE2-NEXT:    movdqa %xmm4, %xmm8
5673; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5674; SSE2-NEXT:    pand %xmm8, %xmm0
5675; SSE2-NEXT:    pandn %xmm4, %xmm8
5676; SSE2-NEXT:    por %xmm8, %xmm0
5677; SSE2-NEXT:    movdqa %xmm5, %xmm4
5678; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5679; SSE2-NEXT:    pand %xmm4, %xmm1
5680; SSE2-NEXT:    pandn %xmm5, %xmm4
5681; SSE2-NEXT:    por %xmm4, %xmm1
5682; SSE2-NEXT:    movdqa %xmm6, %xmm4
5683; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5684; SSE2-NEXT:    pand %xmm4, %xmm2
5685; SSE2-NEXT:    pandn %xmm6, %xmm4
5686; SSE2-NEXT:    por %xmm4, %xmm2
5687; SSE2-NEXT:    movdqa %xmm7, %xmm4
5688; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5689; SSE2-NEXT:    pand %xmm4, %xmm3
5690; SSE2-NEXT:    pandn %xmm7, %xmm4
5691; SSE2-NEXT:    por %xmm4, %xmm3
5692; SSE2-NEXT:    retq
5693;
5694; SSE4-LABEL: test131:
5695; SSE4:       # %bb.0: # %entry
5696; SSE4-NEXT:    pminsb %xmm4, %xmm0
5697; SSE4-NEXT:    pminsb %xmm5, %xmm1
5698; SSE4-NEXT:    pminsb %xmm6, %xmm2
5699; SSE4-NEXT:    pminsb %xmm7, %xmm3
5700; SSE4-NEXT:    retq
5701;
5702; AVX1-LABEL: test131:
5703; AVX1:       # %bb.0: # %entry
5704; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5705; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5706; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5707; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5708; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5709; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5710; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5711; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5712; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5713; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5714; AVX1-NEXT:    retq
5715;
5716; AVX2-LABEL: test131:
5717; AVX2:       # %bb.0: # %entry
5718; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5719; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5720; AVX2-NEXT:    retq
5721;
5722; AVX512BW-LABEL: test131:
5723; AVX512BW:       # %bb.0: # %entry
5724; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5725; AVX512BW-NEXT:    retq
5726entry:
5727  %cmp = icmp sgt <64 x i8> %a, %b
5728  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5729  ret <64 x i8> %sel
5730}
5731
5732define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
5733; SSE2-LABEL: test132:
5734; SSE2:       # %bb.0: # %entry
5735; SSE2-NEXT:    movdqa %xmm4, %xmm8
5736; SSE2-NEXT:    pcmpgtb %xmm0, %xmm8
5737; SSE2-NEXT:    pand %xmm8, %xmm0
5738; SSE2-NEXT:    pandn %xmm4, %xmm8
5739; SSE2-NEXT:    por %xmm8, %xmm0
5740; SSE2-NEXT:    movdqa %xmm5, %xmm4
5741; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
5742; SSE2-NEXT:    pand %xmm4, %xmm1
5743; SSE2-NEXT:    pandn %xmm5, %xmm4
5744; SSE2-NEXT:    por %xmm4, %xmm1
5745; SSE2-NEXT:    movdqa %xmm6, %xmm4
5746; SSE2-NEXT:    pcmpgtb %xmm2, %xmm4
5747; SSE2-NEXT:    pand %xmm4, %xmm2
5748; SSE2-NEXT:    pandn %xmm6, %xmm4
5749; SSE2-NEXT:    por %xmm4, %xmm2
5750; SSE2-NEXT:    movdqa %xmm7, %xmm4
5751; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
5752; SSE2-NEXT:    pand %xmm4, %xmm3
5753; SSE2-NEXT:    pandn %xmm7, %xmm4
5754; SSE2-NEXT:    por %xmm4, %xmm3
5755; SSE2-NEXT:    retq
5756;
5757; SSE4-LABEL: test132:
5758; SSE4:       # %bb.0: # %entry
5759; SSE4-NEXT:    pminsb %xmm4, %xmm0
5760; SSE4-NEXT:    pminsb %xmm5, %xmm1
5761; SSE4-NEXT:    pminsb %xmm6, %xmm2
5762; SSE4-NEXT:    pminsb %xmm7, %xmm3
5763; SSE4-NEXT:    retq
5764;
5765; AVX1-LABEL: test132:
5766; AVX1:       # %bb.0: # %entry
5767; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5768; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5769; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
5770; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
5771; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5772; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5773; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5774; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
5775; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
5776; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5777; AVX1-NEXT:    retq
5778;
5779; AVX2-LABEL: test132:
5780; AVX2:       # %bb.0: # %entry
5781; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
5782; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
5783; AVX2-NEXT:    retq
5784;
5785; AVX512BW-LABEL: test132:
5786; AVX512BW:       # %bb.0: # %entry
5787; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
5788; AVX512BW-NEXT:    retq
5789entry:
5790  %cmp = icmp sge <64 x i8> %a, %b
5791  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5792  ret <64 x i8> %sel
5793}
5794
5795define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
5796; SSE-LABEL: test133:
5797; SSE:       # %bb.0: # %entry
5798; SSE-NEXT:    pmaxub %xmm4, %xmm0
5799; SSE-NEXT:    pmaxub %xmm5, %xmm1
5800; SSE-NEXT:    pmaxub %xmm6, %xmm2
5801; SSE-NEXT:    pmaxub %xmm7, %xmm3
5802; SSE-NEXT:    retq
5803;
5804; AVX1-LABEL: test133:
5805; AVX1:       # %bb.0: # %entry
5806; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5807; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5808; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5809; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5810; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5811; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5812; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5813; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5814; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5815; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5816; AVX1-NEXT:    retq
5817;
5818; AVX2-LABEL: test133:
5819; AVX2:       # %bb.0: # %entry
5820; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5821; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5822; AVX2-NEXT:    retq
5823;
5824; AVX512BW-LABEL: test133:
5825; AVX512BW:       # %bb.0: # %entry
5826; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5827; AVX512BW-NEXT:    retq
5828entry:
5829  %cmp = icmp ult <64 x i8> %a, %b
5830  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5831  ret <64 x i8> %sel
5832}
5833
5834define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
5835; SSE-LABEL: test134:
5836; SSE:       # %bb.0: # %entry
5837; SSE-NEXT:    pmaxub %xmm4, %xmm0
5838; SSE-NEXT:    pmaxub %xmm5, %xmm1
5839; SSE-NEXT:    pmaxub %xmm6, %xmm2
5840; SSE-NEXT:    pmaxub %xmm7, %xmm3
5841; SSE-NEXT:    retq
5842;
5843; AVX1-LABEL: test134:
5844; AVX1:       # %bb.0: # %entry
5845; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5846; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5847; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
5848; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
5849; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5850; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5851; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5852; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
5853; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
5854; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5855; AVX1-NEXT:    retq
5856;
5857; AVX2-LABEL: test134:
5858; AVX2:       # %bb.0: # %entry
5859; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
5860; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
5861; AVX2-NEXT:    retq
5862;
5863; AVX512BW-LABEL: test134:
5864; AVX512BW:       # %bb.0: # %entry
5865; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
5866; AVX512BW-NEXT:    retq
5867entry:
5868  %cmp = icmp ule <64 x i8> %a, %b
5869  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5870  ret <64 x i8> %sel
5871}
5872
5873define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
5874; SSE-LABEL: test135:
5875; SSE:       # %bb.0: # %entry
5876; SSE-NEXT:    pminub %xmm4, %xmm0
5877; SSE-NEXT:    pminub %xmm5, %xmm1
5878; SSE-NEXT:    pminub %xmm6, %xmm2
5879; SSE-NEXT:    pminub %xmm7, %xmm3
5880; SSE-NEXT:    retq
5881;
5882; AVX1-LABEL: test135:
5883; AVX1:       # %bb.0: # %entry
5884; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5885; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5886; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
5887; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
5888; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5889; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5890; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5891; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
5892; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
5893; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5894; AVX1-NEXT:    retq
5895;
5896; AVX2-LABEL: test135:
5897; AVX2:       # %bb.0: # %entry
5898; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
5899; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
5900; AVX2-NEXT:    retq
5901;
5902; AVX512BW-LABEL: test135:
5903; AVX512BW:       # %bb.0: # %entry
5904; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
5905; AVX512BW-NEXT:    retq
5906entry:
5907  %cmp = icmp ugt <64 x i8> %a, %b
5908  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
5909  ret <64 x i8> %sel
5910}
5911
5912define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
5913; SSE-LABEL: test136:
5914; SSE:       # %bb.0: # %entry
5915; SSE-NEXT:    pminub %xmm4, %xmm0
5916; SSE-NEXT:    pminub %xmm5, %xmm1
5917; SSE-NEXT:    pminub %xmm6, %xmm2
5918; SSE-NEXT:    pminub %xmm7, %xmm3
5919; SSE-NEXT:    retq
5920;
5921; AVX1-LABEL: test136:
5922; AVX1:       # %bb.0: # %entry
5923; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5924; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5925; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
5926; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
5927; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
5928; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
5929; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5930; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
5931; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
5932; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5933; AVX1-NEXT:    retq
5934;
5935; AVX2-LABEL: test136:
5936; AVX2:       # %bb.0: # %entry
5937; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
5938; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
5939; AVX2-NEXT:    retq
5940;
5941; AVX512BW-LABEL: test136:
5942; AVX512BW:       # %bb.0: # %entry
5943; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
5944; AVX512BW-NEXT:    retq
5945entry:
5946  %cmp = icmp uge <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 <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
5952; SSE-LABEL: test137:
5953; SSE:       # %bb.0: # %entry
5954; SSE-NEXT:    pmaxsw %xmm4, %xmm0
5955; SSE-NEXT:    pmaxsw %xmm5, %xmm1
5956; SSE-NEXT:    pmaxsw %xmm6, %xmm2
5957; SSE-NEXT:    pmaxsw %xmm7, %xmm3
5958; SSE-NEXT:    retq
5959;
5960; AVX1-LABEL: test137:
5961; AVX1:       # %bb.0: # %entry
5962; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
5963; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
5964; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
5965; AVX1-NEXT:    vpmaxsw %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:    vpmaxsw %xmm2, %xmm4, %xmm2
5970; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
5971; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
5972; AVX1-NEXT:    retq
5973;
5974; AVX2-LABEL: test137:
5975; AVX2:       # %bb.0: # %entry
5976; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
5977; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
5978; AVX2-NEXT:    retq
5979;
5980; AVX512BW-LABEL: test137:
5981; AVX512BW:       # %bb.0: # %entry
5982; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
5983; AVX512BW-NEXT:    retq
5984entry:
5985  %cmp = icmp slt <32 x i16> %a, %b
5986  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
5987  ret <32 x i16> %sel
5988}
5989
5990define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
5991; SSE-LABEL: test138:
5992; SSE:       # %bb.0: # %entry
5993; SSE-NEXT:    pmaxsw %xmm4, %xmm0
5994; SSE-NEXT:    pmaxsw %xmm5, %xmm1
5995; SSE-NEXT:    pmaxsw %xmm6, %xmm2
5996; SSE-NEXT:    pmaxsw %xmm7, %xmm3
5997; SSE-NEXT:    retq
5998;
5999; AVX1-LABEL: test138:
6000; AVX1:       # %bb.0: # %entry
6001; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6002; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6003; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6004; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6005; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6006; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6007; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6008; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6009; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6010; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6011; AVX1-NEXT:    retq
6012;
6013; AVX2-LABEL: test138:
6014; AVX2:       # %bb.0: # %entry
6015; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6016; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6017; AVX2-NEXT:    retq
6018;
6019; AVX512BW-LABEL: test138:
6020; AVX512BW:       # %bb.0: # %entry
6021; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6022; AVX512BW-NEXT:    retq
6023entry:
6024  %cmp = icmp sle <32 x i16> %a, %b
6025  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6026  ret <32 x i16> %sel
6027}
6028
6029define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6030; SSE-LABEL: test139:
6031; SSE:       # %bb.0: # %entry
6032; SSE-NEXT:    pminsw %xmm4, %xmm0
6033; SSE-NEXT:    pminsw %xmm5, %xmm1
6034; SSE-NEXT:    pminsw %xmm6, %xmm2
6035; SSE-NEXT:    pminsw %xmm7, %xmm3
6036; SSE-NEXT:    retq
6037;
6038; AVX1-LABEL: test139:
6039; AVX1:       # %bb.0: # %entry
6040; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6041; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6042; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6043; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6044; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6045; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6046; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6047; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6048; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6049; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6050; AVX1-NEXT:    retq
6051;
6052; AVX2-LABEL: test139:
6053; AVX2:       # %bb.0: # %entry
6054; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6055; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6056; AVX2-NEXT:    retq
6057;
6058; AVX512BW-LABEL: test139:
6059; AVX512BW:       # %bb.0: # %entry
6060; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6061; AVX512BW-NEXT:    retq
6062entry:
6063  %cmp = icmp sgt <32 x i16> %a, %b
6064  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6065  ret <32 x i16> %sel
6066}
6067
6068define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6069; SSE-LABEL: test140:
6070; SSE:       # %bb.0: # %entry
6071; SSE-NEXT:    pminsw %xmm4, %xmm0
6072; SSE-NEXT:    pminsw %xmm5, %xmm1
6073; SSE-NEXT:    pminsw %xmm6, %xmm2
6074; SSE-NEXT:    pminsw %xmm7, %xmm3
6075; SSE-NEXT:    retq
6076;
6077; AVX1-LABEL: test140:
6078; AVX1:       # %bb.0: # %entry
6079; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6080; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6081; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6082; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6083; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6084; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6085; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6086; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6087; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6088; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6089; AVX1-NEXT:    retq
6090;
6091; AVX2-LABEL: test140:
6092; AVX2:       # %bb.0: # %entry
6093; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6094; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6095; AVX2-NEXT:    retq
6096;
6097; AVX512BW-LABEL: test140:
6098; AVX512BW:       # %bb.0: # %entry
6099; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6100; AVX512BW-NEXT:    retq
6101entry:
6102  %cmp = icmp sge <32 x i16> %a, %b
6103  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6104  ret <32 x i16> %sel
6105}
6106
6107define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6108; SSE2-LABEL: test141:
6109; SSE2:       # %bb.0: # %entry
6110; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6111; SSE2-NEXT:    pxor %xmm8, %xmm4
6112; SSE2-NEXT:    pxor %xmm8, %xmm0
6113; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
6114; SSE2-NEXT:    pxor %xmm8, %xmm0
6115; SSE2-NEXT:    pxor %xmm8, %xmm5
6116; SSE2-NEXT:    pxor %xmm8, %xmm1
6117; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
6118; SSE2-NEXT:    pxor %xmm8, %xmm1
6119; SSE2-NEXT:    pxor %xmm8, %xmm6
6120; SSE2-NEXT:    pxor %xmm8, %xmm2
6121; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
6122; SSE2-NEXT:    pxor %xmm8, %xmm2
6123; SSE2-NEXT:    pxor %xmm8, %xmm7
6124; SSE2-NEXT:    pxor %xmm8, %xmm3
6125; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
6126; SSE2-NEXT:    pxor %xmm8, %xmm3
6127; SSE2-NEXT:    retq
6128;
6129; SSE4-LABEL: test141:
6130; SSE4:       # %bb.0: # %entry
6131; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6132; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6133; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6134; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6135; SSE4-NEXT:    retq
6136;
6137; AVX1-LABEL: test141:
6138; AVX1:       # %bb.0: # %entry
6139; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6140; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6141; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6142; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6143; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6144; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6145; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6146; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6147; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6148; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6149; AVX1-NEXT:    retq
6150;
6151; AVX2-LABEL: test141:
6152; AVX2:       # %bb.0: # %entry
6153; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6154; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6155; AVX2-NEXT:    retq
6156;
6157; AVX512BW-LABEL: test141:
6158; AVX512BW:       # %bb.0: # %entry
6159; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6160; AVX512BW-NEXT:    retq
6161entry:
6162  %cmp = icmp ult <32 x i16> %a, %b
6163  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6164  ret <32 x i16> %sel
6165}
6166
6167define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6168; SSE2-LABEL: test142:
6169; SSE2:       # %bb.0: # %entry
6170; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6171; SSE2-NEXT:    pxor %xmm8, %xmm4
6172; SSE2-NEXT:    pxor %xmm8, %xmm0
6173; SSE2-NEXT:    pmaxsw %xmm4, %xmm0
6174; SSE2-NEXT:    pxor %xmm8, %xmm0
6175; SSE2-NEXT:    pxor %xmm8, %xmm5
6176; SSE2-NEXT:    pxor %xmm8, %xmm1
6177; SSE2-NEXT:    pmaxsw %xmm5, %xmm1
6178; SSE2-NEXT:    pxor %xmm8, %xmm1
6179; SSE2-NEXT:    pxor %xmm8, %xmm6
6180; SSE2-NEXT:    pxor %xmm8, %xmm2
6181; SSE2-NEXT:    pmaxsw %xmm6, %xmm2
6182; SSE2-NEXT:    pxor %xmm8, %xmm2
6183; SSE2-NEXT:    pxor %xmm8, %xmm7
6184; SSE2-NEXT:    pxor %xmm8, %xmm3
6185; SSE2-NEXT:    pmaxsw %xmm7, %xmm3
6186; SSE2-NEXT:    pxor %xmm8, %xmm3
6187; SSE2-NEXT:    retq
6188;
6189; SSE4-LABEL: test142:
6190; SSE4:       # %bb.0: # %entry
6191; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6192; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6193; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6194; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6195; SSE4-NEXT:    retq
6196;
6197; AVX1-LABEL: test142:
6198; AVX1:       # %bb.0: # %entry
6199; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6200; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6201; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6202; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6203; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6204; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6205; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6206; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6207; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6208; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6209; AVX1-NEXT:    retq
6210;
6211; AVX2-LABEL: test142:
6212; AVX2:       # %bb.0: # %entry
6213; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6214; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6215; AVX2-NEXT:    retq
6216;
6217; AVX512BW-LABEL: test142:
6218; AVX512BW:       # %bb.0: # %entry
6219; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6220; AVX512BW-NEXT:    retq
6221entry:
6222  %cmp = icmp ule <32 x i16> %a, %b
6223  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6224  ret <32 x i16> %sel
6225}
6226
6227define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6228; SSE2-LABEL: test143:
6229; SSE2:       # %bb.0: # %entry
6230; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6231; SSE2-NEXT:    pxor %xmm8, %xmm4
6232; SSE2-NEXT:    pxor %xmm8, %xmm0
6233; SSE2-NEXT:    pminsw %xmm4, %xmm0
6234; SSE2-NEXT:    pxor %xmm8, %xmm0
6235; SSE2-NEXT:    pxor %xmm8, %xmm5
6236; SSE2-NEXT:    pxor %xmm8, %xmm1
6237; SSE2-NEXT:    pminsw %xmm5, %xmm1
6238; SSE2-NEXT:    pxor %xmm8, %xmm1
6239; SSE2-NEXT:    pxor %xmm8, %xmm6
6240; SSE2-NEXT:    pxor %xmm8, %xmm2
6241; SSE2-NEXT:    pminsw %xmm6, %xmm2
6242; SSE2-NEXT:    pxor %xmm8, %xmm2
6243; SSE2-NEXT:    pxor %xmm8, %xmm7
6244; SSE2-NEXT:    pxor %xmm8, %xmm3
6245; SSE2-NEXT:    pminsw %xmm7, %xmm3
6246; SSE2-NEXT:    pxor %xmm8, %xmm3
6247; SSE2-NEXT:    retq
6248;
6249; SSE4-LABEL: test143:
6250; SSE4:       # %bb.0: # %entry
6251; SSE4-NEXT:    pminuw %xmm4, %xmm0
6252; SSE4-NEXT:    pminuw %xmm5, %xmm1
6253; SSE4-NEXT:    pminuw %xmm6, %xmm2
6254; SSE4-NEXT:    pminuw %xmm7, %xmm3
6255; SSE4-NEXT:    retq
6256;
6257; AVX1-LABEL: test143:
6258; AVX1:       # %bb.0: # %entry
6259; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6260; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6261; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6262; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6263; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6264; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6265; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6266; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6267; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6268; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6269; AVX1-NEXT:    retq
6270;
6271; AVX2-LABEL: test143:
6272; AVX2:       # %bb.0: # %entry
6273; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6274; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6275; AVX2-NEXT:    retq
6276;
6277; AVX512BW-LABEL: test143:
6278; AVX512BW:       # %bb.0: # %entry
6279; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6280; AVX512BW-NEXT:    retq
6281entry:
6282  %cmp = icmp ugt <32 x i16> %a, %b
6283  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6284  ret <32 x i16> %sel
6285}
6286
6287define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6288; SSE2-LABEL: test144:
6289; SSE2:       # %bb.0: # %entry
6290; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [32768,32768,32768,32768,32768,32768,32768,32768]
6291; SSE2-NEXT:    pxor %xmm8, %xmm4
6292; SSE2-NEXT:    pxor %xmm8, %xmm0
6293; SSE2-NEXT:    pminsw %xmm4, %xmm0
6294; SSE2-NEXT:    pxor %xmm8, %xmm0
6295; SSE2-NEXT:    pxor %xmm8, %xmm5
6296; SSE2-NEXT:    pxor %xmm8, %xmm1
6297; SSE2-NEXT:    pminsw %xmm5, %xmm1
6298; SSE2-NEXT:    pxor %xmm8, %xmm1
6299; SSE2-NEXT:    pxor %xmm8, %xmm6
6300; SSE2-NEXT:    pxor %xmm8, %xmm2
6301; SSE2-NEXT:    pminsw %xmm6, %xmm2
6302; SSE2-NEXT:    pxor %xmm8, %xmm2
6303; SSE2-NEXT:    pxor %xmm8, %xmm7
6304; SSE2-NEXT:    pxor %xmm8, %xmm3
6305; SSE2-NEXT:    pminsw %xmm7, %xmm3
6306; SSE2-NEXT:    pxor %xmm8, %xmm3
6307; SSE2-NEXT:    retq
6308;
6309; SSE4-LABEL: test144:
6310; SSE4:       # %bb.0: # %entry
6311; SSE4-NEXT:    pminuw %xmm4, %xmm0
6312; SSE4-NEXT:    pminuw %xmm5, %xmm1
6313; SSE4-NEXT:    pminuw %xmm6, %xmm2
6314; SSE4-NEXT:    pminuw %xmm7, %xmm3
6315; SSE4-NEXT:    retq
6316;
6317; AVX1-LABEL: test144:
6318; AVX1:       # %bb.0: # %entry
6319; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6320; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6321; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6322; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6323; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6324; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6325; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6326; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6327; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6328; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6329; AVX1-NEXT:    retq
6330;
6331; AVX2-LABEL: test144:
6332; AVX2:       # %bb.0: # %entry
6333; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6334; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6335; AVX2-NEXT:    retq
6336;
6337; AVX512BW-LABEL: test144:
6338; AVX512BW:       # %bb.0: # %entry
6339; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6340; AVX512BW-NEXT:    retq
6341entry:
6342  %cmp = icmp uge <32 x i16> %a, %b
6343  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6344  ret <32 x i16> %sel
6345}
6346
6347define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6348; SSE2-LABEL: test145:
6349; SSE2:       # %bb.0: # %entry
6350; SSE2-NEXT:    movdqa %xmm0, %xmm8
6351; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6352; SSE2-NEXT:    pand %xmm8, %xmm0
6353; SSE2-NEXT:    pandn %xmm4, %xmm8
6354; SSE2-NEXT:    por %xmm0, %xmm8
6355; SSE2-NEXT:    movdqa %xmm1, %xmm4
6356; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6357; SSE2-NEXT:    pand %xmm4, %xmm1
6358; SSE2-NEXT:    pandn %xmm5, %xmm4
6359; SSE2-NEXT:    por %xmm1, %xmm4
6360; SSE2-NEXT:    movdqa %xmm2, %xmm5
6361; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
6362; SSE2-NEXT:    pand %xmm5, %xmm2
6363; SSE2-NEXT:    pandn %xmm6, %xmm5
6364; SSE2-NEXT:    por %xmm2, %xmm5
6365; SSE2-NEXT:    movdqa %xmm3, %xmm6
6366; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
6367; SSE2-NEXT:    pand %xmm6, %xmm3
6368; SSE2-NEXT:    pandn %xmm7, %xmm6
6369; SSE2-NEXT:    por %xmm3, %xmm6
6370; SSE2-NEXT:    movdqa %xmm8, %xmm0
6371; SSE2-NEXT:    movdqa %xmm4, %xmm1
6372; SSE2-NEXT:    movdqa %xmm5, %xmm2
6373; SSE2-NEXT:    movdqa %xmm6, %xmm3
6374; SSE2-NEXT:    retq
6375;
6376; SSE4-LABEL: test145:
6377; SSE4:       # %bb.0: # %entry
6378; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6379; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6380; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6381; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6382; SSE4-NEXT:    retq
6383;
6384; AVX1-LABEL: test145:
6385; AVX1:       # %bb.0: # %entry
6386; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6387; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6388; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6389; AVX1-NEXT:    vpmaxsd %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:    vpmaxsd %xmm2, %xmm4, %xmm2
6394; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6395; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6396; AVX1-NEXT:    retq
6397;
6398; AVX2-LABEL: test145:
6399; AVX2:       # %bb.0: # %entry
6400; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6401; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6402; AVX2-NEXT:    retq
6403;
6404; AVX512F-LABEL: test145:
6405; AVX512F:       # %bb.0: # %entry
6406; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6407; AVX512F-NEXT:    retq
6408entry:
6409  %cmp = icmp slt <16 x i32> %a, %b
6410  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6411  ret <16 x i32> %sel
6412}
6413
6414define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6415; SSE2-LABEL: test146:
6416; SSE2:       # %bb.0: # %entry
6417; SSE2-NEXT:    movdqa %xmm0, %xmm8
6418; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6419; SSE2-NEXT:    pand %xmm8, %xmm0
6420; SSE2-NEXT:    pandn %xmm4, %xmm8
6421; SSE2-NEXT:    por %xmm0, %xmm8
6422; SSE2-NEXT:    movdqa %xmm1, %xmm4
6423; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6424; SSE2-NEXT:    pand %xmm4, %xmm1
6425; SSE2-NEXT:    pandn %xmm5, %xmm4
6426; SSE2-NEXT:    por %xmm1, %xmm4
6427; SSE2-NEXT:    movdqa %xmm2, %xmm5
6428; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
6429; SSE2-NEXT:    pand %xmm5, %xmm2
6430; SSE2-NEXT:    pandn %xmm6, %xmm5
6431; SSE2-NEXT:    por %xmm2, %xmm5
6432; SSE2-NEXT:    movdqa %xmm3, %xmm6
6433; SSE2-NEXT:    pcmpgtd %xmm7, %xmm6
6434; SSE2-NEXT:    pand %xmm6, %xmm3
6435; SSE2-NEXT:    pandn %xmm7, %xmm6
6436; SSE2-NEXT:    por %xmm3, %xmm6
6437; SSE2-NEXT:    movdqa %xmm8, %xmm0
6438; SSE2-NEXT:    movdqa %xmm4, %xmm1
6439; SSE2-NEXT:    movdqa %xmm5, %xmm2
6440; SSE2-NEXT:    movdqa %xmm6, %xmm3
6441; SSE2-NEXT:    retq
6442;
6443; SSE4-LABEL: test146:
6444; SSE4:       # %bb.0: # %entry
6445; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6446; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6447; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6448; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6449; SSE4-NEXT:    retq
6450;
6451; AVX1-LABEL: test146:
6452; AVX1:       # %bb.0: # %entry
6453; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6454; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6455; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6456; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6457; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6458; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6459; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6460; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6461; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6462; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6463; AVX1-NEXT:    retq
6464;
6465; AVX2-LABEL: test146:
6466; AVX2:       # %bb.0: # %entry
6467; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6468; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6469; AVX2-NEXT:    retq
6470;
6471; AVX512F-LABEL: test146:
6472; AVX512F:       # %bb.0: # %entry
6473; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6474; AVX512F-NEXT:    retq
6475entry:
6476  %cmp = icmp sle <16 x i32> %a, %b
6477  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6478  ret <16 x i32> %sel
6479}
6480
6481define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
6482; SSE2-LABEL: test147:
6483; SSE2:       # %bb.0: # %entry
6484; SSE2-NEXT:    movdqa %xmm4, %xmm8
6485; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6486; SSE2-NEXT:    pand %xmm8, %xmm0
6487; SSE2-NEXT:    pandn %xmm4, %xmm8
6488; SSE2-NEXT:    por %xmm8, %xmm0
6489; SSE2-NEXT:    movdqa %xmm5, %xmm4
6490; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6491; SSE2-NEXT:    pand %xmm4, %xmm1
6492; SSE2-NEXT:    pandn %xmm5, %xmm4
6493; SSE2-NEXT:    por %xmm4, %xmm1
6494; SSE2-NEXT:    movdqa %xmm6, %xmm4
6495; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6496; SSE2-NEXT:    pand %xmm4, %xmm2
6497; SSE2-NEXT:    pandn %xmm6, %xmm4
6498; SSE2-NEXT:    por %xmm4, %xmm2
6499; SSE2-NEXT:    movdqa %xmm7, %xmm4
6500; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6501; SSE2-NEXT:    pand %xmm4, %xmm3
6502; SSE2-NEXT:    pandn %xmm7, %xmm4
6503; SSE2-NEXT:    por %xmm4, %xmm3
6504; SSE2-NEXT:    retq
6505;
6506; SSE4-LABEL: test147:
6507; SSE4:       # %bb.0: # %entry
6508; SSE4-NEXT:    pminsd %xmm4, %xmm0
6509; SSE4-NEXT:    pminsd %xmm5, %xmm1
6510; SSE4-NEXT:    pminsd %xmm6, %xmm2
6511; SSE4-NEXT:    pminsd %xmm7, %xmm3
6512; SSE4-NEXT:    retq
6513;
6514; AVX1-LABEL: test147:
6515; AVX1:       # %bb.0: # %entry
6516; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6517; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6518; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6519; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6520; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6521; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6522; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6523; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6524; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6525; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6526; AVX1-NEXT:    retq
6527;
6528; AVX2-LABEL: test147:
6529; AVX2:       # %bb.0: # %entry
6530; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6531; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6532; AVX2-NEXT:    retq
6533;
6534; AVX512F-LABEL: test147:
6535; AVX512F:       # %bb.0: # %entry
6536; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6537; AVX512F-NEXT:    retq
6538entry:
6539  %cmp = icmp sgt <16 x i32> %a, %b
6540  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6541  ret <16 x i32> %sel
6542}
6543
6544define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
6545; SSE2-LABEL: test148:
6546; SSE2:       # %bb.0: # %entry
6547; SSE2-NEXT:    movdqa %xmm4, %xmm8
6548; SSE2-NEXT:    pcmpgtd %xmm0, %xmm8
6549; SSE2-NEXT:    pand %xmm8, %xmm0
6550; SSE2-NEXT:    pandn %xmm4, %xmm8
6551; SSE2-NEXT:    por %xmm8, %xmm0
6552; SSE2-NEXT:    movdqa %xmm5, %xmm4
6553; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
6554; SSE2-NEXT:    pand %xmm4, %xmm1
6555; SSE2-NEXT:    pandn %xmm5, %xmm4
6556; SSE2-NEXT:    por %xmm4, %xmm1
6557; SSE2-NEXT:    movdqa %xmm6, %xmm4
6558; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
6559; SSE2-NEXT:    pand %xmm4, %xmm2
6560; SSE2-NEXT:    pandn %xmm6, %xmm4
6561; SSE2-NEXT:    por %xmm4, %xmm2
6562; SSE2-NEXT:    movdqa %xmm7, %xmm4
6563; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
6564; SSE2-NEXT:    pand %xmm4, %xmm3
6565; SSE2-NEXT:    pandn %xmm7, %xmm4
6566; SSE2-NEXT:    por %xmm4, %xmm3
6567; SSE2-NEXT:    retq
6568;
6569; SSE4-LABEL: test148:
6570; SSE4:       # %bb.0: # %entry
6571; SSE4-NEXT:    pminsd %xmm4, %xmm0
6572; SSE4-NEXT:    pminsd %xmm5, %xmm1
6573; SSE4-NEXT:    pminsd %xmm6, %xmm2
6574; SSE4-NEXT:    pminsd %xmm7, %xmm3
6575; SSE4-NEXT:    retq
6576;
6577; AVX1-LABEL: test148:
6578; AVX1:       # %bb.0: # %entry
6579; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6580; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6581; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
6582; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
6583; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6584; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6585; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6586; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
6587; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
6588; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6589; AVX1-NEXT:    retq
6590;
6591; AVX2-LABEL: test148:
6592; AVX2:       # %bb.0: # %entry
6593; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
6594; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
6595; AVX2-NEXT:    retq
6596;
6597; AVX512F-LABEL: test148:
6598; AVX512F:       # %bb.0: # %entry
6599; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
6600; AVX512F-NEXT:    retq
6601entry:
6602  %cmp = icmp sge <16 x i32> %a, %b
6603  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6604  ret <16 x i32> %sel
6605}
6606
6607define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
6608; SSE2-LABEL: test149:
6609; SSE2:       # %bb.0: # %entry
6610; SSE2-NEXT:    movdqa %xmm1, %xmm8
6611; SSE2-NEXT:    movdqa %xmm0, %xmm10
6612; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
6613; SSE2-NEXT:    movdqa %xmm4, %xmm1
6614; SSE2-NEXT:    pxor %xmm9, %xmm1
6615; SSE2-NEXT:    pxor %xmm9, %xmm0
6616; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6617; SSE2-NEXT:    pand %xmm0, %xmm10
6618; SSE2-NEXT:    pandn %xmm4, %xmm0
6619; SSE2-NEXT:    por %xmm10, %xmm0
6620; SSE2-NEXT:    movdqa %xmm5, %xmm4
6621; SSE2-NEXT:    pxor %xmm9, %xmm4
6622; SSE2-NEXT:    movdqa %xmm8, %xmm1
6623; SSE2-NEXT:    pxor %xmm9, %xmm1
6624; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
6625; SSE2-NEXT:    pand %xmm1, %xmm8
6626; SSE2-NEXT:    pandn %xmm5, %xmm1
6627; SSE2-NEXT:    por %xmm8, %xmm1
6628; SSE2-NEXT:    movdqa %xmm6, %xmm5
6629; SSE2-NEXT:    pxor %xmm9, %xmm5
6630; SSE2-NEXT:    movdqa %xmm2, %xmm4
6631; SSE2-NEXT:    pxor %xmm9, %xmm4
6632; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6633; SSE2-NEXT:    pand %xmm4, %xmm2
6634; SSE2-NEXT:    pandn %xmm6, %xmm4
6635; SSE2-NEXT:    por %xmm2, %xmm4
6636; SSE2-NEXT:    movdqa %xmm7, %xmm2
6637; SSE2-NEXT:    pxor %xmm9, %xmm2
6638; SSE2-NEXT:    pxor %xmm3, %xmm9
6639; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
6640; SSE2-NEXT:    pand %xmm9, %xmm3
6641; SSE2-NEXT:    pandn %xmm7, %xmm9
6642; SSE2-NEXT:    por %xmm9, %xmm3
6643; SSE2-NEXT:    movdqa %xmm4, %xmm2
6644; SSE2-NEXT:    retq
6645;
6646; SSE4-LABEL: test149:
6647; SSE4:       # %bb.0: # %entry
6648; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6649; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6650; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6651; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6652; SSE4-NEXT:    retq
6653;
6654; AVX1-LABEL: test149:
6655; AVX1:       # %bb.0: # %entry
6656; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6657; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6658; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6659; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6660; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6661; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6662; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6663; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6664; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6665; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6666; AVX1-NEXT:    retq
6667;
6668; AVX2-LABEL: test149:
6669; AVX2:       # %bb.0: # %entry
6670; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6671; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6672; AVX2-NEXT:    retq
6673;
6674; AVX512F-LABEL: test149:
6675; AVX512F:       # %bb.0: # %entry
6676; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6677; AVX512F-NEXT:    retq
6678entry:
6679  %cmp = icmp ult <16 x i32> %a, %b
6680  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6681  ret <16 x i32> %sel
6682}
6683
6684define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
6685; SSE2-LABEL: test150:
6686; SSE2:       # %bb.0: # %entry
6687; SSE2-NEXT:    movdqa %xmm1, %xmm8
6688; SSE2-NEXT:    movdqa %xmm0, %xmm10
6689; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
6690; SSE2-NEXT:    movdqa %xmm4, %xmm1
6691; SSE2-NEXT:    pxor %xmm9, %xmm1
6692; SSE2-NEXT:    pxor %xmm9, %xmm0
6693; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
6694; SSE2-NEXT:    pand %xmm0, %xmm10
6695; SSE2-NEXT:    pandn %xmm4, %xmm0
6696; SSE2-NEXT:    por %xmm10, %xmm0
6697; SSE2-NEXT:    movdqa %xmm5, %xmm4
6698; SSE2-NEXT:    pxor %xmm9, %xmm4
6699; SSE2-NEXT:    movdqa %xmm8, %xmm1
6700; SSE2-NEXT:    pxor %xmm9, %xmm1
6701; SSE2-NEXT:    pcmpgtd %xmm4, %xmm1
6702; SSE2-NEXT:    pand %xmm1, %xmm8
6703; SSE2-NEXT:    pandn %xmm5, %xmm1
6704; SSE2-NEXT:    por %xmm8, %xmm1
6705; SSE2-NEXT:    movdqa %xmm6, %xmm5
6706; SSE2-NEXT:    pxor %xmm9, %xmm5
6707; SSE2-NEXT:    movdqa %xmm2, %xmm4
6708; SSE2-NEXT:    pxor %xmm9, %xmm4
6709; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
6710; SSE2-NEXT:    pand %xmm4, %xmm2
6711; SSE2-NEXT:    pandn %xmm6, %xmm4
6712; SSE2-NEXT:    por %xmm2, %xmm4
6713; SSE2-NEXT:    movdqa %xmm7, %xmm2
6714; SSE2-NEXT:    pxor %xmm9, %xmm2
6715; SSE2-NEXT:    pxor %xmm3, %xmm9
6716; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
6717; SSE2-NEXT:    pand %xmm9, %xmm3
6718; SSE2-NEXT:    pandn %xmm7, %xmm9
6719; SSE2-NEXT:    por %xmm9, %xmm3
6720; SSE2-NEXT:    movdqa %xmm4, %xmm2
6721; SSE2-NEXT:    retq
6722;
6723; SSE4-LABEL: test150:
6724; SSE4:       # %bb.0: # %entry
6725; SSE4-NEXT:    pmaxud %xmm4, %xmm0
6726; SSE4-NEXT:    pmaxud %xmm5, %xmm1
6727; SSE4-NEXT:    pmaxud %xmm6, %xmm2
6728; SSE4-NEXT:    pmaxud %xmm7, %xmm3
6729; SSE4-NEXT:    retq
6730;
6731; AVX1-LABEL: test150:
6732; AVX1:       # %bb.0: # %entry
6733; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6734; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6735; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
6736; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
6737; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6738; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6739; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6740; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
6741; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
6742; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6743; AVX1-NEXT:    retq
6744;
6745; AVX2-LABEL: test150:
6746; AVX2:       # %bb.0: # %entry
6747; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
6748; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
6749; AVX2-NEXT:    retq
6750;
6751; AVX512F-LABEL: test150:
6752; AVX512F:       # %bb.0: # %entry
6753; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
6754; AVX512F-NEXT:    retq
6755entry:
6756  %cmp = icmp ule <16 x i32> %a, %b
6757  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6758  ret <16 x i32> %sel
6759}
6760
6761define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
6762; SSE2-LABEL: test151:
6763; SSE2:       # %bb.0: # %entry
6764; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6765; SSE2-NEXT:    movdqa %xmm0, %xmm9
6766; SSE2-NEXT:    pxor %xmm8, %xmm9
6767; SSE2-NEXT:    movdqa %xmm4, %xmm10
6768; SSE2-NEXT:    pxor %xmm8, %xmm10
6769; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6770; SSE2-NEXT:    pand %xmm10, %xmm0
6771; SSE2-NEXT:    pandn %xmm4, %xmm10
6772; SSE2-NEXT:    por %xmm10, %xmm0
6773; SSE2-NEXT:    movdqa %xmm1, %xmm9
6774; SSE2-NEXT:    pxor %xmm8, %xmm9
6775; SSE2-NEXT:    movdqa %xmm5, %xmm4
6776; SSE2-NEXT:    pxor %xmm8, %xmm4
6777; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6778; SSE2-NEXT:    pand %xmm4, %xmm1
6779; SSE2-NEXT:    pandn %xmm5, %xmm4
6780; SSE2-NEXT:    por %xmm4, %xmm1
6781; SSE2-NEXT:    movdqa %xmm2, %xmm4
6782; SSE2-NEXT:    pxor %xmm8, %xmm4
6783; SSE2-NEXT:    movdqa %xmm6, %xmm5
6784; SSE2-NEXT:    pxor %xmm8, %xmm5
6785; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6786; SSE2-NEXT:    pand %xmm5, %xmm2
6787; SSE2-NEXT:    pandn %xmm6, %xmm5
6788; SSE2-NEXT:    por %xmm5, %xmm2
6789; SSE2-NEXT:    movdqa %xmm3, %xmm4
6790; SSE2-NEXT:    pxor %xmm8, %xmm4
6791; SSE2-NEXT:    pxor %xmm7, %xmm8
6792; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6793; SSE2-NEXT:    pand %xmm8, %xmm3
6794; SSE2-NEXT:    pandn %xmm7, %xmm8
6795; SSE2-NEXT:    por %xmm8, %xmm3
6796; SSE2-NEXT:    retq
6797;
6798; SSE4-LABEL: test151:
6799; SSE4:       # %bb.0: # %entry
6800; SSE4-NEXT:    pminud %xmm4, %xmm0
6801; SSE4-NEXT:    pminud %xmm5, %xmm1
6802; SSE4-NEXT:    pminud %xmm6, %xmm2
6803; SSE4-NEXT:    pminud %xmm7, %xmm3
6804; SSE4-NEXT:    retq
6805;
6806; AVX1-LABEL: test151:
6807; AVX1:       # %bb.0: # %entry
6808; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6809; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6810; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
6811; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
6812; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6813; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6814; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6815; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
6816; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
6817; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6818; AVX1-NEXT:    retq
6819;
6820; AVX2-LABEL: test151:
6821; AVX2:       # %bb.0: # %entry
6822; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
6823; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
6824; AVX2-NEXT:    retq
6825;
6826; AVX512F-LABEL: test151:
6827; AVX512F:       # %bb.0: # %entry
6828; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
6829; AVX512F-NEXT:    retq
6830entry:
6831  %cmp = icmp ugt <16 x i32> %a, %b
6832  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6833  ret <16 x i32> %sel
6834}
6835
6836define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
6837; SSE2-LABEL: test152:
6838; SSE2:       # %bb.0: # %entry
6839; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
6840; SSE2-NEXT:    movdqa %xmm0, %xmm9
6841; SSE2-NEXT:    pxor %xmm8, %xmm9
6842; SSE2-NEXT:    movdqa %xmm4, %xmm10
6843; SSE2-NEXT:    pxor %xmm8, %xmm10
6844; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6845; SSE2-NEXT:    pand %xmm10, %xmm0
6846; SSE2-NEXT:    pandn %xmm4, %xmm10
6847; SSE2-NEXT:    por %xmm10, %xmm0
6848; SSE2-NEXT:    movdqa %xmm1, %xmm9
6849; SSE2-NEXT:    pxor %xmm8, %xmm9
6850; SSE2-NEXT:    movdqa %xmm5, %xmm4
6851; SSE2-NEXT:    pxor %xmm8, %xmm4
6852; SSE2-NEXT:    pcmpgtd %xmm9, %xmm4
6853; SSE2-NEXT:    pand %xmm4, %xmm1
6854; SSE2-NEXT:    pandn %xmm5, %xmm4
6855; SSE2-NEXT:    por %xmm4, %xmm1
6856; SSE2-NEXT:    movdqa %xmm2, %xmm4
6857; SSE2-NEXT:    pxor %xmm8, %xmm4
6858; SSE2-NEXT:    movdqa %xmm6, %xmm5
6859; SSE2-NEXT:    pxor %xmm8, %xmm5
6860; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6861; SSE2-NEXT:    pand %xmm5, %xmm2
6862; SSE2-NEXT:    pandn %xmm6, %xmm5
6863; SSE2-NEXT:    por %xmm5, %xmm2
6864; SSE2-NEXT:    movdqa %xmm3, %xmm4
6865; SSE2-NEXT:    pxor %xmm8, %xmm4
6866; SSE2-NEXT:    pxor %xmm7, %xmm8
6867; SSE2-NEXT:    pcmpgtd %xmm4, %xmm8
6868; SSE2-NEXT:    pand %xmm8, %xmm3
6869; SSE2-NEXT:    pandn %xmm7, %xmm8
6870; SSE2-NEXT:    por %xmm8, %xmm3
6871; SSE2-NEXT:    retq
6872;
6873; SSE4-LABEL: test152:
6874; SSE4:       # %bb.0: # %entry
6875; SSE4-NEXT:    pminud %xmm4, %xmm0
6876; SSE4-NEXT:    pminud %xmm5, %xmm1
6877; SSE4-NEXT:    pminud %xmm6, %xmm2
6878; SSE4-NEXT:    pminud %xmm7, %xmm3
6879; SSE4-NEXT:    retq
6880;
6881; AVX1-LABEL: test152:
6882; AVX1:       # %bb.0: # %entry
6883; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6884; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6885; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
6886; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
6887; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6888; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6889; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6890; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
6891; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
6892; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6893; AVX1-NEXT:    retq
6894;
6895; AVX2-LABEL: test152:
6896; AVX2:       # %bb.0: # %entry
6897; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
6898; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
6899; AVX2-NEXT:    retq
6900;
6901; AVX512F-LABEL: test152:
6902; AVX512F:       # %bb.0: # %entry
6903; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
6904; AVX512F-NEXT:    retq
6905entry:
6906  %cmp = icmp uge <16 x i32> %a, %b
6907  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6908  ret <16 x i32> %sel
6909}
6910
6911; -----------------------
6912
6913define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
6914; SSE2-LABEL: test153:
6915; SSE2:       # %bb.0: # %entry
6916; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
6917; SSE2-NEXT:    movdqa %xmm4, %xmm9
6918; SSE2-NEXT:    pxor %xmm8, %xmm9
6919; SSE2-NEXT:    movdqa %xmm0, %xmm10
6920; SSE2-NEXT:    pxor %xmm8, %xmm10
6921; SSE2-NEXT:    movdqa %xmm10, %xmm11
6922; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
6923; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
6924; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
6925; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
6926; SSE2-NEXT:    pand %xmm12, %xmm9
6927; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
6928; SSE2-NEXT:    por %xmm9, %xmm10
6929; SSE2-NEXT:    pand %xmm10, %xmm0
6930; SSE2-NEXT:    pandn %xmm4, %xmm10
6931; SSE2-NEXT:    por %xmm10, %xmm0
6932; SSE2-NEXT:    movdqa %xmm5, %xmm9
6933; SSE2-NEXT:    pxor %xmm8, %xmm9
6934; SSE2-NEXT:    movdqa %xmm1, %xmm4
6935; SSE2-NEXT:    pxor %xmm8, %xmm4
6936; SSE2-NEXT:    movdqa %xmm4, %xmm10
6937; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
6938; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
6939; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
6940; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
6941; SSE2-NEXT:    pand %xmm11, %xmm9
6942; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
6943; SSE2-NEXT:    por %xmm9, %xmm4
6944; SSE2-NEXT:    pand %xmm4, %xmm1
6945; SSE2-NEXT:    pandn %xmm5, %xmm4
6946; SSE2-NEXT:    por %xmm4, %xmm1
6947; SSE2-NEXT:    movdqa %xmm6, %xmm4
6948; SSE2-NEXT:    pxor %xmm8, %xmm4
6949; SSE2-NEXT:    movdqa %xmm2, %xmm5
6950; SSE2-NEXT:    pxor %xmm8, %xmm5
6951; SSE2-NEXT:    movdqa %xmm5, %xmm9
6952; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
6953; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
6954; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
6955; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
6956; SSE2-NEXT:    pand %xmm10, %xmm4
6957; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
6958; SSE2-NEXT:    por %xmm4, %xmm5
6959; SSE2-NEXT:    pand %xmm5, %xmm2
6960; SSE2-NEXT:    pandn %xmm6, %xmm5
6961; SSE2-NEXT:    por %xmm5, %xmm2
6962; SSE2-NEXT:    movdqa %xmm7, %xmm4
6963; SSE2-NEXT:    pxor %xmm8, %xmm4
6964; SSE2-NEXT:    pxor %xmm3, %xmm8
6965; SSE2-NEXT:    movdqa %xmm8, %xmm5
6966; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
6967; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
6968; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
6969; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
6970; SSE2-NEXT:    pand %xmm6, %xmm4
6971; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
6972; SSE2-NEXT:    por %xmm4, %xmm5
6973; SSE2-NEXT:    pand %xmm5, %xmm3
6974; SSE2-NEXT:    pandn %xmm7, %xmm5
6975; SSE2-NEXT:    por %xmm5, %xmm3
6976; SSE2-NEXT:    retq
6977;
6978; SSE4-LABEL: test153:
6979; SSE4:       # %bb.0: # %entry
6980; SSE4-NEXT:    movdqa %xmm0, %xmm8
6981; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
6982; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
6983; SSE4-NEXT:    movdqa %xmm1, %xmm0
6984; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
6985; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
6986; SSE4-NEXT:    movdqa %xmm2, %xmm0
6987; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
6988; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
6989; SSE4-NEXT:    movdqa %xmm3, %xmm0
6990; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
6991; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
6992; SSE4-NEXT:    movapd %xmm4, %xmm0
6993; SSE4-NEXT:    movapd %xmm5, %xmm1
6994; SSE4-NEXT:    movapd %xmm6, %xmm2
6995; SSE4-NEXT:    movapd %xmm7, %xmm3
6996; SSE4-NEXT:    retq
6997;
6998; AVX1-LABEL: test153:
6999; AVX1:       # %bb.0: # %entry
7000; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7001; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7002; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7003; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7004; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7005; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7006; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7007; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7008; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7009; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7010; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7011; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7012; AVX1-NEXT:    retq
7013;
7014; AVX2-LABEL: test153:
7015; AVX2:       # %bb.0: # %entry
7016; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7017; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7018; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7019; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7020; AVX2-NEXT:    retq
7021;
7022; AVX512F-LABEL: test153:
7023; AVX512F:       # %bb.0: # %entry
7024; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7025; AVX512F-NEXT:    retq
7026entry:
7027  %cmp = icmp slt <8 x i64> %a, %b
7028  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7029  ret <8 x i64> %sel
7030}
7031
7032define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7033; SSE2-LABEL: test154:
7034; SSE2:       # %bb.0: # %entry
7035; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
7036; SSE2-NEXT:    movdqa %xmm4, %xmm9
7037; SSE2-NEXT:    pxor %xmm8, %xmm9
7038; SSE2-NEXT:    movdqa %xmm0, %xmm10
7039; SSE2-NEXT:    pxor %xmm8, %xmm10
7040; SSE2-NEXT:    movdqa %xmm10, %xmm11
7041; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7042; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7043; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7044; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7045; SSE2-NEXT:    pand %xmm12, %xmm9
7046; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7047; SSE2-NEXT:    por %xmm9, %xmm10
7048; SSE2-NEXT:    pand %xmm10, %xmm0
7049; SSE2-NEXT:    pandn %xmm4, %xmm10
7050; SSE2-NEXT:    por %xmm10, %xmm0
7051; SSE2-NEXT:    movdqa %xmm5, %xmm9
7052; SSE2-NEXT:    pxor %xmm8, %xmm9
7053; SSE2-NEXT:    movdqa %xmm1, %xmm4
7054; SSE2-NEXT:    pxor %xmm8, %xmm4
7055; SSE2-NEXT:    movdqa %xmm4, %xmm10
7056; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7057; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7058; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7059; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7060; SSE2-NEXT:    pand %xmm11, %xmm9
7061; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7062; SSE2-NEXT:    por %xmm9, %xmm4
7063; SSE2-NEXT:    pand %xmm4, %xmm1
7064; SSE2-NEXT:    pandn %xmm5, %xmm4
7065; SSE2-NEXT:    por %xmm4, %xmm1
7066; SSE2-NEXT:    movdqa %xmm6, %xmm4
7067; SSE2-NEXT:    pxor %xmm8, %xmm4
7068; SSE2-NEXT:    movdqa %xmm2, %xmm5
7069; SSE2-NEXT:    pxor %xmm8, %xmm5
7070; SSE2-NEXT:    movdqa %xmm5, %xmm9
7071; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7072; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7073; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7074; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7075; SSE2-NEXT:    pand %xmm10, %xmm4
7076; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7077; SSE2-NEXT:    por %xmm4, %xmm5
7078; SSE2-NEXT:    pand %xmm5, %xmm2
7079; SSE2-NEXT:    pandn %xmm6, %xmm5
7080; SSE2-NEXT:    por %xmm5, %xmm2
7081; SSE2-NEXT:    movdqa %xmm7, %xmm4
7082; SSE2-NEXT:    pxor %xmm8, %xmm4
7083; SSE2-NEXT:    pxor %xmm3, %xmm8
7084; SSE2-NEXT:    movdqa %xmm8, %xmm5
7085; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7086; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7087; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7088; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7089; SSE2-NEXT:    pand %xmm6, %xmm4
7090; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7091; SSE2-NEXT:    por %xmm4, %xmm5
7092; SSE2-NEXT:    pand %xmm5, %xmm3
7093; SSE2-NEXT:    pandn %xmm7, %xmm5
7094; SSE2-NEXT:    por %xmm5, %xmm3
7095; SSE2-NEXT:    retq
7096;
7097; SSE4-LABEL: test154:
7098; SSE4:       # %bb.0: # %entry
7099; SSE4-NEXT:    movdqa %xmm0, %xmm8
7100; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7101; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
7102; SSE4-NEXT:    movdqa %xmm1, %xmm0
7103; SSE4-NEXT:    pcmpgtq %xmm5, %xmm0
7104; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7105; SSE4-NEXT:    movdqa %xmm2, %xmm0
7106; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
7107; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7108; SSE4-NEXT:    movdqa %xmm3, %xmm0
7109; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
7110; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7111; SSE4-NEXT:    movapd %xmm4, %xmm0
7112; SSE4-NEXT:    movapd %xmm5, %xmm1
7113; SSE4-NEXT:    movapd %xmm6, %xmm2
7114; SSE4-NEXT:    movapd %xmm7, %xmm3
7115; SSE4-NEXT:    retq
7116;
7117; AVX1-LABEL: test154:
7118; AVX1:       # %bb.0: # %entry
7119; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7120; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7121; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7122; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm5
7123; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7124; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7125; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7126; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7127; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7128; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm4
7129; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7130; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7131; AVX1-NEXT:    retq
7132;
7133; AVX2-LABEL: test154:
7134; AVX2:       # %bb.0: # %entry
7135; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm4
7136; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7137; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm2
7138; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7139; AVX2-NEXT:    retq
7140;
7141; AVX512F-LABEL: test154:
7142; AVX512F:       # %bb.0: # %entry
7143; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7144; AVX512F-NEXT:    retq
7145entry:
7146  %cmp = icmp sle <8 x i64> %a, %b
7147  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7148  ret <8 x i64> %sel
7149}
7150
7151define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7152; SSE2-LABEL: test155:
7153; SSE2:       # %bb.0: # %entry
7154; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
7155; SSE2-NEXT:    movdqa %xmm0, %xmm9
7156; SSE2-NEXT:    pxor %xmm8, %xmm9
7157; SSE2-NEXT:    movdqa %xmm4, %xmm10
7158; SSE2-NEXT:    pxor %xmm8, %xmm10
7159; SSE2-NEXT:    movdqa %xmm10, %xmm11
7160; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7161; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7162; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7163; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7164; SSE2-NEXT:    pand %xmm12, %xmm9
7165; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7166; SSE2-NEXT:    por %xmm9, %xmm10
7167; SSE2-NEXT:    pand %xmm10, %xmm0
7168; SSE2-NEXT:    pandn %xmm4, %xmm10
7169; SSE2-NEXT:    por %xmm10, %xmm0
7170; SSE2-NEXT:    movdqa %xmm1, %xmm9
7171; SSE2-NEXT:    pxor %xmm8, %xmm9
7172; SSE2-NEXT:    movdqa %xmm5, %xmm4
7173; SSE2-NEXT:    pxor %xmm8, %xmm4
7174; SSE2-NEXT:    movdqa %xmm4, %xmm10
7175; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7176; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7177; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7178; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7179; SSE2-NEXT:    pand %xmm11, %xmm9
7180; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7181; SSE2-NEXT:    por %xmm9, %xmm4
7182; SSE2-NEXT:    pand %xmm4, %xmm1
7183; SSE2-NEXT:    pandn %xmm5, %xmm4
7184; SSE2-NEXT:    por %xmm4, %xmm1
7185; SSE2-NEXT:    movdqa %xmm2, %xmm4
7186; SSE2-NEXT:    pxor %xmm8, %xmm4
7187; SSE2-NEXT:    movdqa %xmm6, %xmm5
7188; SSE2-NEXT:    pxor %xmm8, %xmm5
7189; SSE2-NEXT:    movdqa %xmm5, %xmm9
7190; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7191; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7192; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7193; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7194; SSE2-NEXT:    pand %xmm10, %xmm4
7195; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7196; SSE2-NEXT:    por %xmm4, %xmm5
7197; SSE2-NEXT:    pand %xmm5, %xmm2
7198; SSE2-NEXT:    pandn %xmm6, %xmm5
7199; SSE2-NEXT:    por %xmm5, %xmm2
7200; SSE2-NEXT:    movdqa %xmm3, %xmm4
7201; SSE2-NEXT:    pxor %xmm8, %xmm4
7202; SSE2-NEXT:    pxor %xmm7, %xmm8
7203; SSE2-NEXT:    movdqa %xmm8, %xmm5
7204; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7205; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7206; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7207; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7208; SSE2-NEXT:    pand %xmm6, %xmm4
7209; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7210; SSE2-NEXT:    por %xmm4, %xmm5
7211; SSE2-NEXT:    pand %xmm5, %xmm3
7212; SSE2-NEXT:    pandn %xmm7, %xmm5
7213; SSE2-NEXT:    por %xmm5, %xmm3
7214; SSE2-NEXT:    retq
7215;
7216; SSE4-LABEL: test155:
7217; SSE4:       # %bb.0: # %entry
7218; SSE4-NEXT:    movdqa %xmm0, %xmm8
7219; SSE4-NEXT:    movdqa %xmm4, %xmm0
7220; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7221; SSE4-NEXT:    blendvpd %xmm0, %xmm8, %xmm4
7222; SSE4-NEXT:    movdqa %xmm5, %xmm0
7223; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7224; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7225; SSE4-NEXT:    movdqa %xmm6, %xmm0
7226; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7227; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7228; SSE4-NEXT:    movdqa %xmm7, %xmm0
7229; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7230; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7231; SSE4-NEXT:    movapd %xmm4, %xmm0
7232; SSE4-NEXT:    movapd %xmm5, %xmm1
7233; SSE4-NEXT:    movapd %xmm6, %xmm2
7234; SSE4-NEXT:    movapd %xmm7, %xmm3
7235; SSE4-NEXT:    retq
7236;
7237; AVX1-LABEL: test155:
7238; AVX1:       # %bb.0: # %entry
7239; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7240; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
7241; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7242; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm5
7243; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7244; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7245; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7246; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7247; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7248; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm4
7249; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7250; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7251; AVX1-NEXT:    retq
7252;
7253; AVX2-LABEL: test155:
7254; AVX2:       # %bb.0: # %entry
7255; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm4
7256; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7257; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm2
7258; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7259; AVX2-NEXT:    retq
7260;
7261; AVX512F-LABEL: test155:
7262; AVX512F:       # %bb.0: # %entry
7263; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7264; AVX512F-NEXT:    retq
7265entry:
7266  %cmp = icmp sgt <8 x i64> %a, %b
7267  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7268  ret <8 x i64> %sel
7269}
7270
7271define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7272; SSE2-LABEL: test156:
7273; SSE2:       # %bb.0: # %entry
7274; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
7275; SSE2-NEXT:    movdqa %xmm4, %xmm9
7276; SSE2-NEXT:    pxor %xmm8, %xmm9
7277; SSE2-NEXT:    movdqa %xmm0, %xmm10
7278; SSE2-NEXT:    pxor %xmm8, %xmm10
7279; SSE2-NEXT:    movdqa %xmm10, %xmm11
7280; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7281; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7282; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7283; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7284; SSE2-NEXT:    pand %xmm12, %xmm9
7285; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7286; SSE2-NEXT:    por %xmm9, %xmm10
7287; SSE2-NEXT:    pand %xmm10, %xmm0
7288; SSE2-NEXT:    pandn %xmm4, %xmm10
7289; SSE2-NEXT:    por %xmm10, %xmm0
7290; SSE2-NEXT:    movdqa %xmm5, %xmm9
7291; SSE2-NEXT:    pxor %xmm8, %xmm9
7292; SSE2-NEXT:    movdqa %xmm1, %xmm4
7293; SSE2-NEXT:    pxor %xmm8, %xmm4
7294; SSE2-NEXT:    movdqa %xmm4, %xmm10
7295; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7296; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7297; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7298; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7299; SSE2-NEXT:    pand %xmm11, %xmm9
7300; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7301; SSE2-NEXT:    por %xmm9, %xmm4
7302; SSE2-NEXT:    pand %xmm4, %xmm1
7303; SSE2-NEXT:    pandn %xmm5, %xmm4
7304; SSE2-NEXT:    por %xmm4, %xmm1
7305; SSE2-NEXT:    movdqa %xmm6, %xmm4
7306; SSE2-NEXT:    pxor %xmm8, %xmm4
7307; SSE2-NEXT:    movdqa %xmm2, %xmm5
7308; SSE2-NEXT:    pxor %xmm8, %xmm5
7309; SSE2-NEXT:    movdqa %xmm5, %xmm9
7310; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7311; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7312; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7313; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7314; SSE2-NEXT:    pand %xmm10, %xmm4
7315; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7316; SSE2-NEXT:    por %xmm4, %xmm5
7317; SSE2-NEXT:    pand %xmm5, %xmm2
7318; SSE2-NEXT:    pandn %xmm6, %xmm5
7319; SSE2-NEXT:    por %xmm5, %xmm2
7320; SSE2-NEXT:    movdqa %xmm7, %xmm4
7321; SSE2-NEXT:    pxor %xmm8, %xmm4
7322; SSE2-NEXT:    pxor %xmm3, %xmm8
7323; SSE2-NEXT:    movdqa %xmm8, %xmm5
7324; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7325; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7326; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7327; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7328; SSE2-NEXT:    pand %xmm6, %xmm4
7329; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7330; SSE2-NEXT:    por %xmm4, %xmm5
7331; SSE2-NEXT:    pand %xmm5, %xmm3
7332; SSE2-NEXT:    pandn %xmm7, %xmm5
7333; SSE2-NEXT:    por %xmm5, %xmm3
7334; SSE2-NEXT:    retq
7335;
7336; SSE4-LABEL: test156:
7337; SSE4:       # %bb.0: # %entry
7338; SSE4-NEXT:    movdqa %xmm0, %xmm9
7339; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7340; SSE4-NEXT:    movdqa %xmm4, %xmm10
7341; SSE4-NEXT:    pxor %xmm8, %xmm10
7342; SSE4-NEXT:    pxor %xmm8, %xmm0
7343; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7344; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7345; SSE4-NEXT:    movdqa %xmm5, %xmm9
7346; SSE4-NEXT:    pxor %xmm8, %xmm9
7347; SSE4-NEXT:    movdqa %xmm1, %xmm0
7348; SSE4-NEXT:    pxor %xmm8, %xmm0
7349; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7350; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7351; SSE4-NEXT:    movdqa %xmm6, %xmm1
7352; SSE4-NEXT:    pxor %xmm8, %xmm1
7353; SSE4-NEXT:    movdqa %xmm2, %xmm0
7354; SSE4-NEXT:    pxor %xmm8, %xmm0
7355; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7356; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7357; SSE4-NEXT:    movdqa %xmm7, %xmm0
7358; SSE4-NEXT:    pxor %xmm8, %xmm0
7359; SSE4-NEXT:    pxor %xmm3, %xmm8
7360; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7361; SSE4-NEXT:    movdqa %xmm8, %xmm0
7362; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7363; SSE4-NEXT:    movapd %xmm4, %xmm0
7364; SSE4-NEXT:    movapd %xmm5, %xmm1
7365; SSE4-NEXT:    movapd %xmm6, %xmm2
7366; SSE4-NEXT:    movapd %xmm7, %xmm3
7367; SSE4-NEXT:    retq
7368;
7369; AVX1-LABEL: test156:
7370; AVX1:       # %bb.0: # %entry
7371; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7372; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7373; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7374; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7375; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7376; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7377; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm6
7378; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm7
7379; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7380; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7381; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7382; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7383; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7384; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7385; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7386; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7387; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm4
7388; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm5
7389; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7390; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7391; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7392; AVX1-NEXT:    retq
7393;
7394; AVX2-LABEL: test156:
7395; AVX2:       # %bb.0: # %entry
7396; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7397; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm5
7398; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
7399; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7400; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7401; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm2
7402; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm4
7403; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7404; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7405; AVX2-NEXT:    retq
7406;
7407; AVX512F-LABEL: test156:
7408; AVX512F:       # %bb.0: # %entry
7409; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
7410; AVX512F-NEXT:    retq
7411entry:
7412  %cmp = icmp ule <8 x i64> %a, %b
7413  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7414  ret <8 x i64> %sel
7415}
7416
7417define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
7418; SSE2-LABEL: test159:
7419; SSE2:       # %bb.0: # %entry
7420; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
7421; SSE2-NEXT:    movdqa %xmm0, %xmm9
7422; SSE2-NEXT:    pxor %xmm8, %xmm9
7423; SSE2-NEXT:    movdqa %xmm4, %xmm10
7424; SSE2-NEXT:    pxor %xmm8, %xmm10
7425; SSE2-NEXT:    movdqa %xmm10, %xmm11
7426; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7427; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7428; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7429; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7430; SSE2-NEXT:    pand %xmm12, %xmm9
7431; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7432; SSE2-NEXT:    por %xmm9, %xmm10
7433; SSE2-NEXT:    pand %xmm10, %xmm0
7434; SSE2-NEXT:    pandn %xmm4, %xmm10
7435; SSE2-NEXT:    por %xmm10, %xmm0
7436; SSE2-NEXT:    movdqa %xmm1, %xmm9
7437; SSE2-NEXT:    pxor %xmm8, %xmm9
7438; SSE2-NEXT:    movdqa %xmm5, %xmm4
7439; SSE2-NEXT:    pxor %xmm8, %xmm4
7440; SSE2-NEXT:    movdqa %xmm4, %xmm10
7441; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7442; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7443; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7444; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7445; SSE2-NEXT:    pand %xmm11, %xmm9
7446; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7447; SSE2-NEXT:    por %xmm9, %xmm4
7448; SSE2-NEXT:    pand %xmm4, %xmm1
7449; SSE2-NEXT:    pandn %xmm5, %xmm4
7450; SSE2-NEXT:    por %xmm4, %xmm1
7451; SSE2-NEXT:    movdqa %xmm2, %xmm4
7452; SSE2-NEXT:    pxor %xmm8, %xmm4
7453; SSE2-NEXT:    movdqa %xmm6, %xmm5
7454; SSE2-NEXT:    pxor %xmm8, %xmm5
7455; SSE2-NEXT:    movdqa %xmm5, %xmm9
7456; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7457; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7458; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7459; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7460; SSE2-NEXT:    pand %xmm10, %xmm4
7461; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7462; SSE2-NEXT:    por %xmm4, %xmm5
7463; SSE2-NEXT:    pand %xmm5, %xmm2
7464; SSE2-NEXT:    pandn %xmm6, %xmm5
7465; SSE2-NEXT:    por %xmm5, %xmm2
7466; SSE2-NEXT:    movdqa %xmm3, %xmm4
7467; SSE2-NEXT:    pxor %xmm8, %xmm4
7468; SSE2-NEXT:    pxor %xmm7, %xmm8
7469; SSE2-NEXT:    movdqa %xmm8, %xmm5
7470; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7471; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7472; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7473; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7474; SSE2-NEXT:    pand %xmm6, %xmm4
7475; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7476; SSE2-NEXT:    por %xmm4, %xmm5
7477; SSE2-NEXT:    pand %xmm5, %xmm3
7478; SSE2-NEXT:    pandn %xmm7, %xmm5
7479; SSE2-NEXT:    por %xmm5, %xmm3
7480; SSE2-NEXT:    retq
7481;
7482; SSE4-LABEL: test159:
7483; SSE4:       # %bb.0: # %entry
7484; SSE4-NEXT:    movdqa %xmm0, %xmm9
7485; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7486; SSE4-NEXT:    movdqa %xmm0, %xmm10
7487; SSE4-NEXT:    pxor %xmm8, %xmm10
7488; SSE4-NEXT:    movdqa %xmm4, %xmm0
7489; SSE4-NEXT:    pxor %xmm8, %xmm0
7490; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7491; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7492; SSE4-NEXT:    movdqa %xmm1, %xmm9
7493; SSE4-NEXT:    pxor %xmm8, %xmm9
7494; SSE4-NEXT:    movdqa %xmm5, %xmm0
7495; SSE4-NEXT:    pxor %xmm8, %xmm0
7496; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7497; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7498; SSE4-NEXT:    movdqa %xmm2, %xmm1
7499; SSE4-NEXT:    pxor %xmm8, %xmm1
7500; SSE4-NEXT:    movdqa %xmm6, %xmm0
7501; SSE4-NEXT:    pxor %xmm8, %xmm0
7502; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7503; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7504; SSE4-NEXT:    movdqa %xmm3, %xmm0
7505; SSE4-NEXT:    pxor %xmm8, %xmm0
7506; SSE4-NEXT:    pxor %xmm7, %xmm8
7507; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7508; SSE4-NEXT:    movdqa %xmm8, %xmm0
7509; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7510; SSE4-NEXT:    movapd %xmm4, %xmm0
7511; SSE4-NEXT:    movapd %xmm5, %xmm1
7512; SSE4-NEXT:    movapd %xmm6, %xmm2
7513; SSE4-NEXT:    movapd %xmm7, %xmm3
7514; SSE4-NEXT:    retq
7515;
7516; AVX1-LABEL: test159:
7517; AVX1:       # %bb.0: # %entry
7518; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7519; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7520; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7521; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7522; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7523; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7524; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7525; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7526; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7527; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7528; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7529; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7530; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7531; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7532; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7533; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7534; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7535; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7536; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7537; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7538; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7539; AVX1-NEXT:    retq
7540;
7541; AVX2-LABEL: test159:
7542; AVX2:       # %bb.0: # %entry
7543; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7544; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7545; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7546; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7547; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7548; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7549; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7550; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7551; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7552; AVX2-NEXT:    retq
7553;
7554; AVX512F-LABEL: test159:
7555; AVX512F:       # %bb.0: # %entry
7556; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7557; AVX512F-NEXT:    retq
7558entry:
7559  %cmp = icmp ugt <8 x i64> %a, %b
7560  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7561  ret <8 x i64> %sel
7562}
7563
7564define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
7565; SSE2-LABEL: test160:
7566; SSE2:       # %bb.0: # %entry
7567; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,2147483648,2147483648,2147483648]
7568; SSE2-NEXT:    movdqa %xmm0, %xmm9
7569; SSE2-NEXT:    pxor %xmm8, %xmm9
7570; SSE2-NEXT:    movdqa %xmm4, %xmm10
7571; SSE2-NEXT:    pxor %xmm8, %xmm10
7572; SSE2-NEXT:    movdqa %xmm10, %xmm11
7573; SSE2-NEXT:    pcmpgtd %xmm9, %xmm11
7574; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7575; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7576; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm10[1,1,3,3]
7577; SSE2-NEXT:    pand %xmm12, %xmm9
7578; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm11[1,1,3,3]
7579; SSE2-NEXT:    por %xmm9, %xmm10
7580; SSE2-NEXT:    pand %xmm10, %xmm0
7581; SSE2-NEXT:    pandn %xmm4, %xmm10
7582; SSE2-NEXT:    por %xmm10, %xmm0
7583; SSE2-NEXT:    movdqa %xmm1, %xmm9
7584; SSE2-NEXT:    pxor %xmm8, %xmm9
7585; SSE2-NEXT:    movdqa %xmm5, %xmm4
7586; SSE2-NEXT:    pxor %xmm8, %xmm4
7587; SSE2-NEXT:    movdqa %xmm4, %xmm10
7588; SSE2-NEXT:    pcmpgtd %xmm9, %xmm10
7589; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm10[0,0,2,2]
7590; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
7591; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm4[1,1,3,3]
7592; SSE2-NEXT:    pand %xmm11, %xmm9
7593; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm10[1,1,3,3]
7594; SSE2-NEXT:    por %xmm9, %xmm4
7595; SSE2-NEXT:    pand %xmm4, %xmm1
7596; SSE2-NEXT:    pandn %xmm5, %xmm4
7597; SSE2-NEXT:    por %xmm4, %xmm1
7598; SSE2-NEXT:    movdqa %xmm2, %xmm4
7599; SSE2-NEXT:    pxor %xmm8, %xmm4
7600; SSE2-NEXT:    movdqa %xmm6, %xmm5
7601; SSE2-NEXT:    pxor %xmm8, %xmm5
7602; SSE2-NEXT:    movdqa %xmm5, %xmm9
7603; SSE2-NEXT:    pcmpgtd %xmm4, %xmm9
7604; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm9[0,0,2,2]
7605; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
7606; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7607; SSE2-NEXT:    pand %xmm10, %xmm4
7608; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm9[1,1,3,3]
7609; SSE2-NEXT:    por %xmm4, %xmm5
7610; SSE2-NEXT:    pand %xmm5, %xmm2
7611; SSE2-NEXT:    pandn %xmm6, %xmm5
7612; SSE2-NEXT:    por %xmm5, %xmm2
7613; SSE2-NEXT:    movdqa %xmm3, %xmm4
7614; SSE2-NEXT:    pxor %xmm8, %xmm4
7615; SSE2-NEXT:    pxor %xmm7, %xmm8
7616; SSE2-NEXT:    movdqa %xmm8, %xmm5
7617; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
7618; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7619; SSE2-NEXT:    pcmpeqd %xmm4, %xmm8
7620; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm8[1,1,3,3]
7621; SSE2-NEXT:    pand %xmm6, %xmm4
7622; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
7623; SSE2-NEXT:    por %xmm4, %xmm5
7624; SSE2-NEXT:    pand %xmm5, %xmm3
7625; SSE2-NEXT:    pandn %xmm7, %xmm5
7626; SSE2-NEXT:    por %xmm5, %xmm3
7627; SSE2-NEXT:    retq
7628;
7629; SSE4-LABEL: test160:
7630; SSE4:       # %bb.0: # %entry
7631; SSE4-NEXT:    movdqa %xmm0, %xmm9
7632; SSE4-NEXT:    movdqa {{.*#+}} xmm8 = [9223372036854775808,9223372036854775808]
7633; SSE4-NEXT:    movdqa %xmm0, %xmm10
7634; SSE4-NEXT:    pxor %xmm8, %xmm10
7635; SSE4-NEXT:    movdqa %xmm4, %xmm0
7636; SSE4-NEXT:    pxor %xmm8, %xmm0
7637; SSE4-NEXT:    pcmpgtq %xmm10, %xmm0
7638; SSE4-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
7639; SSE4-NEXT:    movdqa %xmm1, %xmm9
7640; SSE4-NEXT:    pxor %xmm8, %xmm9
7641; SSE4-NEXT:    movdqa %xmm5, %xmm0
7642; SSE4-NEXT:    pxor %xmm8, %xmm0
7643; SSE4-NEXT:    pcmpgtq %xmm9, %xmm0
7644; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm5
7645; SSE4-NEXT:    movdqa %xmm2, %xmm1
7646; SSE4-NEXT:    pxor %xmm8, %xmm1
7647; SSE4-NEXT:    movdqa %xmm6, %xmm0
7648; SSE4-NEXT:    pxor %xmm8, %xmm0
7649; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7650; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm6
7651; SSE4-NEXT:    movdqa %xmm3, %xmm0
7652; SSE4-NEXT:    pxor %xmm8, %xmm0
7653; SSE4-NEXT:    pxor %xmm7, %xmm8
7654; SSE4-NEXT:    pcmpgtq %xmm0, %xmm8
7655; SSE4-NEXT:    movdqa %xmm8, %xmm0
7656; SSE4-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
7657; SSE4-NEXT:    movapd %xmm4, %xmm0
7658; SSE4-NEXT:    movapd %xmm5, %xmm1
7659; SSE4-NEXT:    movapd %xmm6, %xmm2
7660; SSE4-NEXT:    movapd %xmm7, %xmm3
7661; SSE4-NEXT:    retq
7662;
7663; AVX1-LABEL: test160:
7664; AVX1:       # %bb.0: # %entry
7665; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
7666; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
7667; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7668; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7669; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7670; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
7671; AVX1-NEXT:    vpxor %xmm5, %xmm0, %xmm6
7672; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm7
7673; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7674; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7675; AVX1-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
7676; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7677; AVX1-NEXT:    vpxor %xmm5, %xmm2, %xmm2
7678; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7679; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7680; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
7681; AVX1-NEXT:    vpxor %xmm5, %xmm1, %xmm4
7682; AVX1-NEXT:    vpxor %xmm5, %xmm3, %xmm5
7683; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7684; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm4, %ymm2
7685; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7686; AVX1-NEXT:    retq
7687;
7688; AVX2-LABEL: test160:
7689; AVX2:       # %bb.0: # %entry
7690; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
7691; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm5
7692; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
7693; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
7694; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
7695; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm2
7696; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm4
7697; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm2
7698; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm3, %ymm1
7699; AVX2-NEXT:    retq
7700;
7701; AVX512F-LABEL: test160:
7702; AVX512F:       # %bb.0: # %entry
7703; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
7704; AVX512F-NEXT:    retq
7705entry:
7706  %cmp = icmp uge <8 x i64> %a, %b
7707  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7708  ret <8 x i64> %sel
7709}
7710
7711define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
7712; SSE2-LABEL: test161:
7713; SSE2:       # %bb.0: # %entry
7714; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
7715; SSE2-NEXT:    movdqa %xmm0, %xmm5
7716; SSE2-NEXT:    pxor %xmm4, %xmm5
7717; SSE2-NEXT:    movdqa %xmm2, %xmm6
7718; SSE2-NEXT:    pxor %xmm4, %xmm6
7719; SSE2-NEXT:    movdqa %xmm6, %xmm7
7720; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7721; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7722; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7723; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7724; SSE2-NEXT:    pand %xmm8, %xmm5
7725; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7726; SSE2-NEXT:    por %xmm5, %xmm6
7727; SSE2-NEXT:    pand %xmm6, %xmm0
7728; SSE2-NEXT:    pandn %xmm2, %xmm6
7729; SSE2-NEXT:    por %xmm6, %xmm0
7730; SSE2-NEXT:    movdqa %xmm1, %xmm2
7731; SSE2-NEXT:    pxor %xmm4, %xmm2
7732; SSE2-NEXT:    pxor %xmm3, %xmm4
7733; SSE2-NEXT:    movdqa %xmm4, %xmm5
7734; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7735; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7736; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7737; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7738; SSE2-NEXT:    pand %xmm6, %xmm2
7739; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7740; SSE2-NEXT:    por %xmm2, %xmm4
7741; SSE2-NEXT:    pand %xmm4, %xmm1
7742; SSE2-NEXT:    pandn %xmm3, %xmm4
7743; SSE2-NEXT:    por %xmm4, %xmm1
7744; SSE2-NEXT:    retq
7745;
7746; SSE4-LABEL: test161:
7747; SSE4:       # %bb.0: # %entry
7748; SSE4-NEXT:    movdqa %xmm0, %xmm4
7749; SSE4-NEXT:    movdqa %xmm2, %xmm0
7750; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7751; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7752; SSE4-NEXT:    movdqa %xmm3, %xmm0
7753; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7754; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7755; SSE4-NEXT:    movapd %xmm2, %xmm0
7756; SSE4-NEXT:    movapd %xmm3, %xmm1
7757; SSE4-NEXT:    retq
7758;
7759; AVX1-LABEL: test161:
7760; AVX1:       # %bb.0: # %entry
7761; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7762; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7763; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7764; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7765; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7766; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7767; AVX1-NEXT:    retq
7768;
7769; AVX2-LABEL: test161:
7770; AVX2:       # %bb.0: # %entry
7771; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7772; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7773; AVX2-NEXT:    retq
7774;
7775; AVX512BW-LABEL: test161:
7776; AVX512BW:       # %bb.0: # %entry
7777; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7778; AVX512BW-NEXT:    retq
7779entry:
7780  %cmp = icmp slt <4 x i64> %a, %b
7781  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7782  ret <4 x i64> %sel
7783}
7784
7785define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
7786; SSE2-LABEL: test162:
7787; SSE2:       # %bb.0: # %entry
7788; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
7789; SSE2-NEXT:    movdqa %xmm0, %xmm5
7790; SSE2-NEXT:    pxor %xmm4, %xmm5
7791; SSE2-NEXT:    movdqa %xmm2, %xmm6
7792; SSE2-NEXT:    pxor %xmm4, %xmm6
7793; SSE2-NEXT:    movdqa %xmm6, %xmm7
7794; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7795; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7796; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7797; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7798; SSE2-NEXT:    pand %xmm8, %xmm5
7799; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7800; SSE2-NEXT:    por %xmm5, %xmm6
7801; SSE2-NEXT:    pand %xmm6, %xmm0
7802; SSE2-NEXT:    pandn %xmm2, %xmm6
7803; SSE2-NEXT:    por %xmm6, %xmm0
7804; SSE2-NEXT:    movdqa %xmm1, %xmm2
7805; SSE2-NEXT:    pxor %xmm4, %xmm2
7806; SSE2-NEXT:    pxor %xmm3, %xmm4
7807; SSE2-NEXT:    movdqa %xmm4, %xmm5
7808; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7809; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7810; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7811; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7812; SSE2-NEXT:    pand %xmm6, %xmm2
7813; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7814; SSE2-NEXT:    por %xmm2, %xmm4
7815; SSE2-NEXT:    pand %xmm4, %xmm1
7816; SSE2-NEXT:    pandn %xmm3, %xmm4
7817; SSE2-NEXT:    por %xmm4, %xmm1
7818; SSE2-NEXT:    retq
7819;
7820; SSE4-LABEL: test162:
7821; SSE4:       # %bb.0: # %entry
7822; SSE4-NEXT:    movdqa %xmm0, %xmm4
7823; SSE4-NEXT:    movdqa %xmm2, %xmm0
7824; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7825; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7826; SSE4-NEXT:    movdqa %xmm3, %xmm0
7827; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
7828; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7829; SSE4-NEXT:    movapd %xmm2, %xmm0
7830; SSE4-NEXT:    movapd %xmm3, %xmm1
7831; SSE4-NEXT:    retq
7832;
7833; AVX1-LABEL: test162:
7834; AVX1:       # %bb.0: # %entry
7835; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
7836; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
7837; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7838; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
7839; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7840; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7841; AVX1-NEXT:    retq
7842;
7843; AVX2-LABEL: test162:
7844; AVX2:       # %bb.0: # %entry
7845; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
7846; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7847; AVX2-NEXT:    retq
7848;
7849; AVX512BW-LABEL: test162:
7850; AVX512BW:       # %bb.0: # %entry
7851; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
7852; AVX512BW-NEXT:    retq
7853entry:
7854  %cmp = icmp sle <4 x i64> %a, %b
7855  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7856  ret <4 x i64> %sel
7857}
7858
7859define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
7860; SSE2-LABEL: test163:
7861; SSE2:       # %bb.0: # %entry
7862; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
7863; SSE2-NEXT:    movdqa %xmm2, %xmm5
7864; SSE2-NEXT:    pxor %xmm4, %xmm5
7865; SSE2-NEXT:    movdqa %xmm0, %xmm6
7866; SSE2-NEXT:    pxor %xmm4, %xmm6
7867; SSE2-NEXT:    movdqa %xmm6, %xmm7
7868; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7869; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7870; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7871; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7872; SSE2-NEXT:    pand %xmm8, %xmm5
7873; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7874; SSE2-NEXT:    por %xmm5, %xmm6
7875; SSE2-NEXT:    pand %xmm6, %xmm0
7876; SSE2-NEXT:    pandn %xmm2, %xmm6
7877; SSE2-NEXT:    por %xmm6, %xmm0
7878; SSE2-NEXT:    movdqa %xmm3, %xmm2
7879; SSE2-NEXT:    pxor %xmm4, %xmm2
7880; SSE2-NEXT:    pxor %xmm1, %xmm4
7881; SSE2-NEXT:    movdqa %xmm4, %xmm5
7882; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7883; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7884; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7885; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7886; SSE2-NEXT:    pand %xmm6, %xmm2
7887; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7888; SSE2-NEXT:    por %xmm2, %xmm4
7889; SSE2-NEXT:    pand %xmm4, %xmm1
7890; SSE2-NEXT:    pandn %xmm3, %xmm4
7891; SSE2-NEXT:    por %xmm4, %xmm1
7892; SSE2-NEXT:    retq
7893;
7894; SSE4-LABEL: test163:
7895; SSE4:       # %bb.0: # %entry
7896; SSE4-NEXT:    movdqa %xmm0, %xmm4
7897; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7898; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7899; SSE4-NEXT:    movdqa %xmm1, %xmm0
7900; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7901; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7902; SSE4-NEXT:    movapd %xmm2, %xmm0
7903; SSE4-NEXT:    movapd %xmm3, %xmm1
7904; SSE4-NEXT:    retq
7905;
7906; AVX1-LABEL: test163:
7907; AVX1:       # %bb.0: # %entry
7908; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7909; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
7910; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7911; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
7912; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7913; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7914; AVX1-NEXT:    retq
7915;
7916; AVX2-LABEL: test163:
7917; AVX2:       # %bb.0: # %entry
7918; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
7919; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7920; AVX2-NEXT:    retq
7921;
7922; AVX512BW-LABEL: test163:
7923; AVX512BW:       # %bb.0: # %entry
7924; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
7925; AVX512BW-NEXT:    retq
7926entry:
7927  %cmp = icmp sgt <4 x i64> %a, %b
7928  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
7929  ret <4 x i64> %sel
7930}
7931
7932define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
7933; SSE2-LABEL: test164:
7934; SSE2:       # %bb.0: # %entry
7935; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
7936; SSE2-NEXT:    movdqa %xmm2, %xmm5
7937; SSE2-NEXT:    pxor %xmm4, %xmm5
7938; SSE2-NEXT:    movdqa %xmm0, %xmm6
7939; SSE2-NEXT:    pxor %xmm4, %xmm6
7940; SSE2-NEXT:    movdqa %xmm6, %xmm7
7941; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
7942; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
7943; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
7944; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
7945; SSE2-NEXT:    pand %xmm8, %xmm5
7946; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
7947; SSE2-NEXT:    por %xmm5, %xmm6
7948; SSE2-NEXT:    pand %xmm6, %xmm0
7949; SSE2-NEXT:    pandn %xmm2, %xmm6
7950; SSE2-NEXT:    por %xmm6, %xmm0
7951; SSE2-NEXT:    movdqa %xmm3, %xmm2
7952; SSE2-NEXT:    pxor %xmm4, %xmm2
7953; SSE2-NEXT:    pxor %xmm1, %xmm4
7954; SSE2-NEXT:    movdqa %xmm4, %xmm5
7955; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
7956; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
7957; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
7958; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
7959; SSE2-NEXT:    pand %xmm6, %xmm2
7960; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
7961; SSE2-NEXT:    por %xmm2, %xmm4
7962; SSE2-NEXT:    pand %xmm4, %xmm1
7963; SSE2-NEXT:    pandn %xmm3, %xmm4
7964; SSE2-NEXT:    por %xmm4, %xmm1
7965; SSE2-NEXT:    retq
7966;
7967; SSE4-LABEL: test164:
7968; SSE4:       # %bb.0: # %entry
7969; SSE4-NEXT:    movdqa %xmm0, %xmm4
7970; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
7971; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
7972; SSE4-NEXT:    movdqa %xmm1, %xmm0
7973; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
7974; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
7975; SSE4-NEXT:    movapd %xmm2, %xmm0
7976; SSE4-NEXT:    movapd %xmm3, %xmm1
7977; SSE4-NEXT:    retq
7978;
7979; AVX1-LABEL: test164:
7980; AVX1:       # %bb.0: # %entry
7981; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
7982; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
7983; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
7984; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
7985; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
7986; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7987; AVX1-NEXT:    retq
7988;
7989; AVX2-LABEL: test164:
7990; AVX2:       # %bb.0: # %entry
7991; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
7992; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
7993; AVX2-NEXT:    retq
7994;
7995; AVX512BW-LABEL: test164:
7996; AVX512BW:       # %bb.0: # %entry
7997; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
7998; AVX512BW-NEXT:    retq
7999entry:
8000  %cmp = icmp sge <4 x i64> %a, %b
8001  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8002  ret <4 x i64> %sel
8003}
8004
8005define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
8006; SSE2-LABEL: test165:
8007; SSE2:       # %bb.0: # %entry
8008; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8009; SSE2-NEXT:    movdqa %xmm0, %xmm5
8010; SSE2-NEXT:    pxor %xmm4, %xmm5
8011; SSE2-NEXT:    movdqa %xmm2, %xmm6
8012; SSE2-NEXT:    pxor %xmm4, %xmm6
8013; SSE2-NEXT:    movdqa %xmm6, %xmm7
8014; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8015; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8016; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8017; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8018; SSE2-NEXT:    pand %xmm8, %xmm5
8019; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8020; SSE2-NEXT:    por %xmm5, %xmm6
8021; SSE2-NEXT:    pand %xmm6, %xmm0
8022; SSE2-NEXT:    pandn %xmm2, %xmm6
8023; SSE2-NEXT:    por %xmm6, %xmm0
8024; SSE2-NEXT:    movdqa %xmm1, %xmm2
8025; SSE2-NEXT:    pxor %xmm4, %xmm2
8026; SSE2-NEXT:    pxor %xmm3, %xmm4
8027; SSE2-NEXT:    movdqa %xmm4, %xmm5
8028; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8029; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8030; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8031; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8032; SSE2-NEXT:    pand %xmm6, %xmm2
8033; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8034; SSE2-NEXT:    por %xmm2, %xmm4
8035; SSE2-NEXT:    pand %xmm4, %xmm1
8036; SSE2-NEXT:    pandn %xmm3, %xmm4
8037; SSE2-NEXT:    por %xmm4, %xmm1
8038; SSE2-NEXT:    retq
8039;
8040; SSE4-LABEL: test165:
8041; SSE4:       # %bb.0: # %entry
8042; SSE4-NEXT:    movdqa %xmm0, %xmm4
8043; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8044; SSE4-NEXT:    movdqa %xmm0, %xmm6
8045; SSE4-NEXT:    pxor %xmm5, %xmm6
8046; SSE4-NEXT:    movdqa %xmm2, %xmm0
8047; SSE4-NEXT:    pxor %xmm5, %xmm0
8048; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8049; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8050; SSE4-NEXT:    movdqa %xmm1, %xmm0
8051; SSE4-NEXT:    pxor %xmm5, %xmm0
8052; SSE4-NEXT:    pxor %xmm3, %xmm5
8053; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8054; SSE4-NEXT:    movdqa %xmm5, %xmm0
8055; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8056; SSE4-NEXT:    movapd %xmm2, %xmm0
8057; SSE4-NEXT:    movapd %xmm3, %xmm1
8058; SSE4-NEXT:    retq
8059;
8060; AVX1-LABEL: test165:
8061; AVX1:       # %bb.0: # %entry
8062; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8063; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8064; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8065; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8066; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8067; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8068; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8069; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8070; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8071; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8072; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8073; AVX1-NEXT:    retq
8074;
8075; AVX2-LABEL: test165:
8076; AVX2:       # %bb.0: # %entry
8077; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8078; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8079; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8080; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8081; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8082; AVX2-NEXT:    retq
8083;
8084; AVX512BW-LABEL: test165:
8085; AVX512BW:       # %bb.0: # %entry
8086; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8087; AVX512BW-NEXT:    retq
8088entry:
8089  %cmp = icmp ult <4 x i64> %a, %b
8090  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8091  ret <4 x i64> %sel
8092}
8093
8094define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
8095; SSE2-LABEL: test166:
8096; SSE2:       # %bb.0: # %entry
8097; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8098; SSE2-NEXT:    movdqa %xmm0, %xmm5
8099; SSE2-NEXT:    pxor %xmm4, %xmm5
8100; SSE2-NEXT:    movdqa %xmm2, %xmm6
8101; SSE2-NEXT:    pxor %xmm4, %xmm6
8102; SSE2-NEXT:    movdqa %xmm6, %xmm7
8103; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8104; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8105; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8106; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8107; SSE2-NEXT:    pand %xmm8, %xmm5
8108; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8109; SSE2-NEXT:    por %xmm5, %xmm6
8110; SSE2-NEXT:    pand %xmm6, %xmm0
8111; SSE2-NEXT:    pandn %xmm2, %xmm6
8112; SSE2-NEXT:    por %xmm6, %xmm0
8113; SSE2-NEXT:    movdqa %xmm1, %xmm2
8114; SSE2-NEXT:    pxor %xmm4, %xmm2
8115; SSE2-NEXT:    pxor %xmm3, %xmm4
8116; SSE2-NEXT:    movdqa %xmm4, %xmm5
8117; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8118; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8119; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8120; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8121; SSE2-NEXT:    pand %xmm6, %xmm2
8122; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8123; SSE2-NEXT:    por %xmm2, %xmm4
8124; SSE2-NEXT:    pand %xmm4, %xmm1
8125; SSE2-NEXT:    pandn %xmm3, %xmm4
8126; SSE2-NEXT:    por %xmm4, %xmm1
8127; SSE2-NEXT:    retq
8128;
8129; SSE4-LABEL: test166:
8130; SSE4:       # %bb.0: # %entry
8131; SSE4-NEXT:    movdqa %xmm0, %xmm4
8132; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8133; SSE4-NEXT:    movdqa %xmm0, %xmm6
8134; SSE4-NEXT:    pxor %xmm5, %xmm6
8135; SSE4-NEXT:    movdqa %xmm2, %xmm0
8136; SSE4-NEXT:    pxor %xmm5, %xmm0
8137; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8138; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8139; SSE4-NEXT:    movdqa %xmm1, %xmm0
8140; SSE4-NEXT:    pxor %xmm5, %xmm0
8141; SSE4-NEXT:    pxor %xmm3, %xmm5
8142; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8143; SSE4-NEXT:    movdqa %xmm5, %xmm0
8144; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8145; SSE4-NEXT:    movapd %xmm2, %xmm0
8146; SSE4-NEXT:    movapd %xmm3, %xmm1
8147; SSE4-NEXT:    retq
8148;
8149; AVX1-LABEL: test166:
8150; AVX1:       # %bb.0: # %entry
8151; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8152; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8153; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8154; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8155; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8156; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8157; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8158; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8159; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8160; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8161; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8162; AVX1-NEXT:    retq
8163;
8164; AVX2-LABEL: test166:
8165; AVX2:       # %bb.0: # %entry
8166; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8167; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8168; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8169; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8170; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8171; AVX2-NEXT:    retq
8172;
8173; AVX512BW-LABEL: test166:
8174; AVX512BW:       # %bb.0: # %entry
8175; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8176; AVX512BW-NEXT:    retq
8177entry:
8178  %cmp = icmp ule <4 x i64> %a, %b
8179  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8180  ret <4 x i64> %sel
8181}
8182
8183define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
8184; SSE2-LABEL: test167:
8185; SSE2:       # %bb.0: # %entry
8186; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8187; SSE2-NEXT:    movdqa %xmm2, %xmm5
8188; SSE2-NEXT:    pxor %xmm4, %xmm5
8189; SSE2-NEXT:    movdqa %xmm0, %xmm6
8190; SSE2-NEXT:    pxor %xmm4, %xmm6
8191; SSE2-NEXT:    movdqa %xmm6, %xmm7
8192; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8193; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8194; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8195; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8196; SSE2-NEXT:    pand %xmm8, %xmm5
8197; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8198; SSE2-NEXT:    por %xmm5, %xmm6
8199; SSE2-NEXT:    pand %xmm6, %xmm0
8200; SSE2-NEXT:    pandn %xmm2, %xmm6
8201; SSE2-NEXT:    por %xmm6, %xmm0
8202; SSE2-NEXT:    movdqa %xmm3, %xmm2
8203; SSE2-NEXT:    pxor %xmm4, %xmm2
8204; SSE2-NEXT:    pxor %xmm1, %xmm4
8205; SSE2-NEXT:    movdqa %xmm4, %xmm5
8206; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8207; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8208; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8209; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8210; SSE2-NEXT:    pand %xmm6, %xmm2
8211; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8212; SSE2-NEXT:    por %xmm2, %xmm4
8213; SSE2-NEXT:    pand %xmm4, %xmm1
8214; SSE2-NEXT:    pandn %xmm3, %xmm4
8215; SSE2-NEXT:    por %xmm4, %xmm1
8216; SSE2-NEXT:    retq
8217;
8218; SSE4-LABEL: test167:
8219; SSE4:       # %bb.0: # %entry
8220; SSE4-NEXT:    movdqa %xmm0, %xmm4
8221; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8222; SSE4-NEXT:    movdqa %xmm2, %xmm6
8223; SSE4-NEXT:    pxor %xmm5, %xmm6
8224; SSE4-NEXT:    pxor %xmm5, %xmm0
8225; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8226; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8227; SSE4-NEXT:    movdqa %xmm3, %xmm0
8228; SSE4-NEXT:    pxor %xmm5, %xmm0
8229; SSE4-NEXT:    pxor %xmm1, %xmm5
8230; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8231; SSE4-NEXT:    movdqa %xmm5, %xmm0
8232; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8233; SSE4-NEXT:    movapd %xmm2, %xmm0
8234; SSE4-NEXT:    movapd %xmm3, %xmm1
8235; SSE4-NEXT:    retq
8236;
8237; AVX1-LABEL: test167:
8238; AVX1:       # %bb.0: # %entry
8239; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8240; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8241; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8242; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8243; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8244; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8245; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8246; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8247; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8248; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8249; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8250; AVX1-NEXT:    retq
8251;
8252; AVX2-LABEL: test167:
8253; AVX2:       # %bb.0: # %entry
8254; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8255; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8256; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8257; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8258; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8259; AVX2-NEXT:    retq
8260;
8261; AVX512BW-LABEL: test167:
8262; AVX512BW:       # %bb.0: # %entry
8263; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8264; AVX512BW-NEXT:    retq
8265entry:
8266  %cmp = icmp ugt <4 x i64> %a, %b
8267  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8268  ret <4 x i64> %sel
8269}
8270
8271define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
8272; SSE2-LABEL: test168:
8273; SSE2:       # %bb.0: # %entry
8274; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8275; SSE2-NEXT:    movdqa %xmm2, %xmm5
8276; SSE2-NEXT:    pxor %xmm4, %xmm5
8277; SSE2-NEXT:    movdqa %xmm0, %xmm6
8278; SSE2-NEXT:    pxor %xmm4, %xmm6
8279; SSE2-NEXT:    movdqa %xmm6, %xmm7
8280; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8281; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8282; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8283; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8284; SSE2-NEXT:    pand %xmm8, %xmm5
8285; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8286; SSE2-NEXT:    por %xmm5, %xmm6
8287; SSE2-NEXT:    pand %xmm6, %xmm0
8288; SSE2-NEXT:    pandn %xmm2, %xmm6
8289; SSE2-NEXT:    por %xmm6, %xmm0
8290; SSE2-NEXT:    movdqa %xmm3, %xmm2
8291; SSE2-NEXT:    pxor %xmm4, %xmm2
8292; SSE2-NEXT:    pxor %xmm1, %xmm4
8293; SSE2-NEXT:    movdqa %xmm4, %xmm5
8294; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8295; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8296; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8297; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8298; SSE2-NEXT:    pand %xmm6, %xmm2
8299; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8300; SSE2-NEXT:    por %xmm2, %xmm4
8301; SSE2-NEXT:    pand %xmm4, %xmm1
8302; SSE2-NEXT:    pandn %xmm3, %xmm4
8303; SSE2-NEXT:    por %xmm4, %xmm1
8304; SSE2-NEXT:    retq
8305;
8306; SSE4-LABEL: test168:
8307; SSE4:       # %bb.0: # %entry
8308; SSE4-NEXT:    movdqa %xmm0, %xmm4
8309; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8310; SSE4-NEXT:    movdqa %xmm2, %xmm6
8311; SSE4-NEXT:    pxor %xmm5, %xmm6
8312; SSE4-NEXT:    pxor %xmm5, %xmm0
8313; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8314; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8315; SSE4-NEXT:    movdqa %xmm3, %xmm0
8316; SSE4-NEXT:    pxor %xmm5, %xmm0
8317; SSE4-NEXT:    pxor %xmm1, %xmm5
8318; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8319; SSE4-NEXT:    movdqa %xmm5, %xmm0
8320; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8321; SSE4-NEXT:    movapd %xmm2, %xmm0
8322; SSE4-NEXT:    movapd %xmm3, %xmm1
8323; SSE4-NEXT:    retq
8324;
8325; AVX1-LABEL: test168:
8326; AVX1:       # %bb.0: # %entry
8327; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8328; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8329; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8330; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8331; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8332; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8333; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8334; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8335; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8336; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8337; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8338; AVX1-NEXT:    retq
8339;
8340; AVX2-LABEL: test168:
8341; AVX2:       # %bb.0: # %entry
8342; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8343; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8344; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8345; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8346; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8347; AVX2-NEXT:    retq
8348;
8349; AVX512BW-LABEL: test168:
8350; AVX512BW:       # %bb.0: # %entry
8351; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8352; AVX512BW-NEXT:    retq
8353entry:
8354  %cmp = icmp uge <4 x i64> %a, %b
8355  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8356  ret <4 x i64> %sel
8357}
8358
8359define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
8360; SSE2-LABEL: test169:
8361; SSE2:       # %bb.0: # %entry
8362; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8363; SSE2-NEXT:    movdqa %xmm2, %xmm5
8364; SSE2-NEXT:    pxor %xmm4, %xmm5
8365; SSE2-NEXT:    movdqa %xmm0, %xmm6
8366; SSE2-NEXT:    pxor %xmm4, %xmm6
8367; SSE2-NEXT:    movdqa %xmm6, %xmm7
8368; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8369; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8370; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8371; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8372; SSE2-NEXT:    pand %xmm8, %xmm5
8373; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8374; SSE2-NEXT:    por %xmm5, %xmm6
8375; SSE2-NEXT:    pand %xmm6, %xmm0
8376; SSE2-NEXT:    pandn %xmm2, %xmm6
8377; SSE2-NEXT:    por %xmm6, %xmm0
8378; SSE2-NEXT:    movdqa %xmm3, %xmm2
8379; SSE2-NEXT:    pxor %xmm4, %xmm2
8380; SSE2-NEXT:    pxor %xmm1, %xmm4
8381; SSE2-NEXT:    movdqa %xmm4, %xmm5
8382; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8383; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8384; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8385; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8386; SSE2-NEXT:    pand %xmm6, %xmm2
8387; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8388; SSE2-NEXT:    por %xmm2, %xmm4
8389; SSE2-NEXT:    pand %xmm4, %xmm1
8390; SSE2-NEXT:    pandn %xmm3, %xmm4
8391; SSE2-NEXT:    por %xmm4, %xmm1
8392; SSE2-NEXT:    retq
8393;
8394; SSE4-LABEL: test169:
8395; SSE4:       # %bb.0: # %entry
8396; SSE4-NEXT:    movdqa %xmm0, %xmm4
8397; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8398; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8399; SSE4-NEXT:    movdqa %xmm1, %xmm0
8400; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8401; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8402; SSE4-NEXT:    movapd %xmm2, %xmm0
8403; SSE4-NEXT:    movapd %xmm3, %xmm1
8404; SSE4-NEXT:    retq
8405;
8406; AVX1-LABEL: test169:
8407; AVX1:       # %bb.0: # %entry
8408; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8409; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8410; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8411; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8412; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8413; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8414; AVX1-NEXT:    retq
8415;
8416; AVX2-LABEL: test169:
8417; AVX2:       # %bb.0: # %entry
8418; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8419; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8420; AVX2-NEXT:    retq
8421;
8422; AVX512BW-LABEL: test169:
8423; AVX512BW:       # %bb.0: # %entry
8424; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8425; AVX512BW-NEXT:    retq
8426entry:
8427  %cmp = icmp slt <4 x i64> %a, %b
8428  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8429  ret <4 x i64> %sel
8430}
8431
8432define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
8433; SSE2-LABEL: test170:
8434; SSE2:       # %bb.0: # %entry
8435; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8436; SSE2-NEXT:    movdqa %xmm2, %xmm5
8437; SSE2-NEXT:    pxor %xmm4, %xmm5
8438; SSE2-NEXT:    movdqa %xmm0, %xmm6
8439; SSE2-NEXT:    pxor %xmm4, %xmm6
8440; SSE2-NEXT:    movdqa %xmm6, %xmm7
8441; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8442; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8443; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8444; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8445; SSE2-NEXT:    pand %xmm8, %xmm5
8446; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8447; SSE2-NEXT:    por %xmm5, %xmm6
8448; SSE2-NEXT:    pand %xmm6, %xmm0
8449; SSE2-NEXT:    pandn %xmm2, %xmm6
8450; SSE2-NEXT:    por %xmm6, %xmm0
8451; SSE2-NEXT:    movdqa %xmm3, %xmm2
8452; SSE2-NEXT:    pxor %xmm4, %xmm2
8453; SSE2-NEXT:    pxor %xmm1, %xmm4
8454; SSE2-NEXT:    movdqa %xmm4, %xmm5
8455; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8456; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8457; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8458; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8459; SSE2-NEXT:    pand %xmm6, %xmm2
8460; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8461; SSE2-NEXT:    por %xmm2, %xmm4
8462; SSE2-NEXT:    pand %xmm4, %xmm1
8463; SSE2-NEXT:    pandn %xmm3, %xmm4
8464; SSE2-NEXT:    por %xmm4, %xmm1
8465; SSE2-NEXT:    retq
8466;
8467; SSE4-LABEL: test170:
8468; SSE4:       # %bb.0: # %entry
8469; SSE4-NEXT:    movdqa %xmm0, %xmm4
8470; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8471; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8472; SSE4-NEXT:    movdqa %xmm1, %xmm0
8473; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
8474; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8475; SSE4-NEXT:    movapd %xmm2, %xmm0
8476; SSE4-NEXT:    movapd %xmm3, %xmm1
8477; SSE4-NEXT:    retq
8478;
8479; AVX1-LABEL: test170:
8480; AVX1:       # %bb.0: # %entry
8481; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8482; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8483; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8484; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8485; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8486; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8487; AVX1-NEXT:    retq
8488;
8489; AVX2-LABEL: test170:
8490; AVX2:       # %bb.0: # %entry
8491; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8492; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8493; AVX2-NEXT:    retq
8494;
8495; AVX512BW-LABEL: test170:
8496; AVX512BW:       # %bb.0: # %entry
8497; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8498; AVX512BW-NEXT:    retq
8499entry:
8500  %cmp = icmp sle <4 x i64> %a, %b
8501  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8502  ret <4 x i64> %sel
8503}
8504
8505define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
8506; SSE2-LABEL: test171:
8507; SSE2:       # %bb.0: # %entry
8508; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8509; SSE2-NEXT:    movdqa %xmm0, %xmm5
8510; SSE2-NEXT:    pxor %xmm4, %xmm5
8511; SSE2-NEXT:    movdqa %xmm2, %xmm6
8512; SSE2-NEXT:    pxor %xmm4, %xmm6
8513; SSE2-NEXT:    movdqa %xmm6, %xmm7
8514; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8515; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8516; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8517; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8518; SSE2-NEXT:    pand %xmm8, %xmm5
8519; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8520; SSE2-NEXT:    por %xmm5, %xmm6
8521; SSE2-NEXT:    pand %xmm6, %xmm0
8522; SSE2-NEXT:    pandn %xmm2, %xmm6
8523; SSE2-NEXT:    por %xmm6, %xmm0
8524; SSE2-NEXT:    movdqa %xmm1, %xmm2
8525; SSE2-NEXT:    pxor %xmm4, %xmm2
8526; SSE2-NEXT:    pxor %xmm3, %xmm4
8527; SSE2-NEXT:    movdqa %xmm4, %xmm5
8528; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8529; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8530; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8531; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8532; SSE2-NEXT:    pand %xmm6, %xmm2
8533; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8534; SSE2-NEXT:    por %xmm2, %xmm4
8535; SSE2-NEXT:    pand %xmm4, %xmm1
8536; SSE2-NEXT:    pandn %xmm3, %xmm4
8537; SSE2-NEXT:    por %xmm4, %xmm1
8538; SSE2-NEXT:    retq
8539;
8540; SSE4-LABEL: test171:
8541; SSE4:       # %bb.0: # %entry
8542; SSE4-NEXT:    movdqa %xmm0, %xmm4
8543; SSE4-NEXT:    movdqa %xmm2, %xmm0
8544; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8545; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8546; SSE4-NEXT:    movdqa %xmm3, %xmm0
8547; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8548; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8549; SSE4-NEXT:    movapd %xmm2, %xmm0
8550; SSE4-NEXT:    movapd %xmm3, %xmm1
8551; SSE4-NEXT:    retq
8552;
8553; AVX1-LABEL: test171:
8554; AVX1:       # %bb.0: # %entry
8555; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8556; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8557; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8558; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8559; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8560; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8561; AVX1-NEXT:    retq
8562;
8563; AVX2-LABEL: test171:
8564; AVX2:       # %bb.0: # %entry
8565; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8566; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8567; AVX2-NEXT:    retq
8568;
8569; AVX512BW-LABEL: test171:
8570; AVX512BW:       # %bb.0: # %entry
8571; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8572; AVX512BW-NEXT:    retq
8573entry:
8574  %cmp = icmp sgt <4 x i64> %a, %b
8575  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8576  ret <4 x i64> %sel
8577}
8578
8579define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
8580; SSE2-LABEL: test172:
8581; SSE2:       # %bb.0: # %entry
8582; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8583; SSE2-NEXT:    movdqa %xmm0, %xmm5
8584; SSE2-NEXT:    pxor %xmm4, %xmm5
8585; SSE2-NEXT:    movdqa %xmm2, %xmm6
8586; SSE2-NEXT:    pxor %xmm4, %xmm6
8587; SSE2-NEXT:    movdqa %xmm6, %xmm7
8588; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8589; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8590; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8591; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8592; SSE2-NEXT:    pand %xmm8, %xmm5
8593; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8594; SSE2-NEXT:    por %xmm5, %xmm6
8595; SSE2-NEXT:    pand %xmm6, %xmm0
8596; SSE2-NEXT:    pandn %xmm2, %xmm6
8597; SSE2-NEXT:    por %xmm6, %xmm0
8598; SSE2-NEXT:    movdqa %xmm1, %xmm2
8599; SSE2-NEXT:    pxor %xmm4, %xmm2
8600; SSE2-NEXT:    pxor %xmm3, %xmm4
8601; SSE2-NEXT:    movdqa %xmm4, %xmm5
8602; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8603; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8604; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8605; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8606; SSE2-NEXT:    pand %xmm6, %xmm2
8607; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8608; SSE2-NEXT:    por %xmm2, %xmm4
8609; SSE2-NEXT:    pand %xmm4, %xmm1
8610; SSE2-NEXT:    pandn %xmm3, %xmm4
8611; SSE2-NEXT:    por %xmm4, %xmm1
8612; SSE2-NEXT:    retq
8613;
8614; SSE4-LABEL: test172:
8615; SSE4:       # %bb.0: # %entry
8616; SSE4-NEXT:    movdqa %xmm0, %xmm4
8617; SSE4-NEXT:    movdqa %xmm2, %xmm0
8618; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8619; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8620; SSE4-NEXT:    movdqa %xmm3, %xmm0
8621; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
8622; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8623; SSE4-NEXT:    movapd %xmm2, %xmm0
8624; SSE4-NEXT:    movapd %xmm3, %xmm1
8625; SSE4-NEXT:    retq
8626;
8627; AVX1-LABEL: test172:
8628; AVX1:       # %bb.0: # %entry
8629; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8630; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8631; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8632; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8633; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8634; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8635; AVX1-NEXT:    retq
8636;
8637; AVX2-LABEL: test172:
8638; AVX2:       # %bb.0: # %entry
8639; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8640; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8641; AVX2-NEXT:    retq
8642;
8643; AVX512BW-LABEL: test172:
8644; AVX512BW:       # %bb.0: # %entry
8645; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8646; AVX512BW-NEXT:    retq
8647entry:
8648  %cmp = icmp sge <4 x i64> %a, %b
8649  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8650  ret <4 x i64> %sel
8651}
8652
8653define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
8654; SSE2-LABEL: test173:
8655; SSE2:       # %bb.0: # %entry
8656; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8657; SSE2-NEXT:    movdqa %xmm2, %xmm5
8658; SSE2-NEXT:    pxor %xmm4, %xmm5
8659; SSE2-NEXT:    movdqa %xmm0, %xmm6
8660; SSE2-NEXT:    pxor %xmm4, %xmm6
8661; SSE2-NEXT:    movdqa %xmm6, %xmm7
8662; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8663; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8664; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8665; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8666; SSE2-NEXT:    pand %xmm8, %xmm5
8667; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8668; SSE2-NEXT:    por %xmm5, %xmm6
8669; SSE2-NEXT:    pand %xmm6, %xmm0
8670; SSE2-NEXT:    pandn %xmm2, %xmm6
8671; SSE2-NEXT:    por %xmm6, %xmm0
8672; SSE2-NEXT:    movdqa %xmm3, %xmm2
8673; SSE2-NEXT:    pxor %xmm4, %xmm2
8674; SSE2-NEXT:    pxor %xmm1, %xmm4
8675; SSE2-NEXT:    movdqa %xmm4, %xmm5
8676; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8677; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8678; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8679; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8680; SSE2-NEXT:    pand %xmm6, %xmm2
8681; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8682; SSE2-NEXT:    por %xmm2, %xmm4
8683; SSE2-NEXT:    pand %xmm4, %xmm1
8684; SSE2-NEXT:    pandn %xmm3, %xmm4
8685; SSE2-NEXT:    por %xmm4, %xmm1
8686; SSE2-NEXT:    retq
8687;
8688; SSE4-LABEL: test173:
8689; SSE4:       # %bb.0: # %entry
8690; SSE4-NEXT:    movdqa %xmm0, %xmm4
8691; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8692; SSE4-NEXT:    movdqa %xmm2, %xmm6
8693; SSE4-NEXT:    pxor %xmm5, %xmm6
8694; SSE4-NEXT:    pxor %xmm5, %xmm0
8695; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8696; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8697; SSE4-NEXT:    movdqa %xmm3, %xmm0
8698; SSE4-NEXT:    pxor %xmm5, %xmm0
8699; SSE4-NEXT:    pxor %xmm1, %xmm5
8700; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8701; SSE4-NEXT:    movdqa %xmm5, %xmm0
8702; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8703; SSE4-NEXT:    movapd %xmm2, %xmm0
8704; SSE4-NEXT:    movapd %xmm3, %xmm1
8705; SSE4-NEXT:    retq
8706;
8707; AVX1-LABEL: test173:
8708; AVX1:       # %bb.0: # %entry
8709; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8710; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8711; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8712; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8713; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8714; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8715; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8716; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8717; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8718; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8719; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8720; AVX1-NEXT:    retq
8721;
8722; AVX2-LABEL: test173:
8723; AVX2:       # %bb.0: # %entry
8724; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8725; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8726; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8727; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8728; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8729; AVX2-NEXT:    retq
8730;
8731; AVX512BW-LABEL: test173:
8732; AVX512BW:       # %bb.0: # %entry
8733; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8734; AVX512BW-NEXT:    retq
8735entry:
8736  %cmp = icmp ult <4 x i64> %a, %b
8737  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8738  ret <4 x i64> %sel
8739}
8740
8741define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
8742; SSE2-LABEL: test174:
8743; SSE2:       # %bb.0: # %entry
8744; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8745; SSE2-NEXT:    movdqa %xmm2, %xmm5
8746; SSE2-NEXT:    pxor %xmm4, %xmm5
8747; SSE2-NEXT:    movdqa %xmm0, %xmm6
8748; SSE2-NEXT:    pxor %xmm4, %xmm6
8749; SSE2-NEXT:    movdqa %xmm6, %xmm7
8750; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8751; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8752; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8753; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8754; SSE2-NEXT:    pand %xmm8, %xmm5
8755; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8756; SSE2-NEXT:    por %xmm5, %xmm6
8757; SSE2-NEXT:    pand %xmm6, %xmm0
8758; SSE2-NEXT:    pandn %xmm2, %xmm6
8759; SSE2-NEXT:    por %xmm6, %xmm0
8760; SSE2-NEXT:    movdqa %xmm3, %xmm2
8761; SSE2-NEXT:    pxor %xmm4, %xmm2
8762; SSE2-NEXT:    pxor %xmm1, %xmm4
8763; SSE2-NEXT:    movdqa %xmm4, %xmm5
8764; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8765; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8766; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8767; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8768; SSE2-NEXT:    pand %xmm6, %xmm2
8769; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8770; SSE2-NEXT:    por %xmm2, %xmm4
8771; SSE2-NEXT:    pand %xmm4, %xmm1
8772; SSE2-NEXT:    pandn %xmm3, %xmm4
8773; SSE2-NEXT:    por %xmm4, %xmm1
8774; SSE2-NEXT:    retq
8775;
8776; SSE4-LABEL: test174:
8777; SSE4:       # %bb.0: # %entry
8778; SSE4-NEXT:    movdqa %xmm0, %xmm4
8779; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8780; SSE4-NEXT:    movdqa %xmm2, %xmm6
8781; SSE4-NEXT:    pxor %xmm5, %xmm6
8782; SSE4-NEXT:    pxor %xmm5, %xmm0
8783; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8784; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8785; SSE4-NEXT:    movdqa %xmm3, %xmm0
8786; SSE4-NEXT:    pxor %xmm5, %xmm0
8787; SSE4-NEXT:    pxor %xmm1, %xmm5
8788; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8789; SSE4-NEXT:    movdqa %xmm5, %xmm0
8790; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8791; SSE4-NEXT:    movapd %xmm2, %xmm0
8792; SSE4-NEXT:    movapd %xmm3, %xmm1
8793; SSE4-NEXT:    retq
8794;
8795; AVX1-LABEL: test174:
8796; AVX1:       # %bb.0: # %entry
8797; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8798; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8799; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8800; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
8801; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8802; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8803; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
8804; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
8805; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8806; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8807; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8808; AVX1-NEXT:    retq
8809;
8810; AVX2-LABEL: test174:
8811; AVX2:       # %bb.0: # %entry
8812; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8813; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
8814; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
8815; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8816; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8817; AVX2-NEXT:    retq
8818;
8819; AVX512BW-LABEL: test174:
8820; AVX512BW:       # %bb.0: # %entry
8821; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
8822; AVX512BW-NEXT:    retq
8823entry:
8824  %cmp = icmp ule <4 x i64> %a, %b
8825  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8826  ret <4 x i64> %sel
8827}
8828
8829define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
8830; SSE2-LABEL: test175:
8831; SSE2:       # %bb.0: # %entry
8832; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8833; SSE2-NEXT:    movdqa %xmm0, %xmm5
8834; SSE2-NEXT:    pxor %xmm4, %xmm5
8835; SSE2-NEXT:    movdqa %xmm2, %xmm6
8836; SSE2-NEXT:    pxor %xmm4, %xmm6
8837; SSE2-NEXT:    movdqa %xmm6, %xmm7
8838; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8839; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8840; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8841; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8842; SSE2-NEXT:    pand %xmm8, %xmm5
8843; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8844; SSE2-NEXT:    por %xmm5, %xmm6
8845; SSE2-NEXT:    pand %xmm6, %xmm0
8846; SSE2-NEXT:    pandn %xmm2, %xmm6
8847; SSE2-NEXT:    por %xmm6, %xmm0
8848; SSE2-NEXT:    movdqa %xmm1, %xmm2
8849; SSE2-NEXT:    pxor %xmm4, %xmm2
8850; SSE2-NEXT:    pxor %xmm3, %xmm4
8851; SSE2-NEXT:    movdqa %xmm4, %xmm5
8852; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8853; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8854; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8855; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8856; SSE2-NEXT:    pand %xmm6, %xmm2
8857; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8858; SSE2-NEXT:    por %xmm2, %xmm4
8859; SSE2-NEXT:    pand %xmm4, %xmm1
8860; SSE2-NEXT:    pandn %xmm3, %xmm4
8861; SSE2-NEXT:    por %xmm4, %xmm1
8862; SSE2-NEXT:    retq
8863;
8864; SSE4-LABEL: test175:
8865; SSE4:       # %bb.0: # %entry
8866; SSE4-NEXT:    movdqa %xmm0, %xmm4
8867; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8868; SSE4-NEXT:    movdqa %xmm0, %xmm6
8869; SSE4-NEXT:    pxor %xmm5, %xmm6
8870; SSE4-NEXT:    movdqa %xmm2, %xmm0
8871; SSE4-NEXT:    pxor %xmm5, %xmm0
8872; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8873; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8874; SSE4-NEXT:    movdqa %xmm1, %xmm0
8875; SSE4-NEXT:    pxor %xmm5, %xmm0
8876; SSE4-NEXT:    pxor %xmm3, %xmm5
8877; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8878; SSE4-NEXT:    movdqa %xmm5, %xmm0
8879; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8880; SSE4-NEXT:    movapd %xmm2, %xmm0
8881; SSE4-NEXT:    movapd %xmm3, %xmm1
8882; SSE4-NEXT:    retq
8883;
8884; AVX1-LABEL: test175:
8885; AVX1:       # %bb.0: # %entry
8886; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8887; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8888; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8889; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8890; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8891; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8892; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8893; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8894; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8895; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8896; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8897; AVX1-NEXT:    retq
8898;
8899; AVX2-LABEL: test175:
8900; AVX2:       # %bb.0: # %entry
8901; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8902; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8903; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8904; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8905; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8906; AVX2-NEXT:    retq
8907;
8908; AVX512BW-LABEL: test175:
8909; AVX512BW:       # %bb.0: # %entry
8910; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
8911; AVX512BW-NEXT:    retq
8912entry:
8913  %cmp = icmp ugt <4 x i64> %a, %b
8914  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
8915  ret <4 x i64> %sel
8916}
8917
8918define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
8919; SSE2-LABEL: test176:
8920; SSE2:       # %bb.0: # %entry
8921; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
8922; SSE2-NEXT:    movdqa %xmm0, %xmm5
8923; SSE2-NEXT:    pxor %xmm4, %xmm5
8924; SSE2-NEXT:    movdqa %xmm2, %xmm6
8925; SSE2-NEXT:    pxor %xmm4, %xmm6
8926; SSE2-NEXT:    movdqa %xmm6, %xmm7
8927; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8928; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8929; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8930; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8931; SSE2-NEXT:    pand %xmm8, %xmm5
8932; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8933; SSE2-NEXT:    por %xmm5, %xmm6
8934; SSE2-NEXT:    pand %xmm6, %xmm0
8935; SSE2-NEXT:    pandn %xmm2, %xmm6
8936; SSE2-NEXT:    por %xmm6, %xmm0
8937; SSE2-NEXT:    movdqa %xmm1, %xmm2
8938; SSE2-NEXT:    pxor %xmm4, %xmm2
8939; SSE2-NEXT:    pxor %xmm3, %xmm4
8940; SSE2-NEXT:    movdqa %xmm4, %xmm5
8941; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
8942; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
8943; SSE2-NEXT:    pcmpeqd %xmm2, %xmm4
8944; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
8945; SSE2-NEXT:    pand %xmm6, %xmm2
8946; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8947; SSE2-NEXT:    por %xmm2, %xmm4
8948; SSE2-NEXT:    pand %xmm4, %xmm1
8949; SSE2-NEXT:    pandn %xmm3, %xmm4
8950; SSE2-NEXT:    por %xmm4, %xmm1
8951; SSE2-NEXT:    retq
8952;
8953; SSE4-LABEL: test176:
8954; SSE4:       # %bb.0: # %entry
8955; SSE4-NEXT:    movdqa %xmm0, %xmm4
8956; SSE4-NEXT:    movdqa {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8957; SSE4-NEXT:    movdqa %xmm0, %xmm6
8958; SSE4-NEXT:    pxor %xmm5, %xmm6
8959; SSE4-NEXT:    movdqa %xmm2, %xmm0
8960; SSE4-NEXT:    pxor %xmm5, %xmm0
8961; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
8962; SSE4-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
8963; SSE4-NEXT:    movdqa %xmm1, %xmm0
8964; SSE4-NEXT:    pxor %xmm5, %xmm0
8965; SSE4-NEXT:    pxor %xmm3, %xmm5
8966; SSE4-NEXT:    pcmpgtq %xmm0, %xmm5
8967; SSE4-NEXT:    movdqa %xmm5, %xmm0
8968; SSE4-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
8969; SSE4-NEXT:    movapd %xmm2, %xmm0
8970; SSE4-NEXT:    movapd %xmm3, %xmm1
8971; SSE4-NEXT:    retq
8972;
8973; AVX1-LABEL: test176:
8974; AVX1:       # %bb.0: # %entry
8975; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8976; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
8977; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8978; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8979; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
8980; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
8981; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
8982; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
8983; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
8984; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8985; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8986; AVX1-NEXT:    retq
8987;
8988; AVX2-LABEL: test176:
8989; AVX2:       # %bb.0: # %entry
8990; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
8991; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
8992; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
8993; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
8994; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8995; AVX2-NEXT:    retq
8996;
8997; AVX512BW-LABEL: test176:
8998; AVX512BW:       # %bb.0: # %entry
8999; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9000; AVX512BW-NEXT:    retq
9001entry:
9002  %cmp = icmp uge <4 x i64> %a, %b
9003  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9004  ret <4 x i64> %sel
9005}
9006
9007define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
9008; SSE2-LABEL: test177:
9009; SSE2:       # %bb.0: # %entry
9010; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9011; SSE2-NEXT:    movdqa %xmm0, %xmm3
9012; SSE2-NEXT:    pxor %xmm2, %xmm3
9013; SSE2-NEXT:    pxor %xmm1, %xmm2
9014; SSE2-NEXT:    movdqa %xmm2, %xmm4
9015; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9016; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9017; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9018; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9019; SSE2-NEXT:    pand %xmm5, %xmm2
9020; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9021; SSE2-NEXT:    por %xmm2, %xmm3
9022; SSE2-NEXT:    pand %xmm3, %xmm0
9023; SSE2-NEXT:    pandn %xmm1, %xmm3
9024; SSE2-NEXT:    por %xmm3, %xmm0
9025; SSE2-NEXT:    retq
9026;
9027; SSE4-LABEL: test177:
9028; SSE4:       # %bb.0: # %entry
9029; SSE4-NEXT:    movdqa %xmm0, %xmm2
9030; SSE4-NEXT:    movdqa %xmm1, %xmm0
9031; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9032; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9033; SSE4-NEXT:    movapd %xmm1, %xmm0
9034; SSE4-NEXT:    retq
9035;
9036; AVX1-LABEL: test177:
9037; AVX1:       # %bb.0: # %entry
9038; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9039; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9040; AVX1-NEXT:    retq
9041;
9042; AVX2-LABEL: test177:
9043; AVX2:       # %bb.0: # %entry
9044; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9045; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9046; AVX2-NEXT:    retq
9047;
9048; AVX512BW-LABEL: test177:
9049; AVX512BW:       # %bb.0: # %entry
9050; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9051; AVX512BW-NEXT:    retq
9052entry:
9053  %cmp = icmp slt <2 x i64> %a, %b
9054  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9055  ret <2 x i64> %sel
9056}
9057
9058define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
9059; SSE2-LABEL: test178:
9060; SSE2:       # %bb.0: # %entry
9061; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9062; SSE2-NEXT:    movdqa %xmm0, %xmm3
9063; SSE2-NEXT:    pxor %xmm2, %xmm3
9064; SSE2-NEXT:    pxor %xmm1, %xmm2
9065; SSE2-NEXT:    movdqa %xmm2, %xmm4
9066; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9067; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9068; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9069; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9070; SSE2-NEXT:    pand %xmm5, %xmm2
9071; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9072; SSE2-NEXT:    por %xmm2, %xmm3
9073; SSE2-NEXT:    pand %xmm3, %xmm0
9074; SSE2-NEXT:    pandn %xmm1, %xmm3
9075; SSE2-NEXT:    por %xmm3, %xmm0
9076; SSE2-NEXT:    retq
9077;
9078; SSE4-LABEL: test178:
9079; SSE4:       # %bb.0: # %entry
9080; SSE4-NEXT:    movdqa %xmm0, %xmm2
9081; SSE4-NEXT:    movdqa %xmm1, %xmm0
9082; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9083; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9084; SSE4-NEXT:    movapd %xmm1, %xmm0
9085; SSE4-NEXT:    retq
9086;
9087; AVX1-LABEL: test178:
9088; AVX1:       # %bb.0: # %entry
9089; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9090; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9091; AVX1-NEXT:    retq
9092;
9093; AVX2-LABEL: test178:
9094; AVX2:       # %bb.0: # %entry
9095; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9096; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9097; AVX2-NEXT:    retq
9098;
9099; AVX512BW-LABEL: test178:
9100; AVX512BW:       # %bb.0: # %entry
9101; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9102; AVX512BW-NEXT:    retq
9103entry:
9104  %cmp = icmp sle <2 x i64> %a, %b
9105  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9106  ret <2 x i64> %sel
9107}
9108
9109define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
9110; SSE2-LABEL: test179:
9111; SSE2:       # %bb.0: # %entry
9112; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9113; SSE2-NEXT:    movdqa %xmm1, %xmm3
9114; SSE2-NEXT:    pxor %xmm2, %xmm3
9115; SSE2-NEXT:    pxor %xmm0, %xmm2
9116; SSE2-NEXT:    movdqa %xmm2, %xmm4
9117; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9118; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9119; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9120; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9121; SSE2-NEXT:    pand %xmm5, %xmm2
9122; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9123; SSE2-NEXT:    por %xmm2, %xmm3
9124; SSE2-NEXT:    pand %xmm3, %xmm0
9125; SSE2-NEXT:    pandn %xmm1, %xmm3
9126; SSE2-NEXT:    por %xmm3, %xmm0
9127; SSE2-NEXT:    retq
9128;
9129; SSE4-LABEL: test179:
9130; SSE4:       # %bb.0: # %entry
9131; SSE4-NEXT:    movdqa %xmm0, %xmm2
9132; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9133; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9134; SSE4-NEXT:    movapd %xmm1, %xmm0
9135; SSE4-NEXT:    retq
9136;
9137; AVX1-LABEL: test179:
9138; AVX1:       # %bb.0: # %entry
9139; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9140; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9141; AVX1-NEXT:    retq
9142;
9143; AVX2-LABEL: test179:
9144; AVX2:       # %bb.0: # %entry
9145; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9146; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9147; AVX2-NEXT:    retq
9148;
9149; AVX512BW-LABEL: test179:
9150; AVX512BW:       # %bb.0: # %entry
9151; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9152; AVX512BW-NEXT:    retq
9153entry:
9154  %cmp = icmp sgt <2 x i64> %a, %b
9155  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9156  ret <2 x i64> %sel
9157}
9158
9159define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
9160; SSE2-LABEL: test180:
9161; SSE2:       # %bb.0: # %entry
9162; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9163; SSE2-NEXT:    movdqa %xmm1, %xmm3
9164; SSE2-NEXT:    pxor %xmm2, %xmm3
9165; SSE2-NEXT:    pxor %xmm0, %xmm2
9166; SSE2-NEXT:    movdqa %xmm2, %xmm4
9167; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9168; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9169; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9170; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9171; SSE2-NEXT:    pand %xmm5, %xmm2
9172; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9173; SSE2-NEXT:    por %xmm2, %xmm3
9174; SSE2-NEXT:    pand %xmm3, %xmm0
9175; SSE2-NEXT:    pandn %xmm1, %xmm3
9176; SSE2-NEXT:    por %xmm3, %xmm0
9177; SSE2-NEXT:    retq
9178;
9179; SSE4-LABEL: test180:
9180; SSE4:       # %bb.0: # %entry
9181; SSE4-NEXT:    movdqa %xmm0, %xmm2
9182; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9183; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9184; SSE4-NEXT:    movapd %xmm1, %xmm0
9185; SSE4-NEXT:    retq
9186;
9187; AVX1-LABEL: test180:
9188; AVX1:       # %bb.0: # %entry
9189; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9190; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9191; AVX1-NEXT:    retq
9192;
9193; AVX2-LABEL: test180:
9194; AVX2:       # %bb.0: # %entry
9195; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9196; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9197; AVX2-NEXT:    retq
9198;
9199; AVX512BW-LABEL: test180:
9200; AVX512BW:       # %bb.0: # %entry
9201; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9202; AVX512BW-NEXT:    retq
9203entry:
9204  %cmp = icmp sge <2 x i64> %a, %b
9205  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9206  ret <2 x i64> %sel
9207}
9208
9209define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
9210; SSE2-LABEL: test181:
9211; SSE2:       # %bb.0: # %entry
9212; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9213; SSE2-NEXT:    movdqa %xmm0, %xmm3
9214; SSE2-NEXT:    pxor %xmm2, %xmm3
9215; SSE2-NEXT:    pxor %xmm1, %xmm2
9216; SSE2-NEXT:    movdqa %xmm2, %xmm4
9217; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9218; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9219; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9220; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9221; SSE2-NEXT:    pand %xmm5, %xmm2
9222; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9223; SSE2-NEXT:    por %xmm2, %xmm3
9224; SSE2-NEXT:    pand %xmm3, %xmm0
9225; SSE2-NEXT:    pandn %xmm1, %xmm3
9226; SSE2-NEXT:    por %xmm3, %xmm0
9227; SSE2-NEXT:    retq
9228;
9229; SSE4-LABEL: test181:
9230; SSE4:       # %bb.0: # %entry
9231; SSE4-NEXT:    movdqa %xmm0, %xmm2
9232; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9233; SSE4-NEXT:    movdqa %xmm2, %xmm3
9234; SSE4-NEXT:    pxor %xmm0, %xmm3
9235; SSE4-NEXT:    pxor %xmm1, %xmm0
9236; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9237; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9238; SSE4-NEXT:    movapd %xmm1, %xmm0
9239; SSE4-NEXT:    retq
9240;
9241; AVX1-LABEL: test181:
9242; AVX1:       # %bb.0: # %entry
9243; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9244; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9245; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9246; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9247; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9248; AVX1-NEXT:    retq
9249;
9250; AVX2-LABEL: test181:
9251; AVX2:       # %bb.0: # %entry
9252; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9253; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9254; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9255; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9256; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9257; AVX2-NEXT:    retq
9258;
9259; AVX512BW-LABEL: test181:
9260; AVX512BW:       # %bb.0: # %entry
9261; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9262; AVX512BW-NEXT:    retq
9263entry:
9264  %cmp = icmp ult <2 x i64> %a, %b
9265  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9266  ret <2 x i64> %sel
9267}
9268
9269define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
9270; SSE2-LABEL: test182:
9271; SSE2:       # %bb.0: # %entry
9272; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9273; SSE2-NEXT:    movdqa %xmm0, %xmm3
9274; SSE2-NEXT:    pxor %xmm2, %xmm3
9275; SSE2-NEXT:    pxor %xmm1, %xmm2
9276; SSE2-NEXT:    movdqa %xmm2, %xmm4
9277; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9278; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9279; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9280; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9281; SSE2-NEXT:    pand %xmm5, %xmm2
9282; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9283; SSE2-NEXT:    por %xmm2, %xmm3
9284; SSE2-NEXT:    pand %xmm3, %xmm0
9285; SSE2-NEXT:    pandn %xmm1, %xmm3
9286; SSE2-NEXT:    por %xmm3, %xmm0
9287; SSE2-NEXT:    retq
9288;
9289; SSE4-LABEL: test182:
9290; SSE4:       # %bb.0: # %entry
9291; SSE4-NEXT:    movdqa %xmm0, %xmm2
9292; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9293; SSE4-NEXT:    movdqa %xmm2, %xmm3
9294; SSE4-NEXT:    pxor %xmm0, %xmm3
9295; SSE4-NEXT:    pxor %xmm1, %xmm0
9296; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9297; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9298; SSE4-NEXT:    movapd %xmm1, %xmm0
9299; SSE4-NEXT:    retq
9300;
9301; AVX1-LABEL: test182:
9302; AVX1:       # %bb.0: # %entry
9303; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9304; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9305; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9306; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9307; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9308; AVX1-NEXT:    retq
9309;
9310; AVX2-LABEL: test182:
9311; AVX2:       # %bb.0: # %entry
9312; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9313; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9314; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9315; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9316; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9317; AVX2-NEXT:    retq
9318;
9319; AVX512BW-LABEL: test182:
9320; AVX512BW:       # %bb.0: # %entry
9321; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9322; AVX512BW-NEXT:    retq
9323entry:
9324  %cmp = icmp ule <2 x i64> %a, %b
9325  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9326  ret <2 x i64> %sel
9327}
9328
9329define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
9330; SSE2-LABEL: test183:
9331; SSE2:       # %bb.0: # %entry
9332; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9333; SSE2-NEXT:    movdqa %xmm1, %xmm3
9334; SSE2-NEXT:    pxor %xmm2, %xmm3
9335; SSE2-NEXT:    pxor %xmm0, %xmm2
9336; SSE2-NEXT:    movdqa %xmm2, %xmm4
9337; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9338; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9339; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9340; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9341; SSE2-NEXT:    pand %xmm5, %xmm2
9342; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9343; SSE2-NEXT:    por %xmm2, %xmm3
9344; SSE2-NEXT:    pand %xmm3, %xmm0
9345; SSE2-NEXT:    pandn %xmm1, %xmm3
9346; SSE2-NEXT:    por %xmm3, %xmm0
9347; SSE2-NEXT:    retq
9348;
9349; SSE4-LABEL: test183:
9350; SSE4:       # %bb.0: # %entry
9351; SSE4-NEXT:    movdqa %xmm0, %xmm2
9352; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9353; SSE4-NEXT:    movdqa %xmm1, %xmm3
9354; SSE4-NEXT:    pxor %xmm0, %xmm3
9355; SSE4-NEXT:    pxor %xmm2, %xmm0
9356; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9357; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9358; SSE4-NEXT:    movapd %xmm1, %xmm0
9359; SSE4-NEXT:    retq
9360;
9361; AVX1-LABEL: test183:
9362; AVX1:       # %bb.0: # %entry
9363; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9364; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9365; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9366; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9367; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9368; AVX1-NEXT:    retq
9369;
9370; AVX2-LABEL: test183:
9371; AVX2:       # %bb.0: # %entry
9372; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9373; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9374; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9375; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9376; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9377; AVX2-NEXT:    retq
9378;
9379; AVX512BW-LABEL: test183:
9380; AVX512BW:       # %bb.0: # %entry
9381; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9382; AVX512BW-NEXT:    retq
9383entry:
9384  %cmp = icmp ugt <2 x i64> %a, %b
9385  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9386  ret <2 x i64> %sel
9387}
9388
9389define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
9390; SSE2-LABEL: test184:
9391; SSE2:       # %bb.0: # %entry
9392; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9393; SSE2-NEXT:    movdqa %xmm1, %xmm3
9394; SSE2-NEXT:    pxor %xmm2, %xmm3
9395; SSE2-NEXT:    pxor %xmm0, %xmm2
9396; SSE2-NEXT:    movdqa %xmm2, %xmm4
9397; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9398; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9399; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9400; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9401; SSE2-NEXT:    pand %xmm5, %xmm2
9402; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9403; SSE2-NEXT:    por %xmm2, %xmm3
9404; SSE2-NEXT:    pand %xmm3, %xmm0
9405; SSE2-NEXT:    pandn %xmm1, %xmm3
9406; SSE2-NEXT:    por %xmm3, %xmm0
9407; SSE2-NEXT:    retq
9408;
9409; SSE4-LABEL: test184:
9410; SSE4:       # %bb.0: # %entry
9411; SSE4-NEXT:    movdqa %xmm0, %xmm2
9412; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9413; SSE4-NEXT:    movdqa %xmm1, %xmm3
9414; SSE4-NEXT:    pxor %xmm0, %xmm3
9415; SSE4-NEXT:    pxor %xmm2, %xmm0
9416; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9417; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9418; SSE4-NEXT:    movapd %xmm1, %xmm0
9419; SSE4-NEXT:    retq
9420;
9421; AVX1-LABEL: test184:
9422; AVX1:       # %bb.0: # %entry
9423; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9424; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9425; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9426; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9427; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9428; AVX1-NEXT:    retq
9429;
9430; AVX2-LABEL: test184:
9431; AVX2:       # %bb.0: # %entry
9432; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9433; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9434; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9435; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9436; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9437; AVX2-NEXT:    retq
9438;
9439; AVX512BW-LABEL: test184:
9440; AVX512BW:       # %bb.0: # %entry
9441; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9442; AVX512BW-NEXT:    retq
9443entry:
9444  %cmp = icmp uge <2 x i64> %a, %b
9445  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
9446  ret <2 x i64> %sel
9447}
9448
9449define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
9450; SSE2-LABEL: test185:
9451; SSE2:       # %bb.0: # %entry
9452; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9453; SSE2-NEXT:    movdqa %xmm1, %xmm3
9454; SSE2-NEXT:    pxor %xmm2, %xmm3
9455; SSE2-NEXT:    pxor %xmm0, %xmm2
9456; SSE2-NEXT:    movdqa %xmm2, %xmm4
9457; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9458; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9459; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9460; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9461; SSE2-NEXT:    pand %xmm5, %xmm2
9462; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9463; SSE2-NEXT:    por %xmm2, %xmm3
9464; SSE2-NEXT:    pand %xmm3, %xmm0
9465; SSE2-NEXT:    pandn %xmm1, %xmm3
9466; SSE2-NEXT:    por %xmm3, %xmm0
9467; SSE2-NEXT:    retq
9468;
9469; SSE4-LABEL: test185:
9470; SSE4:       # %bb.0: # %entry
9471; SSE4-NEXT:    movdqa %xmm0, %xmm2
9472; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9473; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9474; SSE4-NEXT:    movapd %xmm1, %xmm0
9475; SSE4-NEXT:    retq
9476;
9477; AVX1-LABEL: test185:
9478; AVX1:       # %bb.0: # %entry
9479; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9480; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9481; AVX1-NEXT:    retq
9482;
9483; AVX2-LABEL: test185:
9484; AVX2:       # %bb.0: # %entry
9485; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9486; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9487; AVX2-NEXT:    retq
9488;
9489; AVX512BW-LABEL: test185:
9490; AVX512BW:       # %bb.0: # %entry
9491; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9492; AVX512BW-NEXT:    retq
9493entry:
9494  %cmp = icmp slt <2 x i64> %a, %b
9495  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9496  ret <2 x i64> %sel
9497}
9498
9499define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
9500; SSE2-LABEL: test186:
9501; SSE2:       # %bb.0: # %entry
9502; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9503; SSE2-NEXT:    movdqa %xmm1, %xmm3
9504; SSE2-NEXT:    pxor %xmm2, %xmm3
9505; SSE2-NEXT:    pxor %xmm0, %xmm2
9506; SSE2-NEXT:    movdqa %xmm2, %xmm4
9507; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9508; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9509; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9510; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9511; SSE2-NEXT:    pand %xmm5, %xmm2
9512; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9513; SSE2-NEXT:    por %xmm2, %xmm3
9514; SSE2-NEXT:    pand %xmm3, %xmm0
9515; SSE2-NEXT:    pandn %xmm1, %xmm3
9516; SSE2-NEXT:    por %xmm3, %xmm0
9517; SSE2-NEXT:    retq
9518;
9519; SSE4-LABEL: test186:
9520; SSE4:       # %bb.0: # %entry
9521; SSE4-NEXT:    movdqa %xmm0, %xmm2
9522; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
9523; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9524; SSE4-NEXT:    movapd %xmm1, %xmm0
9525; SSE4-NEXT:    retq
9526;
9527; AVX1-LABEL: test186:
9528; AVX1:       # %bb.0: # %entry
9529; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9530; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9531; AVX1-NEXT:    retq
9532;
9533; AVX2-LABEL: test186:
9534; AVX2:       # %bb.0: # %entry
9535; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
9536; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9537; AVX2-NEXT:    retq
9538;
9539; AVX512BW-LABEL: test186:
9540; AVX512BW:       # %bb.0: # %entry
9541; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
9542; AVX512BW-NEXT:    retq
9543entry:
9544  %cmp = icmp sle <2 x i64> %a, %b
9545  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9546  ret <2 x i64> %sel
9547}
9548
9549define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
9550; SSE2-LABEL: test187:
9551; SSE2:       # %bb.0: # %entry
9552; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9553; SSE2-NEXT:    movdqa %xmm0, %xmm3
9554; SSE2-NEXT:    pxor %xmm2, %xmm3
9555; SSE2-NEXT:    pxor %xmm1, %xmm2
9556; SSE2-NEXT:    movdqa %xmm2, %xmm4
9557; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9558; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9559; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9560; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9561; SSE2-NEXT:    pand %xmm5, %xmm2
9562; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9563; SSE2-NEXT:    por %xmm2, %xmm3
9564; SSE2-NEXT:    pand %xmm3, %xmm0
9565; SSE2-NEXT:    pandn %xmm1, %xmm3
9566; SSE2-NEXT:    por %xmm3, %xmm0
9567; SSE2-NEXT:    retq
9568;
9569; SSE4-LABEL: test187:
9570; SSE4:       # %bb.0: # %entry
9571; SSE4-NEXT:    movdqa %xmm0, %xmm2
9572; SSE4-NEXT:    movdqa %xmm1, %xmm0
9573; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9574; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9575; SSE4-NEXT:    movapd %xmm1, %xmm0
9576; SSE4-NEXT:    retq
9577;
9578; AVX1-LABEL: test187:
9579; AVX1:       # %bb.0: # %entry
9580; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9581; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9582; AVX1-NEXT:    retq
9583;
9584; AVX2-LABEL: test187:
9585; AVX2:       # %bb.0: # %entry
9586; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9587; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9588; AVX2-NEXT:    retq
9589;
9590; AVX512BW-LABEL: test187:
9591; AVX512BW:       # %bb.0: # %entry
9592; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9593; AVX512BW-NEXT:    retq
9594entry:
9595  %cmp = icmp sgt <2 x i64> %a, %b
9596  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9597  ret <2 x i64> %sel
9598}
9599
9600define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
9601; SSE2-LABEL: test188:
9602; SSE2:       # %bb.0: # %entry
9603; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
9604; SSE2-NEXT:    movdqa %xmm0, %xmm3
9605; SSE2-NEXT:    pxor %xmm2, %xmm3
9606; SSE2-NEXT:    pxor %xmm1, %xmm2
9607; SSE2-NEXT:    movdqa %xmm2, %xmm4
9608; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9609; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9610; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9611; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9612; SSE2-NEXT:    pand %xmm5, %xmm2
9613; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9614; SSE2-NEXT:    por %xmm2, %xmm3
9615; SSE2-NEXT:    pand %xmm3, %xmm0
9616; SSE2-NEXT:    pandn %xmm1, %xmm3
9617; SSE2-NEXT:    por %xmm3, %xmm0
9618; SSE2-NEXT:    retq
9619;
9620; SSE4-LABEL: test188:
9621; SSE4:       # %bb.0: # %entry
9622; SSE4-NEXT:    movdqa %xmm0, %xmm2
9623; SSE4-NEXT:    movdqa %xmm1, %xmm0
9624; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9625; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9626; SSE4-NEXT:    movapd %xmm1, %xmm0
9627; SSE4-NEXT:    retq
9628;
9629; AVX1-LABEL: test188:
9630; AVX1:       # %bb.0: # %entry
9631; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9632; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9633; AVX1-NEXT:    retq
9634;
9635; AVX2-LABEL: test188:
9636; AVX2:       # %bb.0: # %entry
9637; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
9638; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9639; AVX2-NEXT:    retq
9640;
9641; AVX512BW-LABEL: test188:
9642; AVX512BW:       # %bb.0: # %entry
9643; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
9644; AVX512BW-NEXT:    retq
9645entry:
9646  %cmp = icmp sge <2 x i64> %a, %b
9647  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9648  ret <2 x i64> %sel
9649}
9650
9651define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
9652; SSE2-LABEL: test189:
9653; SSE2:       # %bb.0: # %entry
9654; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9655; SSE2-NEXT:    movdqa %xmm1, %xmm3
9656; SSE2-NEXT:    pxor %xmm2, %xmm3
9657; SSE2-NEXT:    pxor %xmm0, %xmm2
9658; SSE2-NEXT:    movdqa %xmm2, %xmm4
9659; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9660; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9661; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9662; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9663; SSE2-NEXT:    pand %xmm5, %xmm2
9664; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9665; SSE2-NEXT:    por %xmm2, %xmm3
9666; SSE2-NEXT:    pand %xmm3, %xmm0
9667; SSE2-NEXT:    pandn %xmm1, %xmm3
9668; SSE2-NEXT:    por %xmm3, %xmm0
9669; SSE2-NEXT:    retq
9670;
9671; SSE4-LABEL: test189:
9672; SSE4:       # %bb.0: # %entry
9673; SSE4-NEXT:    movdqa %xmm0, %xmm2
9674; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9675; SSE4-NEXT:    movdqa %xmm1, %xmm3
9676; SSE4-NEXT:    pxor %xmm0, %xmm3
9677; SSE4-NEXT:    pxor %xmm2, %xmm0
9678; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9679; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9680; SSE4-NEXT:    movapd %xmm1, %xmm0
9681; SSE4-NEXT:    retq
9682;
9683; AVX1-LABEL: test189:
9684; AVX1:       # %bb.0: # %entry
9685; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9686; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9687; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9688; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9689; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9690; AVX1-NEXT:    retq
9691;
9692; AVX2-LABEL: test189:
9693; AVX2:       # %bb.0: # %entry
9694; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9695; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9696; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9697; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9698; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9699; AVX2-NEXT:    retq
9700;
9701; AVX512BW-LABEL: test189:
9702; AVX512BW:       # %bb.0: # %entry
9703; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9704; AVX512BW-NEXT:    retq
9705entry:
9706  %cmp = icmp ult <2 x i64> %a, %b
9707  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9708  ret <2 x i64> %sel
9709}
9710
9711define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
9712; SSE2-LABEL: test190:
9713; SSE2:       # %bb.0: # %entry
9714; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9715; SSE2-NEXT:    movdqa %xmm1, %xmm3
9716; SSE2-NEXT:    pxor %xmm2, %xmm3
9717; SSE2-NEXT:    pxor %xmm0, %xmm2
9718; SSE2-NEXT:    movdqa %xmm2, %xmm4
9719; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9720; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9721; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9722; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9723; SSE2-NEXT:    pand %xmm5, %xmm2
9724; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9725; SSE2-NEXT:    por %xmm2, %xmm3
9726; SSE2-NEXT:    pand %xmm3, %xmm0
9727; SSE2-NEXT:    pandn %xmm1, %xmm3
9728; SSE2-NEXT:    por %xmm3, %xmm0
9729; SSE2-NEXT:    retq
9730;
9731; SSE4-LABEL: test190:
9732; SSE4:       # %bb.0: # %entry
9733; SSE4-NEXT:    movdqa %xmm0, %xmm2
9734; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9735; SSE4-NEXT:    movdqa %xmm1, %xmm3
9736; SSE4-NEXT:    pxor %xmm0, %xmm3
9737; SSE4-NEXT:    pxor %xmm2, %xmm0
9738; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9739; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9740; SSE4-NEXT:    movapd %xmm1, %xmm0
9741; SSE4-NEXT:    retq
9742;
9743; AVX1-LABEL: test190:
9744; AVX1:       # %bb.0: # %entry
9745; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9746; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9747; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9748; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9749; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9750; AVX1-NEXT:    retq
9751;
9752; AVX2-LABEL: test190:
9753; AVX2:       # %bb.0: # %entry
9754; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9755; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
9756; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
9757; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9758; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9759; AVX2-NEXT:    retq
9760;
9761; AVX512BW-LABEL: test190:
9762; AVX512BW:       # %bb.0: # %entry
9763; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
9764; AVX512BW-NEXT:    retq
9765entry:
9766  %cmp = icmp ule <2 x i64> %a, %b
9767  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9768  ret <2 x i64> %sel
9769}
9770
9771define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
9772; SSE2-LABEL: test191:
9773; SSE2:       # %bb.0: # %entry
9774; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9775; SSE2-NEXT:    movdqa %xmm0, %xmm3
9776; SSE2-NEXT:    pxor %xmm2, %xmm3
9777; SSE2-NEXT:    pxor %xmm1, %xmm2
9778; SSE2-NEXT:    movdqa %xmm2, %xmm4
9779; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9780; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9781; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9782; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9783; SSE2-NEXT:    pand %xmm5, %xmm2
9784; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9785; SSE2-NEXT:    por %xmm2, %xmm3
9786; SSE2-NEXT:    pand %xmm3, %xmm0
9787; SSE2-NEXT:    pandn %xmm1, %xmm3
9788; SSE2-NEXT:    por %xmm3, %xmm0
9789; SSE2-NEXT:    retq
9790;
9791; SSE4-LABEL: test191:
9792; SSE4:       # %bb.0: # %entry
9793; SSE4-NEXT:    movdqa %xmm0, %xmm2
9794; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9795; SSE4-NEXT:    movdqa %xmm2, %xmm3
9796; SSE4-NEXT:    pxor %xmm0, %xmm3
9797; SSE4-NEXT:    pxor %xmm1, %xmm0
9798; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9799; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9800; SSE4-NEXT:    movapd %xmm1, %xmm0
9801; SSE4-NEXT:    retq
9802;
9803; AVX1-LABEL: test191:
9804; AVX1:       # %bb.0: # %entry
9805; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9806; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9807; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9808; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9809; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9810; AVX1-NEXT:    retq
9811;
9812; AVX2-LABEL: test191:
9813; AVX2:       # %bb.0: # %entry
9814; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9815; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9816; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9817; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9818; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9819; AVX2-NEXT:    retq
9820;
9821; AVX512BW-LABEL: test191:
9822; AVX512BW:       # %bb.0: # %entry
9823; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9824; AVX512BW-NEXT:    retq
9825entry:
9826  %cmp = icmp ugt <2 x i64> %a, %b
9827  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9828  ret <2 x i64> %sel
9829}
9830
9831define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
9832; SSE2-LABEL: test192:
9833; SSE2:       # %bb.0: # %entry
9834; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
9835; SSE2-NEXT:    movdqa %xmm0, %xmm3
9836; SSE2-NEXT:    pxor %xmm2, %xmm3
9837; SSE2-NEXT:    pxor %xmm1, %xmm2
9838; SSE2-NEXT:    movdqa %xmm2, %xmm4
9839; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
9840; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
9841; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
9842; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
9843; SSE2-NEXT:    pand %xmm5, %xmm2
9844; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
9845; SSE2-NEXT:    por %xmm2, %xmm3
9846; SSE2-NEXT:    pand %xmm3, %xmm0
9847; SSE2-NEXT:    pandn %xmm1, %xmm3
9848; SSE2-NEXT:    por %xmm3, %xmm0
9849; SSE2-NEXT:    retq
9850;
9851; SSE4-LABEL: test192:
9852; SSE4:       # %bb.0: # %entry
9853; SSE4-NEXT:    movdqa %xmm0, %xmm2
9854; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9855; SSE4-NEXT:    movdqa %xmm2, %xmm3
9856; SSE4-NEXT:    pxor %xmm0, %xmm3
9857; SSE4-NEXT:    pxor %xmm1, %xmm0
9858; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
9859; SSE4-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
9860; SSE4-NEXT:    movapd %xmm1, %xmm0
9861; SSE4-NEXT:    retq
9862;
9863; AVX1-LABEL: test192:
9864; AVX1:       # %bb.0: # %entry
9865; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9866; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9867; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9868; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9869; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9870; AVX1-NEXT:    retq
9871;
9872; AVX2-LABEL: test192:
9873; AVX2:       # %bb.0: # %entry
9874; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
9875; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
9876; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
9877; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
9878; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
9879; AVX2-NEXT:    retq
9880;
9881; AVX512BW-LABEL: test192:
9882; AVX512BW:       # %bb.0: # %entry
9883; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
9884; AVX512BW-NEXT:    retq
9885entry:
9886  %cmp = icmp uge <2 x i64> %a, %b
9887  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
9888  ret <2 x i64> %sel
9889}
9890