• 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 %xmm0, %xmm2
38; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
39; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
40; SSE2-NEXT:    pxor %xmm2, %xmm3
41; SSE2-NEXT:    pandn %xmm0, %xmm2
42; SSE2-NEXT:    pandn %xmm1, %xmm3
43; SSE2-NEXT:    por %xmm3, %xmm2
44; SSE2-NEXT:    movdqa %xmm2, %xmm0
45; SSE2-NEXT:    retq
46;
47; SSE4-LABEL: test2:
48; SSE4:       # BB#0: # %entry
49; SSE4-NEXT:    pminsb %xmm1, %xmm0
50; SSE4-NEXT:    retq
51;
52; AVX-LABEL: test2:
53; AVX:       # BB#0: # %entry
54; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
55; AVX-NEXT:    retq
56entry:
57  %cmp = icmp sle <16 x i8> %a, %b
58  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
59  ret <16 x i8> %sel
60}
61
62define <16 x i8> @test3(<16 x i8> %a, <16 x i8> %b) {
63; SSE2-LABEL: test3:
64; SSE2:       # BB#0: # %entry
65; SSE2-NEXT:    movdqa %xmm0, %xmm2
66; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
67; SSE2-NEXT:    pand %xmm2, %xmm0
68; SSE2-NEXT:    pandn %xmm1, %xmm2
69; SSE2-NEXT:    por %xmm0, %xmm2
70; SSE2-NEXT:    movdqa %xmm2, %xmm0
71; SSE2-NEXT:    retq
72;
73; SSE4-LABEL: test3:
74; SSE4:       # BB#0: # %entry
75; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
76; SSE4-NEXT:    retq
77;
78; AVX-LABEL: test3:
79; AVX:       # BB#0: # %entry
80; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
81; AVX-NEXT:    retq
82entry:
83  %cmp = icmp sgt <16 x i8> %a, %b
84  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
85  ret <16 x i8> %sel
86}
87
88define <16 x i8> @test4(<16 x i8> %a, <16 x i8> %b) {
89; SSE2-LABEL: test4:
90; SSE2:       # BB#0: # %entry
91; SSE2-NEXT:    movdqa %xmm1, %xmm3
92; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
93; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
94; SSE2-NEXT:    pxor %xmm3, %xmm2
95; SSE2-NEXT:    pandn %xmm0, %xmm3
96; SSE2-NEXT:    pandn %xmm1, %xmm2
97; SSE2-NEXT:    por %xmm3, %xmm2
98; SSE2-NEXT:    movdqa %xmm2, %xmm0
99; SSE2-NEXT:    retq
100;
101; SSE4-LABEL: test4:
102; SSE4:       # BB#0: # %entry
103; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
104; SSE4-NEXT:    retq
105;
106; AVX-LABEL: test4:
107; AVX:       # BB#0: # %entry
108; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
109; AVX-NEXT:    retq
110entry:
111  %cmp = icmp sge <16 x i8> %a, %b
112  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
113  ret <16 x i8> %sel
114}
115
116define <16 x i8> @test5(<16 x i8> %a, <16 x i8> %b) {
117; SSE-LABEL: test5:
118; SSE:       # BB#0: # %entry
119; SSE-NEXT:    pminub %xmm1, %xmm0
120; SSE-NEXT:    retq
121;
122; AVX-LABEL: test5:
123; AVX:       # BB#0: # %entry
124; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
125; AVX-NEXT:    retq
126entry:
127  %cmp = icmp ult <16 x i8> %a, %b
128  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
129  ret <16 x i8> %sel
130}
131
132define <16 x i8> @test6(<16 x i8> %a, <16 x i8> %b) {
133; SSE-LABEL: test6:
134; SSE:       # BB#0: # %entry
135; SSE-NEXT:    pminub %xmm1, %xmm0
136; SSE-NEXT:    retq
137;
138; AVX-LABEL: test6:
139; AVX:       # BB#0: # %entry
140; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
141; AVX-NEXT:    retq
142entry:
143  %cmp = icmp ule <16 x i8> %a, %b
144  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
145  ret <16 x i8> %sel
146}
147
148define <16 x i8> @test7(<16 x i8> %a, <16 x i8> %b) {
149; SSE-LABEL: test7:
150; SSE:       # BB#0: # %entry
151; SSE-NEXT:    pmaxub %xmm1, %xmm0
152; SSE-NEXT:    retq
153;
154; AVX-LABEL: test7:
155; AVX:       # BB#0: # %entry
156; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
157; AVX-NEXT:    retq
158entry:
159  %cmp = icmp ugt <16 x i8> %a, %b
160  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
161  ret <16 x i8> %sel
162}
163
164define <16 x i8> @test8(<16 x i8> %a, <16 x i8> %b) {
165; SSE-LABEL: test8:
166; SSE:       # BB#0: # %entry
167; SSE-NEXT:    pmaxub %xmm1, %xmm0
168; SSE-NEXT:    retq
169;
170; AVX-LABEL: test8:
171; AVX:       # BB#0: # %entry
172; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
173; AVX-NEXT:    retq
174entry:
175  %cmp = icmp uge <16 x i8> %a, %b
176  %sel = select <16 x i1> %cmp, <16 x i8> %a, <16 x i8> %b
177  ret <16 x i8> %sel
178}
179
180define <8 x i16> @test9(<8 x i16> %a, <8 x i16> %b) {
181; SSE-LABEL: test9:
182; SSE:       # BB#0: # %entry
183; SSE-NEXT:    pminsw %xmm1, %xmm0
184; SSE-NEXT:    retq
185;
186; AVX-LABEL: test9:
187; AVX:       # BB#0: # %entry
188; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
189; AVX-NEXT:    retq
190entry:
191  %cmp = icmp slt <8 x i16> %a, %b
192  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
193  ret <8 x i16> %sel
194}
195
196define <8 x i16> @test10(<8 x i16> %a, <8 x i16> %b) {
197; SSE-LABEL: test10:
198; SSE:       # BB#0: # %entry
199; SSE-NEXT:    pminsw %xmm1, %xmm0
200; SSE-NEXT:    retq
201;
202; AVX-LABEL: test10:
203; AVX:       # BB#0: # %entry
204; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
205; AVX-NEXT:    retq
206entry:
207  %cmp = icmp sle <8 x i16> %a, %b
208  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
209  ret <8 x i16> %sel
210}
211
212define <8 x i16> @test11(<8 x i16> %a, <8 x i16> %b) {
213; SSE-LABEL: test11:
214; SSE:       # BB#0: # %entry
215; SSE-NEXT:    pmaxsw %xmm1, %xmm0
216; SSE-NEXT:    retq
217;
218; AVX-LABEL: test11:
219; AVX:       # BB#0: # %entry
220; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
221; AVX-NEXT:    retq
222entry:
223  %cmp = icmp sgt <8 x i16> %a, %b
224  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
225  ret <8 x i16> %sel
226}
227
228define <8 x i16> @test12(<8 x i16> %a, <8 x i16> %b) {
229; SSE-LABEL: test12:
230; SSE:       # BB#0: # %entry
231; SSE-NEXT:    pmaxsw %xmm1, %xmm0
232; SSE-NEXT:    retq
233;
234; AVX-LABEL: test12:
235; AVX:       # BB#0: # %entry
236; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
237; AVX-NEXT:    retq
238entry:
239  %cmp = icmp sge <8 x i16> %a, %b
240  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
241  ret <8 x i16> %sel
242}
243
244define <8 x i16> @test13(<8 x i16> %a, <8 x i16> %b) {
245; SSE2-LABEL: test13:
246; SSE2:       # BB#0: # %entry
247; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
248; SSE2-NEXT:    movdqa %xmm0, %xmm3
249; SSE2-NEXT:    pxor %xmm2, %xmm3
250; SSE2-NEXT:    pxor %xmm1, %xmm2
251; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
252; SSE2-NEXT:    pand %xmm2, %xmm0
253; SSE2-NEXT:    pandn %xmm1, %xmm2
254; SSE2-NEXT:    por %xmm2, %xmm0
255; SSE2-NEXT:    retq
256;
257; SSE4-LABEL: test13:
258; SSE4:       # BB#0: # %entry
259; SSE4-NEXT:    pminuw %xmm1, %xmm0
260; SSE4-NEXT:    retq
261;
262; AVX-LABEL: test13:
263; AVX:       # BB#0: # %entry
264; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
265; AVX-NEXT:    retq
266entry:
267  %cmp = icmp ult <8 x i16> %a, %b
268  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
269  ret <8 x i16> %sel
270}
271
272define <8 x i16> @test14(<8 x i16> %a, <8 x i16> %b) {
273; SSE2-LABEL: test14:
274; SSE2:       # BB#0: # %entry
275; SSE2-NEXT:    movdqa %xmm0, %xmm2
276; SSE2-NEXT:    psubusw %xmm1, %xmm2
277; SSE2-NEXT:    pxor %xmm3, %xmm3
278; SSE2-NEXT:    pcmpeqw %xmm2, %xmm3
279; SSE2-NEXT:    pand %xmm3, %xmm0
280; SSE2-NEXT:    pandn %xmm1, %xmm3
281; SSE2-NEXT:    por %xmm3, %xmm0
282; SSE2-NEXT:    retq
283;
284; SSE4-LABEL: test14:
285; SSE4:       # BB#0: # %entry
286; SSE4-NEXT:    pminuw %xmm1, %xmm0
287; SSE4-NEXT:    retq
288;
289; AVX-LABEL: test14:
290; AVX:       # BB#0: # %entry
291; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
292; AVX-NEXT:    retq
293entry:
294  %cmp = icmp ule <8 x i16> %a, %b
295  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
296  ret <8 x i16> %sel
297}
298
299define <8 x i16> @test15(<8 x i16> %a, <8 x i16> %b) {
300; SSE2-LABEL: test15:
301; SSE2:       # BB#0: # %entry
302; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
303; SSE2-NEXT:    movdqa %xmm1, %xmm3
304; SSE2-NEXT:    pxor %xmm2, %xmm3
305; SSE2-NEXT:    pxor %xmm0, %xmm2
306; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
307; SSE2-NEXT:    pand %xmm2, %xmm0
308; SSE2-NEXT:    pandn %xmm1, %xmm2
309; SSE2-NEXT:    por %xmm2, %xmm0
310; SSE2-NEXT:    retq
311;
312; SSE4-LABEL: test15:
313; SSE4:       # BB#0: # %entry
314; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
315; SSE4-NEXT:    retq
316;
317; AVX-LABEL: test15:
318; AVX:       # BB#0: # %entry
319; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
320; AVX-NEXT:    retq
321entry:
322  %cmp = icmp ugt <8 x i16> %a, %b
323  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
324  ret <8 x i16> %sel
325}
326
327define <8 x i16> @test16(<8 x i16> %a, <8 x i16> %b) {
328; SSE2-LABEL: test16:
329; SSE2:       # BB#0: # %entry
330; SSE2-NEXT:    movdqa %xmm1, %xmm2
331; SSE2-NEXT:    psubusw %xmm0, %xmm2
332; SSE2-NEXT:    pxor %xmm3, %xmm3
333; SSE2-NEXT:    pcmpeqw %xmm2, %xmm3
334; SSE2-NEXT:    pand %xmm3, %xmm0
335; SSE2-NEXT:    pandn %xmm1, %xmm3
336; SSE2-NEXT:    por %xmm3, %xmm0
337; SSE2-NEXT:    retq
338;
339; SSE4-LABEL: test16:
340; SSE4:       # BB#0: # %entry
341; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
342; SSE4-NEXT:    retq
343;
344; AVX-LABEL: test16:
345; AVX:       # BB#0: # %entry
346; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
347; AVX-NEXT:    retq
348entry:
349  %cmp = icmp uge <8 x i16> %a, %b
350  %sel = select <8 x i1> %cmp, <8 x i16> %a, <8 x i16> %b
351  ret <8 x i16> %sel
352}
353
354define <4 x i32> @test17(<4 x i32> %a, <4 x i32> %b) {
355; SSE2-LABEL: test17:
356; SSE2:       # BB#0: # %entry
357; SSE2-NEXT:    movdqa %xmm1, %xmm2
358; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
359; SSE2-NEXT:    pand %xmm2, %xmm0
360; SSE2-NEXT:    pandn %xmm1, %xmm2
361; SSE2-NEXT:    por %xmm2, %xmm0
362; SSE2-NEXT:    retq
363;
364; SSE4-LABEL: test17:
365; SSE4:       # BB#0: # %entry
366; SSE4-NEXT:    pminsd %xmm1, %xmm0
367; SSE4-NEXT:    retq
368;
369; AVX-LABEL: test17:
370; AVX:       # BB#0: # %entry
371; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
372; AVX-NEXT:    retq
373entry:
374  %cmp = icmp slt <4 x i32> %a, %b
375  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
376  ret <4 x i32> %sel
377}
378
379define <4 x i32> @test18(<4 x i32> %a, <4 x i32> %b) {
380; SSE2-LABEL: test18:
381; SSE2:       # BB#0: # %entry
382; SSE2-NEXT:    movdqa %xmm0, %xmm2
383; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
384; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
385; SSE2-NEXT:    pxor %xmm2, %xmm3
386; SSE2-NEXT:    pandn %xmm0, %xmm2
387; SSE2-NEXT:    pandn %xmm1, %xmm3
388; SSE2-NEXT:    por %xmm3, %xmm2
389; SSE2-NEXT:    movdqa %xmm2, %xmm0
390; SSE2-NEXT:    retq
391;
392; SSE4-LABEL: test18:
393; SSE4:       # BB#0: # %entry
394; SSE4-NEXT:    pminsd %xmm1, %xmm0
395; SSE4-NEXT:    retq
396;
397; AVX-LABEL: test18:
398; AVX:       # BB#0: # %entry
399; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
400; AVX-NEXT:    retq
401entry:
402  %cmp = icmp sle <4 x i32> %a, %b
403  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
404  ret <4 x i32> %sel
405}
406
407define <4 x i32> @test19(<4 x i32> %a, <4 x i32> %b) {
408; SSE2-LABEL: test19:
409; SSE2:       # BB#0: # %entry
410; SSE2-NEXT:    movdqa %xmm0, %xmm2
411; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
412; SSE2-NEXT:    pand %xmm2, %xmm0
413; SSE2-NEXT:    pandn %xmm1, %xmm2
414; SSE2-NEXT:    por %xmm0, %xmm2
415; SSE2-NEXT:    movdqa %xmm2, %xmm0
416; SSE2-NEXT:    retq
417;
418; SSE4-LABEL: test19:
419; SSE4:       # BB#0: # %entry
420; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
421; SSE4-NEXT:    retq
422;
423; AVX-LABEL: test19:
424; AVX:       # BB#0: # %entry
425; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
426; AVX-NEXT:    retq
427entry:
428  %cmp = icmp sgt <4 x i32> %a, %b
429  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
430  ret <4 x i32> %sel
431}
432
433define <4 x i32> @test20(<4 x i32> %a, <4 x i32> %b) {
434; SSE2-LABEL: test20:
435; SSE2:       # BB#0: # %entry
436; SSE2-NEXT:    movdqa %xmm1, %xmm3
437; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
438; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
439; SSE2-NEXT:    pxor %xmm3, %xmm2
440; SSE2-NEXT:    pandn %xmm0, %xmm3
441; SSE2-NEXT:    pandn %xmm1, %xmm2
442; SSE2-NEXT:    por %xmm3, %xmm2
443; SSE2-NEXT:    movdqa %xmm2, %xmm0
444; SSE2-NEXT:    retq
445;
446; SSE4-LABEL: test20:
447; SSE4:       # BB#0: # %entry
448; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
449; SSE4-NEXT:    retq
450;
451; AVX-LABEL: test20:
452; AVX:       # BB#0: # %entry
453; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
454; AVX-NEXT:    retq
455entry:
456  %cmp = icmp sge <4 x i32> %a, %b
457  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
458  ret <4 x i32> %sel
459}
460
461define <4 x i32> @test21(<4 x i32> %a, <4 x i32> %b) {
462; SSE2-LABEL: test21:
463; SSE2:       # BB#0: # %entry
464; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
465; SSE2-NEXT:    movdqa %xmm0, %xmm3
466; SSE2-NEXT:    pxor %xmm2, %xmm3
467; SSE2-NEXT:    pxor %xmm1, %xmm2
468; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
469; SSE2-NEXT:    pand %xmm2, %xmm0
470; SSE2-NEXT:    pandn %xmm1, %xmm2
471; SSE2-NEXT:    por %xmm2, %xmm0
472; SSE2-NEXT:    retq
473;
474; SSE4-LABEL: test21:
475; SSE4:       # BB#0: # %entry
476; SSE4-NEXT:    pminud %xmm1, %xmm0
477; SSE4-NEXT:    retq
478;
479; AVX-LABEL: test21:
480; AVX:       # BB#0: # %entry
481; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
482; AVX-NEXT:    retq
483entry:
484  %cmp = icmp ult <4 x i32> %a, %b
485  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
486  ret <4 x i32> %sel
487}
488
489define <4 x i32> @test22(<4 x i32> %a, <4 x i32> %b) {
490; SSE2-LABEL: test22:
491; SSE2:       # BB#0: # %entry
492; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
493; SSE2-NEXT:    movdqa %xmm1, %xmm2
494; SSE2-NEXT:    pxor %xmm3, %xmm2
495; SSE2-NEXT:    pxor %xmm0, %xmm3
496; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
497; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
498; SSE2-NEXT:    pxor %xmm3, %xmm2
499; SSE2-NEXT:    pandn %xmm0, %xmm3
500; SSE2-NEXT:    pandn %xmm1, %xmm2
501; SSE2-NEXT:    por %xmm3, %xmm2
502; SSE2-NEXT:    movdqa %xmm2, %xmm0
503; SSE2-NEXT:    retq
504;
505; SSE4-LABEL: test22:
506; SSE4:       # BB#0: # %entry
507; SSE4-NEXT:    pminud %xmm1, %xmm0
508; SSE4-NEXT:    retq
509;
510; AVX-LABEL: test22:
511; AVX:       # BB#0: # %entry
512; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
513; AVX-NEXT:    retq
514entry:
515  %cmp = icmp ule <4 x i32> %a, %b
516  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
517  ret <4 x i32> %sel
518}
519
520define <4 x i32> @test23(<4 x i32> %a, <4 x i32> %b) {
521; SSE2-LABEL: test23:
522; SSE2:       # BB#0: # %entry
523; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
524; SSE2-NEXT:    movdqa %xmm1, %xmm3
525; SSE2-NEXT:    pxor %xmm2, %xmm3
526; SSE2-NEXT:    pxor %xmm0, %xmm2
527; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
528; SSE2-NEXT:    pand %xmm2, %xmm0
529; SSE2-NEXT:    pandn %xmm1, %xmm2
530; SSE2-NEXT:    por %xmm2, %xmm0
531; SSE2-NEXT:    retq
532;
533; SSE4-LABEL: test23:
534; SSE4:       # BB#0: # %entry
535; SSE4-NEXT:    pmaxud %xmm1, %xmm0
536; SSE4-NEXT:    retq
537;
538; AVX-LABEL: test23:
539; AVX:       # BB#0: # %entry
540; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
541; AVX-NEXT:    retq
542entry:
543  %cmp = icmp ugt <4 x i32> %a, %b
544  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
545  ret <4 x i32> %sel
546}
547
548define <4 x i32> @test24(<4 x i32> %a, <4 x i32> %b) {
549; SSE2-LABEL: test24:
550; SSE2:       # BB#0: # %entry
551; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
552; SSE2-NEXT:    movdqa %xmm0, %xmm2
553; SSE2-NEXT:    pxor %xmm3, %xmm2
554; SSE2-NEXT:    pxor %xmm1, %xmm3
555; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
556; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
557; SSE2-NEXT:    pxor %xmm3, %xmm2
558; SSE2-NEXT:    pandn %xmm0, %xmm3
559; SSE2-NEXT:    pandn %xmm1, %xmm2
560; SSE2-NEXT:    por %xmm3, %xmm2
561; SSE2-NEXT:    movdqa %xmm2, %xmm0
562; SSE2-NEXT:    retq
563;
564; SSE4-LABEL: test24:
565; SSE4:       # BB#0: # %entry
566; SSE4-NEXT:    pmaxud %xmm1, %xmm0
567; SSE4-NEXT:    retq
568;
569; AVX-LABEL: test24:
570; AVX:       # BB#0: # %entry
571; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
572; AVX-NEXT:    retq
573entry:
574  %cmp = icmp uge <4 x i32> %a, %b
575  %sel = select <4 x i1> %cmp, <4 x i32> %a, <4 x i32> %b
576  ret <4 x i32> %sel
577}
578
579define <32 x i8> @test25(<32 x i8> %a, <32 x i8> %b) {
580; SSE2-LABEL: test25:
581; SSE2:       # BB#0: # %entry
582; SSE2-NEXT:    movdqa %xmm3, %xmm4
583; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
584; SSE2-NEXT:    movdqa %xmm2, %xmm5
585; SSE2-NEXT:    pcmpgtb %xmm0, %xmm5
586; SSE2-NEXT:    pand %xmm5, %xmm0
587; SSE2-NEXT:    pandn %xmm2, %xmm5
588; SSE2-NEXT:    por %xmm5, %xmm0
589; SSE2-NEXT:    pand %xmm4, %xmm1
590; SSE2-NEXT:    pandn %xmm3, %xmm4
591; SSE2-NEXT:    por %xmm4, %xmm1
592; SSE2-NEXT:    retq
593;
594; SSE4-LABEL: test25:
595; SSE4:       # BB#0: # %entry
596; SSE4-NEXT:    pminsb %xmm2, %xmm0
597; SSE4-NEXT:    pminsb %xmm3, %xmm1
598; SSE4-NEXT:    retq
599;
600; AVX1-LABEL: test25:
601; AVX1:       # BB#0: # %entry
602; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
603; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
604; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
605; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
606; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
607; AVX1-NEXT:    retq
608;
609; AVX2-LABEL: test25:
610; AVX2:       # BB#0: # %entry
611; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
612; AVX2-NEXT:    retq
613;
614; AVX512F-LABEL: test25:
615; AVX512F:       # BB#0: # %entry
616; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
617; AVX512F-NEXT:    retq
618entry:
619  %cmp = icmp slt <32 x i8> %a, %b
620  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
621  ret <32 x i8> %sel
622}
623
624define <32 x i8> @test26(<32 x i8> %a, <32 x i8> %b) {
625; SSE2-LABEL: test26:
626; SSE2:       # BB#0: # %entry
627; SSE2-NEXT:    movdqa %xmm1, %xmm6
628; SSE2-NEXT:    pcmpgtb %xmm3, %xmm6
629; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
630; SSE2-NEXT:    movdqa %xmm6, %xmm4
631; SSE2-NEXT:    pxor %xmm7, %xmm4
632; SSE2-NEXT:    movdqa %xmm0, %xmm5
633; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
634; SSE2-NEXT:    pxor %xmm5, %xmm7
635; SSE2-NEXT:    pandn %xmm0, %xmm5
636; SSE2-NEXT:    pandn %xmm2, %xmm7
637; SSE2-NEXT:    por %xmm7, %xmm5
638; SSE2-NEXT:    pandn %xmm1, %xmm6
639; SSE2-NEXT:    pandn %xmm3, %xmm4
640; SSE2-NEXT:    por %xmm6, %xmm4
641; SSE2-NEXT:    movdqa %xmm5, %xmm0
642; SSE2-NEXT:    movdqa %xmm4, %xmm1
643; SSE2-NEXT:    retq
644;
645; SSE4-LABEL: test26:
646; SSE4:       # BB#0: # %entry
647; SSE4-NEXT:    pminsb %xmm2, %xmm0
648; SSE4-NEXT:    pminsb %xmm3, %xmm1
649; SSE4-NEXT:    retq
650;
651; AVX1-LABEL: test26:
652; AVX1:       # BB#0: # %entry
653; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
654; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
655; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
656; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
657; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
658; AVX1-NEXT:    retq
659;
660; AVX2-LABEL: test26:
661; AVX2:       # BB#0: # %entry
662; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
663; AVX2-NEXT:    retq
664;
665; AVX512F-LABEL: test26:
666; AVX512F:       # BB#0: # %entry
667; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
668; AVX512F-NEXT:    retq
669entry:
670  %cmp = icmp sle <32 x i8> %a, %b
671  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
672  ret <32 x i8> %sel
673}
674
675define <32 x i8> @test27(<32 x i8> %a, <32 x i8> %b) {
676; SSE2-LABEL: test27:
677; SSE2:       # BB#0: # %entry
678; SSE2-NEXT:    movdqa %xmm1, %xmm4
679; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
680; SSE2-NEXT:    movdqa %xmm0, %xmm5
681; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
682; SSE2-NEXT:    pand %xmm5, %xmm0
683; SSE2-NEXT:    pandn %xmm2, %xmm5
684; SSE2-NEXT:    por %xmm0, %xmm5
685; SSE2-NEXT:    pand %xmm4, %xmm1
686; SSE2-NEXT:    pandn %xmm3, %xmm4
687; SSE2-NEXT:    por %xmm1, %xmm4
688; SSE2-NEXT:    movdqa %xmm5, %xmm0
689; SSE2-NEXT:    movdqa %xmm4, %xmm1
690; SSE2-NEXT:    retq
691;
692; SSE4-LABEL: test27:
693; SSE4:       # BB#0: # %entry
694; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
695; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
696; SSE4-NEXT:    retq
697;
698; AVX1-LABEL: test27:
699; AVX1:       # BB#0: # %entry
700; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
701; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
702; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
703; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
704; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
705; AVX1-NEXT:    retq
706;
707; AVX2-LABEL: test27:
708; AVX2:       # BB#0: # %entry
709; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
710; AVX2-NEXT:    retq
711;
712; AVX512F-LABEL: test27:
713; AVX512F:       # BB#0: # %entry
714; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
715; AVX512F-NEXT:    retq
716entry:
717  %cmp = icmp sgt <32 x i8> %a, %b
718  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
719  ret <32 x i8> %sel
720}
721
722define <32 x i8> @test28(<32 x i8> %a, <32 x i8> %b) {
723; SSE2-LABEL: test28:
724; SSE2:       # BB#0: # %entry
725; SSE2-NEXT:    movdqa %xmm3, %xmm6
726; SSE2-NEXT:    pcmpgtb %xmm1, %xmm6
727; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
728; SSE2-NEXT:    movdqa %xmm6, %xmm5
729; SSE2-NEXT:    pxor %xmm4, %xmm5
730; SSE2-NEXT:    movdqa %xmm2, %xmm7
731; SSE2-NEXT:    pcmpgtb %xmm0, %xmm7
732; SSE2-NEXT:    pxor %xmm7, %xmm4
733; SSE2-NEXT:    pandn %xmm0, %xmm7
734; SSE2-NEXT:    pandn %xmm2, %xmm4
735; SSE2-NEXT:    por %xmm7, %xmm4
736; SSE2-NEXT:    pandn %xmm1, %xmm6
737; SSE2-NEXT:    pandn %xmm3, %xmm5
738; SSE2-NEXT:    por %xmm6, %xmm5
739; SSE2-NEXT:    movdqa %xmm4, %xmm0
740; SSE2-NEXT:    movdqa %xmm5, %xmm1
741; SSE2-NEXT:    retq
742;
743; SSE4-LABEL: test28:
744; SSE4:       # BB#0: # %entry
745; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
746; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
747; SSE4-NEXT:    retq
748;
749; AVX1-LABEL: test28:
750; AVX1:       # BB#0: # %entry
751; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
752; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
753; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
754; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
755; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
756; AVX1-NEXT:    retq
757;
758; AVX2-LABEL: test28:
759; AVX2:       # BB#0: # %entry
760; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
761; AVX2-NEXT:    retq
762;
763; AVX512F-LABEL: test28:
764; AVX512F:       # BB#0: # %entry
765; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
766; AVX512F-NEXT:    retq
767entry:
768  %cmp = icmp sge <32 x i8> %a, %b
769  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
770  ret <32 x i8> %sel
771}
772
773define <32 x i8> @test29(<32 x i8> %a, <32 x i8> %b) {
774; SSE-LABEL: test29:
775; SSE:       # BB#0: # %entry
776; SSE-NEXT:    pminub %xmm2, %xmm0
777; SSE-NEXT:    pminub %xmm3, %xmm1
778; SSE-NEXT:    retq
779;
780; AVX1-LABEL: test29:
781; AVX1:       # BB#0: # %entry
782; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
783; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
784; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
785; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
786; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
787; AVX1-NEXT:    retq
788;
789; AVX2-LABEL: test29:
790; AVX2:       # BB#0: # %entry
791; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
792; AVX2-NEXT:    retq
793;
794; AVX512F-LABEL: test29:
795; AVX512F:       # BB#0: # %entry
796; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
797; AVX512F-NEXT:    retq
798entry:
799  %cmp = icmp ult <32 x i8> %a, %b
800  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
801  ret <32 x i8> %sel
802}
803
804define <32 x i8> @test30(<32 x i8> %a, <32 x i8> %b) {
805; SSE-LABEL: test30:
806; SSE:       # BB#0: # %entry
807; SSE-NEXT:    pminub %xmm2, %xmm0
808; SSE-NEXT:    pminub %xmm3, %xmm1
809; SSE-NEXT:    retq
810;
811; AVX1-LABEL: test30:
812; AVX1:       # BB#0: # %entry
813; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
814; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
815; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
816; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
817; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
818; AVX1-NEXT:    retq
819;
820; AVX2-LABEL: test30:
821; AVX2:       # BB#0: # %entry
822; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
823; AVX2-NEXT:    retq
824;
825; AVX512F-LABEL: test30:
826; AVX512F:       # BB#0: # %entry
827; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
828; AVX512F-NEXT:    retq
829entry:
830  %cmp = icmp ule <32 x i8> %a, %b
831  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
832  ret <32 x i8> %sel
833}
834
835define <32 x i8> @test31(<32 x i8> %a, <32 x i8> %b) {
836; SSE-LABEL: test31:
837; SSE:       # BB#0: # %entry
838; SSE-NEXT:    pmaxub %xmm2, %xmm0
839; SSE-NEXT:    pmaxub %xmm3, %xmm1
840; SSE-NEXT:    retq
841;
842; AVX1-LABEL: test31:
843; AVX1:       # BB#0: # %entry
844; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
845; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
846; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
847; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
848; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
849; AVX1-NEXT:    retq
850;
851; AVX2-LABEL: test31:
852; AVX2:       # BB#0: # %entry
853; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
854; AVX2-NEXT:    retq
855;
856; AVX512F-LABEL: test31:
857; AVX512F:       # BB#0: # %entry
858; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
859; AVX512F-NEXT:    retq
860entry:
861  %cmp = icmp ugt <32 x i8> %a, %b
862  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
863  ret <32 x i8> %sel
864}
865
866define <32 x i8> @test32(<32 x i8> %a, <32 x i8> %b) {
867; SSE-LABEL: test32:
868; SSE:       # BB#0: # %entry
869; SSE-NEXT:    pmaxub %xmm2, %xmm0
870; SSE-NEXT:    pmaxub %xmm3, %xmm1
871; SSE-NEXT:    retq
872;
873; AVX1-LABEL: test32:
874; AVX1:       # BB#0: # %entry
875; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
876; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
877; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
878; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
879; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
880; AVX1-NEXT:    retq
881;
882; AVX2-LABEL: test32:
883; AVX2:       # BB#0: # %entry
884; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
885; AVX2-NEXT:    retq
886;
887; AVX512F-LABEL: test32:
888; AVX512F:       # BB#0: # %entry
889; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
890; AVX512F-NEXT:    retq
891entry:
892  %cmp = icmp uge <32 x i8> %a, %b
893  %sel = select <32 x i1> %cmp, <32 x i8> %a, <32 x i8> %b
894  ret <32 x i8> %sel
895}
896
897define <16 x i16> @test33(<16 x i16> %a, <16 x i16> %b) {
898; SSE-LABEL: test33:
899; SSE:       # BB#0: # %entry
900; SSE-NEXT:    pminsw %xmm2, %xmm0
901; SSE-NEXT:    pminsw %xmm3, %xmm1
902; SSE-NEXT:    retq
903;
904; AVX1-LABEL: test33:
905; AVX1:       # BB#0: # %entry
906; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
907; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
908; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
909; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
910; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
911; AVX1-NEXT:    retq
912;
913; AVX2-LABEL: test33:
914; AVX2:       # BB#0: # %entry
915; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
916; AVX2-NEXT:    retq
917;
918; AVX512F-LABEL: test33:
919; AVX512F:       # BB#0: # %entry
920; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
921; AVX512F-NEXT:    retq
922entry:
923  %cmp = icmp slt <16 x i16> %a, %b
924  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
925  ret <16 x i16> %sel
926}
927
928define <16 x i16> @test34(<16 x i16> %a, <16 x i16> %b) {
929; SSE-LABEL: test34:
930; SSE:       # BB#0: # %entry
931; SSE-NEXT:    pminsw %xmm2, %xmm0
932; SSE-NEXT:    pminsw %xmm3, %xmm1
933; SSE-NEXT:    retq
934;
935; AVX1-LABEL: test34:
936; AVX1:       # BB#0: # %entry
937; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
938; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
939; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
940; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
941; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
942; AVX1-NEXT:    retq
943;
944; AVX2-LABEL: test34:
945; AVX2:       # BB#0: # %entry
946; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
947; AVX2-NEXT:    retq
948;
949; AVX512F-LABEL: test34:
950; AVX512F:       # BB#0: # %entry
951; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
952; AVX512F-NEXT:    retq
953entry:
954  %cmp = icmp sle <16 x i16> %a, %b
955  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
956  ret <16 x i16> %sel
957}
958
959define <16 x i16> @test35(<16 x i16> %a, <16 x i16> %b) {
960; SSE-LABEL: test35:
961; SSE:       # BB#0: # %entry
962; SSE-NEXT:    pmaxsw %xmm2, %xmm0
963; SSE-NEXT:    pmaxsw %xmm3, %xmm1
964; SSE-NEXT:    retq
965;
966; AVX1-LABEL: test35:
967; AVX1:       # BB#0: # %entry
968; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
969; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
970; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
971; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
972; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
973; AVX1-NEXT:    retq
974;
975; AVX2-LABEL: test35:
976; AVX2:       # BB#0: # %entry
977; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
978; AVX2-NEXT:    retq
979;
980; AVX512F-LABEL: test35:
981; AVX512F:       # BB#0: # %entry
982; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
983; AVX512F-NEXT:    retq
984entry:
985  %cmp = icmp sgt <16 x i16> %a, %b
986  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
987  ret <16 x i16> %sel
988}
989
990define <16 x i16> @test36(<16 x i16> %a, <16 x i16> %b) {
991; SSE-LABEL: test36:
992; SSE:       # BB#0: # %entry
993; SSE-NEXT:    pmaxsw %xmm2, %xmm0
994; SSE-NEXT:    pmaxsw %xmm3, %xmm1
995; SSE-NEXT:    retq
996;
997; AVX1-LABEL: test36:
998; AVX1:       # BB#0: # %entry
999; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1000; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1001; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
1002; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1003; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1004; AVX1-NEXT:    retq
1005;
1006; AVX2-LABEL: test36:
1007; AVX2:       # BB#0: # %entry
1008; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
1009; AVX2-NEXT:    retq
1010;
1011; AVX512F-LABEL: test36:
1012; AVX512F:       # BB#0: # %entry
1013; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
1014; AVX512F-NEXT:    retq
1015entry:
1016  %cmp = icmp sge <16 x i16> %a, %b
1017  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1018  ret <16 x i16> %sel
1019}
1020
1021define <16 x i16> @test37(<16 x i16> %a, <16 x i16> %b) {
1022; SSE2-LABEL: test37:
1023; SSE2:       # BB#0: # %entry
1024; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1025; SSE2-NEXT:    movdqa %xmm1, %xmm5
1026; SSE2-NEXT:    pxor %xmm4, %xmm5
1027; SSE2-NEXT:    movdqa %xmm3, %xmm6
1028; SSE2-NEXT:    pxor %xmm4, %xmm6
1029; SSE2-NEXT:    pcmpgtw %xmm5, %xmm6
1030; SSE2-NEXT:    movdqa %xmm0, %xmm5
1031; SSE2-NEXT:    pxor %xmm4, %xmm5
1032; SSE2-NEXT:    pxor %xmm2, %xmm4
1033; SSE2-NEXT:    pcmpgtw %xmm5, %xmm4
1034; SSE2-NEXT:    pand %xmm4, %xmm0
1035; SSE2-NEXT:    pandn %xmm2, %xmm4
1036; SSE2-NEXT:    por %xmm4, %xmm0
1037; SSE2-NEXT:    pand %xmm6, %xmm1
1038; SSE2-NEXT:    pandn %xmm3, %xmm6
1039; SSE2-NEXT:    por %xmm6, %xmm1
1040; SSE2-NEXT:    retq
1041;
1042; SSE4-LABEL: test37:
1043; SSE4:       # BB#0: # %entry
1044; SSE4-NEXT:    pminuw %xmm2, %xmm0
1045; SSE4-NEXT:    pminuw %xmm3, %xmm1
1046; SSE4-NEXT:    retq
1047;
1048; AVX1-LABEL: test37:
1049; AVX1:       # BB#0: # %entry
1050; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1051; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1052; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1053; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1054; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1055; AVX1-NEXT:    retq
1056;
1057; AVX2-LABEL: test37:
1058; AVX2:       # BB#0: # %entry
1059; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1060; AVX2-NEXT:    retq
1061;
1062; AVX512F-LABEL: test37:
1063; AVX512F:       # BB#0: # %entry
1064; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1065; AVX512F-NEXT:    retq
1066entry:
1067  %cmp = icmp ult <16 x i16> %a, %b
1068  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1069  ret <16 x i16> %sel
1070}
1071
1072define <16 x i16> @test38(<16 x i16> %a, <16 x i16> %b) {
1073; SSE2-LABEL: test38:
1074; SSE2:       # BB#0: # %entry
1075; SSE2-NEXT:    movdqa %xmm1, %xmm4
1076; SSE2-NEXT:    psubusw %xmm3, %xmm4
1077; SSE2-NEXT:    pxor %xmm6, %xmm6
1078; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
1079; SSE2-NEXT:    movdqa %xmm0, %xmm5
1080; SSE2-NEXT:    psubusw %xmm2, %xmm5
1081; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
1082; SSE2-NEXT:    pand %xmm5, %xmm0
1083; SSE2-NEXT:    pandn %xmm2, %xmm5
1084; SSE2-NEXT:    por %xmm0, %xmm5
1085; SSE2-NEXT:    pand %xmm4, %xmm1
1086; SSE2-NEXT:    pandn %xmm3, %xmm4
1087; SSE2-NEXT:    por %xmm1, %xmm4
1088; SSE2-NEXT:    movdqa %xmm5, %xmm0
1089; SSE2-NEXT:    movdqa %xmm4, %xmm1
1090; SSE2-NEXT:    retq
1091;
1092; SSE4-LABEL: test38:
1093; SSE4:       # BB#0: # %entry
1094; SSE4-NEXT:    pminuw %xmm2, %xmm0
1095; SSE4-NEXT:    pminuw %xmm3, %xmm1
1096; SSE4-NEXT:    retq
1097;
1098; AVX1-LABEL: test38:
1099; AVX1:       # BB#0: # %entry
1100; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1101; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1102; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1103; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1104; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1105; AVX1-NEXT:    retq
1106;
1107; AVX2-LABEL: test38:
1108; AVX2:       # BB#0: # %entry
1109; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1110; AVX2-NEXT:    retq
1111;
1112; AVX512F-LABEL: test38:
1113; AVX512F:       # BB#0: # %entry
1114; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1115; AVX512F-NEXT:    retq
1116entry:
1117  %cmp = icmp ule <16 x i16> %a, %b
1118  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1119  ret <16 x i16> %sel
1120}
1121
1122define <16 x i16> @test39(<16 x i16> %a, <16 x i16> %b) {
1123; SSE2-LABEL: test39:
1124; SSE2:       # BB#0: # %entry
1125; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
1126; SSE2-NEXT:    movdqa %xmm3, %xmm6
1127; SSE2-NEXT:    pxor %xmm5, %xmm6
1128; SSE2-NEXT:    movdqa %xmm1, %xmm4
1129; SSE2-NEXT:    pxor %xmm5, %xmm4
1130; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
1131; SSE2-NEXT:    movdqa %xmm2, %xmm6
1132; SSE2-NEXT:    pxor %xmm5, %xmm6
1133; SSE2-NEXT:    pxor %xmm0, %xmm5
1134; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
1135; SSE2-NEXT:    pand %xmm5, %xmm0
1136; SSE2-NEXT:    pandn %xmm2, %xmm5
1137; SSE2-NEXT:    por %xmm5, %xmm0
1138; SSE2-NEXT:    pand %xmm4, %xmm1
1139; SSE2-NEXT:    pandn %xmm3, %xmm4
1140; SSE2-NEXT:    por %xmm1, %xmm4
1141; SSE2-NEXT:    movdqa %xmm4, %xmm1
1142; SSE2-NEXT:    retq
1143;
1144; SSE4-LABEL: test39:
1145; SSE4:       # BB#0: # %entry
1146; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1147; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1148; SSE4-NEXT:    retq
1149;
1150; AVX1-LABEL: test39:
1151; AVX1:       # BB#0: # %entry
1152; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1153; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1154; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1155; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1156; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1157; AVX1-NEXT:    retq
1158;
1159; AVX2-LABEL: test39:
1160; AVX2:       # BB#0: # %entry
1161; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1162; AVX2-NEXT:    retq
1163;
1164; AVX512F-LABEL: test39:
1165; AVX512F:       # BB#0: # %entry
1166; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1167; AVX512F-NEXT:    retq
1168entry:
1169  %cmp = icmp ugt <16 x i16> %a, %b
1170  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1171  ret <16 x i16> %sel
1172}
1173
1174define <16 x i16> @test40(<16 x i16> %a, <16 x i16> %b) {
1175; SSE2-LABEL: test40:
1176; SSE2:       # BB#0: # %entry
1177; SSE2-NEXT:    movdqa %xmm3, %xmm4
1178; SSE2-NEXT:    psubusw %xmm1, %xmm4
1179; SSE2-NEXT:    pxor %xmm5, %xmm5
1180; SSE2-NEXT:    pcmpeqw %xmm5, %xmm4
1181; SSE2-NEXT:    movdqa %xmm2, %xmm6
1182; SSE2-NEXT:    psubusw %xmm0, %xmm6
1183; SSE2-NEXT:    pcmpeqw %xmm5, %xmm6
1184; SSE2-NEXT:    pand %xmm6, %xmm0
1185; SSE2-NEXT:    pandn %xmm2, %xmm6
1186; SSE2-NEXT:    por %xmm6, %xmm0
1187; SSE2-NEXT:    pand %xmm4, %xmm1
1188; SSE2-NEXT:    pandn %xmm3, %xmm4
1189; SSE2-NEXT:    por %xmm4, %xmm1
1190; SSE2-NEXT:    retq
1191;
1192; SSE4-LABEL: test40:
1193; SSE4:       # BB#0: # %entry
1194; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
1195; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
1196; SSE4-NEXT:    retq
1197;
1198; AVX1-LABEL: test40:
1199; AVX1:       # BB#0: # %entry
1200; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1201; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1202; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
1203; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1204; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1205; AVX1-NEXT:    retq
1206;
1207; AVX2-LABEL: test40:
1208; AVX2:       # BB#0: # %entry
1209; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1210; AVX2-NEXT:    retq
1211;
1212; AVX512F-LABEL: test40:
1213; AVX512F:       # BB#0: # %entry
1214; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
1215; AVX512F-NEXT:    retq
1216entry:
1217  %cmp = icmp uge <16 x i16> %a, %b
1218  %sel = select <16 x i1> %cmp, <16 x i16> %a, <16 x i16> %b
1219  ret <16 x i16> %sel
1220}
1221
1222define <8 x i32> @test41(<8 x i32> %a, <8 x i32> %b) {
1223; SSE2-LABEL: test41:
1224; SSE2:       # BB#0: # %entry
1225; SSE2-NEXT:    movdqa %xmm3, %xmm4
1226; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
1227; SSE2-NEXT:    movdqa %xmm2, %xmm5
1228; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
1229; SSE2-NEXT:    pand %xmm5, %xmm0
1230; SSE2-NEXT:    pandn %xmm2, %xmm5
1231; SSE2-NEXT:    por %xmm5, %xmm0
1232; SSE2-NEXT:    pand %xmm4, %xmm1
1233; SSE2-NEXT:    pandn %xmm3, %xmm4
1234; SSE2-NEXT:    por %xmm4, %xmm1
1235; SSE2-NEXT:    retq
1236;
1237; SSE4-LABEL: test41:
1238; SSE4:       # BB#0: # %entry
1239; SSE4-NEXT:    pminsd %xmm2, %xmm0
1240; SSE4-NEXT:    pminsd %xmm3, %xmm1
1241; SSE4-NEXT:    retq
1242;
1243; AVX1-LABEL: test41:
1244; AVX1:       # BB#0: # %entry
1245; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1246; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1247; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1248; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1249; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1250; AVX1-NEXT:    retq
1251;
1252; AVX2-LABEL: test41:
1253; AVX2:       # BB#0: # %entry
1254; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1255; AVX2-NEXT:    retq
1256;
1257; AVX512F-LABEL: test41:
1258; AVX512F:       # BB#0: # %entry
1259; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1260; AVX512F-NEXT:    retq
1261entry:
1262  %cmp = icmp slt <8 x i32> %a, %b
1263  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1264  ret <8 x i32> %sel
1265}
1266
1267define <8 x i32> @test42(<8 x i32> %a, <8 x i32> %b) {
1268; SSE2-LABEL: test42:
1269; SSE2:       # BB#0: # %entry
1270; SSE2-NEXT:    movdqa %xmm1, %xmm6
1271; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
1272; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
1273; SSE2-NEXT:    movdqa %xmm6, %xmm4
1274; SSE2-NEXT:    pxor %xmm7, %xmm4
1275; SSE2-NEXT:    movdqa %xmm0, %xmm5
1276; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
1277; SSE2-NEXT:    pxor %xmm5, %xmm7
1278; SSE2-NEXT:    pandn %xmm0, %xmm5
1279; SSE2-NEXT:    pandn %xmm2, %xmm7
1280; SSE2-NEXT:    por %xmm7, %xmm5
1281; SSE2-NEXT:    pandn %xmm1, %xmm6
1282; SSE2-NEXT:    pandn %xmm3, %xmm4
1283; SSE2-NEXT:    por %xmm6, %xmm4
1284; SSE2-NEXT:    movdqa %xmm5, %xmm0
1285; SSE2-NEXT:    movdqa %xmm4, %xmm1
1286; SSE2-NEXT:    retq
1287;
1288; SSE4-LABEL: test42:
1289; SSE4:       # BB#0: # %entry
1290; SSE4-NEXT:    pminsd %xmm2, %xmm0
1291; SSE4-NEXT:    pminsd %xmm3, %xmm1
1292; SSE4-NEXT:    retq
1293;
1294; AVX1-LABEL: test42:
1295; AVX1:       # BB#0: # %entry
1296; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1297; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1298; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
1299; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
1300; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1301; AVX1-NEXT:    retq
1302;
1303; AVX2-LABEL: test42:
1304; AVX2:       # BB#0: # %entry
1305; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1306; AVX2-NEXT:    retq
1307;
1308; AVX512F-LABEL: test42:
1309; AVX512F:       # BB#0: # %entry
1310; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
1311; AVX512F-NEXT:    retq
1312entry:
1313  %cmp = icmp sle <8 x i32> %a, %b
1314  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1315  ret <8 x i32> %sel
1316}
1317
1318define <8 x i32> @test43(<8 x i32> %a, <8 x i32> %b) {
1319; SSE2-LABEL: test43:
1320; SSE2:       # BB#0: # %entry
1321; SSE2-NEXT:    movdqa %xmm1, %xmm4
1322; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
1323; SSE2-NEXT:    movdqa %xmm0, %xmm5
1324; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
1325; SSE2-NEXT:    pand %xmm5, %xmm0
1326; SSE2-NEXT:    pandn %xmm2, %xmm5
1327; SSE2-NEXT:    por %xmm0, %xmm5
1328; SSE2-NEXT:    pand %xmm4, %xmm1
1329; SSE2-NEXT:    pandn %xmm3, %xmm4
1330; SSE2-NEXT:    por %xmm1, %xmm4
1331; SSE2-NEXT:    movdqa %xmm5, %xmm0
1332; SSE2-NEXT:    movdqa %xmm4, %xmm1
1333; SSE2-NEXT:    retq
1334;
1335; SSE4-LABEL: test43:
1336; SSE4:       # BB#0: # %entry
1337; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1338; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1339; SSE4-NEXT:    retq
1340;
1341; AVX1-LABEL: test43:
1342; AVX1:       # BB#0: # %entry
1343; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1344; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1345; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1346; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1347; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1348; AVX1-NEXT:    retq
1349;
1350; AVX2-LABEL: test43:
1351; AVX2:       # BB#0: # %entry
1352; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1353; AVX2-NEXT:    retq
1354;
1355; AVX512F-LABEL: test43:
1356; AVX512F:       # BB#0: # %entry
1357; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1358; AVX512F-NEXT:    retq
1359entry:
1360  %cmp = icmp sgt <8 x i32> %a, %b
1361  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1362  ret <8 x i32> %sel
1363}
1364
1365define <8 x i32> @test44(<8 x i32> %a, <8 x i32> %b) {
1366; SSE2-LABEL: test44:
1367; SSE2:       # BB#0: # %entry
1368; SSE2-NEXT:    movdqa %xmm3, %xmm6
1369; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
1370; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
1371; SSE2-NEXT:    movdqa %xmm6, %xmm5
1372; SSE2-NEXT:    pxor %xmm4, %xmm5
1373; SSE2-NEXT:    movdqa %xmm2, %xmm7
1374; SSE2-NEXT:    pcmpgtd %xmm0, %xmm7
1375; SSE2-NEXT:    pxor %xmm7, %xmm4
1376; SSE2-NEXT:    pandn %xmm0, %xmm7
1377; SSE2-NEXT:    pandn %xmm2, %xmm4
1378; SSE2-NEXT:    por %xmm7, %xmm4
1379; SSE2-NEXT:    pandn %xmm1, %xmm6
1380; SSE2-NEXT:    pandn %xmm3, %xmm5
1381; SSE2-NEXT:    por %xmm6, %xmm5
1382; SSE2-NEXT:    movdqa %xmm4, %xmm0
1383; SSE2-NEXT:    movdqa %xmm5, %xmm1
1384; SSE2-NEXT:    retq
1385;
1386; SSE4-LABEL: test44:
1387; SSE4:       # BB#0: # %entry
1388; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
1389; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
1390; SSE4-NEXT:    retq
1391;
1392; AVX1-LABEL: test44:
1393; AVX1:       # BB#0: # %entry
1394; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1395; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1396; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
1397; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
1398; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1399; AVX1-NEXT:    retq
1400;
1401; AVX2-LABEL: test44:
1402; AVX2:       # BB#0: # %entry
1403; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1404; AVX2-NEXT:    retq
1405;
1406; AVX512F-LABEL: test44:
1407; AVX512F:       # BB#0: # %entry
1408; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
1409; AVX512F-NEXT:    retq
1410entry:
1411  %cmp = icmp sge <8 x i32> %a, %b
1412  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1413  ret <8 x i32> %sel
1414}
1415
1416define <8 x i32> @test45(<8 x i32> %a, <8 x i32> %b) {
1417; SSE2-LABEL: test45:
1418; SSE2:       # BB#0: # %entry
1419; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1420; SSE2-NEXT:    movdqa %xmm1, %xmm5
1421; SSE2-NEXT:    pxor %xmm4, %xmm5
1422; SSE2-NEXT:    movdqa %xmm3, %xmm6
1423; SSE2-NEXT:    pxor %xmm4, %xmm6
1424; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1425; SSE2-NEXT:    movdqa %xmm0, %xmm5
1426; SSE2-NEXT:    pxor %xmm4, %xmm5
1427; SSE2-NEXT:    pxor %xmm2, %xmm4
1428; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
1429; SSE2-NEXT:    pand %xmm4, %xmm0
1430; SSE2-NEXT:    pandn %xmm2, %xmm4
1431; SSE2-NEXT:    por %xmm4, %xmm0
1432; SSE2-NEXT:    pand %xmm6, %xmm1
1433; SSE2-NEXT:    pandn %xmm3, %xmm6
1434; SSE2-NEXT:    por %xmm6, %xmm1
1435; SSE2-NEXT:    retq
1436;
1437; SSE4-LABEL: test45:
1438; SSE4:       # BB#0: # %entry
1439; SSE4-NEXT:    pminud %xmm2, %xmm0
1440; SSE4-NEXT:    pminud %xmm3, %xmm1
1441; SSE4-NEXT:    retq
1442;
1443; AVX1-LABEL: test45:
1444; AVX1:       # BB#0: # %entry
1445; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1446; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1447; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1448; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1449; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1450; AVX1-NEXT:    retq
1451;
1452; AVX2-LABEL: test45:
1453; AVX2:       # BB#0: # %entry
1454; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1455; AVX2-NEXT:    retq
1456;
1457; AVX512F-LABEL: test45:
1458; AVX512F:       # BB#0: # %entry
1459; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1460; AVX512F-NEXT:    retq
1461entry:
1462  %cmp = icmp ult <8 x i32> %a, %b
1463  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1464  ret <8 x i32> %sel
1465}
1466
1467define <8 x i32> @test46(<8 x i32> %a, <8 x i32> %b) {
1468; SSE2-LABEL: test46:
1469; SSE2:       # BB#0: # %entry
1470; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
1471; SSE2-NEXT:    movdqa %xmm3, %xmm4
1472; SSE2-NEXT:    pxor %xmm6, %xmm4
1473; SSE2-NEXT:    movdqa %xmm1, %xmm7
1474; SSE2-NEXT:    pxor %xmm6, %xmm7
1475; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
1476; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
1477; SSE2-NEXT:    movdqa %xmm7, %xmm5
1478; SSE2-NEXT:    pxor %xmm4, %xmm5
1479; SSE2-NEXT:    movdqa %xmm2, %xmm8
1480; SSE2-NEXT:    pxor %xmm6, %xmm8
1481; SSE2-NEXT:    pxor %xmm0, %xmm6
1482; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
1483; SSE2-NEXT:    pxor %xmm6, %xmm4
1484; SSE2-NEXT:    pandn %xmm0, %xmm6
1485; SSE2-NEXT:    pandn %xmm2, %xmm4
1486; SSE2-NEXT:    por %xmm6, %xmm4
1487; SSE2-NEXT:    pandn %xmm1, %xmm7
1488; SSE2-NEXT:    pandn %xmm3, %xmm5
1489; SSE2-NEXT:    por %xmm7, %xmm5
1490; SSE2-NEXT:    movdqa %xmm4, %xmm0
1491; SSE2-NEXT:    movdqa %xmm5, %xmm1
1492; SSE2-NEXT:    retq
1493;
1494; SSE4-LABEL: test46:
1495; SSE4:       # BB#0: # %entry
1496; SSE4-NEXT:    pminud %xmm2, %xmm0
1497; SSE4-NEXT:    pminud %xmm3, %xmm1
1498; SSE4-NEXT:    retq
1499;
1500; AVX1-LABEL: test46:
1501; AVX1:       # BB#0: # %entry
1502; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1503; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1504; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1505; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1506; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1507; AVX1-NEXT:    retq
1508;
1509; AVX2-LABEL: test46:
1510; AVX2:       # BB#0: # %entry
1511; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1512; AVX2-NEXT:    retq
1513;
1514; AVX512F-LABEL: test46:
1515; AVX512F:       # BB#0: # %entry
1516; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1517; AVX512F-NEXT:    retq
1518entry:
1519  %cmp = icmp ule <8 x i32> %a, %b
1520  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1521  ret <8 x i32> %sel
1522}
1523
1524define <8 x i32> @test47(<8 x i32> %a, <8 x i32> %b) {
1525; SSE2-LABEL: test47:
1526; SSE2:       # BB#0: # %entry
1527; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1528; SSE2-NEXT:    movdqa %xmm3, %xmm6
1529; SSE2-NEXT:    pxor %xmm5, %xmm6
1530; SSE2-NEXT:    movdqa %xmm1, %xmm4
1531; SSE2-NEXT:    pxor %xmm5, %xmm4
1532; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
1533; SSE2-NEXT:    movdqa %xmm2, %xmm6
1534; SSE2-NEXT:    pxor %xmm5, %xmm6
1535; SSE2-NEXT:    pxor %xmm0, %xmm5
1536; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
1537; SSE2-NEXT:    pand %xmm5, %xmm0
1538; SSE2-NEXT:    pandn %xmm2, %xmm5
1539; SSE2-NEXT:    por %xmm5, %xmm0
1540; SSE2-NEXT:    pand %xmm4, %xmm1
1541; SSE2-NEXT:    pandn %xmm3, %xmm4
1542; SSE2-NEXT:    por %xmm1, %xmm4
1543; SSE2-NEXT:    movdqa %xmm4, %xmm1
1544; SSE2-NEXT:    retq
1545;
1546; SSE4-LABEL: test47:
1547; SSE4:       # BB#0: # %entry
1548; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1549; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1550; SSE4-NEXT:    retq
1551;
1552; AVX1-LABEL: test47:
1553; AVX1:       # BB#0: # %entry
1554; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1555; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1556; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1557; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1558; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1559; AVX1-NEXT:    retq
1560;
1561; AVX2-LABEL: test47:
1562; AVX2:       # BB#0: # %entry
1563; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1564; AVX2-NEXT:    retq
1565;
1566; AVX512F-LABEL: test47:
1567; AVX512F:       # BB#0: # %entry
1568; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1569; AVX512F-NEXT:    retq
1570entry:
1571  %cmp = icmp ugt <8 x i32> %a, %b
1572  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1573  ret <8 x i32> %sel
1574}
1575
1576define <8 x i32> @test48(<8 x i32> %a, <8 x i32> %b) {
1577; SSE2-LABEL: test48:
1578; SSE2:       # BB#0: # %entry
1579; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
1580; SSE2-NEXT:    movdqa %xmm1, %xmm4
1581; SSE2-NEXT:    pxor %xmm6, %xmm4
1582; SSE2-NEXT:    movdqa %xmm3, %xmm7
1583; SSE2-NEXT:    pxor %xmm6, %xmm7
1584; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
1585; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
1586; SSE2-NEXT:    movdqa %xmm7, %xmm5
1587; SSE2-NEXT:    pxor %xmm4, %xmm5
1588; SSE2-NEXT:    movdqa %xmm0, %xmm8
1589; SSE2-NEXT:    pxor %xmm6, %xmm8
1590; SSE2-NEXT:    pxor %xmm2, %xmm6
1591; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
1592; SSE2-NEXT:    pxor %xmm6, %xmm4
1593; SSE2-NEXT:    pandn %xmm0, %xmm6
1594; SSE2-NEXT:    pandn %xmm2, %xmm4
1595; SSE2-NEXT:    por %xmm6, %xmm4
1596; SSE2-NEXT:    pandn %xmm1, %xmm7
1597; SSE2-NEXT:    pandn %xmm3, %xmm5
1598; SSE2-NEXT:    por %xmm7, %xmm5
1599; SSE2-NEXT:    movdqa %xmm4, %xmm0
1600; SSE2-NEXT:    movdqa %xmm5, %xmm1
1601; SSE2-NEXT:    retq
1602;
1603; SSE4-LABEL: test48:
1604; SSE4:       # BB#0: # %entry
1605; SSE4-NEXT:    pmaxud %xmm2, %xmm0
1606; SSE4-NEXT:    pmaxud %xmm3, %xmm1
1607; SSE4-NEXT:    retq
1608;
1609; AVX1-LABEL: test48:
1610; AVX1:       # BB#0: # %entry
1611; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1612; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1613; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
1614; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
1615; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1616; AVX1-NEXT:    retq
1617;
1618; AVX2-LABEL: test48:
1619; AVX2:       # BB#0: # %entry
1620; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1621; AVX2-NEXT:    retq
1622;
1623; AVX512F-LABEL: test48:
1624; AVX512F:       # BB#0: # %entry
1625; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
1626; AVX512F-NEXT:    retq
1627entry:
1628  %cmp = icmp uge <8 x i32> %a, %b
1629  %sel = select <8 x i1> %cmp, <8 x i32> %a, <8 x i32> %b
1630  ret <8 x i32> %sel
1631}
1632
1633define <16 x i8> @test49(<16 x i8> %a, <16 x i8> %b) {
1634; SSE2-LABEL: test49:
1635; SSE2:       # BB#0: # %entry
1636; SSE2-NEXT:    movdqa %xmm1, %xmm2
1637; SSE2-NEXT:    pcmpgtb %xmm0, %xmm2
1638; SSE2-NEXT:    pand %xmm2, %xmm1
1639; SSE2-NEXT:    pandn %xmm0, %xmm2
1640; SSE2-NEXT:    por %xmm1, %xmm2
1641; SSE2-NEXT:    movdqa %xmm2, %xmm0
1642; SSE2-NEXT:    retq
1643;
1644; SSE4-LABEL: test49:
1645; SSE4:       # BB#0: # %entry
1646; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1647; SSE4-NEXT:    retq
1648;
1649; AVX-LABEL: test49:
1650; AVX:       # BB#0: # %entry
1651; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1652; AVX-NEXT:    retq
1653entry:
1654  %cmp = icmp slt <16 x i8> %a, %b
1655  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1656  ret <16 x i8> %sel
1657}
1658
1659define <16 x i8> @test50(<16 x i8> %a, <16 x i8> %b) {
1660; SSE2-LABEL: test50:
1661; SSE2:       # BB#0: # %entry
1662; SSE2-NEXT:    movdqa %xmm0, %xmm2
1663; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1664; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
1665; SSE2-NEXT:    pxor %xmm2, %xmm3
1666; SSE2-NEXT:    pandn %xmm1, %xmm2
1667; SSE2-NEXT:    pandn %xmm0, %xmm3
1668; SSE2-NEXT:    por %xmm3, %xmm2
1669; SSE2-NEXT:    movdqa %xmm2, %xmm0
1670; SSE2-NEXT:    retq
1671;
1672; SSE4-LABEL: test50:
1673; SSE4:       # BB#0: # %entry
1674; SSE4-NEXT:    pmaxsb %xmm1, %xmm0
1675; SSE4-NEXT:    retq
1676;
1677; AVX-LABEL: test50:
1678; AVX:       # BB#0: # %entry
1679; AVX-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
1680; AVX-NEXT:    retq
1681entry:
1682  %cmp = icmp sle <16 x i8> %a, %b
1683  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1684  ret <16 x i8> %sel
1685}
1686
1687define <16 x i8> @test51(<16 x i8> %a, <16 x i8> %b) {
1688; SSE2-LABEL: test51:
1689; SSE2:       # BB#0: # %entry
1690; SSE2-NEXT:    movdqa %xmm0, %xmm2
1691; SSE2-NEXT:    pcmpgtb %xmm1, %xmm2
1692; SSE2-NEXT:    pand %xmm2, %xmm1
1693; SSE2-NEXT:    pandn %xmm0, %xmm2
1694; SSE2-NEXT:    por %xmm1, %xmm2
1695; SSE2-NEXT:    movdqa %xmm2, %xmm0
1696; SSE2-NEXT:    retq
1697;
1698; SSE4-LABEL: test51:
1699; SSE4:       # BB#0: # %entry
1700; SSE4-NEXT:    pminsb %xmm1, %xmm0
1701; SSE4-NEXT:    retq
1702;
1703; AVX-LABEL: test51:
1704; AVX:       # BB#0: # %entry
1705; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1706; AVX-NEXT:    retq
1707entry:
1708  %cmp = icmp sgt <16 x i8> %a, %b
1709  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1710  ret <16 x i8> %sel
1711}
1712
1713define <16 x i8> @test52(<16 x i8> %a, <16 x i8> %b) {
1714; SSE2-LABEL: test52:
1715; SSE2:       # BB#0: # %entry
1716; SSE2-NEXT:    movdqa %xmm1, %xmm3
1717; SSE2-NEXT:    pcmpgtb %xmm0, %xmm3
1718; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
1719; SSE2-NEXT:    pxor %xmm3, %xmm2
1720; SSE2-NEXT:    pandn %xmm1, %xmm3
1721; SSE2-NEXT:    pandn %xmm0, %xmm2
1722; SSE2-NEXT:    por %xmm3, %xmm2
1723; SSE2-NEXT:    movdqa %xmm2, %xmm0
1724; SSE2-NEXT:    retq
1725;
1726; SSE4-LABEL: test52:
1727; SSE4:       # BB#0: # %entry
1728; SSE4-NEXT:    pminsb %xmm1, %xmm0
1729; SSE4-NEXT:    retq
1730;
1731; AVX-LABEL: test52:
1732; AVX:       # BB#0: # %entry
1733; AVX-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
1734; AVX-NEXT:    retq
1735entry:
1736  %cmp = icmp sge <16 x i8> %a, %b
1737  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1738  ret <16 x i8> %sel
1739}
1740
1741define <16 x i8> @test53(<16 x i8> %a, <16 x i8> %b) {
1742; SSE-LABEL: test53:
1743; SSE:       # BB#0: # %entry
1744; SSE-NEXT:    pmaxub %xmm1, %xmm0
1745; SSE-NEXT:    retq
1746;
1747; AVX-LABEL: test53:
1748; AVX:       # BB#0: # %entry
1749; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1750; AVX-NEXT:    retq
1751entry:
1752  %cmp = icmp ult <16 x i8> %a, %b
1753  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1754  ret <16 x i8> %sel
1755}
1756
1757define <16 x i8> @test54(<16 x i8> %a, <16 x i8> %b) {
1758; SSE-LABEL: test54:
1759; SSE:       # BB#0: # %entry
1760; SSE-NEXT:    pmaxub %xmm1, %xmm0
1761; SSE-NEXT:    retq
1762;
1763; AVX-LABEL: test54:
1764; AVX:       # BB#0: # %entry
1765; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
1766; AVX-NEXT:    retq
1767entry:
1768  %cmp = icmp ule <16 x i8> %a, %b
1769  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1770  ret <16 x i8> %sel
1771}
1772
1773define <16 x i8> @test55(<16 x i8> %a, <16 x i8> %b) {
1774; SSE-LABEL: test55:
1775; SSE:       # BB#0: # %entry
1776; SSE-NEXT:    pminub %xmm1, %xmm0
1777; SSE-NEXT:    retq
1778;
1779; AVX-LABEL: test55:
1780; AVX:       # BB#0: # %entry
1781; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1782; AVX-NEXT:    retq
1783entry:
1784  %cmp = icmp ugt <16 x i8> %a, %b
1785  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1786  ret <16 x i8> %sel
1787}
1788
1789define <16 x i8> @test56(<16 x i8> %a, <16 x i8> %b) {
1790; SSE-LABEL: test56:
1791; SSE:       # BB#0: # %entry
1792; SSE-NEXT:    pminub %xmm1, %xmm0
1793; SSE-NEXT:    retq
1794;
1795; AVX-LABEL: test56:
1796; AVX:       # BB#0: # %entry
1797; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1798; AVX-NEXT:    retq
1799entry:
1800  %cmp = icmp uge <16 x i8> %a, %b
1801  %sel = select <16 x i1> %cmp, <16 x i8> %b, <16 x i8> %a
1802  ret <16 x i8> %sel
1803}
1804
1805define <8 x i16> @test57(<8 x i16> %a, <8 x i16> %b) {
1806; SSE-LABEL: test57:
1807; SSE:       # BB#0: # %entry
1808; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1809; SSE-NEXT:    retq
1810;
1811; AVX-LABEL: test57:
1812; AVX:       # BB#0: # %entry
1813; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1814; AVX-NEXT:    retq
1815entry:
1816  %cmp = icmp slt <8 x i16> %a, %b
1817  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1818  ret <8 x i16> %sel
1819}
1820
1821define <8 x i16> @test58(<8 x i16> %a, <8 x i16> %b) {
1822; SSE-LABEL: test58:
1823; SSE:       # BB#0: # %entry
1824; SSE-NEXT:    pmaxsw %xmm1, %xmm0
1825; SSE-NEXT:    retq
1826;
1827; AVX-LABEL: test58:
1828; AVX:       # BB#0: # %entry
1829; AVX-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
1830; AVX-NEXT:    retq
1831entry:
1832  %cmp = icmp sle <8 x i16> %a, %b
1833  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1834  ret <8 x i16> %sel
1835}
1836
1837define <8 x i16> @test59(<8 x i16> %a, <8 x i16> %b) {
1838; SSE-LABEL: test59:
1839; SSE:       # BB#0: # %entry
1840; SSE-NEXT:    pminsw %xmm1, %xmm0
1841; SSE-NEXT:    retq
1842;
1843; AVX-LABEL: test59:
1844; AVX:       # BB#0: # %entry
1845; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1846; AVX-NEXT:    retq
1847entry:
1848  %cmp = icmp sgt <8 x i16> %a, %b
1849  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1850  ret <8 x i16> %sel
1851}
1852
1853define <8 x i16> @test60(<8 x i16> %a, <8 x i16> %b) {
1854; SSE-LABEL: test60:
1855; SSE:       # BB#0: # %entry
1856; SSE-NEXT:    pminsw %xmm1, %xmm0
1857; SSE-NEXT:    retq
1858;
1859; AVX-LABEL: test60:
1860; AVX:       # BB#0: # %entry
1861; AVX-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
1862; AVX-NEXT:    retq
1863entry:
1864  %cmp = icmp sge <8 x i16> %a, %b
1865  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1866  ret <8 x i16> %sel
1867}
1868
1869define <8 x i16> @test61(<8 x i16> %a, <8 x i16> %b) {
1870; SSE2-LABEL: test61:
1871; SSE2:       # BB#0: # %entry
1872; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1873; SSE2-NEXT:    movdqa %xmm0, %xmm3
1874; SSE2-NEXT:    pxor %xmm2, %xmm3
1875; SSE2-NEXT:    pxor %xmm1, %xmm2
1876; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
1877; SSE2-NEXT:    pand %xmm2, %xmm1
1878; SSE2-NEXT:    pandn %xmm0, %xmm2
1879; SSE2-NEXT:    por %xmm1, %xmm2
1880; SSE2-NEXT:    movdqa %xmm2, %xmm0
1881; SSE2-NEXT:    retq
1882;
1883; SSE4-LABEL: test61:
1884; SSE4:       # BB#0: # %entry
1885; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1886; SSE4-NEXT:    retq
1887;
1888; AVX-LABEL: test61:
1889; AVX:       # BB#0: # %entry
1890; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1891; AVX-NEXT:    retq
1892entry:
1893  %cmp = icmp ult <8 x i16> %a, %b
1894  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1895  ret <8 x i16> %sel
1896}
1897
1898define <8 x i16> @test62(<8 x i16> %a, <8 x i16> %b) {
1899; SSE2-LABEL: test62:
1900; SSE2:       # BB#0: # %entry
1901; SSE2-NEXT:    movdqa %xmm0, %xmm3
1902; SSE2-NEXT:    psubusw %xmm1, %xmm3
1903; SSE2-NEXT:    pxor %xmm2, %xmm2
1904; SSE2-NEXT:    pcmpeqw %xmm3, %xmm2
1905; SSE2-NEXT:    pand %xmm2, %xmm1
1906; SSE2-NEXT:    pandn %xmm0, %xmm2
1907; SSE2-NEXT:    por %xmm1, %xmm2
1908; SSE2-NEXT:    movdqa %xmm2, %xmm0
1909; SSE2-NEXT:    retq
1910;
1911; SSE4-LABEL: test62:
1912; SSE4:       # BB#0: # %entry
1913; SSE4-NEXT:    pmaxuw %xmm1, %xmm0
1914; SSE4-NEXT:    retq
1915;
1916; AVX-LABEL: test62:
1917; AVX:       # BB#0: # %entry
1918; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
1919; AVX-NEXT:    retq
1920entry:
1921  %cmp = icmp ule <8 x i16> %a, %b
1922  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1923  ret <8 x i16> %sel
1924}
1925
1926define <8 x i16> @test63(<8 x i16> %a, <8 x i16> %b) {
1927; SSE2-LABEL: test63:
1928; SSE2:       # BB#0: # %entry
1929; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1930; SSE2-NEXT:    movdqa %xmm1, %xmm3
1931; SSE2-NEXT:    pxor %xmm2, %xmm3
1932; SSE2-NEXT:    pxor %xmm0, %xmm2
1933; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
1934; SSE2-NEXT:    pand %xmm2, %xmm1
1935; SSE2-NEXT:    pandn %xmm0, %xmm2
1936; SSE2-NEXT:    por %xmm1, %xmm2
1937; SSE2-NEXT:    movdqa %xmm2, %xmm0
1938; SSE2-NEXT:    retq
1939;
1940; SSE4-LABEL: test63:
1941; SSE4:       # BB#0: # %entry
1942; SSE4-NEXT:    pminuw %xmm1, %xmm0
1943; SSE4-NEXT:    retq
1944;
1945; AVX-LABEL: test63:
1946; AVX:       # BB#0: # %entry
1947; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1948; AVX-NEXT:    retq
1949entry:
1950  %cmp = icmp ugt <8 x i16> %a, %b
1951  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1952  ret <8 x i16> %sel
1953}
1954
1955define <8 x i16> @test64(<8 x i16> %a, <8 x i16> %b) {
1956; SSE2-LABEL: test64:
1957; SSE2:       # BB#0: # %entry
1958; SSE2-NEXT:    movdqa %xmm1, %xmm3
1959; SSE2-NEXT:    psubusw %xmm0, %xmm3
1960; SSE2-NEXT:    pxor %xmm2, %xmm2
1961; SSE2-NEXT:    pcmpeqw %xmm3, %xmm2
1962; SSE2-NEXT:    pand %xmm2, %xmm1
1963; SSE2-NEXT:    pandn %xmm0, %xmm2
1964; SSE2-NEXT:    por %xmm1, %xmm2
1965; SSE2-NEXT:    movdqa %xmm2, %xmm0
1966; SSE2-NEXT:    retq
1967;
1968; SSE4-LABEL: test64:
1969; SSE4:       # BB#0: # %entry
1970; SSE4-NEXT:    pminuw %xmm1, %xmm0
1971; SSE4-NEXT:    retq
1972;
1973; AVX-LABEL: test64:
1974; AVX:       # BB#0: # %entry
1975; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1976; AVX-NEXT:    retq
1977entry:
1978  %cmp = icmp uge <8 x i16> %a, %b
1979  %sel = select <8 x i1> %cmp, <8 x i16> %b, <8 x i16> %a
1980  ret <8 x i16> %sel
1981}
1982
1983define <4 x i32> @test65(<4 x i32> %a, <4 x i32> %b) {
1984; SSE2-LABEL: test65:
1985; SSE2:       # BB#0: # %entry
1986; SSE2-NEXT:    movdqa %xmm1, %xmm2
1987; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
1988; SSE2-NEXT:    pand %xmm2, %xmm1
1989; SSE2-NEXT:    pandn %xmm0, %xmm2
1990; SSE2-NEXT:    por %xmm1, %xmm2
1991; SSE2-NEXT:    movdqa %xmm2, %xmm0
1992; SSE2-NEXT:    retq
1993;
1994; SSE4-LABEL: test65:
1995; SSE4:       # BB#0: # %entry
1996; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
1997; SSE4-NEXT:    retq
1998;
1999; AVX-LABEL: test65:
2000; AVX:       # BB#0: # %entry
2001; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2002; AVX-NEXT:    retq
2003entry:
2004  %cmp = icmp slt <4 x i32> %a, %b
2005  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2006  ret <4 x i32> %sel
2007}
2008
2009define <4 x i32> @test66(<4 x i32> %a, <4 x i32> %b) {
2010; SSE2-LABEL: test66:
2011; SSE2:       # BB#0: # %entry
2012; SSE2-NEXT:    movdqa %xmm0, %xmm2
2013; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2014; SSE2-NEXT:    pcmpeqd %xmm3, %xmm3
2015; SSE2-NEXT:    pxor %xmm2, %xmm3
2016; SSE2-NEXT:    pandn %xmm1, %xmm2
2017; SSE2-NEXT:    pandn %xmm0, %xmm3
2018; SSE2-NEXT:    por %xmm3, %xmm2
2019; SSE2-NEXT:    movdqa %xmm2, %xmm0
2020; SSE2-NEXT:    retq
2021;
2022; SSE4-LABEL: test66:
2023; SSE4:       # BB#0: # %entry
2024; SSE4-NEXT:    pmaxsd %xmm1, %xmm0
2025; SSE4-NEXT:    retq
2026;
2027; AVX-LABEL: test66:
2028; AVX:       # BB#0: # %entry
2029; AVX-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2030; AVX-NEXT:    retq
2031entry:
2032  %cmp = icmp sle <4 x i32> %a, %b
2033  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2034  ret <4 x i32> %sel
2035}
2036
2037define <4 x i32> @test67(<4 x i32> %a, <4 x i32> %b) {
2038; SSE2-LABEL: test67:
2039; SSE2:       # BB#0: # %entry
2040; SSE2-NEXT:    movdqa %xmm0, %xmm2
2041; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
2042; SSE2-NEXT:    pand %xmm2, %xmm1
2043; SSE2-NEXT:    pandn %xmm0, %xmm2
2044; SSE2-NEXT:    por %xmm1, %xmm2
2045; SSE2-NEXT:    movdqa %xmm2, %xmm0
2046; SSE2-NEXT:    retq
2047;
2048; SSE4-LABEL: test67:
2049; SSE4:       # BB#0: # %entry
2050; SSE4-NEXT:    pminsd %xmm1, %xmm0
2051; SSE4-NEXT:    retq
2052;
2053; AVX-LABEL: test67:
2054; AVX:       # BB#0: # %entry
2055; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2056; AVX-NEXT:    retq
2057entry:
2058  %cmp = icmp sgt <4 x i32> %a, %b
2059  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2060  ret <4 x i32> %sel
2061}
2062
2063define <4 x i32> @test68(<4 x i32> %a, <4 x i32> %b) {
2064; SSE2-LABEL: test68:
2065; SSE2:       # BB#0: # %entry
2066; SSE2-NEXT:    movdqa %xmm1, %xmm3
2067; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
2068; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
2069; SSE2-NEXT:    pxor %xmm3, %xmm2
2070; SSE2-NEXT:    pandn %xmm1, %xmm3
2071; SSE2-NEXT:    pandn %xmm0, %xmm2
2072; SSE2-NEXT:    por %xmm3, %xmm2
2073; SSE2-NEXT:    movdqa %xmm2, %xmm0
2074; SSE2-NEXT:    retq
2075;
2076; SSE4-LABEL: test68:
2077; SSE4:       # BB#0: # %entry
2078; SSE4-NEXT:    pminsd %xmm1, %xmm0
2079; SSE4-NEXT:    retq
2080;
2081; AVX-LABEL: test68:
2082; AVX:       # BB#0: # %entry
2083; AVX-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2084; AVX-NEXT:    retq
2085entry:
2086  %cmp = icmp sge <4 x i32> %a, %b
2087  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2088  ret <4 x i32> %sel
2089}
2090
2091define <4 x i32> @test69(<4 x i32> %a, <4 x i32> %b) {
2092; SSE2-LABEL: test69:
2093; SSE2:       # BB#0: # %entry
2094; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2095; SSE2-NEXT:    movdqa %xmm0, %xmm3
2096; SSE2-NEXT:    pxor %xmm2, %xmm3
2097; SSE2-NEXT:    pxor %xmm1, %xmm2
2098; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2099; SSE2-NEXT:    pand %xmm2, %xmm1
2100; SSE2-NEXT:    pandn %xmm0, %xmm2
2101; SSE2-NEXT:    por %xmm1, %xmm2
2102; SSE2-NEXT:    movdqa %xmm2, %xmm0
2103; SSE2-NEXT:    retq
2104;
2105; SSE4-LABEL: test69:
2106; SSE4:       # BB#0: # %entry
2107; SSE4-NEXT:    pmaxud %xmm1, %xmm0
2108; SSE4-NEXT:    retq
2109;
2110; AVX-LABEL: test69:
2111; AVX:       # BB#0: # %entry
2112; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2113; AVX-NEXT:    retq
2114entry:
2115  %cmp = icmp ult <4 x i32> %a, %b
2116  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2117  ret <4 x i32> %sel
2118}
2119
2120define <4 x i32> @test70(<4 x i32> %a, <4 x i32> %b) {
2121; SSE2-LABEL: test70:
2122; SSE2:       # BB#0: # %entry
2123; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
2124; SSE2-NEXT:    movdqa %xmm1, %xmm2
2125; SSE2-NEXT:    pxor %xmm3, %xmm2
2126; SSE2-NEXT:    pxor %xmm0, %xmm3
2127; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
2128; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
2129; SSE2-NEXT:    pxor %xmm3, %xmm2
2130; SSE2-NEXT:    pandn %xmm1, %xmm3
2131; SSE2-NEXT:    pandn %xmm0, %xmm2
2132; SSE2-NEXT:    por %xmm3, %xmm2
2133; SSE2-NEXT:    movdqa %xmm2, %xmm0
2134; SSE2-NEXT:    retq
2135;
2136; SSE4-LABEL: test70:
2137; SSE4:       # BB#0: # %entry
2138; SSE4-NEXT:    pmaxud %xmm1, %xmm0
2139; SSE4-NEXT:    retq
2140;
2141; AVX-LABEL: test70:
2142; AVX:       # BB#0: # %entry
2143; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
2144; AVX-NEXT:    retq
2145entry:
2146  %cmp = icmp ule <4 x i32> %a, %b
2147  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2148  ret <4 x i32> %sel
2149}
2150
2151define <4 x i32> @test71(<4 x i32> %a, <4 x i32> %b) {
2152; SSE2-LABEL: test71:
2153; SSE2:       # BB#0: # %entry
2154; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
2155; SSE2-NEXT:    movdqa %xmm1, %xmm3
2156; SSE2-NEXT:    pxor %xmm2, %xmm3
2157; SSE2-NEXT:    pxor %xmm0, %xmm2
2158; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
2159; SSE2-NEXT:    pand %xmm2, %xmm1
2160; SSE2-NEXT:    pandn %xmm0, %xmm2
2161; SSE2-NEXT:    por %xmm1, %xmm2
2162; SSE2-NEXT:    movdqa %xmm2, %xmm0
2163; SSE2-NEXT:    retq
2164;
2165; SSE4-LABEL: test71:
2166; SSE4:       # BB#0: # %entry
2167; SSE4-NEXT:    pminud %xmm1, %xmm0
2168; SSE4-NEXT:    retq
2169;
2170; AVX-LABEL: test71:
2171; AVX:       # BB#0: # %entry
2172; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2173; AVX-NEXT:    retq
2174entry:
2175  %cmp = icmp ugt <4 x i32> %a, %b
2176  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2177  ret <4 x i32> %sel
2178}
2179
2180define <4 x i32> @test72(<4 x i32> %a, <4 x i32> %b) {
2181; SSE2-LABEL: test72:
2182; SSE2:       # BB#0: # %entry
2183; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
2184; SSE2-NEXT:    movdqa %xmm0, %xmm2
2185; SSE2-NEXT:    pxor %xmm3, %xmm2
2186; SSE2-NEXT:    pxor %xmm1, %xmm3
2187; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
2188; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
2189; SSE2-NEXT:    pxor %xmm3, %xmm2
2190; SSE2-NEXT:    pandn %xmm1, %xmm3
2191; SSE2-NEXT:    pandn %xmm0, %xmm2
2192; SSE2-NEXT:    por %xmm3, %xmm2
2193; SSE2-NEXT:    movdqa %xmm2, %xmm0
2194; SSE2-NEXT:    retq
2195;
2196; SSE4-LABEL: test72:
2197; SSE4:       # BB#0: # %entry
2198; SSE4-NEXT:    pminud %xmm1, %xmm0
2199; SSE4-NEXT:    retq
2200;
2201; AVX-LABEL: test72:
2202; AVX:       # BB#0: # %entry
2203; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
2204; AVX-NEXT:    retq
2205entry:
2206  %cmp = icmp uge <4 x i32> %a, %b
2207  %sel = select <4 x i1> %cmp, <4 x i32> %b, <4 x i32> %a
2208  ret <4 x i32> %sel
2209}
2210
2211define <32 x i8> @test73(<32 x i8> %a, <32 x i8> %b) {
2212; SSE2-LABEL: test73:
2213; SSE2:       # BB#0: # %entry
2214; SSE2-NEXT:    movdqa %xmm3, %xmm4
2215; SSE2-NEXT:    pcmpgtb %xmm1, %xmm4
2216; SSE2-NEXT:    movdqa %xmm2, %xmm5
2217; SSE2-NEXT:    pcmpgtb %xmm0, %xmm5
2218; SSE2-NEXT:    pand %xmm5, %xmm2
2219; SSE2-NEXT:    pandn %xmm0, %xmm5
2220; SSE2-NEXT:    por %xmm2, %xmm5
2221; SSE2-NEXT:    pand %xmm4, %xmm3
2222; SSE2-NEXT:    pandn %xmm1, %xmm4
2223; SSE2-NEXT:    por %xmm3, %xmm4
2224; SSE2-NEXT:    movdqa %xmm5, %xmm0
2225; SSE2-NEXT:    movdqa %xmm4, %xmm1
2226; SSE2-NEXT:    retq
2227;
2228; SSE4-LABEL: test73:
2229; SSE4:       # BB#0: # %entry
2230; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2231; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2232; SSE4-NEXT:    retq
2233;
2234; AVX1-LABEL: test73:
2235; AVX1:       # BB#0: # %entry
2236; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2237; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2238; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2239; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2240; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2241; AVX1-NEXT:    retq
2242;
2243; AVX2-LABEL: test73:
2244; AVX2:       # BB#0: # %entry
2245; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2246; AVX2-NEXT:    retq
2247;
2248; AVX512F-LABEL: test73:
2249; AVX512F:       # BB#0: # %entry
2250; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2251; AVX512F-NEXT:    retq
2252entry:
2253  %cmp = icmp slt <32 x i8> %a, %b
2254  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2255  ret <32 x i8> %sel
2256}
2257
2258define <32 x i8> @test74(<32 x i8> %a, <32 x i8> %b) {
2259; SSE2-LABEL: test74:
2260; SSE2:       # BB#0: # %entry
2261; SSE2-NEXT:    movdqa %xmm1, %xmm6
2262; SSE2-NEXT:    pcmpgtb %xmm3, %xmm6
2263; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
2264; SSE2-NEXT:    movdqa %xmm6, %xmm4
2265; SSE2-NEXT:    pxor %xmm7, %xmm4
2266; SSE2-NEXT:    movdqa %xmm0, %xmm5
2267; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
2268; SSE2-NEXT:    pxor %xmm5, %xmm7
2269; SSE2-NEXT:    pandn %xmm2, %xmm5
2270; SSE2-NEXT:    pandn %xmm0, %xmm7
2271; SSE2-NEXT:    por %xmm7, %xmm5
2272; SSE2-NEXT:    pandn %xmm3, %xmm6
2273; SSE2-NEXT:    pandn %xmm1, %xmm4
2274; SSE2-NEXT:    por %xmm6, %xmm4
2275; SSE2-NEXT:    movdqa %xmm5, %xmm0
2276; SSE2-NEXT:    movdqa %xmm4, %xmm1
2277; SSE2-NEXT:    retq
2278;
2279; SSE4-LABEL: test74:
2280; SSE4:       # BB#0: # %entry
2281; SSE4-NEXT:    pmaxsb %xmm2, %xmm0
2282; SSE4-NEXT:    pmaxsb %xmm3, %xmm1
2283; SSE4-NEXT:    retq
2284;
2285; AVX1-LABEL: test74:
2286; AVX1:       # BB#0: # %entry
2287; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2288; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2289; AVX1-NEXT:    vpmaxsb %xmm2, %xmm3, %xmm2
2290; AVX1-NEXT:    vpmaxsb %xmm1, %xmm0, %xmm0
2291; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2292; AVX1-NEXT:    retq
2293;
2294; AVX2-LABEL: test74:
2295; AVX2:       # BB#0: # %entry
2296; AVX2-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2297; AVX2-NEXT:    retq
2298;
2299; AVX512F-LABEL: test74:
2300; AVX512F:       # BB#0: # %entry
2301; AVX512F-NEXT:    vpmaxsb %ymm1, %ymm0, %ymm0
2302; AVX512F-NEXT:    retq
2303entry:
2304  %cmp = icmp sle <32 x i8> %a, %b
2305  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2306  ret <32 x i8> %sel
2307}
2308
2309define <32 x i8> @test75(<32 x i8> %a, <32 x i8> %b) {
2310; SSE2-LABEL: test75:
2311; SSE2:       # BB#0: # %entry
2312; SSE2-NEXT:    movdqa %xmm1, %xmm4
2313; SSE2-NEXT:    pcmpgtb %xmm3, %xmm4
2314; SSE2-NEXT:    movdqa %xmm0, %xmm5
2315; SSE2-NEXT:    pcmpgtb %xmm2, %xmm5
2316; SSE2-NEXT:    pand %xmm5, %xmm2
2317; SSE2-NEXT:    pandn %xmm0, %xmm5
2318; SSE2-NEXT:    por %xmm2, %xmm5
2319; SSE2-NEXT:    pand %xmm4, %xmm3
2320; SSE2-NEXT:    pandn %xmm1, %xmm4
2321; SSE2-NEXT:    por %xmm3, %xmm4
2322; SSE2-NEXT:    movdqa %xmm5, %xmm0
2323; SSE2-NEXT:    movdqa %xmm4, %xmm1
2324; SSE2-NEXT:    retq
2325;
2326; SSE4-LABEL: test75:
2327; SSE4:       # BB#0: # %entry
2328; SSE4-NEXT:    pminsb %xmm2, %xmm0
2329; SSE4-NEXT:    pminsb %xmm3, %xmm1
2330; SSE4-NEXT:    retq
2331;
2332; AVX1-LABEL: test75:
2333; AVX1:       # BB#0: # %entry
2334; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2335; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2336; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2337; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2338; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2339; AVX1-NEXT:    retq
2340;
2341; AVX2-LABEL: test75:
2342; AVX2:       # BB#0: # %entry
2343; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2344; AVX2-NEXT:    retq
2345;
2346; AVX512F-LABEL: test75:
2347; AVX512F:       # BB#0: # %entry
2348; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2349; AVX512F-NEXT:    retq
2350entry:
2351  %cmp = icmp sgt <32 x i8> %a, %b
2352  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2353  ret <32 x i8> %sel
2354}
2355
2356define <32 x i8> @test76(<32 x i8> %a, <32 x i8> %b) {
2357; SSE2-LABEL: test76:
2358; SSE2:       # BB#0: # %entry
2359; SSE2-NEXT:    movdqa %xmm3, %xmm6
2360; SSE2-NEXT:    pcmpgtb %xmm1, %xmm6
2361; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
2362; SSE2-NEXT:    movdqa %xmm6, %xmm5
2363; SSE2-NEXT:    pxor %xmm4, %xmm5
2364; SSE2-NEXT:    movdqa %xmm2, %xmm7
2365; SSE2-NEXT:    pcmpgtb %xmm0, %xmm7
2366; SSE2-NEXT:    pxor %xmm7, %xmm4
2367; SSE2-NEXT:    pandn %xmm2, %xmm7
2368; SSE2-NEXT:    pandn %xmm0, %xmm4
2369; SSE2-NEXT:    por %xmm7, %xmm4
2370; SSE2-NEXT:    pandn %xmm3, %xmm6
2371; SSE2-NEXT:    pandn %xmm1, %xmm5
2372; SSE2-NEXT:    por %xmm6, %xmm5
2373; SSE2-NEXT:    movdqa %xmm4, %xmm0
2374; SSE2-NEXT:    movdqa %xmm5, %xmm1
2375; SSE2-NEXT:    retq
2376;
2377; SSE4-LABEL: test76:
2378; SSE4:       # BB#0: # %entry
2379; SSE4-NEXT:    pminsb %xmm2, %xmm0
2380; SSE4-NEXT:    pminsb %xmm3, %xmm1
2381; SSE4-NEXT:    retq
2382;
2383; AVX1-LABEL: test76:
2384; AVX1:       # BB#0: # %entry
2385; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2386; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2387; AVX1-NEXT:    vpminsb %xmm2, %xmm3, %xmm2
2388; AVX1-NEXT:    vpminsb %xmm1, %xmm0, %xmm0
2389; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2390; AVX1-NEXT:    retq
2391;
2392; AVX2-LABEL: test76:
2393; AVX2:       # BB#0: # %entry
2394; AVX2-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2395; AVX2-NEXT:    retq
2396;
2397; AVX512F-LABEL: test76:
2398; AVX512F:       # BB#0: # %entry
2399; AVX512F-NEXT:    vpminsb %ymm1, %ymm0, %ymm0
2400; AVX512F-NEXT:    retq
2401entry:
2402  %cmp = icmp sge <32 x i8> %a, %b
2403  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2404  ret <32 x i8> %sel
2405}
2406
2407define <32 x i8> @test77(<32 x i8> %a, <32 x i8> %b) {
2408; SSE-LABEL: test77:
2409; SSE:       # BB#0: # %entry
2410; SSE-NEXT:    pmaxub %xmm2, %xmm0
2411; SSE-NEXT:    pmaxub %xmm3, %xmm1
2412; SSE-NEXT:    retq
2413;
2414; AVX1-LABEL: test77:
2415; AVX1:       # BB#0: # %entry
2416; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2417; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2418; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2419; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2420; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2421; AVX1-NEXT:    retq
2422;
2423; AVX2-LABEL: test77:
2424; AVX2:       # BB#0: # %entry
2425; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2426; AVX2-NEXT:    retq
2427;
2428; AVX512F-LABEL: test77:
2429; AVX512F:       # BB#0: # %entry
2430; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2431; AVX512F-NEXT:    retq
2432entry:
2433  %cmp = icmp ult <32 x i8> %a, %b
2434  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2435  ret <32 x i8> %sel
2436}
2437
2438define <32 x i8> @test78(<32 x i8> %a, <32 x i8> %b) {
2439; SSE-LABEL: test78:
2440; SSE:       # BB#0: # %entry
2441; SSE-NEXT:    pmaxub %xmm2, %xmm0
2442; SSE-NEXT:    pmaxub %xmm3, %xmm1
2443; SSE-NEXT:    retq
2444;
2445; AVX1-LABEL: test78:
2446; AVX1:       # BB#0: # %entry
2447; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2448; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2449; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
2450; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
2451; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2452; AVX1-NEXT:    retq
2453;
2454; AVX2-LABEL: test78:
2455; AVX2:       # BB#0: # %entry
2456; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2457; AVX2-NEXT:    retq
2458;
2459; AVX512F-LABEL: test78:
2460; AVX512F:       # BB#0: # %entry
2461; AVX512F-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
2462; AVX512F-NEXT:    retq
2463entry:
2464  %cmp = icmp ule <32 x i8> %a, %b
2465  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2466  ret <32 x i8> %sel
2467}
2468
2469define <32 x i8> @test79(<32 x i8> %a, <32 x i8> %b) {
2470; SSE-LABEL: test79:
2471; SSE:       # BB#0: # %entry
2472; SSE-NEXT:    pminub %xmm2, %xmm0
2473; SSE-NEXT:    pminub %xmm3, %xmm1
2474; SSE-NEXT:    retq
2475;
2476; AVX1-LABEL: test79:
2477; AVX1:       # BB#0: # %entry
2478; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2479; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2480; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2481; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2482; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2483; AVX1-NEXT:    retq
2484;
2485; AVX2-LABEL: test79:
2486; AVX2:       # BB#0: # %entry
2487; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2488; AVX2-NEXT:    retq
2489;
2490; AVX512F-LABEL: test79:
2491; AVX512F:       # BB#0: # %entry
2492; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2493; AVX512F-NEXT:    retq
2494entry:
2495  %cmp = icmp ugt <32 x i8> %a, %b
2496  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2497  ret <32 x i8> %sel
2498}
2499
2500define <32 x i8> @test80(<32 x i8> %a, <32 x i8> %b) {
2501; SSE-LABEL: test80:
2502; SSE:       # BB#0: # %entry
2503; SSE-NEXT:    pminub %xmm2, %xmm0
2504; SSE-NEXT:    pminub %xmm3, %xmm1
2505; SSE-NEXT:    retq
2506;
2507; AVX1-LABEL: test80:
2508; AVX1:       # BB#0: # %entry
2509; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2510; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2511; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
2512; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
2513; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2514; AVX1-NEXT:    retq
2515;
2516; AVX2-LABEL: test80:
2517; AVX2:       # BB#0: # %entry
2518; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2519; AVX2-NEXT:    retq
2520;
2521; AVX512F-LABEL: test80:
2522; AVX512F:       # BB#0: # %entry
2523; AVX512F-NEXT:    vpminub %ymm1, %ymm0, %ymm0
2524; AVX512F-NEXT:    retq
2525entry:
2526  %cmp = icmp uge <32 x i8> %a, %b
2527  %sel = select <32 x i1> %cmp, <32 x i8> %b, <32 x i8> %a
2528  ret <32 x i8> %sel
2529}
2530
2531define <16 x i16> @test81(<16 x i16> %a, <16 x i16> %b) {
2532; SSE-LABEL: test81:
2533; SSE:       # BB#0: # %entry
2534; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2535; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2536; SSE-NEXT:    retq
2537;
2538; AVX1-LABEL: test81:
2539; AVX1:       # BB#0: # %entry
2540; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2541; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2542; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2543; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2544; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2545; AVX1-NEXT:    retq
2546;
2547; AVX2-LABEL: test81:
2548; AVX2:       # BB#0: # %entry
2549; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2550; AVX2-NEXT:    retq
2551;
2552; AVX512F-LABEL: test81:
2553; AVX512F:       # BB#0: # %entry
2554; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2555; AVX512F-NEXT:    retq
2556entry:
2557  %cmp = icmp slt <16 x i16> %a, %b
2558  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2559  ret <16 x i16> %sel
2560}
2561
2562define <16 x i16> @test82(<16 x i16> %a, <16 x i16> %b) {
2563; SSE-LABEL: test82:
2564; SSE:       # BB#0: # %entry
2565; SSE-NEXT:    pmaxsw %xmm2, %xmm0
2566; SSE-NEXT:    pmaxsw %xmm3, %xmm1
2567; SSE-NEXT:    retq
2568;
2569; AVX1-LABEL: test82:
2570; AVX1:       # BB#0: # %entry
2571; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2572; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2573; AVX1-NEXT:    vpmaxsw %xmm2, %xmm3, %xmm2
2574; AVX1-NEXT:    vpmaxsw %xmm1, %xmm0, %xmm0
2575; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2576; AVX1-NEXT:    retq
2577;
2578; AVX2-LABEL: test82:
2579; AVX2:       # BB#0: # %entry
2580; AVX2-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2581; AVX2-NEXT:    retq
2582;
2583; AVX512F-LABEL: test82:
2584; AVX512F:       # BB#0: # %entry
2585; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
2586; AVX512F-NEXT:    retq
2587entry:
2588  %cmp = icmp sle <16 x i16> %a, %b
2589  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2590  ret <16 x i16> %sel
2591}
2592
2593define <16 x i16> @test83(<16 x i16> %a, <16 x i16> %b) {
2594; SSE-LABEL: test83:
2595; SSE:       # BB#0: # %entry
2596; SSE-NEXT:    pminsw %xmm2, %xmm0
2597; SSE-NEXT:    pminsw %xmm3, %xmm1
2598; SSE-NEXT:    retq
2599;
2600; AVX1-LABEL: test83:
2601; AVX1:       # BB#0: # %entry
2602; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2603; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2604; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2605; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2606; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2607; AVX1-NEXT:    retq
2608;
2609; AVX2-LABEL: test83:
2610; AVX2:       # BB#0: # %entry
2611; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2612; AVX2-NEXT:    retq
2613;
2614; AVX512F-LABEL: test83:
2615; AVX512F:       # BB#0: # %entry
2616; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2617; AVX512F-NEXT:    retq
2618entry:
2619  %cmp = icmp sgt <16 x i16> %a, %b
2620  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2621  ret <16 x i16> %sel
2622}
2623
2624define <16 x i16> @test84(<16 x i16> %a, <16 x i16> %b) {
2625; SSE-LABEL: test84:
2626; SSE:       # BB#0: # %entry
2627; SSE-NEXT:    pminsw %xmm2, %xmm0
2628; SSE-NEXT:    pminsw %xmm3, %xmm1
2629; SSE-NEXT:    retq
2630;
2631; AVX1-LABEL: test84:
2632; AVX1:       # BB#0: # %entry
2633; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2634; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2635; AVX1-NEXT:    vpminsw %xmm2, %xmm3, %xmm2
2636; AVX1-NEXT:    vpminsw %xmm1, %xmm0, %xmm0
2637; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2638; AVX1-NEXT:    retq
2639;
2640; AVX2-LABEL: test84:
2641; AVX2:       # BB#0: # %entry
2642; AVX2-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2643; AVX2-NEXT:    retq
2644;
2645; AVX512F-LABEL: test84:
2646; AVX512F:       # BB#0: # %entry
2647; AVX512F-NEXT:    vpminsw %ymm1, %ymm0, %ymm0
2648; AVX512F-NEXT:    retq
2649entry:
2650  %cmp = icmp sge <16 x i16> %a, %b
2651  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2652  ret <16 x i16> %sel
2653}
2654
2655define <16 x i16> @test85(<16 x i16> %a, <16 x i16> %b) {
2656; SSE2-LABEL: test85:
2657; SSE2:       # BB#0: # %entry
2658; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2659; SSE2-NEXT:    movdqa %xmm1, %xmm6
2660; SSE2-NEXT:    pxor %xmm4, %xmm6
2661; SSE2-NEXT:    movdqa %xmm3, %xmm5
2662; SSE2-NEXT:    pxor %xmm4, %xmm5
2663; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
2664; SSE2-NEXT:    movdqa %xmm0, %xmm6
2665; SSE2-NEXT:    pxor %xmm4, %xmm6
2666; SSE2-NEXT:    pxor %xmm2, %xmm4
2667; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
2668; SSE2-NEXT:    pand %xmm4, %xmm2
2669; SSE2-NEXT:    pandn %xmm0, %xmm4
2670; SSE2-NEXT:    por %xmm2, %xmm4
2671; SSE2-NEXT:    pand %xmm5, %xmm3
2672; SSE2-NEXT:    pandn %xmm1, %xmm5
2673; SSE2-NEXT:    por %xmm3, %xmm5
2674; SSE2-NEXT:    movdqa %xmm4, %xmm0
2675; SSE2-NEXT:    movdqa %xmm5, %xmm1
2676; SSE2-NEXT:    retq
2677;
2678; SSE4-LABEL: test85:
2679; SSE4:       # BB#0: # %entry
2680; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2681; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2682; SSE4-NEXT:    retq
2683;
2684; AVX1-LABEL: test85:
2685; AVX1:       # BB#0: # %entry
2686; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2687; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2688; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2689; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2690; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2691; AVX1-NEXT:    retq
2692;
2693; AVX2-LABEL: test85:
2694; AVX2:       # BB#0: # %entry
2695; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2696; AVX2-NEXT:    retq
2697;
2698; AVX512F-LABEL: test85:
2699; AVX512F:       # BB#0: # %entry
2700; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2701; AVX512F-NEXT:    retq
2702entry:
2703  %cmp = icmp ult <16 x i16> %a, %b
2704  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2705  ret <16 x i16> %sel
2706}
2707
2708define <16 x i16> @test86(<16 x i16> %a, <16 x i16> %b) {
2709; SSE2-LABEL: test86:
2710; SSE2:       # BB#0: # %entry
2711; SSE2-NEXT:    movdqa %xmm1, %xmm4
2712; SSE2-NEXT:    psubusw %xmm3, %xmm4
2713; SSE2-NEXT:    pxor %xmm6, %xmm6
2714; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
2715; SSE2-NEXT:    movdqa %xmm0, %xmm5
2716; SSE2-NEXT:    psubusw %xmm2, %xmm5
2717; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
2718; SSE2-NEXT:    pand %xmm5, %xmm2
2719; SSE2-NEXT:    pandn %xmm0, %xmm5
2720; SSE2-NEXT:    por %xmm2, %xmm5
2721; SSE2-NEXT:    pand %xmm4, %xmm3
2722; SSE2-NEXT:    pandn %xmm1, %xmm4
2723; SSE2-NEXT:    por %xmm3, %xmm4
2724; SSE2-NEXT:    movdqa %xmm5, %xmm0
2725; SSE2-NEXT:    movdqa %xmm4, %xmm1
2726; SSE2-NEXT:    retq
2727;
2728; SSE4-LABEL: test86:
2729; SSE4:       # BB#0: # %entry
2730; SSE4-NEXT:    pmaxuw %xmm2, %xmm0
2731; SSE4-NEXT:    pmaxuw %xmm3, %xmm1
2732; SSE4-NEXT:    retq
2733;
2734; AVX1-LABEL: test86:
2735; AVX1:       # BB#0: # %entry
2736; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2737; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2738; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
2739; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
2740; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2741; AVX1-NEXT:    retq
2742;
2743; AVX2-LABEL: test86:
2744; AVX2:       # BB#0: # %entry
2745; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2746; AVX2-NEXT:    retq
2747;
2748; AVX512F-LABEL: test86:
2749; AVX512F:       # BB#0: # %entry
2750; AVX512F-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
2751; AVX512F-NEXT:    retq
2752entry:
2753  %cmp = icmp ule <16 x i16> %a, %b
2754  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2755  ret <16 x i16> %sel
2756}
2757
2758define <16 x i16> @test87(<16 x i16> %a, <16 x i16> %b) {
2759; SSE2-LABEL: test87:
2760; SSE2:       # BB#0: # %entry
2761; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
2762; SSE2-NEXT:    movdqa %xmm3, %xmm6
2763; SSE2-NEXT:    pxor %xmm4, %xmm6
2764; SSE2-NEXT:    movdqa %xmm1, %xmm5
2765; SSE2-NEXT:    pxor %xmm4, %xmm5
2766; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
2767; SSE2-NEXT:    movdqa %xmm2, %xmm6
2768; SSE2-NEXT:    pxor %xmm4, %xmm6
2769; SSE2-NEXT:    pxor %xmm0, %xmm4
2770; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
2771; SSE2-NEXT:    pand %xmm4, %xmm2
2772; SSE2-NEXT:    pandn %xmm0, %xmm4
2773; SSE2-NEXT:    por %xmm2, %xmm4
2774; SSE2-NEXT:    pand %xmm5, %xmm3
2775; SSE2-NEXT:    pandn %xmm1, %xmm5
2776; SSE2-NEXT:    por %xmm3, %xmm5
2777; SSE2-NEXT:    movdqa %xmm4, %xmm0
2778; SSE2-NEXT:    movdqa %xmm5, %xmm1
2779; SSE2-NEXT:    retq
2780;
2781; SSE4-LABEL: test87:
2782; SSE4:       # BB#0: # %entry
2783; SSE4-NEXT:    pminuw %xmm2, %xmm0
2784; SSE4-NEXT:    pminuw %xmm3, %xmm1
2785; SSE4-NEXT:    retq
2786;
2787; AVX1-LABEL: test87:
2788; AVX1:       # BB#0: # %entry
2789; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2790; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2791; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2792; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2793; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2794; AVX1-NEXT:    retq
2795;
2796; AVX2-LABEL: test87:
2797; AVX2:       # BB#0: # %entry
2798; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2799; AVX2-NEXT:    retq
2800;
2801; AVX512F-LABEL: test87:
2802; AVX512F:       # BB#0: # %entry
2803; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2804; AVX512F-NEXT:    retq
2805entry:
2806  %cmp = icmp ugt <16 x i16> %a, %b
2807  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2808  ret <16 x i16> %sel
2809}
2810
2811define <16 x i16> @test88(<16 x i16> %a, <16 x i16> %b) {
2812; SSE2-LABEL: test88:
2813; SSE2:       # BB#0: # %entry
2814; SSE2-NEXT:    movdqa %xmm3, %xmm4
2815; SSE2-NEXT:    psubusw %xmm1, %xmm4
2816; SSE2-NEXT:    pxor %xmm6, %xmm6
2817; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
2818; SSE2-NEXT:    movdqa %xmm2, %xmm5
2819; SSE2-NEXT:    psubusw %xmm0, %xmm5
2820; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
2821; SSE2-NEXT:    pand %xmm5, %xmm2
2822; SSE2-NEXT:    pandn %xmm0, %xmm5
2823; SSE2-NEXT:    por %xmm2, %xmm5
2824; SSE2-NEXT:    pand %xmm4, %xmm3
2825; SSE2-NEXT:    pandn %xmm1, %xmm4
2826; SSE2-NEXT:    por %xmm3, %xmm4
2827; SSE2-NEXT:    movdqa %xmm5, %xmm0
2828; SSE2-NEXT:    movdqa %xmm4, %xmm1
2829; SSE2-NEXT:    retq
2830;
2831; SSE4-LABEL: test88:
2832; SSE4:       # BB#0: # %entry
2833; SSE4-NEXT:    pminuw %xmm2, %xmm0
2834; SSE4-NEXT:    pminuw %xmm3, %xmm1
2835; SSE4-NEXT:    retq
2836;
2837; AVX1-LABEL: test88:
2838; AVX1:       # BB#0: # %entry
2839; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2840; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2841; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
2842; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
2843; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2844; AVX1-NEXT:    retq
2845;
2846; AVX2-LABEL: test88:
2847; AVX2:       # BB#0: # %entry
2848; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2849; AVX2-NEXT:    retq
2850;
2851; AVX512F-LABEL: test88:
2852; AVX512F:       # BB#0: # %entry
2853; AVX512F-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
2854; AVX512F-NEXT:    retq
2855entry:
2856  %cmp = icmp uge <16 x i16> %a, %b
2857  %sel = select <16 x i1> %cmp, <16 x i16> %b, <16 x i16> %a
2858  ret <16 x i16> %sel
2859}
2860
2861define <8 x i32> @test89(<8 x i32> %a, <8 x i32> %b) {
2862; SSE2-LABEL: test89:
2863; SSE2:       # BB#0: # %entry
2864; SSE2-NEXT:    movdqa %xmm3, %xmm4
2865; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
2866; SSE2-NEXT:    movdqa %xmm2, %xmm5
2867; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
2868; SSE2-NEXT:    pand %xmm5, %xmm2
2869; SSE2-NEXT:    pandn %xmm0, %xmm5
2870; SSE2-NEXT:    por %xmm2, %xmm5
2871; SSE2-NEXT:    pand %xmm4, %xmm3
2872; SSE2-NEXT:    pandn %xmm1, %xmm4
2873; SSE2-NEXT:    por %xmm3, %xmm4
2874; SSE2-NEXT:    movdqa %xmm5, %xmm0
2875; SSE2-NEXT:    movdqa %xmm4, %xmm1
2876; SSE2-NEXT:    retq
2877;
2878; SSE4-LABEL: test89:
2879; SSE4:       # BB#0: # %entry
2880; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2881; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2882; SSE4-NEXT:    retq
2883;
2884; AVX1-LABEL: test89:
2885; AVX1:       # BB#0: # %entry
2886; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2887; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2888; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2889; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2890; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2891; AVX1-NEXT:    retq
2892;
2893; AVX2-LABEL: test89:
2894; AVX2:       # BB#0: # %entry
2895; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2896; AVX2-NEXT:    retq
2897;
2898; AVX512F-LABEL: test89:
2899; AVX512F:       # BB#0: # %entry
2900; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2901; AVX512F-NEXT:    retq
2902entry:
2903  %cmp = icmp slt <8 x i32> %a, %b
2904  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2905  ret <8 x i32> %sel
2906}
2907
2908define <8 x i32> @test90(<8 x i32> %a, <8 x i32> %b) {
2909; SSE2-LABEL: test90:
2910; SSE2:       # BB#0: # %entry
2911; SSE2-NEXT:    movdqa %xmm1, %xmm6
2912; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
2913; SSE2-NEXT:    pcmpeqd %xmm7, %xmm7
2914; SSE2-NEXT:    movdqa %xmm6, %xmm4
2915; SSE2-NEXT:    pxor %xmm7, %xmm4
2916; SSE2-NEXT:    movdqa %xmm0, %xmm5
2917; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
2918; SSE2-NEXT:    pxor %xmm5, %xmm7
2919; SSE2-NEXT:    pandn %xmm2, %xmm5
2920; SSE2-NEXT:    pandn %xmm0, %xmm7
2921; SSE2-NEXT:    por %xmm7, %xmm5
2922; SSE2-NEXT:    pandn %xmm3, %xmm6
2923; SSE2-NEXT:    pandn %xmm1, %xmm4
2924; SSE2-NEXT:    por %xmm6, %xmm4
2925; SSE2-NEXT:    movdqa %xmm5, %xmm0
2926; SSE2-NEXT:    movdqa %xmm4, %xmm1
2927; SSE2-NEXT:    retq
2928;
2929; SSE4-LABEL: test90:
2930; SSE4:       # BB#0: # %entry
2931; SSE4-NEXT:    pmaxsd %xmm2, %xmm0
2932; SSE4-NEXT:    pmaxsd %xmm3, %xmm1
2933; SSE4-NEXT:    retq
2934;
2935; AVX1-LABEL: test90:
2936; AVX1:       # BB#0: # %entry
2937; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2938; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2939; AVX1-NEXT:    vpmaxsd %xmm2, %xmm3, %xmm2
2940; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
2941; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2942; AVX1-NEXT:    retq
2943;
2944; AVX2-LABEL: test90:
2945; AVX2:       # BB#0: # %entry
2946; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2947; AVX2-NEXT:    retq
2948;
2949; AVX512F-LABEL: test90:
2950; AVX512F:       # BB#0: # %entry
2951; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
2952; AVX512F-NEXT:    retq
2953entry:
2954  %cmp = icmp sle <8 x i32> %a, %b
2955  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
2956  ret <8 x i32> %sel
2957}
2958
2959define <8 x i32> @test91(<8 x i32> %a, <8 x i32> %b) {
2960; SSE2-LABEL: test91:
2961; SSE2:       # BB#0: # %entry
2962; SSE2-NEXT:    movdqa %xmm1, %xmm4
2963; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
2964; SSE2-NEXT:    movdqa %xmm0, %xmm5
2965; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
2966; SSE2-NEXT:    pand %xmm5, %xmm2
2967; SSE2-NEXT:    pandn %xmm0, %xmm5
2968; SSE2-NEXT:    por %xmm2, %xmm5
2969; SSE2-NEXT:    pand %xmm4, %xmm3
2970; SSE2-NEXT:    pandn %xmm1, %xmm4
2971; SSE2-NEXT:    por %xmm3, %xmm4
2972; SSE2-NEXT:    movdqa %xmm5, %xmm0
2973; SSE2-NEXT:    movdqa %xmm4, %xmm1
2974; SSE2-NEXT:    retq
2975;
2976; SSE4-LABEL: test91:
2977; SSE4:       # BB#0: # %entry
2978; SSE4-NEXT:    pminsd %xmm2, %xmm0
2979; SSE4-NEXT:    pminsd %xmm3, %xmm1
2980; SSE4-NEXT:    retq
2981;
2982; AVX1-LABEL: test91:
2983; AVX1:       # BB#0: # %entry
2984; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
2985; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
2986; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
2987; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
2988; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
2989; AVX1-NEXT:    retq
2990;
2991; AVX2-LABEL: test91:
2992; AVX2:       # BB#0: # %entry
2993; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2994; AVX2-NEXT:    retq
2995;
2996; AVX512F-LABEL: test91:
2997; AVX512F:       # BB#0: # %entry
2998; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
2999; AVX512F-NEXT:    retq
3000entry:
3001  %cmp = icmp sgt <8 x i32> %a, %b
3002  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3003  ret <8 x i32> %sel
3004}
3005
3006define <8 x i32> @test92(<8 x i32> %a, <8 x i32> %b) {
3007; SSE2-LABEL: test92:
3008; SSE2:       # BB#0: # %entry
3009; SSE2-NEXT:    movdqa %xmm3, %xmm6
3010; SSE2-NEXT:    pcmpgtd %xmm1, %xmm6
3011; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
3012; SSE2-NEXT:    movdqa %xmm6, %xmm5
3013; SSE2-NEXT:    pxor %xmm4, %xmm5
3014; SSE2-NEXT:    movdqa %xmm2, %xmm7
3015; SSE2-NEXT:    pcmpgtd %xmm0, %xmm7
3016; SSE2-NEXT:    pxor %xmm7, %xmm4
3017; SSE2-NEXT:    pandn %xmm2, %xmm7
3018; SSE2-NEXT:    pandn %xmm0, %xmm4
3019; SSE2-NEXT:    por %xmm7, %xmm4
3020; SSE2-NEXT:    pandn %xmm3, %xmm6
3021; SSE2-NEXT:    pandn %xmm1, %xmm5
3022; SSE2-NEXT:    por %xmm6, %xmm5
3023; SSE2-NEXT:    movdqa %xmm4, %xmm0
3024; SSE2-NEXT:    movdqa %xmm5, %xmm1
3025; SSE2-NEXT:    retq
3026;
3027; SSE4-LABEL: test92:
3028; SSE4:       # BB#0: # %entry
3029; SSE4-NEXT:    pminsd %xmm2, %xmm0
3030; SSE4-NEXT:    pminsd %xmm3, %xmm1
3031; SSE4-NEXT:    retq
3032;
3033; AVX1-LABEL: test92:
3034; AVX1:       # BB#0: # %entry
3035; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3036; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3037; AVX1-NEXT:    vpminsd %xmm2, %xmm3, %xmm2
3038; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
3039; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3040; AVX1-NEXT:    retq
3041;
3042; AVX2-LABEL: test92:
3043; AVX2:       # BB#0: # %entry
3044; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
3045; AVX2-NEXT:    retq
3046;
3047; AVX512F-LABEL: test92:
3048; AVX512F:       # BB#0: # %entry
3049; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
3050; AVX512F-NEXT:    retq
3051entry:
3052  %cmp = icmp sge <8 x i32> %a, %b
3053  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3054  ret <8 x i32> %sel
3055}
3056
3057define <8 x i32> @test93(<8 x i32> %a, <8 x i32> %b) {
3058; SSE2-LABEL: test93:
3059; SSE2:       # BB#0: # %entry
3060; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
3061; SSE2-NEXT:    movdqa %xmm1, %xmm6
3062; SSE2-NEXT:    pxor %xmm4, %xmm6
3063; SSE2-NEXT:    movdqa %xmm3, %xmm5
3064; SSE2-NEXT:    pxor %xmm4, %xmm5
3065; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
3066; SSE2-NEXT:    movdqa %xmm0, %xmm6
3067; SSE2-NEXT:    pxor %xmm4, %xmm6
3068; SSE2-NEXT:    pxor %xmm2, %xmm4
3069; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
3070; SSE2-NEXT:    pand %xmm4, %xmm2
3071; SSE2-NEXT:    pandn %xmm0, %xmm4
3072; SSE2-NEXT:    por %xmm2, %xmm4
3073; SSE2-NEXT:    pand %xmm5, %xmm3
3074; SSE2-NEXT:    pandn %xmm1, %xmm5
3075; SSE2-NEXT:    por %xmm3, %xmm5
3076; SSE2-NEXT:    movdqa %xmm4, %xmm0
3077; SSE2-NEXT:    movdqa %xmm5, %xmm1
3078; SSE2-NEXT:    retq
3079;
3080; SSE4-LABEL: test93:
3081; SSE4:       # BB#0: # %entry
3082; SSE4-NEXT:    pmaxud %xmm2, %xmm0
3083; SSE4-NEXT:    pmaxud %xmm3, %xmm1
3084; SSE4-NEXT:    retq
3085;
3086; AVX1-LABEL: test93:
3087; AVX1:       # BB#0: # %entry
3088; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3089; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3090; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
3091; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
3092; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3093; AVX1-NEXT:    retq
3094;
3095; AVX2-LABEL: test93:
3096; AVX2:       # BB#0: # %entry
3097; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
3098; AVX2-NEXT:    retq
3099;
3100; AVX512F-LABEL: test93:
3101; AVX512F:       # BB#0: # %entry
3102; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
3103; AVX512F-NEXT:    retq
3104entry:
3105  %cmp = icmp ult <8 x i32> %a, %b
3106  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3107  ret <8 x i32> %sel
3108}
3109
3110define <8 x i32> @test94(<8 x i32> %a, <8 x i32> %b) {
3111; SSE2-LABEL: test94:
3112; SSE2:       # BB#0: # %entry
3113; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
3114; SSE2-NEXT:    movdqa %xmm3, %xmm4
3115; SSE2-NEXT:    pxor %xmm6, %xmm4
3116; SSE2-NEXT:    movdqa %xmm1, %xmm7
3117; SSE2-NEXT:    pxor %xmm6, %xmm7
3118; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
3119; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
3120; SSE2-NEXT:    movdqa %xmm7, %xmm5
3121; SSE2-NEXT:    pxor %xmm4, %xmm5
3122; SSE2-NEXT:    movdqa %xmm2, %xmm8
3123; SSE2-NEXT:    pxor %xmm6, %xmm8
3124; SSE2-NEXT:    pxor %xmm0, %xmm6
3125; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
3126; SSE2-NEXT:    pxor %xmm6, %xmm4
3127; SSE2-NEXT:    pandn %xmm2, %xmm6
3128; SSE2-NEXT:    pandn %xmm0, %xmm4
3129; SSE2-NEXT:    por %xmm6, %xmm4
3130; SSE2-NEXT:    pandn %xmm3, %xmm7
3131; SSE2-NEXT:    pandn %xmm1, %xmm5
3132; SSE2-NEXT:    por %xmm7, %xmm5
3133; SSE2-NEXT:    movdqa %xmm4, %xmm0
3134; SSE2-NEXT:    movdqa %xmm5, %xmm1
3135; SSE2-NEXT:    retq
3136;
3137; SSE4-LABEL: test94:
3138; SSE4:       # BB#0: # %entry
3139; SSE4-NEXT:    pmaxud %xmm2, %xmm0
3140; SSE4-NEXT:    pmaxud %xmm3, %xmm1
3141; SSE4-NEXT:    retq
3142;
3143; AVX1-LABEL: test94:
3144; AVX1:       # BB#0: # %entry
3145; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3146; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3147; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
3148; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
3149; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3150; AVX1-NEXT:    retq
3151;
3152; AVX2-LABEL: test94:
3153; AVX2:       # BB#0: # %entry
3154; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
3155; AVX2-NEXT:    retq
3156;
3157; AVX512F-LABEL: test94:
3158; AVX512F:       # BB#0: # %entry
3159; AVX512F-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
3160; AVX512F-NEXT:    retq
3161entry:
3162  %cmp = icmp ule <8 x i32> %a, %b
3163  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3164  ret <8 x i32> %sel
3165}
3166
3167define <8 x i32> @test95(<8 x i32> %a, <8 x i32> %b) {
3168; SSE2-LABEL: test95:
3169; SSE2:       # BB#0: # %entry
3170; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
3171; SSE2-NEXT:    movdqa %xmm3, %xmm6
3172; SSE2-NEXT:    pxor %xmm4, %xmm6
3173; SSE2-NEXT:    movdqa %xmm1, %xmm5
3174; SSE2-NEXT:    pxor %xmm4, %xmm5
3175; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
3176; SSE2-NEXT:    movdqa %xmm2, %xmm6
3177; SSE2-NEXT:    pxor %xmm4, %xmm6
3178; SSE2-NEXT:    pxor %xmm0, %xmm4
3179; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
3180; SSE2-NEXT:    pand %xmm4, %xmm2
3181; SSE2-NEXT:    pandn %xmm0, %xmm4
3182; SSE2-NEXT:    por %xmm2, %xmm4
3183; SSE2-NEXT:    pand %xmm5, %xmm3
3184; SSE2-NEXT:    pandn %xmm1, %xmm5
3185; SSE2-NEXT:    por %xmm3, %xmm5
3186; SSE2-NEXT:    movdqa %xmm4, %xmm0
3187; SSE2-NEXT:    movdqa %xmm5, %xmm1
3188; SSE2-NEXT:    retq
3189;
3190; SSE4-LABEL: test95:
3191; SSE4:       # BB#0: # %entry
3192; SSE4-NEXT:    pminud %xmm2, %xmm0
3193; SSE4-NEXT:    pminud %xmm3, %xmm1
3194; SSE4-NEXT:    retq
3195;
3196; AVX1-LABEL: test95:
3197; AVX1:       # BB#0: # %entry
3198; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3199; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3200; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
3201; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
3202; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3203; AVX1-NEXT:    retq
3204;
3205; AVX2-LABEL: test95:
3206; AVX2:       # BB#0: # %entry
3207; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3208; AVX2-NEXT:    retq
3209;
3210; AVX512F-LABEL: test95:
3211; AVX512F:       # BB#0: # %entry
3212; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3213; AVX512F-NEXT:    retq
3214entry:
3215  %cmp = icmp ugt <8 x i32> %a, %b
3216  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3217  ret <8 x i32> %sel
3218}
3219
3220define <8 x i32> @test96(<8 x i32> %a, <8 x i32> %b) {
3221; SSE2-LABEL: test96:
3222; SSE2:       # BB#0: # %entry
3223; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
3224; SSE2-NEXT:    movdqa %xmm1, %xmm4
3225; SSE2-NEXT:    pxor %xmm6, %xmm4
3226; SSE2-NEXT:    movdqa %xmm3, %xmm7
3227; SSE2-NEXT:    pxor %xmm6, %xmm7
3228; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
3229; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
3230; SSE2-NEXT:    movdqa %xmm7, %xmm5
3231; SSE2-NEXT:    pxor %xmm4, %xmm5
3232; SSE2-NEXT:    movdqa %xmm0, %xmm8
3233; SSE2-NEXT:    pxor %xmm6, %xmm8
3234; SSE2-NEXT:    pxor %xmm2, %xmm6
3235; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
3236; SSE2-NEXT:    pxor %xmm6, %xmm4
3237; SSE2-NEXT:    pandn %xmm2, %xmm6
3238; SSE2-NEXT:    pandn %xmm0, %xmm4
3239; SSE2-NEXT:    por %xmm6, %xmm4
3240; SSE2-NEXT:    pandn %xmm3, %xmm7
3241; SSE2-NEXT:    pandn %xmm1, %xmm5
3242; SSE2-NEXT:    por %xmm7, %xmm5
3243; SSE2-NEXT:    movdqa %xmm4, %xmm0
3244; SSE2-NEXT:    movdqa %xmm5, %xmm1
3245; SSE2-NEXT:    retq
3246;
3247; SSE4-LABEL: test96:
3248; SSE4:       # BB#0: # %entry
3249; SSE4-NEXT:    pminud %xmm2, %xmm0
3250; SSE4-NEXT:    pminud %xmm3, %xmm1
3251; SSE4-NEXT:    retq
3252;
3253; AVX1-LABEL: test96:
3254; AVX1:       # BB#0: # %entry
3255; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
3256; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
3257; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
3258; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
3259; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
3260; AVX1-NEXT:    retq
3261;
3262; AVX2-LABEL: test96:
3263; AVX2:       # BB#0: # %entry
3264; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3265; AVX2-NEXT:    retq
3266;
3267; AVX512F-LABEL: test96:
3268; AVX512F:       # BB#0: # %entry
3269; AVX512F-NEXT:    vpminud %ymm1, %ymm0, %ymm0
3270; AVX512F-NEXT:    retq
3271entry:
3272  %cmp = icmp uge <8 x i32> %a, %b
3273  %sel = select <8 x i1> %cmp, <8 x i32> %b, <8 x i32> %a
3274  ret <8 x i32> %sel
3275}
3276
3277; ----------------------------
3278
3279define <64 x i8> @test97(<64 x i8> %a, <64 x i8> %b) {
3280; SSE2-LABEL: test97:
3281; SSE2:       # BB#0: # %entry
3282; SSE2-NEXT:    movdqa %xmm7, %xmm8
3283; SSE2-NEXT:    pcmpgtb %xmm3, %xmm8
3284; SSE2-NEXT:    movdqa %xmm6, %xmm9
3285; SSE2-NEXT:    pcmpgtb %xmm2, %xmm9
3286; SSE2-NEXT:    movdqa %xmm5, %xmm10
3287; SSE2-NEXT:    pcmpgtb %xmm1, %xmm10
3288; SSE2-NEXT:    movdqa %xmm4, %xmm11
3289; SSE2-NEXT:    pcmpgtb %xmm0, %xmm11
3290; SSE2-NEXT:    pand %xmm11, %xmm0
3291; SSE2-NEXT:    pandn %xmm4, %xmm11
3292; SSE2-NEXT:    por %xmm11, %xmm0
3293; SSE2-NEXT:    pand %xmm10, %xmm1
3294; SSE2-NEXT:    pandn %xmm5, %xmm10
3295; SSE2-NEXT:    por %xmm10, %xmm1
3296; SSE2-NEXT:    pand %xmm9, %xmm2
3297; SSE2-NEXT:    pandn %xmm6, %xmm9
3298; SSE2-NEXT:    por %xmm9, %xmm2
3299; SSE2-NEXT:    pand %xmm8, %xmm3
3300; SSE2-NEXT:    pandn %xmm7, %xmm8
3301; SSE2-NEXT:    por %xmm8, %xmm3
3302; SSE2-NEXT:    retq
3303;
3304; SSE4-LABEL: test97:
3305; SSE4:       # BB#0: # %entry
3306; SSE4-NEXT:    pminsb %xmm4, %xmm0
3307; SSE4-NEXT:    pminsb %xmm5, %xmm1
3308; SSE4-NEXT:    pminsb %xmm6, %xmm2
3309; SSE4-NEXT:    pminsb %xmm7, %xmm3
3310; SSE4-NEXT:    retq
3311;
3312; AVX1-LABEL: test97:
3313; AVX1:       # BB#0: # %entry
3314; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3315; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3316; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3317; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3318; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3319; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3320; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3321; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3322; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3323; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3324; AVX1-NEXT:    retq
3325;
3326; AVX2-LABEL: test97:
3327; AVX2:       # BB#0: # %entry
3328; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3329; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3330; AVX2-NEXT:    retq
3331;
3332; AVX512BW-LABEL: test97:
3333; AVX512BW:       # BB#0: # %entry
3334; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3335; AVX512BW-NEXT:    retq
3336entry:
3337  %cmp = icmp slt <64 x i8> %a, %b
3338  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3339  ret <64 x i8> %sel
3340}
3341
3342define <64 x i8> @test98(<64 x i8> %a, <64 x i8> %b) {
3343; SSE2-LABEL: test98:
3344; SSE2:       # BB#0: # %entry
3345; SSE2-NEXT:    movdqa %xmm3, %xmm8
3346; SSE2-NEXT:    movdqa %xmm2, %xmm9
3347; SSE2-NEXT:    movdqa %xmm8, %xmm12
3348; SSE2-NEXT:    pcmpgtb %xmm7, %xmm12
3349; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
3350; SSE2-NEXT:    movdqa %xmm12, %xmm3
3351; SSE2-NEXT:    pxor %xmm13, %xmm3
3352; SSE2-NEXT:    movdqa %xmm9, %xmm14
3353; SSE2-NEXT:    pcmpgtb %xmm6, %xmm14
3354; SSE2-NEXT:    movdqa %xmm14, %xmm2
3355; SSE2-NEXT:    pxor %xmm13, %xmm2
3356; SSE2-NEXT:    movdqa %xmm1, %xmm15
3357; SSE2-NEXT:    pcmpgtb %xmm5, %xmm15
3358; SSE2-NEXT:    movdqa %xmm15, %xmm10
3359; SSE2-NEXT:    pxor %xmm13, %xmm10
3360; SSE2-NEXT:    movdqa %xmm0, %xmm11
3361; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
3362; SSE2-NEXT:    pxor %xmm11, %xmm13
3363; SSE2-NEXT:    pandn %xmm0, %xmm11
3364; SSE2-NEXT:    pandn %xmm4, %xmm13
3365; SSE2-NEXT:    por %xmm13, %xmm11
3366; SSE2-NEXT:    pandn %xmm1, %xmm15
3367; SSE2-NEXT:    pandn %xmm5, %xmm10
3368; SSE2-NEXT:    por %xmm15, %xmm10
3369; SSE2-NEXT:    pandn %xmm9, %xmm14
3370; SSE2-NEXT:    pandn %xmm6, %xmm2
3371; SSE2-NEXT:    por %xmm14, %xmm2
3372; SSE2-NEXT:    pandn %xmm8, %xmm12
3373; SSE2-NEXT:    pandn %xmm7, %xmm3
3374; SSE2-NEXT:    por %xmm12, %xmm3
3375; SSE2-NEXT:    movdqa %xmm11, %xmm0
3376; SSE2-NEXT:    movdqa %xmm10, %xmm1
3377; SSE2-NEXT:    retq
3378;
3379; SSE4-LABEL: test98:
3380; SSE4:       # BB#0: # %entry
3381; SSE4-NEXT:    pminsb %xmm4, %xmm0
3382; SSE4-NEXT:    pminsb %xmm5, %xmm1
3383; SSE4-NEXT:    pminsb %xmm6, %xmm2
3384; SSE4-NEXT:    pminsb %xmm7, %xmm3
3385; SSE4-NEXT:    retq
3386;
3387; AVX1-LABEL: test98:
3388; AVX1:       # BB#0: # %entry
3389; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3390; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3391; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
3392; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
3393; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3394; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3395; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3396; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
3397; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
3398; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3399; AVX1-NEXT:    retq
3400;
3401; AVX2-LABEL: test98:
3402; AVX2:       # BB#0: # %entry
3403; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
3404; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
3405; AVX2-NEXT:    retq
3406;
3407; AVX512BW-LABEL: test98:
3408; AVX512BW:       # BB#0: # %entry
3409; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
3410; AVX512BW-NEXT:    retq
3411entry:
3412  %cmp = icmp sle <64 x i8> %a, %b
3413  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3414  ret <64 x i8> %sel
3415}
3416
3417define <64 x i8> @test99(<64 x i8> %a, <64 x i8> %b) {
3418; SSE2-LABEL: test99:
3419; SSE2:       # BB#0: # %entry
3420; SSE2-NEXT:    movdqa %xmm3, %xmm8
3421; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
3422; SSE2-NEXT:    movdqa %xmm2, %xmm9
3423; SSE2-NEXT:    pcmpgtb %xmm6, %xmm9
3424; SSE2-NEXT:    movdqa %xmm1, %xmm10
3425; SSE2-NEXT:    pcmpgtb %xmm5, %xmm10
3426; SSE2-NEXT:    movdqa %xmm0, %xmm11
3427; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
3428; SSE2-NEXT:    pand %xmm11, %xmm0
3429; SSE2-NEXT:    pandn %xmm4, %xmm11
3430; SSE2-NEXT:    por %xmm0, %xmm11
3431; SSE2-NEXT:    pand %xmm10, %xmm1
3432; SSE2-NEXT:    pandn %xmm5, %xmm10
3433; SSE2-NEXT:    por %xmm1, %xmm10
3434; SSE2-NEXT:    pand %xmm9, %xmm2
3435; SSE2-NEXT:    pandn %xmm6, %xmm9
3436; SSE2-NEXT:    por %xmm2, %xmm9
3437; SSE2-NEXT:    pand %xmm3, %xmm8
3438; SSE2-NEXT:    pandn %xmm7, %xmm3
3439; SSE2-NEXT:    por %xmm8, %xmm3
3440; SSE2-NEXT:    movdqa %xmm11, %xmm0
3441; SSE2-NEXT:    movdqa %xmm10, %xmm1
3442; SSE2-NEXT:    movdqa %xmm9, %xmm2
3443; SSE2-NEXT:    retq
3444;
3445; SSE4-LABEL: test99:
3446; SSE4:       # BB#0: # %entry
3447; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3448; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3449; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3450; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3451; SSE4-NEXT:    retq
3452;
3453; AVX1-LABEL: test99:
3454; AVX1:       # BB#0: # %entry
3455; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3456; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3457; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3458; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3459; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3460; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3461; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3462; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3463; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3464; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3465; AVX1-NEXT:    retq
3466;
3467; AVX2-LABEL: test99:
3468; AVX2:       # BB#0: # %entry
3469; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3470; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3471; AVX2-NEXT:    retq
3472;
3473; AVX512BW-LABEL: test99:
3474; AVX512BW:       # BB#0: # %entry
3475; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3476; AVX512BW-NEXT:    retq
3477entry:
3478  %cmp = icmp sgt <64 x i8> %a, %b
3479  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3480  ret <64 x i8> %sel
3481}
3482
3483define <64 x i8> @test100(<64 x i8> %a, <64 x i8> %b) {
3484; SSE2-LABEL: test100:
3485; SSE2:       # BB#0: # %entry
3486; SSE2-NEXT:    movdqa %xmm3, %xmm8
3487; SSE2-NEXT:    movdqa %xmm2, %xmm9
3488; SSE2-NEXT:    movdqa %xmm0, %xmm10
3489; SSE2-NEXT:    movdqa %xmm7, %xmm12
3490; SSE2-NEXT:    pcmpgtb %xmm8, %xmm12
3491; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
3492; SSE2-NEXT:    movdqa %xmm12, %xmm3
3493; SSE2-NEXT:    pxor %xmm0, %xmm3
3494; SSE2-NEXT:    movdqa %xmm6, %xmm13
3495; SSE2-NEXT:    pcmpgtb %xmm9, %xmm13
3496; SSE2-NEXT:    movdqa %xmm13, %xmm2
3497; SSE2-NEXT:    pxor %xmm0, %xmm2
3498; SSE2-NEXT:    movdqa %xmm5, %xmm14
3499; SSE2-NEXT:    pcmpgtb %xmm1, %xmm14
3500; SSE2-NEXT:    movdqa %xmm14, %xmm11
3501; SSE2-NEXT:    pxor %xmm0, %xmm11
3502; SSE2-NEXT:    movdqa %xmm4, %xmm15
3503; SSE2-NEXT:    pcmpgtb %xmm10, %xmm15
3504; SSE2-NEXT:    pxor %xmm15, %xmm0
3505; SSE2-NEXT:    pandn %xmm10, %xmm15
3506; SSE2-NEXT:    pandn %xmm4, %xmm0
3507; SSE2-NEXT:    por %xmm15, %xmm0
3508; SSE2-NEXT:    pandn %xmm1, %xmm14
3509; SSE2-NEXT:    pandn %xmm5, %xmm11
3510; SSE2-NEXT:    por %xmm14, %xmm11
3511; SSE2-NEXT:    pandn %xmm9, %xmm13
3512; SSE2-NEXT:    pandn %xmm6, %xmm2
3513; SSE2-NEXT:    por %xmm13, %xmm2
3514; SSE2-NEXT:    pandn %xmm8, %xmm12
3515; SSE2-NEXT:    pandn %xmm7, %xmm3
3516; SSE2-NEXT:    por %xmm12, %xmm3
3517; SSE2-NEXT:    movdqa %xmm11, %xmm1
3518; SSE2-NEXT:    retq
3519;
3520; SSE4-LABEL: test100:
3521; SSE4:       # BB#0: # %entry
3522; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
3523; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
3524; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
3525; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
3526; SSE4-NEXT:    retq
3527;
3528; AVX1-LABEL: test100:
3529; AVX1:       # BB#0: # %entry
3530; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3531; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3532; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
3533; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
3534; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3535; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3536; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3537; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
3538; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
3539; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3540; AVX1-NEXT:    retq
3541;
3542; AVX2-LABEL: test100:
3543; AVX2:       # BB#0: # %entry
3544; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
3545; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
3546; AVX2-NEXT:    retq
3547;
3548; AVX512BW-LABEL: test100:
3549; AVX512BW:       # BB#0: # %entry
3550; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
3551; AVX512BW-NEXT:    retq
3552entry:
3553  %cmp = icmp sge <64 x i8> %a, %b
3554  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3555  ret <64 x i8> %sel
3556}
3557
3558define <64 x i8> @test101(<64 x i8> %a, <64 x i8> %b) {
3559; SSE-LABEL: test101:
3560; SSE:       # BB#0: # %entry
3561; SSE-NEXT:    pminub %xmm4, %xmm0
3562; SSE-NEXT:    pminub %xmm5, %xmm1
3563; SSE-NEXT:    pminub %xmm6, %xmm2
3564; SSE-NEXT:    pminub %xmm7, %xmm3
3565; SSE-NEXT:    retq
3566;
3567; AVX1-LABEL: test101:
3568; AVX1:       # BB#0: # %entry
3569; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3570; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3571; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3572; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3573; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3574; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3575; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3576; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3577; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3578; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3579; AVX1-NEXT:    retq
3580;
3581; AVX2-LABEL: test101:
3582; AVX2:       # BB#0: # %entry
3583; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3584; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3585; AVX2-NEXT:    retq
3586;
3587; AVX512BW-LABEL: test101:
3588; AVX512BW:       # BB#0: # %entry
3589; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3590; AVX512BW-NEXT:    retq
3591entry:
3592  %cmp = icmp ult <64 x i8> %a, %b
3593  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3594  ret <64 x i8> %sel
3595}
3596
3597define <64 x i8> @test102(<64 x i8> %a, <64 x i8> %b) {
3598; SSE-LABEL: test102:
3599; SSE:       # BB#0: # %entry
3600; SSE-NEXT:    pminub %xmm4, %xmm0
3601; SSE-NEXT:    pminub %xmm5, %xmm1
3602; SSE-NEXT:    pminub %xmm6, %xmm2
3603; SSE-NEXT:    pminub %xmm7, %xmm3
3604; SSE-NEXT:    retq
3605;
3606; AVX1-LABEL: test102:
3607; AVX1:       # BB#0: # %entry
3608; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3609; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3610; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
3611; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
3612; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3613; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3614; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3615; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
3616; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
3617; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3618; AVX1-NEXT:    retq
3619;
3620; AVX2-LABEL: test102:
3621; AVX2:       # BB#0: # %entry
3622; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
3623; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
3624; AVX2-NEXT:    retq
3625;
3626; AVX512BW-LABEL: test102:
3627; AVX512BW:       # BB#0: # %entry
3628; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
3629; AVX512BW-NEXT:    retq
3630entry:
3631  %cmp = icmp ule <64 x i8> %a, %b
3632  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3633  ret <64 x i8> %sel
3634}
3635
3636define <64 x i8> @test103(<64 x i8> %a, <64 x i8> %b) {
3637; SSE-LABEL: test103:
3638; SSE:       # BB#0: # %entry
3639; SSE-NEXT:    pmaxub %xmm4, %xmm0
3640; SSE-NEXT:    pmaxub %xmm5, %xmm1
3641; SSE-NEXT:    pmaxub %xmm6, %xmm2
3642; SSE-NEXT:    pmaxub %xmm7, %xmm3
3643; SSE-NEXT:    retq
3644;
3645; AVX1-LABEL: test103:
3646; AVX1:       # BB#0: # %entry
3647; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3648; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3649; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3650; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3651; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3652; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3653; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3654; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3655; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3656; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3657; AVX1-NEXT:    retq
3658;
3659; AVX2-LABEL: test103:
3660; AVX2:       # BB#0: # %entry
3661; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3662; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3663; AVX2-NEXT:    retq
3664;
3665; AVX512BW-LABEL: test103:
3666; AVX512BW:       # BB#0: # %entry
3667; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3668; AVX512BW-NEXT:    retq
3669entry:
3670  %cmp = icmp ugt <64 x i8> %a, %b
3671  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3672  ret <64 x i8> %sel
3673}
3674
3675define <64 x i8> @test104(<64 x i8> %a, <64 x i8> %b) {
3676; SSE-LABEL: test104:
3677; SSE:       # BB#0: # %entry
3678; SSE-NEXT:    pmaxub %xmm4, %xmm0
3679; SSE-NEXT:    pmaxub %xmm5, %xmm1
3680; SSE-NEXT:    pmaxub %xmm6, %xmm2
3681; SSE-NEXT:    pmaxub %xmm7, %xmm3
3682; SSE-NEXT:    retq
3683;
3684; AVX1-LABEL: test104:
3685; AVX1:       # BB#0: # %entry
3686; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3687; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3688; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
3689; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
3690; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3691; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3692; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3693; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
3694; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
3695; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3696; AVX1-NEXT:    retq
3697;
3698; AVX2-LABEL: test104:
3699; AVX2:       # BB#0: # %entry
3700; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
3701; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
3702; AVX2-NEXT:    retq
3703;
3704; AVX512BW-LABEL: test104:
3705; AVX512BW:       # BB#0: # %entry
3706; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
3707; AVX512BW-NEXT:    retq
3708entry:
3709  %cmp = icmp uge <64 x i8> %a, %b
3710  %sel = select <64 x i1> %cmp, <64 x i8> %a, <64 x i8> %b
3711  ret <64 x i8> %sel
3712}
3713
3714define <32 x i16> @test105(<32 x i16> %a, <32 x i16> %b) {
3715; SSE-LABEL: test105:
3716; SSE:       # BB#0: # %entry
3717; SSE-NEXT:    pminsw %xmm4, %xmm0
3718; SSE-NEXT:    pminsw %xmm5, %xmm1
3719; SSE-NEXT:    pminsw %xmm6, %xmm2
3720; SSE-NEXT:    pminsw %xmm7, %xmm3
3721; SSE-NEXT:    retq
3722;
3723; AVX1-LABEL: test105:
3724; AVX1:       # BB#0: # %entry
3725; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3726; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3727; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3728; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3729; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3730; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3731; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3732; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3733; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3734; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3735; AVX1-NEXT:    retq
3736;
3737; AVX2-LABEL: test105:
3738; AVX2:       # BB#0: # %entry
3739; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3740; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3741; AVX2-NEXT:    retq
3742;
3743; AVX512BW-LABEL: test105:
3744; AVX512BW:       # BB#0: # %entry
3745; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3746; AVX512BW-NEXT:    retq
3747entry:
3748  %cmp = icmp slt <32 x i16> %a, %b
3749  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3750  ret <32 x i16> %sel
3751}
3752
3753define <32 x i16> @test106(<32 x i16> %a, <32 x i16> %b) {
3754; SSE-LABEL: test106:
3755; SSE:       # BB#0: # %entry
3756; SSE-NEXT:    pminsw %xmm4, %xmm0
3757; SSE-NEXT:    pminsw %xmm5, %xmm1
3758; SSE-NEXT:    pminsw %xmm6, %xmm2
3759; SSE-NEXT:    pminsw %xmm7, %xmm3
3760; SSE-NEXT:    retq
3761;
3762; AVX1-LABEL: test106:
3763; AVX1:       # BB#0: # %entry
3764; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3765; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3766; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
3767; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
3768; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3769; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3770; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3771; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
3772; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
3773; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3774; AVX1-NEXT:    retq
3775;
3776; AVX2-LABEL: test106:
3777; AVX2:       # BB#0: # %entry
3778; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
3779; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
3780; AVX2-NEXT:    retq
3781;
3782; AVX512BW-LABEL: test106:
3783; AVX512BW:       # BB#0: # %entry
3784; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
3785; AVX512BW-NEXT:    retq
3786entry:
3787  %cmp = icmp sle <32 x i16> %a, %b
3788  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3789  ret <32 x i16> %sel
3790}
3791
3792define <32 x i16> @test107(<32 x i16> %a, <32 x i16> %b) {
3793; SSE-LABEL: test107:
3794; SSE:       # BB#0: # %entry
3795; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3796; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3797; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3798; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3799; SSE-NEXT:    retq
3800;
3801; AVX1-LABEL: test107:
3802; AVX1:       # BB#0: # %entry
3803; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3804; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3805; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3806; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3807; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3808; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3809; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3810; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3811; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3812; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3813; AVX1-NEXT:    retq
3814;
3815; AVX2-LABEL: test107:
3816; AVX2:       # BB#0: # %entry
3817; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3818; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3819; AVX2-NEXT:    retq
3820;
3821; AVX512BW-LABEL: test107:
3822; AVX512BW:       # BB#0: # %entry
3823; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3824; AVX512BW-NEXT:    retq
3825entry:
3826  %cmp = icmp sgt <32 x i16> %a, %b
3827  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3828  ret <32 x i16> %sel
3829}
3830
3831define <32 x i16> @test108(<32 x i16> %a, <32 x i16> %b) {
3832; SSE-LABEL: test108:
3833; SSE:       # BB#0: # %entry
3834; SSE-NEXT:    pmaxsw %xmm4, %xmm0
3835; SSE-NEXT:    pmaxsw %xmm5, %xmm1
3836; SSE-NEXT:    pmaxsw %xmm6, %xmm2
3837; SSE-NEXT:    pmaxsw %xmm7, %xmm3
3838; SSE-NEXT:    retq
3839;
3840; AVX1-LABEL: test108:
3841; AVX1:       # BB#0: # %entry
3842; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3843; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3844; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
3845; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
3846; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3847; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3848; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3849; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
3850; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
3851; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3852; AVX1-NEXT:    retq
3853;
3854; AVX2-LABEL: test108:
3855; AVX2:       # BB#0: # %entry
3856; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
3857; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
3858; AVX2-NEXT:    retq
3859;
3860; AVX512BW-LABEL: test108:
3861; AVX512BW:       # BB#0: # %entry
3862; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
3863; AVX512BW-NEXT:    retq
3864entry:
3865  %cmp = icmp sge <32 x i16> %a, %b
3866  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3867  ret <32 x i16> %sel
3868}
3869
3870define <32 x i16> @test109(<32 x i16> %a, <32 x i16> %b) {
3871; SSE2-LABEL: test109:
3872; SSE2:       # BB#0: # %entry
3873; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [32768,32768,32768,32768,32768,32768,32768,32768]
3874; SSE2-NEXT:    movdqa %xmm3, %xmm9
3875; SSE2-NEXT:    pxor %xmm10, %xmm9
3876; SSE2-NEXT:    movdqa %xmm7, %xmm8
3877; SSE2-NEXT:    pxor %xmm10, %xmm8
3878; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
3879; SSE2-NEXT:    movdqa %xmm2, %xmm11
3880; SSE2-NEXT:    pxor %xmm10, %xmm11
3881; SSE2-NEXT:    movdqa %xmm6, %xmm9
3882; SSE2-NEXT:    pxor %xmm10, %xmm9
3883; SSE2-NEXT:    pcmpgtw %xmm11, %xmm9
3884; SSE2-NEXT:    movdqa %xmm1, %xmm11
3885; SSE2-NEXT:    pxor %xmm10, %xmm11
3886; SSE2-NEXT:    movdqa %xmm5, %xmm12
3887; SSE2-NEXT:    pxor %xmm10, %xmm12
3888; SSE2-NEXT:    pcmpgtw %xmm11, %xmm12
3889; SSE2-NEXT:    movdqa %xmm0, %xmm11
3890; SSE2-NEXT:    pxor %xmm10, %xmm11
3891; SSE2-NEXT:    pxor %xmm4, %xmm10
3892; SSE2-NEXT:    pcmpgtw %xmm11, %xmm10
3893; SSE2-NEXT:    pand %xmm10, %xmm0
3894; SSE2-NEXT:    pandn %xmm4, %xmm10
3895; SSE2-NEXT:    por %xmm10, %xmm0
3896; SSE2-NEXT:    pand %xmm12, %xmm1
3897; SSE2-NEXT:    pandn %xmm5, %xmm12
3898; SSE2-NEXT:    por %xmm12, %xmm1
3899; SSE2-NEXT:    pand %xmm9, %xmm2
3900; SSE2-NEXT:    pandn %xmm6, %xmm9
3901; SSE2-NEXT:    por %xmm9, %xmm2
3902; SSE2-NEXT:    pand %xmm8, %xmm3
3903; SSE2-NEXT:    pandn %xmm7, %xmm8
3904; SSE2-NEXT:    por %xmm8, %xmm3
3905; SSE2-NEXT:    retq
3906;
3907; SSE4-LABEL: test109:
3908; SSE4:       # BB#0: # %entry
3909; SSE4-NEXT:    pminuw %xmm4, %xmm0
3910; SSE4-NEXT:    pminuw %xmm5, %xmm1
3911; SSE4-NEXT:    pminuw %xmm6, %xmm2
3912; SSE4-NEXT:    pminuw %xmm7, %xmm3
3913; SSE4-NEXT:    retq
3914;
3915; AVX1-LABEL: test109:
3916; AVX1:       # BB#0: # %entry
3917; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3918; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3919; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3920; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3921; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3922; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3923; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3924; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3925; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3926; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3927; AVX1-NEXT:    retq
3928;
3929; AVX2-LABEL: test109:
3930; AVX2:       # BB#0: # %entry
3931; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
3932; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
3933; AVX2-NEXT:    retq
3934;
3935; AVX512BW-LABEL: test109:
3936; AVX512BW:       # BB#0: # %entry
3937; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
3938; AVX512BW-NEXT:    retq
3939entry:
3940  %cmp = icmp ult <32 x i16> %a, %b
3941  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
3942  ret <32 x i16> %sel
3943}
3944
3945define <32 x i16> @test110(<32 x i16> %a, <32 x i16> %b) {
3946; SSE2-LABEL: test110:
3947; SSE2:       # BB#0: # %entry
3948; SSE2-NEXT:    movdqa %xmm3, %xmm8
3949; SSE2-NEXT:    movdqa %xmm2, %xmm9
3950; SSE2-NEXT:    movdqa %xmm1, %xmm10
3951; SSE2-NEXT:    psubusw %xmm7, %xmm3
3952; SSE2-NEXT:    pxor %xmm12, %xmm12
3953; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
3954; SSE2-NEXT:    psubusw %xmm6, %xmm2
3955; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
3956; SSE2-NEXT:    psubusw %xmm5, %xmm1
3957; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
3958; SSE2-NEXT:    movdqa %xmm0, %xmm11
3959; SSE2-NEXT:    psubusw %xmm4, %xmm11
3960; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
3961; SSE2-NEXT:    pand %xmm11, %xmm0
3962; SSE2-NEXT:    pandn %xmm4, %xmm11
3963; SSE2-NEXT:    por %xmm0, %xmm11
3964; SSE2-NEXT:    pand %xmm1, %xmm10
3965; SSE2-NEXT:    pandn %xmm5, %xmm1
3966; SSE2-NEXT:    por %xmm10, %xmm1
3967; SSE2-NEXT:    pand %xmm2, %xmm9
3968; SSE2-NEXT:    pandn %xmm6, %xmm2
3969; SSE2-NEXT:    por %xmm9, %xmm2
3970; SSE2-NEXT:    pand %xmm3, %xmm8
3971; SSE2-NEXT:    pandn %xmm7, %xmm3
3972; SSE2-NEXT:    por %xmm8, %xmm3
3973; SSE2-NEXT:    movdqa %xmm11, %xmm0
3974; SSE2-NEXT:    retq
3975;
3976; SSE4-LABEL: test110:
3977; SSE4:       # BB#0: # %entry
3978; SSE4-NEXT:    pminuw %xmm4, %xmm0
3979; SSE4-NEXT:    pminuw %xmm5, %xmm1
3980; SSE4-NEXT:    pminuw %xmm6, %xmm2
3981; SSE4-NEXT:    pminuw %xmm7, %xmm3
3982; SSE4-NEXT:    retq
3983;
3984; AVX1-LABEL: test110:
3985; AVX1:       # BB#0: # %entry
3986; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
3987; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
3988; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
3989; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
3990; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
3991; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
3992; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
3993; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
3994; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
3995; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
3996; AVX1-NEXT:    retq
3997;
3998; AVX2-LABEL: test110:
3999; AVX2:       # BB#0: # %entry
4000; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
4001; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
4002; AVX2-NEXT:    retq
4003;
4004; AVX512BW-LABEL: test110:
4005; AVX512BW:       # BB#0: # %entry
4006; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
4007; AVX512BW-NEXT:    retq
4008entry:
4009  %cmp = icmp ule <32 x i16> %a, %b
4010  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
4011  ret <32 x i16> %sel
4012}
4013
4014define <32 x i16> @test111(<32 x i16> %a, <32 x i16> %b) {
4015; SSE2-LABEL: test111:
4016; SSE2:       # BB#0: # %entry
4017; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [32768,32768,32768,32768,32768,32768,32768,32768]
4018; SSE2-NEXT:    movdqa %xmm7, %xmm9
4019; SSE2-NEXT:    pxor %xmm11, %xmm9
4020; SSE2-NEXT:    movdqa %xmm3, %xmm8
4021; SSE2-NEXT:    pxor %xmm11, %xmm8
4022; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
4023; SSE2-NEXT:    movdqa %xmm6, %xmm10
4024; SSE2-NEXT:    pxor %xmm11, %xmm10
4025; SSE2-NEXT:    movdqa %xmm2, %xmm9
4026; SSE2-NEXT:    pxor %xmm11, %xmm9
4027; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
4028; SSE2-NEXT:    movdqa %xmm5, %xmm12
4029; SSE2-NEXT:    pxor %xmm11, %xmm12
4030; SSE2-NEXT:    movdqa %xmm1, %xmm10
4031; SSE2-NEXT:    pxor %xmm11, %xmm10
4032; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
4033; SSE2-NEXT:    movdqa %xmm4, %xmm12
4034; SSE2-NEXT:    pxor %xmm11, %xmm12
4035; SSE2-NEXT:    pxor %xmm0, %xmm11
4036; SSE2-NEXT:    pcmpgtw %xmm12, %xmm11
4037; SSE2-NEXT:    pand %xmm11, %xmm0
4038; SSE2-NEXT:    pandn %xmm4, %xmm11
4039; SSE2-NEXT:    por %xmm11, %xmm0
4040; SSE2-NEXT:    pand %xmm10, %xmm1
4041; SSE2-NEXT:    pandn %xmm5, %xmm10
4042; SSE2-NEXT:    por %xmm1, %xmm10
4043; SSE2-NEXT:    pand %xmm9, %xmm2
4044; SSE2-NEXT:    pandn %xmm6, %xmm9
4045; SSE2-NEXT:    por %xmm2, %xmm9
4046; SSE2-NEXT:    pand %xmm8, %xmm3
4047; SSE2-NEXT:    pandn %xmm7, %xmm8
4048; SSE2-NEXT:    por %xmm3, %xmm8
4049; SSE2-NEXT:    movdqa %xmm10, %xmm1
4050; SSE2-NEXT:    movdqa %xmm9, %xmm2
4051; SSE2-NEXT:    movdqa %xmm8, %xmm3
4052; SSE2-NEXT:    retq
4053;
4054; SSE4-LABEL: test111:
4055; SSE4:       # BB#0: # %entry
4056; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
4057; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
4058; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
4059; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
4060; SSE4-NEXT:    retq
4061;
4062; AVX1-LABEL: test111:
4063; AVX1:       # BB#0: # %entry
4064; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4065; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4066; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
4067; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
4068; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4069; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4070; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4071; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
4072; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
4073; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4074; AVX1-NEXT:    retq
4075;
4076; AVX2-LABEL: test111:
4077; AVX2:       # BB#0: # %entry
4078; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
4079; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
4080; AVX2-NEXT:    retq
4081;
4082; AVX512BW-LABEL: test111:
4083; AVX512BW:       # BB#0: # %entry
4084; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
4085; AVX512BW-NEXT:    retq
4086entry:
4087  %cmp = icmp ugt <32 x i16> %a, %b
4088  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
4089  ret <32 x i16> %sel
4090}
4091
4092define <32 x i16> @test112(<32 x i16> %a, <32 x i16> %b) {
4093; SSE2-LABEL: test112:
4094; SSE2:       # BB#0: # %entry
4095; SSE2-NEXT:    movdqa %xmm7, %xmm8
4096; SSE2-NEXT:    psubusw %xmm3, %xmm8
4097; SSE2-NEXT:    pxor %xmm9, %xmm9
4098; SSE2-NEXT:    pcmpeqw %xmm9, %xmm8
4099; SSE2-NEXT:    movdqa %xmm6, %xmm10
4100; SSE2-NEXT:    psubusw %xmm2, %xmm10
4101; SSE2-NEXT:    pcmpeqw %xmm9, %xmm10
4102; SSE2-NEXT:    movdqa %xmm5, %xmm11
4103; SSE2-NEXT:    psubusw %xmm1, %xmm11
4104; SSE2-NEXT:    pcmpeqw %xmm9, %xmm11
4105; SSE2-NEXT:    movdqa %xmm4, %xmm12
4106; SSE2-NEXT:    psubusw %xmm0, %xmm12
4107; SSE2-NEXT:    pcmpeqw %xmm9, %xmm12
4108; SSE2-NEXT:    pand %xmm12, %xmm0
4109; SSE2-NEXT:    pandn %xmm4, %xmm12
4110; SSE2-NEXT:    por %xmm12, %xmm0
4111; SSE2-NEXT:    pand %xmm11, %xmm1
4112; SSE2-NEXT:    pandn %xmm5, %xmm11
4113; SSE2-NEXT:    por %xmm11, %xmm1
4114; SSE2-NEXT:    pand %xmm10, %xmm2
4115; SSE2-NEXT:    pandn %xmm6, %xmm10
4116; SSE2-NEXT:    por %xmm10, %xmm2
4117; SSE2-NEXT:    pand %xmm8, %xmm3
4118; SSE2-NEXT:    pandn %xmm7, %xmm8
4119; SSE2-NEXT:    por %xmm8, %xmm3
4120; SSE2-NEXT:    retq
4121;
4122; SSE4-LABEL: test112:
4123; SSE4:       # BB#0: # %entry
4124; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
4125; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
4126; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
4127; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
4128; SSE4-NEXT:    retq
4129;
4130; AVX1-LABEL: test112:
4131; AVX1:       # BB#0: # %entry
4132; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4133; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4134; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
4135; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
4136; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4137; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4138; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4139; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
4140; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
4141; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4142; AVX1-NEXT:    retq
4143;
4144; AVX2-LABEL: test112:
4145; AVX2:       # BB#0: # %entry
4146; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
4147; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
4148; AVX2-NEXT:    retq
4149;
4150; AVX512BW-LABEL: test112:
4151; AVX512BW:       # BB#0: # %entry
4152; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
4153; AVX512BW-NEXT:    retq
4154entry:
4155  %cmp = icmp uge <32 x i16> %a, %b
4156  %sel = select <32 x i1> %cmp, <32 x i16> %a, <32 x i16> %b
4157  ret <32 x i16> %sel
4158}
4159
4160define <16 x i32> @test113(<16 x i32> %a, <16 x i32> %b) {
4161; SSE2-LABEL: test113:
4162; SSE2:       # BB#0: # %entry
4163; SSE2-NEXT:    movdqa %xmm7, %xmm8
4164; SSE2-NEXT:    pcmpgtd %xmm3, %xmm8
4165; SSE2-NEXT:    movdqa %xmm6, %xmm9
4166; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
4167; SSE2-NEXT:    movdqa %xmm5, %xmm10
4168; SSE2-NEXT:    pcmpgtd %xmm1, %xmm10
4169; SSE2-NEXT:    movdqa %xmm4, %xmm11
4170; SSE2-NEXT:    pcmpgtd %xmm0, %xmm11
4171; SSE2-NEXT:    pand %xmm11, %xmm0
4172; SSE2-NEXT:    pandn %xmm4, %xmm11
4173; SSE2-NEXT:    por %xmm11, %xmm0
4174; SSE2-NEXT:    pand %xmm10, %xmm1
4175; SSE2-NEXT:    pandn %xmm5, %xmm10
4176; SSE2-NEXT:    por %xmm10, %xmm1
4177; SSE2-NEXT:    pand %xmm9, %xmm2
4178; SSE2-NEXT:    pandn %xmm6, %xmm9
4179; SSE2-NEXT:    por %xmm9, %xmm2
4180; SSE2-NEXT:    pand %xmm8, %xmm3
4181; SSE2-NEXT:    pandn %xmm7, %xmm8
4182; SSE2-NEXT:    por %xmm8, %xmm3
4183; SSE2-NEXT:    retq
4184;
4185; SSE4-LABEL: test113:
4186; SSE4:       # BB#0: # %entry
4187; SSE4-NEXT:    pminsd %xmm4, %xmm0
4188; SSE4-NEXT:    pminsd %xmm5, %xmm1
4189; SSE4-NEXT:    pminsd %xmm6, %xmm2
4190; SSE4-NEXT:    pminsd %xmm7, %xmm3
4191; SSE4-NEXT:    retq
4192;
4193; AVX1-LABEL: test113:
4194; AVX1:       # BB#0: # %entry
4195; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4196; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4197; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4198; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4199; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4200; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4201; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4202; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4203; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4204; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4205; AVX1-NEXT:    retq
4206;
4207; AVX2-LABEL: test113:
4208; AVX2:       # BB#0: # %entry
4209; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4210; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4211; AVX2-NEXT:    retq
4212;
4213; AVX512F-LABEL: test113:
4214; AVX512F:       # BB#0: # %entry
4215; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4216; AVX512F-NEXT:    retq
4217entry:
4218  %cmp = icmp slt <16 x i32> %a, %b
4219  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4220  ret <16 x i32> %sel
4221}
4222
4223define <16 x i32> @test114(<16 x i32> %a, <16 x i32> %b) {
4224; SSE2-LABEL: test114:
4225; SSE2:       # BB#0: # %entry
4226; SSE2-NEXT:    movdqa %xmm3, %xmm8
4227; SSE2-NEXT:    movdqa %xmm2, %xmm9
4228; SSE2-NEXT:    movdqa %xmm8, %xmm12
4229; SSE2-NEXT:    pcmpgtd %xmm7, %xmm12
4230; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
4231; SSE2-NEXT:    movdqa %xmm12, %xmm3
4232; SSE2-NEXT:    pxor %xmm13, %xmm3
4233; SSE2-NEXT:    movdqa %xmm9, %xmm14
4234; SSE2-NEXT:    pcmpgtd %xmm6, %xmm14
4235; SSE2-NEXT:    movdqa %xmm14, %xmm2
4236; SSE2-NEXT:    pxor %xmm13, %xmm2
4237; SSE2-NEXT:    movdqa %xmm1, %xmm15
4238; SSE2-NEXT:    pcmpgtd %xmm5, %xmm15
4239; SSE2-NEXT:    movdqa %xmm15, %xmm10
4240; SSE2-NEXT:    pxor %xmm13, %xmm10
4241; SSE2-NEXT:    movdqa %xmm0, %xmm11
4242; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
4243; SSE2-NEXT:    pxor %xmm11, %xmm13
4244; SSE2-NEXT:    pandn %xmm0, %xmm11
4245; SSE2-NEXT:    pandn %xmm4, %xmm13
4246; SSE2-NEXT:    por %xmm13, %xmm11
4247; SSE2-NEXT:    pandn %xmm1, %xmm15
4248; SSE2-NEXT:    pandn %xmm5, %xmm10
4249; SSE2-NEXT:    por %xmm15, %xmm10
4250; SSE2-NEXT:    pandn %xmm9, %xmm14
4251; SSE2-NEXT:    pandn %xmm6, %xmm2
4252; SSE2-NEXT:    por %xmm14, %xmm2
4253; SSE2-NEXT:    pandn %xmm8, %xmm12
4254; SSE2-NEXT:    pandn %xmm7, %xmm3
4255; SSE2-NEXT:    por %xmm12, %xmm3
4256; SSE2-NEXT:    movdqa %xmm11, %xmm0
4257; SSE2-NEXT:    movdqa %xmm10, %xmm1
4258; SSE2-NEXT:    retq
4259;
4260; SSE4-LABEL: test114:
4261; SSE4:       # BB#0: # %entry
4262; SSE4-NEXT:    pminsd %xmm4, %xmm0
4263; SSE4-NEXT:    pminsd %xmm5, %xmm1
4264; SSE4-NEXT:    pminsd %xmm6, %xmm2
4265; SSE4-NEXT:    pminsd %xmm7, %xmm3
4266; SSE4-NEXT:    retq
4267;
4268; AVX1-LABEL: test114:
4269; AVX1:       # BB#0: # %entry
4270; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4271; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4272; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
4273; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
4274; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4275; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4276; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4277; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
4278; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
4279; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4280; AVX1-NEXT:    retq
4281;
4282; AVX2-LABEL: test114:
4283; AVX2:       # BB#0: # %entry
4284; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
4285; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
4286; AVX2-NEXT:    retq
4287;
4288; AVX512F-LABEL: test114:
4289; AVX512F:       # BB#0: # %entry
4290; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
4291; AVX512F-NEXT:    retq
4292entry:
4293  %cmp = icmp sle <16 x i32> %a, %b
4294  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4295  ret <16 x i32> %sel
4296}
4297
4298define <16 x i32> @test115(<16 x i32> %a, <16 x i32> %b) {
4299; SSE2-LABEL: test115:
4300; SSE2:       # BB#0: # %entry
4301; SSE2-NEXT:    movdqa %xmm3, %xmm8
4302; SSE2-NEXT:    pcmpgtd %xmm7, %xmm3
4303; SSE2-NEXT:    movdqa %xmm2, %xmm9
4304; SSE2-NEXT:    pcmpgtd %xmm6, %xmm9
4305; SSE2-NEXT:    movdqa %xmm1, %xmm10
4306; SSE2-NEXT:    pcmpgtd %xmm5, %xmm10
4307; SSE2-NEXT:    movdqa %xmm0, %xmm11
4308; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
4309; SSE2-NEXT:    pand %xmm11, %xmm0
4310; SSE2-NEXT:    pandn %xmm4, %xmm11
4311; SSE2-NEXT:    por %xmm0, %xmm11
4312; SSE2-NEXT:    pand %xmm10, %xmm1
4313; SSE2-NEXT:    pandn %xmm5, %xmm10
4314; SSE2-NEXT:    por %xmm1, %xmm10
4315; SSE2-NEXT:    pand %xmm9, %xmm2
4316; SSE2-NEXT:    pandn %xmm6, %xmm9
4317; SSE2-NEXT:    por %xmm2, %xmm9
4318; SSE2-NEXT:    pand %xmm3, %xmm8
4319; SSE2-NEXT:    pandn %xmm7, %xmm3
4320; SSE2-NEXT:    por %xmm8, %xmm3
4321; SSE2-NEXT:    movdqa %xmm11, %xmm0
4322; SSE2-NEXT:    movdqa %xmm10, %xmm1
4323; SSE2-NEXT:    movdqa %xmm9, %xmm2
4324; SSE2-NEXT:    retq
4325;
4326; SSE4-LABEL: test115:
4327; SSE4:       # BB#0: # %entry
4328; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4329; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4330; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4331; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4332; SSE4-NEXT:    retq
4333;
4334; AVX1-LABEL: test115:
4335; AVX1:       # BB#0: # %entry
4336; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4337; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4338; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4339; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4340; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4341; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4342; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4343; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4344; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4345; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4346; AVX1-NEXT:    retq
4347;
4348; AVX2-LABEL: test115:
4349; AVX2:       # BB#0: # %entry
4350; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4351; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4352; AVX2-NEXT:    retq
4353;
4354; AVX512F-LABEL: test115:
4355; AVX512F:       # BB#0: # %entry
4356; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4357; AVX512F-NEXT:    retq
4358entry:
4359  %cmp = icmp sgt <16 x i32> %a, %b
4360  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4361  ret <16 x i32> %sel
4362}
4363
4364define <16 x i32> @test116(<16 x i32> %a, <16 x i32> %b) {
4365; SSE2-LABEL: test116:
4366; SSE2:       # BB#0: # %entry
4367; SSE2-NEXT:    movdqa %xmm3, %xmm8
4368; SSE2-NEXT:    movdqa %xmm2, %xmm9
4369; SSE2-NEXT:    movdqa %xmm0, %xmm10
4370; SSE2-NEXT:    movdqa %xmm7, %xmm12
4371; SSE2-NEXT:    pcmpgtd %xmm8, %xmm12
4372; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
4373; SSE2-NEXT:    movdqa %xmm12, %xmm3
4374; SSE2-NEXT:    pxor %xmm0, %xmm3
4375; SSE2-NEXT:    movdqa %xmm6, %xmm13
4376; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
4377; SSE2-NEXT:    movdqa %xmm13, %xmm2
4378; SSE2-NEXT:    pxor %xmm0, %xmm2
4379; SSE2-NEXT:    movdqa %xmm5, %xmm14
4380; SSE2-NEXT:    pcmpgtd %xmm1, %xmm14
4381; SSE2-NEXT:    movdqa %xmm14, %xmm11
4382; SSE2-NEXT:    pxor %xmm0, %xmm11
4383; SSE2-NEXT:    movdqa %xmm4, %xmm15
4384; SSE2-NEXT:    pcmpgtd %xmm10, %xmm15
4385; SSE2-NEXT:    pxor %xmm15, %xmm0
4386; SSE2-NEXT:    pandn %xmm10, %xmm15
4387; SSE2-NEXT:    pandn %xmm4, %xmm0
4388; SSE2-NEXT:    por %xmm15, %xmm0
4389; SSE2-NEXT:    pandn %xmm1, %xmm14
4390; SSE2-NEXT:    pandn %xmm5, %xmm11
4391; SSE2-NEXT:    por %xmm14, %xmm11
4392; SSE2-NEXT:    pandn %xmm9, %xmm13
4393; SSE2-NEXT:    pandn %xmm6, %xmm2
4394; SSE2-NEXT:    por %xmm13, %xmm2
4395; SSE2-NEXT:    pandn %xmm8, %xmm12
4396; SSE2-NEXT:    pandn %xmm7, %xmm3
4397; SSE2-NEXT:    por %xmm12, %xmm3
4398; SSE2-NEXT:    movdqa %xmm11, %xmm1
4399; SSE2-NEXT:    retq
4400;
4401; SSE4-LABEL: test116:
4402; SSE4:       # BB#0: # %entry
4403; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
4404; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
4405; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
4406; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
4407; SSE4-NEXT:    retq
4408;
4409; AVX1-LABEL: test116:
4410; AVX1:       # BB#0: # %entry
4411; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4412; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4413; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
4414; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
4415; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4416; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4417; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4418; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
4419; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
4420; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4421; AVX1-NEXT:    retq
4422;
4423; AVX2-LABEL: test116:
4424; AVX2:       # BB#0: # %entry
4425; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
4426; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
4427; AVX2-NEXT:    retq
4428;
4429; AVX512F-LABEL: test116:
4430; AVX512F:       # BB#0: # %entry
4431; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
4432; AVX512F-NEXT:    retq
4433entry:
4434  %cmp = icmp sge <16 x i32> %a, %b
4435  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4436  ret <16 x i32> %sel
4437}
4438
4439define <16 x i32> @test117(<16 x i32> %a, <16 x i32> %b) {
4440; SSE2-LABEL: test117:
4441; SSE2:       # BB#0: # %entry
4442; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
4443; SSE2-NEXT:    movdqa %xmm3, %xmm9
4444; SSE2-NEXT:    pxor %xmm10, %xmm9
4445; SSE2-NEXT:    movdqa %xmm7, %xmm8
4446; SSE2-NEXT:    pxor %xmm10, %xmm8
4447; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
4448; SSE2-NEXT:    movdqa %xmm2, %xmm11
4449; SSE2-NEXT:    pxor %xmm10, %xmm11
4450; SSE2-NEXT:    movdqa %xmm6, %xmm9
4451; SSE2-NEXT:    pxor %xmm10, %xmm9
4452; SSE2-NEXT:    pcmpgtd %xmm11, %xmm9
4453; SSE2-NEXT:    movdqa %xmm1, %xmm11
4454; SSE2-NEXT:    pxor %xmm10, %xmm11
4455; SSE2-NEXT:    movdqa %xmm5, %xmm12
4456; SSE2-NEXT:    pxor %xmm10, %xmm12
4457; SSE2-NEXT:    pcmpgtd %xmm11, %xmm12
4458; SSE2-NEXT:    movdqa %xmm0, %xmm11
4459; SSE2-NEXT:    pxor %xmm10, %xmm11
4460; SSE2-NEXT:    pxor %xmm4, %xmm10
4461; SSE2-NEXT:    pcmpgtd %xmm11, %xmm10
4462; SSE2-NEXT:    pand %xmm10, %xmm0
4463; SSE2-NEXT:    pandn %xmm4, %xmm10
4464; SSE2-NEXT:    por %xmm10, %xmm0
4465; SSE2-NEXT:    pand %xmm12, %xmm1
4466; SSE2-NEXT:    pandn %xmm5, %xmm12
4467; SSE2-NEXT:    por %xmm12, %xmm1
4468; SSE2-NEXT:    pand %xmm9, %xmm2
4469; SSE2-NEXT:    pandn %xmm6, %xmm9
4470; SSE2-NEXT:    por %xmm9, %xmm2
4471; SSE2-NEXT:    pand %xmm8, %xmm3
4472; SSE2-NEXT:    pandn %xmm7, %xmm8
4473; SSE2-NEXT:    por %xmm8, %xmm3
4474; SSE2-NEXT:    retq
4475;
4476; SSE4-LABEL: test117:
4477; SSE4:       # BB#0: # %entry
4478; SSE4-NEXT:    pminud %xmm4, %xmm0
4479; SSE4-NEXT:    pminud %xmm5, %xmm1
4480; SSE4-NEXT:    pminud %xmm6, %xmm2
4481; SSE4-NEXT:    pminud %xmm7, %xmm3
4482; SSE4-NEXT:    retq
4483;
4484; AVX1-LABEL: test117:
4485; AVX1:       # BB#0: # %entry
4486; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4487; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4488; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4489; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4490; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4491; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4492; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4493; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4494; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4495; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4496; AVX1-NEXT:    retq
4497;
4498; AVX2-LABEL: test117:
4499; AVX2:       # BB#0: # %entry
4500; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4501; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4502; AVX2-NEXT:    retq
4503;
4504; AVX512F-LABEL: test117:
4505; AVX512F:       # BB#0: # %entry
4506; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4507; AVX512F-NEXT:    retq
4508entry:
4509  %cmp = icmp ult <16 x i32> %a, %b
4510  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4511  ret <16 x i32> %sel
4512}
4513
4514define <16 x i32> @test118(<16 x i32> %a, <16 x i32> %b) {
4515; SSE2-LABEL: test118:
4516; SSE2:       # BB#0: # %entry
4517; SSE2-NEXT:    movdqa %xmm0, %xmm10
4518; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
4519; SSE2-NEXT:    movdqa %xmm7, %xmm0
4520; SSE2-NEXT:    pxor %xmm14, %xmm0
4521; SSE2-NEXT:    movdqa %xmm3, %xmm12
4522; SSE2-NEXT:    pxor %xmm14, %xmm12
4523; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
4524; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
4525; SSE2-NEXT:    movdqa %xmm12, %xmm8
4526; SSE2-NEXT:    pxor %xmm0, %xmm8
4527; SSE2-NEXT:    movdqa %xmm6, %xmm9
4528; SSE2-NEXT:    pxor %xmm14, %xmm9
4529; SSE2-NEXT:    movdqa %xmm2, %xmm13
4530; SSE2-NEXT:    pxor %xmm14, %xmm13
4531; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
4532; SSE2-NEXT:    movdqa %xmm13, %xmm9
4533; SSE2-NEXT:    pxor %xmm0, %xmm9
4534; SSE2-NEXT:    movdqa %xmm5, %xmm11
4535; SSE2-NEXT:    pxor %xmm14, %xmm11
4536; SSE2-NEXT:    movdqa %xmm1, %xmm15
4537; SSE2-NEXT:    pxor %xmm14, %xmm15
4538; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
4539; SSE2-NEXT:    movdqa %xmm4, %xmm11
4540; SSE2-NEXT:    pxor %xmm14, %xmm11
4541; SSE2-NEXT:    pxor %xmm10, %xmm14
4542; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
4543; SSE2-NEXT:    movdqa %xmm15, %xmm11
4544; SSE2-NEXT:    pxor %xmm0, %xmm11
4545; SSE2-NEXT:    pxor %xmm14, %xmm0
4546; SSE2-NEXT:    pandn %xmm10, %xmm14
4547; SSE2-NEXT:    pandn %xmm4, %xmm0
4548; SSE2-NEXT:    por %xmm14, %xmm0
4549; SSE2-NEXT:    pandn %xmm1, %xmm15
4550; SSE2-NEXT:    pandn %xmm5, %xmm11
4551; SSE2-NEXT:    por %xmm15, %xmm11
4552; SSE2-NEXT:    pandn %xmm2, %xmm13
4553; SSE2-NEXT:    pandn %xmm6, %xmm9
4554; SSE2-NEXT:    por %xmm13, %xmm9
4555; SSE2-NEXT:    pandn %xmm3, %xmm12
4556; SSE2-NEXT:    pandn %xmm7, %xmm8
4557; SSE2-NEXT:    por %xmm12, %xmm8
4558; SSE2-NEXT:    movdqa %xmm11, %xmm1
4559; SSE2-NEXT:    movdqa %xmm9, %xmm2
4560; SSE2-NEXT:    movdqa %xmm8, %xmm3
4561; SSE2-NEXT:    retq
4562;
4563; SSE4-LABEL: test118:
4564; SSE4:       # BB#0: # %entry
4565; SSE4-NEXT:    pminud %xmm4, %xmm0
4566; SSE4-NEXT:    pminud %xmm5, %xmm1
4567; SSE4-NEXT:    pminud %xmm6, %xmm2
4568; SSE4-NEXT:    pminud %xmm7, %xmm3
4569; SSE4-NEXT:    retq
4570;
4571; AVX1-LABEL: test118:
4572; AVX1:       # BB#0: # %entry
4573; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4574; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4575; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
4576; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
4577; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4578; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4579; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4580; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
4581; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
4582; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4583; AVX1-NEXT:    retq
4584;
4585; AVX2-LABEL: test118:
4586; AVX2:       # BB#0: # %entry
4587; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
4588; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
4589; AVX2-NEXT:    retq
4590;
4591; AVX512F-LABEL: test118:
4592; AVX512F:       # BB#0: # %entry
4593; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
4594; AVX512F-NEXT:    retq
4595entry:
4596  %cmp = icmp ule <16 x i32> %a, %b
4597  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4598  ret <16 x i32> %sel
4599}
4600
4601define <16 x i32> @test119(<16 x i32> %a, <16 x i32> %b) {
4602; SSE2-LABEL: test119:
4603; SSE2:       # BB#0: # %entry
4604; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
4605; SSE2-NEXT:    movdqa %xmm7, %xmm9
4606; SSE2-NEXT:    pxor %xmm11, %xmm9
4607; SSE2-NEXT:    movdqa %xmm3, %xmm8
4608; SSE2-NEXT:    pxor %xmm11, %xmm8
4609; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
4610; SSE2-NEXT:    movdqa %xmm6, %xmm10
4611; SSE2-NEXT:    pxor %xmm11, %xmm10
4612; SSE2-NEXT:    movdqa %xmm2, %xmm9
4613; SSE2-NEXT:    pxor %xmm11, %xmm9
4614; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
4615; SSE2-NEXT:    movdqa %xmm5, %xmm12
4616; SSE2-NEXT:    pxor %xmm11, %xmm12
4617; SSE2-NEXT:    movdqa %xmm1, %xmm10
4618; SSE2-NEXT:    pxor %xmm11, %xmm10
4619; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
4620; SSE2-NEXT:    movdqa %xmm4, %xmm12
4621; SSE2-NEXT:    pxor %xmm11, %xmm12
4622; SSE2-NEXT:    pxor %xmm0, %xmm11
4623; SSE2-NEXT:    pcmpgtd %xmm12, %xmm11
4624; SSE2-NEXT:    pand %xmm11, %xmm0
4625; SSE2-NEXT:    pandn %xmm4, %xmm11
4626; SSE2-NEXT:    por %xmm11, %xmm0
4627; SSE2-NEXT:    pand %xmm10, %xmm1
4628; SSE2-NEXT:    pandn %xmm5, %xmm10
4629; SSE2-NEXT:    por %xmm1, %xmm10
4630; SSE2-NEXT:    pand %xmm9, %xmm2
4631; SSE2-NEXT:    pandn %xmm6, %xmm9
4632; SSE2-NEXT:    por %xmm2, %xmm9
4633; SSE2-NEXT:    pand %xmm8, %xmm3
4634; SSE2-NEXT:    pandn %xmm7, %xmm8
4635; SSE2-NEXT:    por %xmm3, %xmm8
4636; SSE2-NEXT:    movdqa %xmm10, %xmm1
4637; SSE2-NEXT:    movdqa %xmm9, %xmm2
4638; SSE2-NEXT:    movdqa %xmm8, %xmm3
4639; SSE2-NEXT:    retq
4640;
4641; SSE4-LABEL: test119:
4642; SSE4:       # BB#0: # %entry
4643; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4644; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4645; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4646; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4647; SSE4-NEXT:    retq
4648;
4649; AVX1-LABEL: test119:
4650; AVX1:       # BB#0: # %entry
4651; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4652; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4653; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4654; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4655; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4656; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4657; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4658; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4659; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4660; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4661; AVX1-NEXT:    retq
4662;
4663; AVX2-LABEL: test119:
4664; AVX2:       # BB#0: # %entry
4665; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4666; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4667; AVX2-NEXT:    retq
4668;
4669; AVX512F-LABEL: test119:
4670; AVX512F:       # BB#0: # %entry
4671; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4672; AVX512F-NEXT:    retq
4673entry:
4674  %cmp = icmp ugt <16 x i32> %a, %b
4675  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4676  ret <16 x i32> %sel
4677}
4678
4679define <16 x i32> @test120(<16 x i32> %a, <16 x i32> %b) {
4680; SSE2-LABEL: test120:
4681; SSE2:       # BB#0: # %entry
4682; SSE2-NEXT:    movdqa %xmm0, %xmm10
4683; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
4684; SSE2-NEXT:    movdqa %xmm3, %xmm0
4685; SSE2-NEXT:    pxor %xmm14, %xmm0
4686; SSE2-NEXT:    movdqa %xmm7, %xmm12
4687; SSE2-NEXT:    pxor %xmm14, %xmm12
4688; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
4689; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
4690; SSE2-NEXT:    movdqa %xmm12, %xmm8
4691; SSE2-NEXT:    pxor %xmm0, %xmm8
4692; SSE2-NEXT:    movdqa %xmm2, %xmm9
4693; SSE2-NEXT:    pxor %xmm14, %xmm9
4694; SSE2-NEXT:    movdqa %xmm6, %xmm13
4695; SSE2-NEXT:    pxor %xmm14, %xmm13
4696; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
4697; SSE2-NEXT:    movdqa %xmm13, %xmm9
4698; SSE2-NEXT:    pxor %xmm0, %xmm9
4699; SSE2-NEXT:    movdqa %xmm1, %xmm11
4700; SSE2-NEXT:    pxor %xmm14, %xmm11
4701; SSE2-NEXT:    movdqa %xmm5, %xmm15
4702; SSE2-NEXT:    pxor %xmm14, %xmm15
4703; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
4704; SSE2-NEXT:    movdqa %xmm10, %xmm11
4705; SSE2-NEXT:    pxor %xmm14, %xmm11
4706; SSE2-NEXT:    pxor %xmm4, %xmm14
4707; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
4708; SSE2-NEXT:    movdqa %xmm15, %xmm11
4709; SSE2-NEXT:    pxor %xmm0, %xmm11
4710; SSE2-NEXT:    pxor %xmm14, %xmm0
4711; SSE2-NEXT:    pandn %xmm10, %xmm14
4712; SSE2-NEXT:    pandn %xmm4, %xmm0
4713; SSE2-NEXT:    por %xmm14, %xmm0
4714; SSE2-NEXT:    pandn %xmm1, %xmm15
4715; SSE2-NEXT:    pandn %xmm5, %xmm11
4716; SSE2-NEXT:    por %xmm15, %xmm11
4717; SSE2-NEXT:    pandn %xmm2, %xmm13
4718; SSE2-NEXT:    pandn %xmm6, %xmm9
4719; SSE2-NEXT:    por %xmm13, %xmm9
4720; SSE2-NEXT:    pandn %xmm3, %xmm12
4721; SSE2-NEXT:    pandn %xmm7, %xmm8
4722; SSE2-NEXT:    por %xmm12, %xmm8
4723; SSE2-NEXT:    movdqa %xmm11, %xmm1
4724; SSE2-NEXT:    movdqa %xmm9, %xmm2
4725; SSE2-NEXT:    movdqa %xmm8, %xmm3
4726; SSE2-NEXT:    retq
4727;
4728; SSE4-LABEL: test120:
4729; SSE4:       # BB#0: # %entry
4730; SSE4-NEXT:    pmaxud %xmm4, %xmm0
4731; SSE4-NEXT:    pmaxud %xmm5, %xmm1
4732; SSE4-NEXT:    pmaxud %xmm6, %xmm2
4733; SSE4-NEXT:    pmaxud %xmm7, %xmm3
4734; SSE4-NEXT:    retq
4735;
4736; AVX1-LABEL: test120:
4737; AVX1:       # BB#0: # %entry
4738; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
4739; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4740; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
4741; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
4742; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
4743; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
4744; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4745; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
4746; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
4747; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
4748; AVX1-NEXT:    retq
4749;
4750; AVX2-LABEL: test120:
4751; AVX2:       # BB#0: # %entry
4752; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
4753; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
4754; AVX2-NEXT:    retq
4755;
4756; AVX512F-LABEL: test120:
4757; AVX512F:       # BB#0: # %entry
4758; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
4759; AVX512F-NEXT:    retq
4760entry:
4761  %cmp = icmp uge <16 x i32> %a, %b
4762  %sel = select <16 x i1> %cmp, <16 x i32> %a, <16 x i32> %b
4763  ret <16 x i32> %sel
4764}
4765
4766define <8 x i64> @test121(<8 x i64> %a, <8 x i64> %b) {
4767; SSE2-LABEL: test121:
4768; SSE2:       # BB#0: # %entry
4769; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
4770; SSE2-NEXT:    movdqa %xmm3, %xmm8
4771; SSE2-NEXT:    pxor %xmm9, %xmm8
4772; SSE2-NEXT:    movdqa %xmm7, %xmm10
4773; SSE2-NEXT:    pxor %xmm9, %xmm10
4774; SSE2-NEXT:    movdqa %xmm10, %xmm11
4775; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
4776; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4777; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
4778; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
4779; SSE2-NEXT:    pand %xmm12, %xmm10
4780; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
4781; SSE2-NEXT:    por %xmm10, %xmm8
4782; SSE2-NEXT:    movdqa %xmm2, %xmm10
4783; SSE2-NEXT:    pxor %xmm9, %xmm10
4784; SSE2-NEXT:    movdqa %xmm6, %xmm11
4785; SSE2-NEXT:    pxor %xmm9, %xmm11
4786; SSE2-NEXT:    movdqa %xmm11, %xmm12
4787; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
4788; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
4789; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
4790; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
4791; SSE2-NEXT:    pand %xmm13, %xmm11
4792; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
4793; SSE2-NEXT:    por %xmm11, %xmm10
4794; SSE2-NEXT:    movdqa %xmm1, %xmm11
4795; SSE2-NEXT:    pxor %xmm9, %xmm11
4796; SSE2-NEXT:    movdqa %xmm5, %xmm12
4797; SSE2-NEXT:    pxor %xmm9, %xmm12
4798; SSE2-NEXT:    movdqa %xmm12, %xmm13
4799; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
4800; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
4801; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
4802; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
4803; SSE2-NEXT:    pand %xmm14, %xmm11
4804; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
4805; SSE2-NEXT:    por %xmm11, %xmm12
4806; SSE2-NEXT:    movdqa %xmm0, %xmm11
4807; SSE2-NEXT:    pxor %xmm9, %xmm11
4808; SSE2-NEXT:    pxor %xmm4, %xmm9
4809; SSE2-NEXT:    movdqa %xmm9, %xmm13
4810; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
4811; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
4812; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
4813; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
4814; SSE2-NEXT:    pand %xmm14, %xmm9
4815; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
4816; SSE2-NEXT:    por %xmm9, %xmm11
4817; SSE2-NEXT:    pand %xmm11, %xmm0
4818; SSE2-NEXT:    pandn %xmm4, %xmm11
4819; SSE2-NEXT:    por %xmm11, %xmm0
4820; SSE2-NEXT:    pand %xmm12, %xmm1
4821; SSE2-NEXT:    pandn %xmm5, %xmm12
4822; SSE2-NEXT:    por %xmm12, %xmm1
4823; SSE2-NEXT:    pand %xmm10, %xmm2
4824; SSE2-NEXT:    pandn %xmm6, %xmm10
4825; SSE2-NEXT:    por %xmm10, %xmm2
4826; SSE2-NEXT:    pand %xmm8, %xmm3
4827; SSE2-NEXT:    pandn %xmm7, %xmm8
4828; SSE2-NEXT:    por %xmm8, %xmm3
4829; SSE2-NEXT:    retq
4830;
4831; SSE4-LABEL: test121:
4832; SSE4:       # BB#0: # %entry
4833; SSE4-NEXT:    movdqa %xmm0, %xmm8
4834; SSE4-NEXT:    movdqa %xmm7, %xmm9
4835; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
4836; SSE4-NEXT:    movdqa %xmm6, %xmm10
4837; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
4838; SSE4-NEXT:    movdqa %xmm5, %xmm11
4839; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
4840; SSE4-NEXT:    movdqa %xmm4, %xmm0
4841; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
4842; SSE4-NEXT:    blendvpd %xmm8, %xmm4
4843; SSE4-NEXT:    movdqa %xmm11, %xmm0
4844; SSE4-NEXT:    blendvpd %xmm1, %xmm5
4845; SSE4-NEXT:    movdqa %xmm10, %xmm0
4846; SSE4-NEXT:    blendvpd %xmm2, %xmm6
4847; SSE4-NEXT:    movdqa %xmm9, %xmm0
4848; SSE4-NEXT:    blendvpd %xmm3, %xmm7
4849; SSE4-NEXT:    movapd %xmm4, %xmm0
4850; SSE4-NEXT:    movapd %xmm5, %xmm1
4851; SSE4-NEXT:    movapd %xmm6, %xmm2
4852; SSE4-NEXT:    movapd %xmm7, %xmm3
4853; SSE4-NEXT:    retq
4854;
4855; AVX1-LABEL: test121:
4856; AVX1:       # BB#0: # %entry
4857; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
4858; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
4859; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
4860; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm5
4861; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
4862; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
4863; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
4864; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
4865; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm6
4866; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
4867; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
4868; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
4869; AVX1-NEXT:    retq
4870;
4871; AVX2-LABEL: test121:
4872; AVX2:       # BB#0: # %entry
4873; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
4874; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm5
4875; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
4876; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
4877; AVX2-NEXT:    retq
4878;
4879; AVX512F-LABEL: test121:
4880; AVX512F:       # BB#0: # %entry
4881; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
4882; AVX512F-NEXT:    retq
4883entry:
4884  %cmp = icmp slt <8 x i64> %a, %b
4885  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
4886  ret <8 x i64> %sel
4887}
4888
4889define <8 x i64> @test122(<8 x i64> %a, <8 x i64> %b) {
4890; SSE2-LABEL: test122:
4891; SSE2:       # BB#0: # %entry
4892; SSE2-NEXT:    movdqa %xmm7, %xmm8
4893; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
4894; SSE2-NEXT:    movdqa %xmm3, %xmm7
4895; SSE2-NEXT:    movdqa %xmm2, %xmm3
4896; SSE2-NEXT:    movdqa %xmm1, %xmm2
4897; SSE2-NEXT:    movdqa %xmm0, %xmm9
4898; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
4899; SSE2-NEXT:    pxor %xmm10, %xmm8
4900; SSE2-NEXT:    movdqa %xmm7, %xmm0
4901; SSE2-NEXT:    pxor %xmm10, %xmm0
4902; SSE2-NEXT:    movdqa %xmm0, %xmm11
4903; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
4904; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
4905; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
4906; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
4907; SSE2-NEXT:    pand %xmm12, %xmm0
4908; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
4909; SSE2-NEXT:    por %xmm0, %xmm12
4910; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
4911; SSE2-NEXT:    movdqa %xmm12, %xmm8
4912; SSE2-NEXT:    pxor %xmm1, %xmm8
4913; SSE2-NEXT:    movdqa %xmm6, %xmm11
4914; SSE2-NEXT:    pxor %xmm10, %xmm11
4915; SSE2-NEXT:    movdqa %xmm3, %xmm13
4916; SSE2-NEXT:    pxor %xmm10, %xmm13
4917; SSE2-NEXT:    movdqa %xmm13, %xmm14
4918; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
4919; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
4920; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
4921; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
4922; SSE2-NEXT:    pand %xmm15, %xmm11
4923; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
4924; SSE2-NEXT:    por %xmm11, %xmm13
4925; SSE2-NEXT:    movdqa %xmm5, %xmm11
4926; SSE2-NEXT:    pxor %xmm10, %xmm11
4927; SSE2-NEXT:    movdqa %xmm2, %xmm14
4928; SSE2-NEXT:    pxor %xmm10, %xmm14
4929; SSE2-NEXT:    movdqa %xmm14, %xmm15
4930; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
4931; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
4932; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
4933; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
4934; SSE2-NEXT:    pand %xmm11, %xmm14
4935; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
4936; SSE2-NEXT:    por %xmm14, %xmm15
4937; SSE2-NEXT:    movdqa %xmm4, %xmm11
4938; SSE2-NEXT:    pxor %xmm10, %xmm11
4939; SSE2-NEXT:    pxor %xmm9, %xmm10
4940; SSE2-NEXT:    movdqa %xmm10, %xmm14
4941; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
4942; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
4943; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
4944; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
4945; SSE2-NEXT:    pand %xmm11, %xmm0
4946; SSE2-NEXT:    movdqa %xmm13, %xmm10
4947; SSE2-NEXT:    pxor %xmm1, %xmm10
4948; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
4949; SSE2-NEXT:    por %xmm0, %xmm14
4950; SSE2-NEXT:    movdqa %xmm15, %xmm11
4951; SSE2-NEXT:    pxor %xmm1, %xmm11
4952; SSE2-NEXT:    pxor %xmm14, %xmm1
4953; SSE2-NEXT:    pandn %xmm9, %xmm14
4954; SSE2-NEXT:    pandn %xmm4, %xmm1
4955; SSE2-NEXT:    por %xmm14, %xmm1
4956; SSE2-NEXT:    pandn %xmm2, %xmm15
4957; SSE2-NEXT:    pandn %xmm5, %xmm11
4958; SSE2-NEXT:    por %xmm15, %xmm11
4959; SSE2-NEXT:    pandn %xmm3, %xmm13
4960; SSE2-NEXT:    pandn %xmm6, %xmm10
4961; SSE2-NEXT:    por %xmm13, %xmm10
4962; SSE2-NEXT:    pandn %xmm7, %xmm12
4963; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
4964; SSE2-NEXT:    por %xmm12, %xmm8
4965; SSE2-NEXT:    movdqa %xmm1, %xmm0
4966; SSE2-NEXT:    movdqa %xmm11, %xmm1
4967; SSE2-NEXT:    movdqa %xmm10, %xmm2
4968; SSE2-NEXT:    movdqa %xmm8, %xmm3
4969; SSE2-NEXT:    retq
4970;
4971; SSE4-LABEL: test122:
4972; SSE4:       # BB#0: # %entry
4973; SSE4-NEXT:    movdqa %xmm0, %xmm8
4974; SSE4-NEXT:    movdqa %xmm3, %xmm9
4975; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
4976; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
4977; SSE4-NEXT:    pxor %xmm12, %xmm9
4978; SSE4-NEXT:    movdqa %xmm2, %xmm10
4979; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
4980; SSE4-NEXT:    pxor %xmm12, %xmm10
4981; SSE4-NEXT:    movdqa %xmm1, %xmm11
4982; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
4983; SSE4-NEXT:    pxor %xmm12, %xmm11
4984; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
4985; SSE4-NEXT:    pxor %xmm12, %xmm0
4986; SSE4-NEXT:    blendvpd %xmm8, %xmm4
4987; SSE4-NEXT:    movdqa %xmm11, %xmm0
4988; SSE4-NEXT:    blendvpd %xmm1, %xmm5
4989; SSE4-NEXT:    movdqa %xmm10, %xmm0
4990; SSE4-NEXT:    blendvpd %xmm2, %xmm6
4991; SSE4-NEXT:    movdqa %xmm9, %xmm0
4992; SSE4-NEXT:    blendvpd %xmm3, %xmm7
4993; SSE4-NEXT:    movapd %xmm4, %xmm0
4994; SSE4-NEXT:    movapd %xmm5, %xmm1
4995; SSE4-NEXT:    movapd %xmm6, %xmm2
4996; SSE4-NEXT:    movapd %xmm7, %xmm3
4997; SSE4-NEXT:    retq
4998;
4999; AVX1-LABEL: test122:
5000; AVX1:       # BB#0: # %entry
5001; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5002; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
5003; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5004; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
5005; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5006; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm6
5007; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5008; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5009; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5010; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
5011; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5012; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5013; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm7
5014; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
5015; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
5016; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5017; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5018; AVX1-NEXT:    retq
5019;
5020; AVX2-LABEL: test122:
5021; AVX2:       # BB#0: # %entry
5022; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
5023; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
5024; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
5025; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm6
5026; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
5027; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5028; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5029; AVX2-NEXT:    retq
5030;
5031; AVX512F-LABEL: test122:
5032; AVX512F:       # BB#0: # %entry
5033; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
5034; AVX512F-NEXT:    retq
5035entry:
5036  %cmp = icmp sle <8 x i64> %a, %b
5037  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5038  ret <8 x i64> %sel
5039}
5040
5041define <8 x i64> @test123(<8 x i64> %a, <8 x i64> %b) {
5042; SSE2-LABEL: test123:
5043; SSE2:       # BB#0: # %entry
5044; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
5045; SSE2-NEXT:    movdqa %xmm7, %xmm8
5046; SSE2-NEXT:    pxor %xmm9, %xmm8
5047; SSE2-NEXT:    movdqa %xmm3, %xmm10
5048; SSE2-NEXT:    pxor %xmm9, %xmm10
5049; SSE2-NEXT:    movdqa %xmm10, %xmm11
5050; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
5051; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5052; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
5053; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
5054; SSE2-NEXT:    pand %xmm12, %xmm10
5055; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
5056; SSE2-NEXT:    por %xmm10, %xmm8
5057; SSE2-NEXT:    movdqa %xmm6, %xmm10
5058; SSE2-NEXT:    pxor %xmm9, %xmm10
5059; SSE2-NEXT:    movdqa %xmm2, %xmm11
5060; SSE2-NEXT:    pxor %xmm9, %xmm11
5061; SSE2-NEXT:    movdqa %xmm11, %xmm12
5062; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
5063; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
5064; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
5065; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
5066; SSE2-NEXT:    pand %xmm13, %xmm11
5067; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
5068; SSE2-NEXT:    por %xmm11, %xmm10
5069; SSE2-NEXT:    movdqa %xmm5, %xmm11
5070; SSE2-NEXT:    pxor %xmm9, %xmm11
5071; SSE2-NEXT:    movdqa %xmm1, %xmm12
5072; SSE2-NEXT:    pxor %xmm9, %xmm12
5073; SSE2-NEXT:    movdqa %xmm12, %xmm13
5074; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
5075; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5076; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
5077; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
5078; SSE2-NEXT:    pand %xmm14, %xmm11
5079; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
5080; SSE2-NEXT:    por %xmm11, %xmm12
5081; SSE2-NEXT:    movdqa %xmm4, %xmm11
5082; SSE2-NEXT:    pxor %xmm9, %xmm11
5083; SSE2-NEXT:    pxor %xmm0, %xmm9
5084; SSE2-NEXT:    movdqa %xmm9, %xmm13
5085; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
5086; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5087; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
5088; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
5089; SSE2-NEXT:    pand %xmm14, %xmm9
5090; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5091; SSE2-NEXT:    por %xmm9, %xmm11
5092; SSE2-NEXT:    pand %xmm11, %xmm0
5093; SSE2-NEXT:    pandn %xmm4, %xmm11
5094; SSE2-NEXT:    por %xmm11, %xmm0
5095; SSE2-NEXT:    pand %xmm12, %xmm1
5096; SSE2-NEXT:    pandn %xmm5, %xmm12
5097; SSE2-NEXT:    por %xmm12, %xmm1
5098; SSE2-NEXT:    pand %xmm10, %xmm2
5099; SSE2-NEXT:    pandn %xmm6, %xmm10
5100; SSE2-NEXT:    por %xmm10, %xmm2
5101; SSE2-NEXT:    pand %xmm8, %xmm3
5102; SSE2-NEXT:    pandn %xmm7, %xmm8
5103; SSE2-NEXT:    por %xmm8, %xmm3
5104; SSE2-NEXT:    retq
5105;
5106; SSE4-LABEL: test123:
5107; SSE4:       # BB#0: # %entry
5108; SSE4-NEXT:    movdqa %xmm0, %xmm8
5109; SSE4-NEXT:    movdqa %xmm3, %xmm9
5110; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
5111; SSE4-NEXT:    movdqa %xmm2, %xmm10
5112; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
5113; SSE4-NEXT:    movdqa %xmm1, %xmm11
5114; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
5115; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
5116; SSE4-NEXT:    blendvpd %xmm8, %xmm4
5117; SSE4-NEXT:    movdqa %xmm11, %xmm0
5118; SSE4-NEXT:    blendvpd %xmm1, %xmm5
5119; SSE4-NEXT:    movdqa %xmm10, %xmm0
5120; SSE4-NEXT:    blendvpd %xmm2, %xmm6
5121; SSE4-NEXT:    movdqa %xmm9, %xmm0
5122; SSE4-NEXT:    blendvpd %xmm3, %xmm7
5123; SSE4-NEXT:    movapd %xmm4, %xmm0
5124; SSE4-NEXT:    movapd %xmm5, %xmm1
5125; SSE4-NEXT:    movapd %xmm6, %xmm2
5126; SSE4-NEXT:    movapd %xmm7, %xmm3
5127; SSE4-NEXT:    retq
5128;
5129; AVX1-LABEL: test123:
5130; AVX1:       # BB#0: # %entry
5131; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5132; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
5133; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5134; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm5
5135; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
5136; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
5137; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5138; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
5139; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm6
5140; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
5141; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5142; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5143; AVX1-NEXT:    retq
5144;
5145; AVX2-LABEL: test123:
5146; AVX2:       # BB#0: # %entry
5147; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
5148; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm5
5149; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5150; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5151; AVX2-NEXT:    retq
5152;
5153; AVX512F-LABEL: test123:
5154; AVX512F:       # BB#0: # %entry
5155; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
5156; AVX512F-NEXT:    retq
5157entry:
5158  %cmp = icmp sgt <8 x i64> %a, %b
5159  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5160  ret <8 x i64> %sel
5161}
5162
5163define <8 x i64> @test124(<8 x i64> %a, <8 x i64> %b) {
5164; SSE2-LABEL: test124:
5165; SSE2:       # BB#0: # %entry
5166; SSE2-NEXT:    movdqa %xmm7, %xmm11
5167; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
5168; SSE2-NEXT:    movdqa %xmm3, %xmm7
5169; SSE2-NEXT:    movdqa %xmm2, %xmm3
5170; SSE2-NEXT:    movdqa %xmm1, %xmm2
5171; SSE2-NEXT:    movdqa %xmm0, %xmm9
5172; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
5173; SSE2-NEXT:    movdqa %xmm7, %xmm8
5174; SSE2-NEXT:    pxor %xmm10, %xmm8
5175; SSE2-NEXT:    movdqa %xmm11, %xmm0
5176; SSE2-NEXT:    pxor %xmm10, %xmm0
5177; SSE2-NEXT:    movdqa %xmm0, %xmm11
5178; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
5179; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5180; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
5181; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
5182; SSE2-NEXT:    pand %xmm12, %xmm0
5183; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
5184; SSE2-NEXT:    por %xmm0, %xmm12
5185; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
5186; SSE2-NEXT:    movdqa %xmm12, %xmm8
5187; SSE2-NEXT:    pxor %xmm1, %xmm8
5188; SSE2-NEXT:    movdqa %xmm3, %xmm11
5189; SSE2-NEXT:    pxor %xmm10, %xmm11
5190; SSE2-NEXT:    movdqa %xmm6, %xmm13
5191; SSE2-NEXT:    pxor %xmm10, %xmm13
5192; SSE2-NEXT:    movdqa %xmm13, %xmm14
5193; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
5194; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
5195; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
5196; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5197; SSE2-NEXT:    pand %xmm15, %xmm11
5198; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
5199; SSE2-NEXT:    por %xmm11, %xmm13
5200; SSE2-NEXT:    movdqa %xmm2, %xmm11
5201; SSE2-NEXT:    pxor %xmm10, %xmm11
5202; SSE2-NEXT:    movdqa %xmm5, %xmm14
5203; SSE2-NEXT:    pxor %xmm10, %xmm14
5204; SSE2-NEXT:    movdqa %xmm14, %xmm15
5205; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
5206; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
5207; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
5208; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5209; SSE2-NEXT:    pand %xmm11, %xmm14
5210; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
5211; SSE2-NEXT:    por %xmm14, %xmm15
5212; SSE2-NEXT:    movdqa %xmm9, %xmm11
5213; SSE2-NEXT:    pxor %xmm10, %xmm11
5214; SSE2-NEXT:    pxor %xmm4, %xmm10
5215; SSE2-NEXT:    movdqa %xmm10, %xmm14
5216; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
5217; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
5218; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
5219; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
5220; SSE2-NEXT:    pand %xmm11, %xmm0
5221; SSE2-NEXT:    movdqa %xmm13, %xmm10
5222; SSE2-NEXT:    pxor %xmm1, %xmm10
5223; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5224; SSE2-NEXT:    por %xmm0, %xmm14
5225; SSE2-NEXT:    movdqa %xmm15, %xmm11
5226; SSE2-NEXT:    pxor %xmm1, %xmm11
5227; SSE2-NEXT:    pxor %xmm14, %xmm1
5228; SSE2-NEXT:    pandn %xmm9, %xmm14
5229; SSE2-NEXT:    pandn %xmm4, %xmm1
5230; SSE2-NEXT:    por %xmm14, %xmm1
5231; SSE2-NEXT:    pandn %xmm2, %xmm15
5232; SSE2-NEXT:    pandn %xmm5, %xmm11
5233; SSE2-NEXT:    por %xmm15, %xmm11
5234; SSE2-NEXT:    pandn %xmm3, %xmm13
5235; SSE2-NEXT:    pandn %xmm6, %xmm10
5236; SSE2-NEXT:    por %xmm13, %xmm10
5237; SSE2-NEXT:    pandn %xmm7, %xmm12
5238; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
5239; SSE2-NEXT:    por %xmm12, %xmm8
5240; SSE2-NEXT:    movdqa %xmm1, %xmm0
5241; SSE2-NEXT:    movdqa %xmm11, %xmm1
5242; SSE2-NEXT:    movdqa %xmm10, %xmm2
5243; SSE2-NEXT:    movdqa %xmm8, %xmm3
5244; SSE2-NEXT:    retq
5245;
5246; SSE4-LABEL: test124:
5247; SSE4:       # BB#0: # %entry
5248; SSE4-NEXT:    movdqa %xmm0, %xmm8
5249; SSE4-NEXT:    movdqa %xmm7, %xmm9
5250; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
5251; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
5252; SSE4-NEXT:    pxor %xmm0, %xmm9
5253; SSE4-NEXT:    movdqa %xmm6, %xmm10
5254; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
5255; SSE4-NEXT:    pxor %xmm0, %xmm10
5256; SSE4-NEXT:    movdqa %xmm5, %xmm11
5257; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
5258; SSE4-NEXT:    pxor %xmm0, %xmm11
5259; SSE4-NEXT:    movdqa %xmm4, %xmm12
5260; SSE4-NEXT:    pcmpgtq %xmm8, %xmm12
5261; SSE4-NEXT:    pxor %xmm12, %xmm0
5262; SSE4-NEXT:    blendvpd %xmm8, %xmm4
5263; SSE4-NEXT:    movdqa %xmm11, %xmm0
5264; SSE4-NEXT:    blendvpd %xmm1, %xmm5
5265; SSE4-NEXT:    movdqa %xmm10, %xmm0
5266; SSE4-NEXT:    blendvpd %xmm2, %xmm6
5267; SSE4-NEXT:    movdqa %xmm9, %xmm0
5268; SSE4-NEXT:    blendvpd %xmm3, %xmm7
5269; SSE4-NEXT:    movapd %xmm4, %xmm0
5270; SSE4-NEXT:    movapd %xmm5, %xmm1
5271; SSE4-NEXT:    movapd %xmm6, %xmm2
5272; SSE4-NEXT:    movapd %xmm7, %xmm3
5273; SSE4-NEXT:    retq
5274;
5275; AVX1-LABEL: test124:
5276; AVX1:       # BB#0: # %entry
5277; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5278; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
5279; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
5280; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
5281; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
5282; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm6
5283; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5284; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5285; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5286; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
5287; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5288; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
5289; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm7
5290; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
5291; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
5292; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5293; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5294; AVX1-NEXT:    retq
5295;
5296; AVX2-LABEL: test124:
5297; AVX2:       # BB#0: # %entry
5298; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
5299; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
5300; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
5301; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm6
5302; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
5303; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5304; AVX2-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5305; AVX2-NEXT:    retq
5306;
5307; AVX512F-LABEL: test124:
5308; AVX512F:       # BB#0: # %entry
5309; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
5310; AVX512F-NEXT:    retq
5311entry:
5312  %cmp = icmp sge <8 x i64> %a, %b
5313  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5314  ret <8 x i64> %sel
5315}
5316
5317define <8 x i64> @test125(<8 x i64> %a, <8 x i64> %b) {
5318; SSE2-LABEL: test125:
5319; SSE2:       # BB#0: # %entry
5320; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
5321; SSE2-NEXT:    movdqa %xmm3, %xmm8
5322; SSE2-NEXT:    pxor %xmm9, %xmm8
5323; SSE2-NEXT:    movdqa %xmm7, %xmm10
5324; SSE2-NEXT:    pxor %xmm9, %xmm10
5325; SSE2-NEXT:    movdqa %xmm10, %xmm11
5326; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
5327; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5328; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
5329; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
5330; SSE2-NEXT:    pand %xmm12, %xmm10
5331; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
5332; SSE2-NEXT:    por %xmm10, %xmm8
5333; SSE2-NEXT:    movdqa %xmm2, %xmm10
5334; SSE2-NEXT:    pxor %xmm9, %xmm10
5335; SSE2-NEXT:    movdqa %xmm6, %xmm11
5336; SSE2-NEXT:    pxor %xmm9, %xmm11
5337; SSE2-NEXT:    movdqa %xmm11, %xmm12
5338; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
5339; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
5340; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
5341; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
5342; SSE2-NEXT:    pand %xmm13, %xmm11
5343; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
5344; SSE2-NEXT:    por %xmm11, %xmm10
5345; SSE2-NEXT:    movdqa %xmm1, %xmm11
5346; SSE2-NEXT:    pxor %xmm9, %xmm11
5347; SSE2-NEXT:    movdqa %xmm5, %xmm12
5348; SSE2-NEXT:    pxor %xmm9, %xmm12
5349; SSE2-NEXT:    movdqa %xmm12, %xmm13
5350; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
5351; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5352; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
5353; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
5354; SSE2-NEXT:    pand %xmm14, %xmm11
5355; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
5356; SSE2-NEXT:    por %xmm11, %xmm12
5357; SSE2-NEXT:    movdqa %xmm0, %xmm11
5358; SSE2-NEXT:    pxor %xmm9, %xmm11
5359; SSE2-NEXT:    pxor %xmm4, %xmm9
5360; SSE2-NEXT:    movdqa %xmm9, %xmm13
5361; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
5362; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5363; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
5364; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
5365; SSE2-NEXT:    pand %xmm14, %xmm9
5366; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5367; SSE2-NEXT:    por %xmm9, %xmm11
5368; SSE2-NEXT:    pand %xmm11, %xmm0
5369; SSE2-NEXT:    pandn %xmm4, %xmm11
5370; SSE2-NEXT:    por %xmm11, %xmm0
5371; SSE2-NEXT:    pand %xmm12, %xmm1
5372; SSE2-NEXT:    pandn %xmm5, %xmm12
5373; SSE2-NEXT:    por %xmm12, %xmm1
5374; SSE2-NEXT:    pand %xmm10, %xmm2
5375; SSE2-NEXT:    pandn %xmm6, %xmm10
5376; SSE2-NEXT:    por %xmm10, %xmm2
5377; SSE2-NEXT:    pand %xmm8, %xmm3
5378; SSE2-NEXT:    pandn %xmm7, %xmm8
5379; SSE2-NEXT:    por %xmm8, %xmm3
5380; SSE2-NEXT:    retq
5381;
5382; SSE4-LABEL: test125:
5383; SSE4:       # BB#0: # %entry
5384; SSE4-NEXT:    movdqa %xmm0, %xmm8
5385; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
5386; SSE4-NEXT:    movdqa %xmm3, %xmm10
5387; SSE4-NEXT:    pxor %xmm0, %xmm10
5388; SSE4-NEXT:    movdqa %xmm7, %xmm9
5389; SSE4-NEXT:    pxor %xmm0, %xmm9
5390; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
5391; SSE4-NEXT:    movdqa %xmm2, %xmm11
5392; SSE4-NEXT:    pxor %xmm0, %xmm11
5393; SSE4-NEXT:    movdqa %xmm6, %xmm10
5394; SSE4-NEXT:    pxor %xmm0, %xmm10
5395; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
5396; SSE4-NEXT:    movdqa %xmm1, %xmm12
5397; SSE4-NEXT:    pxor %xmm0, %xmm12
5398; SSE4-NEXT:    movdqa %xmm5, %xmm11
5399; SSE4-NEXT:    pxor %xmm0, %xmm11
5400; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
5401; SSE4-NEXT:    movdqa %xmm8, %xmm12
5402; SSE4-NEXT:    pxor %xmm0, %xmm12
5403; SSE4-NEXT:    pxor %xmm4, %xmm0
5404; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
5405; SSE4-NEXT:    blendvpd %xmm8, %xmm4
5406; SSE4-NEXT:    movdqa %xmm11, %xmm0
5407; SSE4-NEXT:    blendvpd %xmm1, %xmm5
5408; SSE4-NEXT:    movdqa %xmm10, %xmm0
5409; SSE4-NEXT:    blendvpd %xmm2, %xmm6
5410; SSE4-NEXT:    movdqa %xmm9, %xmm0
5411; SSE4-NEXT:    blendvpd %xmm3, %xmm7
5412; SSE4-NEXT:    movapd %xmm4, %xmm0
5413; SSE4-NEXT:    movapd %xmm5, %xmm1
5414; SSE4-NEXT:    movapd %xmm6, %xmm2
5415; SSE4-NEXT:    movapd %xmm7, %xmm3
5416; SSE4-NEXT:    retq
5417;
5418; AVX1-LABEL: test125:
5419; AVX1:       # BB#0: # %entry
5420; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5421; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5422; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
5423; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
5424; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
5425; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5426; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
5427; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
5428; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5429; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5430; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5431; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
5432; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
5433; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
5434; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5435; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
5436; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
5437; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
5438; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
5439; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5440; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5441; AVX1-NEXT:    retq
5442;
5443; AVX2-LABEL: test125:
5444; AVX2:       # BB#0: # %entry
5445; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
5446; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
5447; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
5448; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5449; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
5450; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
5451; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
5452; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5453; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
5454; AVX2-NEXT:    retq
5455;
5456; AVX512F-LABEL: test125:
5457; AVX512F:       # BB#0: # %entry
5458; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5459; AVX512F-NEXT:    retq
5460entry:
5461  %cmp = icmp ult <8 x i64> %a, %b
5462  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5463  ret <8 x i64> %sel
5464}
5465
5466define <8 x i64> @test126(<8 x i64> %a, <8 x i64> %b) {
5467; SSE2-LABEL: test126:
5468; SSE2:       # BB#0: # %entry
5469; SSE2-NEXT:    movdqa %xmm7, %xmm8
5470; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
5471; SSE2-NEXT:    movdqa %xmm3, %xmm7
5472; SSE2-NEXT:    movdqa %xmm2, %xmm3
5473; SSE2-NEXT:    movdqa %xmm1, %xmm2
5474; SSE2-NEXT:    movdqa %xmm0, %xmm9
5475; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
5476; SSE2-NEXT:    pxor %xmm10, %xmm8
5477; SSE2-NEXT:    movdqa %xmm7, %xmm0
5478; SSE2-NEXT:    pxor %xmm10, %xmm0
5479; SSE2-NEXT:    movdqa %xmm0, %xmm11
5480; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
5481; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5482; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
5483; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
5484; SSE2-NEXT:    pand %xmm12, %xmm0
5485; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
5486; SSE2-NEXT:    por %xmm0, %xmm12
5487; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
5488; SSE2-NEXT:    movdqa %xmm12, %xmm8
5489; SSE2-NEXT:    pxor %xmm1, %xmm8
5490; SSE2-NEXT:    movdqa %xmm6, %xmm11
5491; SSE2-NEXT:    pxor %xmm10, %xmm11
5492; SSE2-NEXT:    movdqa %xmm3, %xmm13
5493; SSE2-NEXT:    pxor %xmm10, %xmm13
5494; SSE2-NEXT:    movdqa %xmm13, %xmm14
5495; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
5496; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
5497; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
5498; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5499; SSE2-NEXT:    pand %xmm15, %xmm11
5500; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
5501; SSE2-NEXT:    por %xmm11, %xmm13
5502; SSE2-NEXT:    movdqa %xmm5, %xmm11
5503; SSE2-NEXT:    pxor %xmm10, %xmm11
5504; SSE2-NEXT:    movdqa %xmm2, %xmm14
5505; SSE2-NEXT:    pxor %xmm10, %xmm14
5506; SSE2-NEXT:    movdqa %xmm14, %xmm15
5507; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
5508; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
5509; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
5510; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5511; SSE2-NEXT:    pand %xmm11, %xmm14
5512; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
5513; SSE2-NEXT:    por %xmm14, %xmm15
5514; SSE2-NEXT:    movdqa %xmm4, %xmm11
5515; SSE2-NEXT:    pxor %xmm10, %xmm11
5516; SSE2-NEXT:    pxor %xmm9, %xmm10
5517; SSE2-NEXT:    movdqa %xmm10, %xmm14
5518; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
5519; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
5520; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
5521; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
5522; SSE2-NEXT:    pand %xmm11, %xmm0
5523; SSE2-NEXT:    movdqa %xmm13, %xmm10
5524; SSE2-NEXT:    pxor %xmm1, %xmm10
5525; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5526; SSE2-NEXT:    por %xmm0, %xmm14
5527; SSE2-NEXT:    movdqa %xmm15, %xmm11
5528; SSE2-NEXT:    pxor %xmm1, %xmm11
5529; SSE2-NEXT:    pxor %xmm14, %xmm1
5530; SSE2-NEXT:    pandn %xmm9, %xmm14
5531; SSE2-NEXT:    pandn %xmm4, %xmm1
5532; SSE2-NEXT:    por %xmm14, %xmm1
5533; SSE2-NEXT:    pandn %xmm2, %xmm15
5534; SSE2-NEXT:    pandn %xmm5, %xmm11
5535; SSE2-NEXT:    por %xmm15, %xmm11
5536; SSE2-NEXT:    pandn %xmm3, %xmm13
5537; SSE2-NEXT:    pandn %xmm6, %xmm10
5538; SSE2-NEXT:    por %xmm13, %xmm10
5539; SSE2-NEXT:    pandn %xmm7, %xmm12
5540; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
5541; SSE2-NEXT:    por %xmm12, %xmm8
5542; SSE2-NEXT:    movdqa %xmm1, %xmm0
5543; SSE2-NEXT:    movdqa %xmm11, %xmm1
5544; SSE2-NEXT:    movdqa %xmm10, %xmm2
5545; SSE2-NEXT:    movdqa %xmm8, %xmm3
5546; SSE2-NEXT:    retq
5547;
5548; SSE4-LABEL: test126:
5549; SSE4:       # BB#0: # %entry
5550; SSE4-NEXT:    movdqa %xmm0, %xmm9
5551; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
5552; SSE4-NEXT:    movdqa %xmm7, %xmm10
5553; SSE4-NEXT:    pxor %xmm0, %xmm10
5554; SSE4-NEXT:    movdqa %xmm3, %xmm8
5555; SSE4-NEXT:    pxor %xmm0, %xmm8
5556; SSE4-NEXT:    pcmpgtq %xmm10, %xmm8
5557; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
5558; SSE4-NEXT:    pxor %xmm12, %xmm8
5559; SSE4-NEXT:    movdqa %xmm6, %xmm11
5560; SSE4-NEXT:    pxor %xmm0, %xmm11
5561; SSE4-NEXT:    movdqa %xmm2, %xmm10
5562; SSE4-NEXT:    pxor %xmm0, %xmm10
5563; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
5564; SSE4-NEXT:    pxor %xmm12, %xmm10
5565; SSE4-NEXT:    movdqa %xmm5, %xmm13
5566; SSE4-NEXT:    pxor %xmm0, %xmm13
5567; SSE4-NEXT:    movdqa %xmm1, %xmm11
5568; SSE4-NEXT:    pxor %xmm0, %xmm11
5569; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
5570; SSE4-NEXT:    pxor %xmm12, %xmm11
5571; SSE4-NEXT:    movdqa %xmm4, %xmm13
5572; SSE4-NEXT:    pxor %xmm0, %xmm13
5573; SSE4-NEXT:    pxor %xmm9, %xmm0
5574; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
5575; SSE4-NEXT:    pxor %xmm12, %xmm0
5576; SSE4-NEXT:    blendvpd %xmm9, %xmm4
5577; SSE4-NEXT:    movdqa %xmm11, %xmm0
5578; SSE4-NEXT:    blendvpd %xmm1, %xmm5
5579; SSE4-NEXT:    movdqa %xmm10, %xmm0
5580; SSE4-NEXT:    blendvpd %xmm2, %xmm6
5581; SSE4-NEXT:    movdqa %xmm8, %xmm0
5582; SSE4-NEXT:    blendvpd %xmm3, %xmm7
5583; SSE4-NEXT:    movapd %xmm4, %xmm0
5584; SSE4-NEXT:    movapd %xmm5, %xmm1
5585; SSE4-NEXT:    movapd %xmm6, %xmm2
5586; SSE4-NEXT:    movapd %xmm7, %xmm3
5587; SSE4-NEXT:    retq
5588;
5589; AVX1-LABEL: test126:
5590; AVX1:       # BB#0: # %entry
5591; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5592; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5593; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
5594; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
5595; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
5596; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5597; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
5598; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
5599; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
5600; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
5601; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
5602; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
5603; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5604; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5605; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
5606; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
5607; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
5608; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5609; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
5610; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
5611; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
5612; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
5613; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
5614; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
5615; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5616; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5617; AVX1-NEXT:    retq
5618;
5619; AVX2-LABEL: test126:
5620; AVX2:       # BB#0: # %entry
5621; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
5622; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
5623; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
5624; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5625; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
5626; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
5627; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm7
5628; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
5629; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
5630; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
5631; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5632; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
5633; AVX2-NEXT:    retq
5634;
5635; AVX512F-LABEL: test126:
5636; AVX512F:       # BB#0: # %entry
5637; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
5638; AVX512F-NEXT:    retq
5639entry:
5640  %cmp = icmp ule <8 x i64> %a, %b
5641  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5642  ret <8 x i64> %sel
5643}
5644
5645define <8 x i64> @test127(<8 x i64> %a, <8 x i64> %b) {
5646; SSE2-LABEL: test127:
5647; SSE2:       # BB#0: # %entry
5648; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,2147483648,2147483648,2147483648]
5649; SSE2-NEXT:    movdqa %xmm7, %xmm8
5650; SSE2-NEXT:    pxor %xmm9, %xmm8
5651; SSE2-NEXT:    movdqa %xmm3, %xmm10
5652; SSE2-NEXT:    pxor %xmm9, %xmm10
5653; SSE2-NEXT:    movdqa %xmm10, %xmm11
5654; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
5655; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5656; SSE2-NEXT:    pcmpeqd %xmm8, %xmm10
5657; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
5658; SSE2-NEXT:    pand %xmm12, %xmm10
5659; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm11[1,1,3,3]
5660; SSE2-NEXT:    por %xmm10, %xmm8
5661; SSE2-NEXT:    movdqa %xmm6, %xmm10
5662; SSE2-NEXT:    pxor %xmm9, %xmm10
5663; SSE2-NEXT:    movdqa %xmm2, %xmm11
5664; SSE2-NEXT:    pxor %xmm9, %xmm11
5665; SSE2-NEXT:    movdqa %xmm11, %xmm12
5666; SSE2-NEXT:    pcmpgtd %xmm10, %xmm12
5667; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
5668; SSE2-NEXT:    pcmpeqd %xmm10, %xmm11
5669; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm11[1,1,3,3]
5670; SSE2-NEXT:    pand %xmm13, %xmm11
5671; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm12[1,1,3,3]
5672; SSE2-NEXT:    por %xmm11, %xmm10
5673; SSE2-NEXT:    movdqa %xmm5, %xmm11
5674; SSE2-NEXT:    pxor %xmm9, %xmm11
5675; SSE2-NEXT:    movdqa %xmm1, %xmm12
5676; SSE2-NEXT:    pxor %xmm9, %xmm12
5677; SSE2-NEXT:    movdqa %xmm12, %xmm13
5678; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
5679; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5680; SSE2-NEXT:    pcmpeqd %xmm11, %xmm12
5681; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm12[1,1,3,3]
5682; SSE2-NEXT:    pand %xmm14, %xmm11
5683; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm13[1,1,3,3]
5684; SSE2-NEXT:    por %xmm11, %xmm12
5685; SSE2-NEXT:    movdqa %xmm4, %xmm11
5686; SSE2-NEXT:    pxor %xmm9, %xmm11
5687; SSE2-NEXT:    pxor %xmm0, %xmm9
5688; SSE2-NEXT:    movdqa %xmm9, %xmm13
5689; SSE2-NEXT:    pcmpgtd %xmm11, %xmm13
5690; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
5691; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
5692; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
5693; SSE2-NEXT:    pand %xmm14, %xmm9
5694; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5695; SSE2-NEXT:    por %xmm9, %xmm11
5696; SSE2-NEXT:    pand %xmm11, %xmm0
5697; SSE2-NEXT:    pandn %xmm4, %xmm11
5698; SSE2-NEXT:    por %xmm11, %xmm0
5699; SSE2-NEXT:    pand %xmm12, %xmm1
5700; SSE2-NEXT:    pandn %xmm5, %xmm12
5701; SSE2-NEXT:    por %xmm12, %xmm1
5702; SSE2-NEXT:    pand %xmm10, %xmm2
5703; SSE2-NEXT:    pandn %xmm6, %xmm10
5704; SSE2-NEXT:    por %xmm10, %xmm2
5705; SSE2-NEXT:    pand %xmm8, %xmm3
5706; SSE2-NEXT:    pandn %xmm7, %xmm8
5707; SSE2-NEXT:    por %xmm8, %xmm3
5708; SSE2-NEXT:    retq
5709;
5710; SSE4-LABEL: test127:
5711; SSE4:       # BB#0: # %entry
5712; SSE4-NEXT:    movdqa %xmm0, %xmm8
5713; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
5714; SSE4-NEXT:    movdqa %xmm7, %xmm10
5715; SSE4-NEXT:    pxor %xmm0, %xmm10
5716; SSE4-NEXT:    movdqa %xmm3, %xmm9
5717; SSE4-NEXT:    pxor %xmm0, %xmm9
5718; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
5719; SSE4-NEXT:    movdqa %xmm6, %xmm11
5720; SSE4-NEXT:    pxor %xmm0, %xmm11
5721; SSE4-NEXT:    movdqa %xmm2, %xmm10
5722; SSE4-NEXT:    pxor %xmm0, %xmm10
5723; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
5724; SSE4-NEXT:    movdqa %xmm5, %xmm12
5725; SSE4-NEXT:    pxor %xmm0, %xmm12
5726; SSE4-NEXT:    movdqa %xmm1, %xmm11
5727; SSE4-NEXT:    pxor %xmm0, %xmm11
5728; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
5729; SSE4-NEXT:    movdqa %xmm4, %xmm12
5730; SSE4-NEXT:    pxor %xmm0, %xmm12
5731; SSE4-NEXT:    pxor %xmm8, %xmm0
5732; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
5733; SSE4-NEXT:    blendvpd %xmm8, %xmm4
5734; SSE4-NEXT:    movdqa %xmm11, %xmm0
5735; SSE4-NEXT:    blendvpd %xmm1, %xmm5
5736; SSE4-NEXT:    movdqa %xmm10, %xmm0
5737; SSE4-NEXT:    blendvpd %xmm2, %xmm6
5738; SSE4-NEXT:    movdqa %xmm9, %xmm0
5739; SSE4-NEXT:    blendvpd %xmm3, %xmm7
5740; SSE4-NEXT:    movapd %xmm4, %xmm0
5741; SSE4-NEXT:    movapd %xmm5, %xmm1
5742; SSE4-NEXT:    movapd %xmm6, %xmm2
5743; SSE4-NEXT:    movapd %xmm7, %xmm3
5744; SSE4-NEXT:    retq
5745;
5746; AVX1-LABEL: test127:
5747; AVX1:       # BB#0: # %entry
5748; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
5749; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5750; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
5751; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
5752; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
5753; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5754; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
5755; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
5756; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5757; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5758; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
5759; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
5760; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
5761; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
5762; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5763; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
5764; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
5765; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
5766; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
5767; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5768; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5769; AVX1-NEXT:    retq
5770;
5771; AVX2-LABEL: test127:
5772; AVX2:       # BB#0: # %entry
5773; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
5774; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
5775; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
5776; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5777; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
5778; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
5779; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
5780; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5781; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
5782; AVX2-NEXT:    retq
5783;
5784; AVX512F-LABEL: test127:
5785; AVX512F:       # BB#0: # %entry
5786; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5787; AVX512F-NEXT:    retq
5788entry:
5789  %cmp = icmp ugt <8 x i64> %a, %b
5790  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5791  ret <8 x i64> %sel
5792}
5793
5794define <8 x i64> @test128(<8 x i64> %a, <8 x i64> %b) {
5795; SSE2-LABEL: test128:
5796; SSE2:       # BB#0: # %entry
5797; SSE2-NEXT:    movdqa %xmm7, %xmm11
5798; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
5799; SSE2-NEXT:    movdqa %xmm3, %xmm7
5800; SSE2-NEXT:    movdqa %xmm2, %xmm3
5801; SSE2-NEXT:    movdqa %xmm1, %xmm2
5802; SSE2-NEXT:    movdqa %xmm0, %xmm9
5803; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
5804; SSE2-NEXT:    movdqa %xmm7, %xmm8
5805; SSE2-NEXT:    pxor %xmm10, %xmm8
5806; SSE2-NEXT:    movdqa %xmm11, %xmm0
5807; SSE2-NEXT:    pxor %xmm10, %xmm0
5808; SSE2-NEXT:    movdqa %xmm0, %xmm11
5809; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
5810; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
5811; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
5812; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
5813; SSE2-NEXT:    pand %xmm12, %xmm0
5814; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
5815; SSE2-NEXT:    por %xmm0, %xmm12
5816; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
5817; SSE2-NEXT:    movdqa %xmm12, %xmm8
5818; SSE2-NEXT:    pxor %xmm1, %xmm8
5819; SSE2-NEXT:    movdqa %xmm3, %xmm11
5820; SSE2-NEXT:    pxor %xmm10, %xmm11
5821; SSE2-NEXT:    movdqa %xmm6, %xmm13
5822; SSE2-NEXT:    pxor %xmm10, %xmm13
5823; SSE2-NEXT:    movdqa %xmm13, %xmm14
5824; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
5825; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
5826; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
5827; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
5828; SSE2-NEXT:    pand %xmm15, %xmm11
5829; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
5830; SSE2-NEXT:    por %xmm11, %xmm13
5831; SSE2-NEXT:    movdqa %xmm2, %xmm11
5832; SSE2-NEXT:    pxor %xmm10, %xmm11
5833; SSE2-NEXT:    movdqa %xmm5, %xmm14
5834; SSE2-NEXT:    pxor %xmm10, %xmm14
5835; SSE2-NEXT:    movdqa %xmm14, %xmm15
5836; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
5837; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
5838; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
5839; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5840; SSE2-NEXT:    pand %xmm11, %xmm14
5841; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
5842; SSE2-NEXT:    por %xmm14, %xmm15
5843; SSE2-NEXT:    movdqa %xmm9, %xmm11
5844; SSE2-NEXT:    pxor %xmm10, %xmm11
5845; SSE2-NEXT:    pxor %xmm4, %xmm10
5846; SSE2-NEXT:    movdqa %xmm10, %xmm14
5847; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
5848; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
5849; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
5850; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
5851; SSE2-NEXT:    pand %xmm11, %xmm0
5852; SSE2-NEXT:    movdqa %xmm13, %xmm10
5853; SSE2-NEXT:    pxor %xmm1, %xmm10
5854; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
5855; SSE2-NEXT:    por %xmm0, %xmm14
5856; SSE2-NEXT:    movdqa %xmm15, %xmm11
5857; SSE2-NEXT:    pxor %xmm1, %xmm11
5858; SSE2-NEXT:    pxor %xmm14, %xmm1
5859; SSE2-NEXT:    pandn %xmm9, %xmm14
5860; SSE2-NEXT:    pandn %xmm4, %xmm1
5861; SSE2-NEXT:    por %xmm14, %xmm1
5862; SSE2-NEXT:    pandn %xmm2, %xmm15
5863; SSE2-NEXT:    pandn %xmm5, %xmm11
5864; SSE2-NEXT:    por %xmm15, %xmm11
5865; SSE2-NEXT:    pandn %xmm3, %xmm13
5866; SSE2-NEXT:    pandn %xmm6, %xmm10
5867; SSE2-NEXT:    por %xmm13, %xmm10
5868; SSE2-NEXT:    pandn %xmm7, %xmm12
5869; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm8 # 16-byte Folded Reload
5870; SSE2-NEXT:    por %xmm12, %xmm8
5871; SSE2-NEXT:    movdqa %xmm1, %xmm0
5872; SSE2-NEXT:    movdqa %xmm11, %xmm1
5873; SSE2-NEXT:    movdqa %xmm10, %xmm2
5874; SSE2-NEXT:    movdqa %xmm8, %xmm3
5875; SSE2-NEXT:    retq
5876;
5877; SSE4-LABEL: test128:
5878; SSE4:       # BB#0: # %entry
5879; SSE4-NEXT:    movdqa %xmm0, %xmm9
5880; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
5881; SSE4-NEXT:    movdqa %xmm3, %xmm10
5882; SSE4-NEXT:    pxor %xmm0, %xmm10
5883; SSE4-NEXT:    movdqa %xmm7, %xmm8
5884; SSE4-NEXT:    pxor %xmm0, %xmm8
5885; SSE4-NEXT:    pcmpgtq %xmm10, %xmm8
5886; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
5887; SSE4-NEXT:    pxor %xmm12, %xmm8
5888; SSE4-NEXT:    movdqa %xmm2, %xmm11
5889; SSE4-NEXT:    pxor %xmm0, %xmm11
5890; SSE4-NEXT:    movdqa %xmm6, %xmm10
5891; SSE4-NEXT:    pxor %xmm0, %xmm10
5892; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
5893; SSE4-NEXT:    pxor %xmm12, %xmm10
5894; SSE4-NEXT:    movdqa %xmm1, %xmm13
5895; SSE4-NEXT:    pxor %xmm0, %xmm13
5896; SSE4-NEXT:    movdqa %xmm5, %xmm11
5897; SSE4-NEXT:    pxor %xmm0, %xmm11
5898; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
5899; SSE4-NEXT:    pxor %xmm12, %xmm11
5900; SSE4-NEXT:    movdqa %xmm9, %xmm13
5901; SSE4-NEXT:    pxor %xmm0, %xmm13
5902; SSE4-NEXT:    pxor %xmm4, %xmm0
5903; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
5904; SSE4-NEXT:    pxor %xmm12, %xmm0
5905; SSE4-NEXT:    blendvpd %xmm9, %xmm4
5906; SSE4-NEXT:    movdqa %xmm11, %xmm0
5907; SSE4-NEXT:    blendvpd %xmm1, %xmm5
5908; SSE4-NEXT:    movdqa %xmm10, %xmm0
5909; SSE4-NEXT:    blendvpd %xmm2, %xmm6
5910; SSE4-NEXT:    movdqa %xmm8, %xmm0
5911; SSE4-NEXT:    blendvpd %xmm3, %xmm7
5912; SSE4-NEXT:    movapd %xmm4, %xmm0
5913; SSE4-NEXT:    movapd %xmm5, %xmm1
5914; SSE4-NEXT:    movapd %xmm6, %xmm2
5915; SSE4-NEXT:    movapd %xmm7, %xmm3
5916; SSE4-NEXT:    retq
5917;
5918; AVX1-LABEL: test128:
5919; AVX1:       # BB#0: # %entry
5920; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
5921; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
5922; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
5923; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
5924; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
5925; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
5926; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
5927; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
5928; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
5929; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
5930; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
5931; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
5932; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
5933; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
5934; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
5935; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
5936; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
5937; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
5938; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
5939; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
5940; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
5941; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
5942; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
5943; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
5944; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm2, %ymm0
5945; AVX1-NEXT:    vblendvpd %ymm4, %ymm1, %ymm3, %ymm1
5946; AVX1-NEXT:    retq
5947;
5948; AVX2-LABEL: test128:
5949; AVX2:       # BB#0: # %entry
5950; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
5951; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
5952; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
5953; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
5954; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
5955; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
5956; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm7
5957; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
5958; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
5959; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
5960; AVX2-NEXT:    vblendvpd %ymm4, %ymm0, %ymm2, %ymm0
5961; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm3, %ymm1
5962; AVX2-NEXT:    retq
5963;
5964; AVX512F-LABEL: test128:
5965; AVX512F:       # BB#0: # %entry
5966; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
5967; AVX512F-NEXT:    retq
5968entry:
5969  %cmp = icmp uge <8 x i64> %a, %b
5970  %sel = select <8 x i1> %cmp, <8 x i64> %a, <8 x i64> %b
5971  ret <8 x i64> %sel
5972}
5973
5974define <64 x i8> @test129(<64 x i8> %a, <64 x i8> %b) {
5975; SSE2-LABEL: test129:
5976; SSE2:       # BB#0: # %entry
5977; SSE2-NEXT:    movdqa %xmm3, %xmm8
5978; SSE2-NEXT:    movdqa %xmm7, %xmm3
5979; SSE2-NEXT:    pcmpgtb %xmm8, %xmm3
5980; SSE2-NEXT:    movdqa %xmm6, %xmm9
5981; SSE2-NEXT:    pcmpgtb %xmm2, %xmm9
5982; SSE2-NEXT:    movdqa %xmm5, %xmm10
5983; SSE2-NEXT:    pcmpgtb %xmm1, %xmm10
5984; SSE2-NEXT:    movdqa %xmm4, %xmm11
5985; SSE2-NEXT:    pcmpgtb %xmm0, %xmm11
5986; SSE2-NEXT:    pand %xmm11, %xmm4
5987; SSE2-NEXT:    pandn %xmm0, %xmm11
5988; SSE2-NEXT:    por %xmm4, %xmm11
5989; SSE2-NEXT:    pand %xmm10, %xmm5
5990; SSE2-NEXT:    pandn %xmm1, %xmm10
5991; SSE2-NEXT:    por %xmm5, %xmm10
5992; SSE2-NEXT:    pand %xmm9, %xmm6
5993; SSE2-NEXT:    pandn %xmm2, %xmm9
5994; SSE2-NEXT:    por %xmm6, %xmm9
5995; SSE2-NEXT:    pand %xmm3, %xmm7
5996; SSE2-NEXT:    pandn %xmm8, %xmm3
5997; SSE2-NEXT:    por %xmm7, %xmm3
5998; SSE2-NEXT:    movdqa %xmm11, %xmm0
5999; SSE2-NEXT:    movdqa %xmm10, %xmm1
6000; SSE2-NEXT:    movdqa %xmm9, %xmm2
6001; SSE2-NEXT:    retq
6002;
6003; SSE4-LABEL: test129:
6004; SSE4:       # BB#0: # %entry
6005; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
6006; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
6007; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
6008; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
6009; SSE4-NEXT:    retq
6010;
6011; AVX1-LABEL: test129:
6012; AVX1:       # BB#0: # %entry
6013; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6014; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6015; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
6016; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
6017; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6018; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6019; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6020; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
6021; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
6022; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6023; AVX1-NEXT:    retq
6024;
6025; AVX2-LABEL: test129:
6026; AVX2:       # BB#0: # %entry
6027; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
6028; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
6029; AVX2-NEXT:    retq
6030;
6031; AVX512BW-LABEL: test129:
6032; AVX512BW:       # BB#0: # %entry
6033; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
6034; AVX512BW-NEXT:    retq
6035entry:
6036  %cmp = icmp slt <64 x i8> %a, %b
6037  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6038  ret <64 x i8> %sel
6039}
6040
6041define <64 x i8> @test130(<64 x i8> %a, <64 x i8> %b) {
6042; SSE2-LABEL: test130:
6043; SSE2:       # BB#0: # %entry
6044; SSE2-NEXT:    movdqa %xmm2, %xmm8
6045; SSE2-NEXT:    movdqa %xmm3, %xmm12
6046; SSE2-NEXT:    pcmpgtb %xmm7, %xmm12
6047; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
6048; SSE2-NEXT:    movdqa %xmm12, %xmm9
6049; SSE2-NEXT:    pxor %xmm13, %xmm9
6050; SSE2-NEXT:    movdqa %xmm8, %xmm14
6051; SSE2-NEXT:    pcmpgtb %xmm6, %xmm14
6052; SSE2-NEXT:    movdqa %xmm14, %xmm2
6053; SSE2-NEXT:    pxor %xmm13, %xmm2
6054; SSE2-NEXT:    movdqa %xmm1, %xmm15
6055; SSE2-NEXT:    pcmpgtb %xmm5, %xmm15
6056; SSE2-NEXT:    movdqa %xmm15, %xmm10
6057; SSE2-NEXT:    pxor %xmm13, %xmm10
6058; SSE2-NEXT:    movdqa %xmm0, %xmm11
6059; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
6060; SSE2-NEXT:    pxor %xmm11, %xmm13
6061; SSE2-NEXT:    pandn %xmm4, %xmm11
6062; SSE2-NEXT:    pandn %xmm0, %xmm13
6063; SSE2-NEXT:    por %xmm13, %xmm11
6064; SSE2-NEXT:    pandn %xmm5, %xmm15
6065; SSE2-NEXT:    pandn %xmm1, %xmm10
6066; SSE2-NEXT:    por %xmm15, %xmm10
6067; SSE2-NEXT:    pandn %xmm6, %xmm14
6068; SSE2-NEXT:    pandn %xmm8, %xmm2
6069; SSE2-NEXT:    por %xmm14, %xmm2
6070; SSE2-NEXT:    pandn %xmm7, %xmm12
6071; SSE2-NEXT:    pandn %xmm3, %xmm9
6072; SSE2-NEXT:    por %xmm12, %xmm9
6073; SSE2-NEXT:    movdqa %xmm11, %xmm0
6074; SSE2-NEXT:    movdqa %xmm10, %xmm1
6075; SSE2-NEXT:    movdqa %xmm9, %xmm3
6076; SSE2-NEXT:    retq
6077;
6078; SSE4-LABEL: test130:
6079; SSE4:       # BB#0: # %entry
6080; SSE4-NEXT:    pmaxsb %xmm4, %xmm0
6081; SSE4-NEXT:    pmaxsb %xmm5, %xmm1
6082; SSE4-NEXT:    pmaxsb %xmm6, %xmm2
6083; SSE4-NEXT:    pmaxsb %xmm7, %xmm3
6084; SSE4-NEXT:    retq
6085;
6086; AVX1-LABEL: test130:
6087; AVX1:       # BB#0: # %entry
6088; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6089; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6090; AVX1-NEXT:    vpmaxsb %xmm4, %xmm5, %xmm4
6091; AVX1-NEXT:    vpmaxsb %xmm2, %xmm0, %xmm0
6092; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6093; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6094; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6095; AVX1-NEXT:    vpmaxsb %xmm2, %xmm4, %xmm2
6096; AVX1-NEXT:    vpmaxsb %xmm3, %xmm1, %xmm1
6097; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6098; AVX1-NEXT:    retq
6099;
6100; AVX2-LABEL: test130:
6101; AVX2:       # BB#0: # %entry
6102; AVX2-NEXT:    vpmaxsb %ymm2, %ymm0, %ymm0
6103; AVX2-NEXT:    vpmaxsb %ymm3, %ymm1, %ymm1
6104; AVX2-NEXT:    retq
6105;
6106; AVX512BW-LABEL: test130:
6107; AVX512BW:       # BB#0: # %entry
6108; AVX512BW-NEXT:    vpmaxsb %zmm1, %zmm0, %zmm0
6109; AVX512BW-NEXT:    retq
6110entry:
6111  %cmp = icmp sle <64 x i8> %a, %b
6112  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6113  ret <64 x i8> %sel
6114}
6115
6116define <64 x i8> @test131(<64 x i8> %a, <64 x i8> %b) {
6117; SSE2-LABEL: test131:
6118; SSE2:       # BB#0: # %entry
6119; SSE2-NEXT:    movdqa %xmm3, %xmm8
6120; SSE2-NEXT:    pcmpgtb %xmm7, %xmm3
6121; SSE2-NEXT:    movdqa %xmm2, %xmm9
6122; SSE2-NEXT:    pcmpgtb %xmm6, %xmm9
6123; SSE2-NEXT:    movdqa %xmm1, %xmm10
6124; SSE2-NEXT:    pcmpgtb %xmm5, %xmm10
6125; SSE2-NEXT:    movdqa %xmm0, %xmm11
6126; SSE2-NEXT:    pcmpgtb %xmm4, %xmm11
6127; SSE2-NEXT:    pand %xmm11, %xmm4
6128; SSE2-NEXT:    pandn %xmm0, %xmm11
6129; SSE2-NEXT:    por %xmm4, %xmm11
6130; SSE2-NEXT:    pand %xmm10, %xmm5
6131; SSE2-NEXT:    pandn %xmm1, %xmm10
6132; SSE2-NEXT:    por %xmm5, %xmm10
6133; SSE2-NEXT:    pand %xmm9, %xmm6
6134; SSE2-NEXT:    pandn %xmm2, %xmm9
6135; SSE2-NEXT:    por %xmm6, %xmm9
6136; SSE2-NEXT:    pand %xmm3, %xmm7
6137; SSE2-NEXT:    pandn %xmm8, %xmm3
6138; SSE2-NEXT:    por %xmm7, %xmm3
6139; SSE2-NEXT:    movdqa %xmm11, %xmm0
6140; SSE2-NEXT:    movdqa %xmm10, %xmm1
6141; SSE2-NEXT:    movdqa %xmm9, %xmm2
6142; SSE2-NEXT:    retq
6143;
6144; SSE4-LABEL: test131:
6145; SSE4:       # BB#0: # %entry
6146; SSE4-NEXT:    pminsb %xmm4, %xmm0
6147; SSE4-NEXT:    pminsb %xmm5, %xmm1
6148; SSE4-NEXT:    pminsb %xmm6, %xmm2
6149; SSE4-NEXT:    pminsb %xmm7, %xmm3
6150; SSE4-NEXT:    retq
6151;
6152; AVX1-LABEL: test131:
6153; AVX1:       # BB#0: # %entry
6154; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6155; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6156; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
6157; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
6158; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6159; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6160; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6161; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
6162; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
6163; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6164; AVX1-NEXT:    retq
6165;
6166; AVX2-LABEL: test131:
6167; AVX2:       # BB#0: # %entry
6168; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
6169; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
6170; AVX2-NEXT:    retq
6171;
6172; AVX512BW-LABEL: test131:
6173; AVX512BW:       # BB#0: # %entry
6174; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
6175; AVX512BW-NEXT:    retq
6176entry:
6177  %cmp = icmp sgt <64 x i8> %a, %b
6178  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6179  ret <64 x i8> %sel
6180}
6181
6182define <64 x i8> @test132(<64 x i8> %a, <64 x i8> %b) {
6183; SSE2-LABEL: test132:
6184; SSE2:       # BB#0: # %entry
6185; SSE2-NEXT:    movdqa %xmm2, %xmm8
6186; SSE2-NEXT:    movdqa %xmm0, %xmm10
6187; SSE2-NEXT:    movdqa %xmm7, %xmm12
6188; SSE2-NEXT:    pcmpgtb %xmm3, %xmm12
6189; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
6190; SSE2-NEXT:    movdqa %xmm12, %xmm9
6191; SSE2-NEXT:    pxor %xmm0, %xmm9
6192; SSE2-NEXT:    movdqa %xmm6, %xmm13
6193; SSE2-NEXT:    pcmpgtb %xmm8, %xmm13
6194; SSE2-NEXT:    movdqa %xmm13, %xmm2
6195; SSE2-NEXT:    pxor %xmm0, %xmm2
6196; SSE2-NEXT:    movdqa %xmm5, %xmm14
6197; SSE2-NEXT:    pcmpgtb %xmm1, %xmm14
6198; SSE2-NEXT:    movdqa %xmm14, %xmm11
6199; SSE2-NEXT:    pxor %xmm0, %xmm11
6200; SSE2-NEXT:    movdqa %xmm4, %xmm15
6201; SSE2-NEXT:    pcmpgtb %xmm10, %xmm15
6202; SSE2-NEXT:    pxor %xmm15, %xmm0
6203; SSE2-NEXT:    pandn %xmm4, %xmm15
6204; SSE2-NEXT:    pandn %xmm10, %xmm0
6205; SSE2-NEXT:    por %xmm15, %xmm0
6206; SSE2-NEXT:    pandn %xmm5, %xmm14
6207; SSE2-NEXT:    pandn %xmm1, %xmm11
6208; SSE2-NEXT:    por %xmm14, %xmm11
6209; SSE2-NEXT:    pandn %xmm6, %xmm13
6210; SSE2-NEXT:    pandn %xmm8, %xmm2
6211; SSE2-NEXT:    por %xmm13, %xmm2
6212; SSE2-NEXT:    pandn %xmm7, %xmm12
6213; SSE2-NEXT:    pandn %xmm3, %xmm9
6214; SSE2-NEXT:    por %xmm12, %xmm9
6215; SSE2-NEXT:    movdqa %xmm11, %xmm1
6216; SSE2-NEXT:    movdqa %xmm9, %xmm3
6217; SSE2-NEXT:    retq
6218;
6219; SSE4-LABEL: test132:
6220; SSE4:       # BB#0: # %entry
6221; SSE4-NEXT:    pminsb %xmm4, %xmm0
6222; SSE4-NEXT:    pminsb %xmm5, %xmm1
6223; SSE4-NEXT:    pminsb %xmm6, %xmm2
6224; SSE4-NEXT:    pminsb %xmm7, %xmm3
6225; SSE4-NEXT:    retq
6226;
6227; AVX1-LABEL: test132:
6228; AVX1:       # BB#0: # %entry
6229; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6230; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6231; AVX1-NEXT:    vpminsb %xmm4, %xmm5, %xmm4
6232; AVX1-NEXT:    vpminsb %xmm2, %xmm0, %xmm0
6233; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6234; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6235; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6236; AVX1-NEXT:    vpminsb %xmm2, %xmm4, %xmm2
6237; AVX1-NEXT:    vpminsb %xmm3, %xmm1, %xmm1
6238; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6239; AVX1-NEXT:    retq
6240;
6241; AVX2-LABEL: test132:
6242; AVX2:       # BB#0: # %entry
6243; AVX2-NEXT:    vpminsb %ymm2, %ymm0, %ymm0
6244; AVX2-NEXT:    vpminsb %ymm3, %ymm1, %ymm1
6245; AVX2-NEXT:    retq
6246;
6247; AVX512BW-LABEL: test132:
6248; AVX512BW:       # BB#0: # %entry
6249; AVX512BW-NEXT:    vpminsb %zmm1, %zmm0, %zmm0
6250; AVX512BW-NEXT:    retq
6251entry:
6252  %cmp = icmp sge <64 x i8> %a, %b
6253  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6254  ret <64 x i8> %sel
6255}
6256
6257define <64 x i8> @test133(<64 x i8> %a, <64 x i8> %b) {
6258; SSE-LABEL: test133:
6259; SSE:       # BB#0: # %entry
6260; SSE-NEXT:    pmaxub %xmm4, %xmm0
6261; SSE-NEXT:    pmaxub %xmm5, %xmm1
6262; SSE-NEXT:    pmaxub %xmm6, %xmm2
6263; SSE-NEXT:    pmaxub %xmm7, %xmm3
6264; SSE-NEXT:    retq
6265;
6266; AVX1-LABEL: test133:
6267; AVX1:       # BB#0: # %entry
6268; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6269; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6270; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
6271; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
6272; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6273; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6274; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6275; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
6276; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
6277; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6278; AVX1-NEXT:    retq
6279;
6280; AVX2-LABEL: test133:
6281; AVX2:       # BB#0: # %entry
6282; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
6283; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
6284; AVX2-NEXT:    retq
6285;
6286; AVX512BW-LABEL: test133:
6287; AVX512BW:       # BB#0: # %entry
6288; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
6289; AVX512BW-NEXT:    retq
6290entry:
6291  %cmp = icmp ult <64 x i8> %a, %b
6292  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6293  ret <64 x i8> %sel
6294}
6295
6296define <64 x i8> @test134(<64 x i8> %a, <64 x i8> %b) {
6297; SSE-LABEL: test134:
6298; SSE:       # BB#0: # %entry
6299; SSE-NEXT:    pmaxub %xmm4, %xmm0
6300; SSE-NEXT:    pmaxub %xmm5, %xmm1
6301; SSE-NEXT:    pmaxub %xmm6, %xmm2
6302; SSE-NEXT:    pmaxub %xmm7, %xmm3
6303; SSE-NEXT:    retq
6304;
6305; AVX1-LABEL: test134:
6306; AVX1:       # BB#0: # %entry
6307; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6308; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6309; AVX1-NEXT:    vpmaxub %xmm4, %xmm5, %xmm4
6310; AVX1-NEXT:    vpmaxub %xmm2, %xmm0, %xmm0
6311; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6312; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6313; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6314; AVX1-NEXT:    vpmaxub %xmm2, %xmm4, %xmm2
6315; AVX1-NEXT:    vpmaxub %xmm3, %xmm1, %xmm1
6316; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6317; AVX1-NEXT:    retq
6318;
6319; AVX2-LABEL: test134:
6320; AVX2:       # BB#0: # %entry
6321; AVX2-NEXT:    vpmaxub %ymm2, %ymm0, %ymm0
6322; AVX2-NEXT:    vpmaxub %ymm3, %ymm1, %ymm1
6323; AVX2-NEXT:    retq
6324;
6325; AVX512BW-LABEL: test134:
6326; AVX512BW:       # BB#0: # %entry
6327; AVX512BW-NEXT:    vpmaxub %zmm1, %zmm0, %zmm0
6328; AVX512BW-NEXT:    retq
6329entry:
6330  %cmp = icmp ule <64 x i8> %a, %b
6331  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6332  ret <64 x i8> %sel
6333}
6334
6335define <64 x i8> @test135(<64 x i8> %a, <64 x i8> %b) {
6336; SSE-LABEL: test135:
6337; SSE:       # BB#0: # %entry
6338; SSE-NEXT:    pminub %xmm4, %xmm0
6339; SSE-NEXT:    pminub %xmm5, %xmm1
6340; SSE-NEXT:    pminub %xmm6, %xmm2
6341; SSE-NEXT:    pminub %xmm7, %xmm3
6342; SSE-NEXT:    retq
6343;
6344; AVX1-LABEL: test135:
6345; AVX1:       # BB#0: # %entry
6346; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6347; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6348; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
6349; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
6350; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6351; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6352; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6353; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
6354; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
6355; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6356; AVX1-NEXT:    retq
6357;
6358; AVX2-LABEL: test135:
6359; AVX2:       # BB#0: # %entry
6360; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
6361; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
6362; AVX2-NEXT:    retq
6363;
6364; AVX512BW-LABEL: test135:
6365; AVX512BW:       # BB#0: # %entry
6366; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
6367; AVX512BW-NEXT:    retq
6368entry:
6369  %cmp = icmp ugt <64 x i8> %a, %b
6370  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6371  ret <64 x i8> %sel
6372}
6373
6374define <64 x i8> @test136(<64 x i8> %a, <64 x i8> %b) {
6375; SSE-LABEL: test136:
6376; SSE:       # BB#0: # %entry
6377; SSE-NEXT:    pminub %xmm4, %xmm0
6378; SSE-NEXT:    pminub %xmm5, %xmm1
6379; SSE-NEXT:    pminub %xmm6, %xmm2
6380; SSE-NEXT:    pminub %xmm7, %xmm3
6381; SSE-NEXT:    retq
6382;
6383; AVX1-LABEL: test136:
6384; AVX1:       # BB#0: # %entry
6385; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6386; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6387; AVX1-NEXT:    vpminub %xmm4, %xmm5, %xmm4
6388; AVX1-NEXT:    vpminub %xmm2, %xmm0, %xmm0
6389; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6390; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6391; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6392; AVX1-NEXT:    vpminub %xmm2, %xmm4, %xmm2
6393; AVX1-NEXT:    vpminub %xmm3, %xmm1, %xmm1
6394; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6395; AVX1-NEXT:    retq
6396;
6397; AVX2-LABEL: test136:
6398; AVX2:       # BB#0: # %entry
6399; AVX2-NEXT:    vpminub %ymm2, %ymm0, %ymm0
6400; AVX2-NEXT:    vpminub %ymm3, %ymm1, %ymm1
6401; AVX2-NEXT:    retq
6402;
6403; AVX512BW-LABEL: test136:
6404; AVX512BW:       # BB#0: # %entry
6405; AVX512BW-NEXT:    vpminub %zmm1, %zmm0, %zmm0
6406; AVX512BW-NEXT:    retq
6407entry:
6408  %cmp = icmp uge <64 x i8> %a, %b
6409  %sel = select <64 x i1> %cmp, <64 x i8> %b, <64 x i8> %a
6410  ret <64 x i8> %sel
6411}
6412
6413define <32 x i16> @test137(<32 x i16> %a, <32 x i16> %b) {
6414; SSE-LABEL: test137:
6415; SSE:       # BB#0: # %entry
6416; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6417; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6418; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6419; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6420; SSE-NEXT:    retq
6421;
6422; AVX1-LABEL: test137:
6423; AVX1:       # BB#0: # %entry
6424; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6425; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6426; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6427; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6428; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6429; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6430; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6431; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6432; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6433; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6434; AVX1-NEXT:    retq
6435;
6436; AVX2-LABEL: test137:
6437; AVX2:       # BB#0: # %entry
6438; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6439; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6440; AVX2-NEXT:    retq
6441;
6442; AVX512BW-LABEL: test137:
6443; AVX512BW:       # BB#0: # %entry
6444; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6445; AVX512BW-NEXT:    retq
6446entry:
6447  %cmp = icmp slt <32 x i16> %a, %b
6448  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6449  ret <32 x i16> %sel
6450}
6451
6452define <32 x i16> @test138(<32 x i16> %a, <32 x i16> %b) {
6453; SSE-LABEL: test138:
6454; SSE:       # BB#0: # %entry
6455; SSE-NEXT:    pmaxsw %xmm4, %xmm0
6456; SSE-NEXT:    pmaxsw %xmm5, %xmm1
6457; SSE-NEXT:    pmaxsw %xmm6, %xmm2
6458; SSE-NEXT:    pmaxsw %xmm7, %xmm3
6459; SSE-NEXT:    retq
6460;
6461; AVX1-LABEL: test138:
6462; AVX1:       # BB#0: # %entry
6463; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6464; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6465; AVX1-NEXT:    vpmaxsw %xmm4, %xmm5, %xmm4
6466; AVX1-NEXT:    vpmaxsw %xmm2, %xmm0, %xmm0
6467; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6468; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6469; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6470; AVX1-NEXT:    vpmaxsw %xmm2, %xmm4, %xmm2
6471; AVX1-NEXT:    vpmaxsw %xmm3, %xmm1, %xmm1
6472; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6473; AVX1-NEXT:    retq
6474;
6475; AVX2-LABEL: test138:
6476; AVX2:       # BB#0: # %entry
6477; AVX2-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
6478; AVX2-NEXT:    vpmaxsw %ymm3, %ymm1, %ymm1
6479; AVX2-NEXT:    retq
6480;
6481; AVX512BW-LABEL: test138:
6482; AVX512BW:       # BB#0: # %entry
6483; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
6484; AVX512BW-NEXT:    retq
6485entry:
6486  %cmp = icmp sle <32 x i16> %a, %b
6487  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6488  ret <32 x i16> %sel
6489}
6490
6491define <32 x i16> @test139(<32 x i16> %a, <32 x i16> %b) {
6492; SSE-LABEL: test139:
6493; SSE:       # BB#0: # %entry
6494; SSE-NEXT:    pminsw %xmm4, %xmm0
6495; SSE-NEXT:    pminsw %xmm5, %xmm1
6496; SSE-NEXT:    pminsw %xmm6, %xmm2
6497; SSE-NEXT:    pminsw %xmm7, %xmm3
6498; SSE-NEXT:    retq
6499;
6500; AVX1-LABEL: test139:
6501; AVX1:       # BB#0: # %entry
6502; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6503; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6504; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6505; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6506; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6507; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6508; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6509; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6510; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6511; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6512; AVX1-NEXT:    retq
6513;
6514; AVX2-LABEL: test139:
6515; AVX2:       # BB#0: # %entry
6516; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6517; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6518; AVX2-NEXT:    retq
6519;
6520; AVX512BW-LABEL: test139:
6521; AVX512BW:       # BB#0: # %entry
6522; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6523; AVX512BW-NEXT:    retq
6524entry:
6525  %cmp = icmp sgt <32 x i16> %a, %b
6526  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6527  ret <32 x i16> %sel
6528}
6529
6530define <32 x i16> @test140(<32 x i16> %a, <32 x i16> %b) {
6531; SSE-LABEL: test140:
6532; SSE:       # BB#0: # %entry
6533; SSE-NEXT:    pminsw %xmm4, %xmm0
6534; SSE-NEXT:    pminsw %xmm5, %xmm1
6535; SSE-NEXT:    pminsw %xmm6, %xmm2
6536; SSE-NEXT:    pminsw %xmm7, %xmm3
6537; SSE-NEXT:    retq
6538;
6539; AVX1-LABEL: test140:
6540; AVX1:       # BB#0: # %entry
6541; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6542; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6543; AVX1-NEXT:    vpminsw %xmm4, %xmm5, %xmm4
6544; AVX1-NEXT:    vpminsw %xmm2, %xmm0, %xmm0
6545; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6546; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6547; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6548; AVX1-NEXT:    vpminsw %xmm2, %xmm4, %xmm2
6549; AVX1-NEXT:    vpminsw %xmm3, %xmm1, %xmm1
6550; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6551; AVX1-NEXT:    retq
6552;
6553; AVX2-LABEL: test140:
6554; AVX2:       # BB#0: # %entry
6555; AVX2-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
6556; AVX2-NEXT:    vpminsw %ymm3, %ymm1, %ymm1
6557; AVX2-NEXT:    retq
6558;
6559; AVX512BW-LABEL: test140:
6560; AVX512BW:       # BB#0: # %entry
6561; AVX512BW-NEXT:    vpminsw %zmm1, %zmm0, %zmm0
6562; AVX512BW-NEXT:    retq
6563entry:
6564  %cmp = icmp sge <32 x i16> %a, %b
6565  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6566  ret <32 x i16> %sel
6567}
6568
6569define <32 x i16> @test141(<32 x i16> %a, <32 x i16> %b) {
6570; SSE2-LABEL: test141:
6571; SSE2:       # BB#0: # %entry
6572; SSE2-NEXT:    movdqa %xmm0, %xmm11
6573; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768]
6574; SSE2-NEXT:    movdqa %xmm3, %xmm9
6575; SSE2-NEXT:    pxor %xmm0, %xmm9
6576; SSE2-NEXT:    movdqa %xmm7, %xmm8
6577; SSE2-NEXT:    pxor %xmm0, %xmm8
6578; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
6579; SSE2-NEXT:    movdqa %xmm2, %xmm10
6580; SSE2-NEXT:    pxor %xmm0, %xmm10
6581; SSE2-NEXT:    movdqa %xmm6, %xmm9
6582; SSE2-NEXT:    pxor %xmm0, %xmm9
6583; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
6584; SSE2-NEXT:    movdqa %xmm1, %xmm12
6585; SSE2-NEXT:    pxor %xmm0, %xmm12
6586; SSE2-NEXT:    movdqa %xmm5, %xmm10
6587; SSE2-NEXT:    pxor %xmm0, %xmm10
6588; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
6589; SSE2-NEXT:    movdqa %xmm11, %xmm12
6590; SSE2-NEXT:    pxor %xmm0, %xmm12
6591; SSE2-NEXT:    pxor %xmm4, %xmm0
6592; SSE2-NEXT:    pcmpgtw %xmm12, %xmm0
6593; SSE2-NEXT:    pand %xmm0, %xmm4
6594; SSE2-NEXT:    pandn %xmm11, %xmm0
6595; SSE2-NEXT:    por %xmm4, %xmm0
6596; SSE2-NEXT:    pand %xmm10, %xmm5
6597; SSE2-NEXT:    pandn %xmm1, %xmm10
6598; SSE2-NEXT:    por %xmm5, %xmm10
6599; SSE2-NEXT:    pand %xmm9, %xmm6
6600; SSE2-NEXT:    pandn %xmm2, %xmm9
6601; SSE2-NEXT:    por %xmm6, %xmm9
6602; SSE2-NEXT:    pand %xmm8, %xmm7
6603; SSE2-NEXT:    pandn %xmm3, %xmm8
6604; SSE2-NEXT:    por %xmm7, %xmm8
6605; SSE2-NEXT:    movdqa %xmm10, %xmm1
6606; SSE2-NEXT:    movdqa %xmm9, %xmm2
6607; SSE2-NEXT:    movdqa %xmm8, %xmm3
6608; SSE2-NEXT:    retq
6609;
6610; SSE4-LABEL: test141:
6611; SSE4:       # BB#0: # %entry
6612; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6613; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6614; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6615; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6616; SSE4-NEXT:    retq
6617;
6618; AVX1-LABEL: test141:
6619; AVX1:       # BB#0: # %entry
6620; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6621; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6622; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6623; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6624; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6625; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6626; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6627; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6628; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6629; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6630; AVX1-NEXT:    retq
6631;
6632; AVX2-LABEL: test141:
6633; AVX2:       # BB#0: # %entry
6634; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6635; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6636; AVX2-NEXT:    retq
6637;
6638; AVX512BW-LABEL: test141:
6639; AVX512BW:       # BB#0: # %entry
6640; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6641; AVX512BW-NEXT:    retq
6642entry:
6643  %cmp = icmp ult <32 x i16> %a, %b
6644  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6645  ret <32 x i16> %sel
6646}
6647
6648define <32 x i16> @test142(<32 x i16> %a, <32 x i16> %b) {
6649; SSE2-LABEL: test142:
6650; SSE2:       # BB#0: # %entry
6651; SSE2-NEXT:    movdqa %xmm3, %xmm8
6652; SSE2-NEXT:    movdqa %xmm2, %xmm9
6653; SSE2-NEXT:    movdqa %xmm1, %xmm10
6654; SSE2-NEXT:    psubusw %xmm7, %xmm3
6655; SSE2-NEXT:    pxor %xmm12, %xmm12
6656; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
6657; SSE2-NEXT:    psubusw %xmm6, %xmm2
6658; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
6659; SSE2-NEXT:    psubusw %xmm5, %xmm1
6660; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
6661; SSE2-NEXT:    movdqa %xmm0, %xmm11
6662; SSE2-NEXT:    psubusw %xmm4, %xmm11
6663; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
6664; SSE2-NEXT:    pand %xmm11, %xmm4
6665; SSE2-NEXT:    pandn %xmm0, %xmm11
6666; SSE2-NEXT:    por %xmm4, %xmm11
6667; SSE2-NEXT:    pand %xmm1, %xmm5
6668; SSE2-NEXT:    pandn %xmm10, %xmm1
6669; SSE2-NEXT:    por %xmm5, %xmm1
6670; SSE2-NEXT:    pand %xmm2, %xmm6
6671; SSE2-NEXT:    pandn %xmm9, %xmm2
6672; SSE2-NEXT:    por %xmm6, %xmm2
6673; SSE2-NEXT:    pand %xmm3, %xmm7
6674; SSE2-NEXT:    pandn %xmm8, %xmm3
6675; SSE2-NEXT:    por %xmm7, %xmm3
6676; SSE2-NEXT:    movdqa %xmm11, %xmm0
6677; SSE2-NEXT:    retq
6678;
6679; SSE4-LABEL: test142:
6680; SSE4:       # BB#0: # %entry
6681; SSE4-NEXT:    pmaxuw %xmm4, %xmm0
6682; SSE4-NEXT:    pmaxuw %xmm5, %xmm1
6683; SSE4-NEXT:    pmaxuw %xmm6, %xmm2
6684; SSE4-NEXT:    pmaxuw %xmm7, %xmm3
6685; SSE4-NEXT:    retq
6686;
6687; AVX1-LABEL: test142:
6688; AVX1:       # BB#0: # %entry
6689; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6690; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6691; AVX1-NEXT:    vpmaxuw %xmm4, %xmm5, %xmm4
6692; AVX1-NEXT:    vpmaxuw %xmm2, %xmm0, %xmm0
6693; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6694; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6695; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6696; AVX1-NEXT:    vpmaxuw %xmm2, %xmm4, %xmm2
6697; AVX1-NEXT:    vpmaxuw %xmm3, %xmm1, %xmm1
6698; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6699; AVX1-NEXT:    retq
6700;
6701; AVX2-LABEL: test142:
6702; AVX2:       # BB#0: # %entry
6703; AVX2-NEXT:    vpmaxuw %ymm2, %ymm0, %ymm0
6704; AVX2-NEXT:    vpmaxuw %ymm3, %ymm1, %ymm1
6705; AVX2-NEXT:    retq
6706;
6707; AVX512BW-LABEL: test142:
6708; AVX512BW:       # BB#0: # %entry
6709; AVX512BW-NEXT:    vpmaxuw %zmm1, %zmm0, %zmm0
6710; AVX512BW-NEXT:    retq
6711entry:
6712  %cmp = icmp ule <32 x i16> %a, %b
6713  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6714  ret <32 x i16> %sel
6715}
6716
6717define <32 x i16> @test143(<32 x i16> %a, <32 x i16> %b) {
6718; SSE2-LABEL: test143:
6719; SSE2:       # BB#0: # %entry
6720; SSE2-NEXT:    movdqa %xmm0, %xmm11
6721; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [32768,32768,32768,32768,32768,32768,32768,32768]
6722; SSE2-NEXT:    movdqa %xmm7, %xmm9
6723; SSE2-NEXT:    pxor %xmm0, %xmm9
6724; SSE2-NEXT:    movdqa %xmm3, %xmm8
6725; SSE2-NEXT:    pxor %xmm0, %xmm8
6726; SSE2-NEXT:    pcmpgtw %xmm9, %xmm8
6727; SSE2-NEXT:    movdqa %xmm6, %xmm10
6728; SSE2-NEXT:    pxor %xmm0, %xmm10
6729; SSE2-NEXT:    movdqa %xmm2, %xmm9
6730; SSE2-NEXT:    pxor %xmm0, %xmm9
6731; SSE2-NEXT:    pcmpgtw %xmm10, %xmm9
6732; SSE2-NEXT:    movdqa %xmm5, %xmm12
6733; SSE2-NEXT:    pxor %xmm0, %xmm12
6734; SSE2-NEXT:    movdqa %xmm1, %xmm10
6735; SSE2-NEXT:    pxor %xmm0, %xmm10
6736; SSE2-NEXT:    pcmpgtw %xmm12, %xmm10
6737; SSE2-NEXT:    movdqa %xmm4, %xmm12
6738; SSE2-NEXT:    pxor %xmm0, %xmm12
6739; SSE2-NEXT:    pxor %xmm11, %xmm0
6740; SSE2-NEXT:    pcmpgtw %xmm12, %xmm0
6741; SSE2-NEXT:    pand %xmm0, %xmm4
6742; SSE2-NEXT:    pandn %xmm11, %xmm0
6743; SSE2-NEXT:    por %xmm4, %xmm0
6744; SSE2-NEXT:    pand %xmm10, %xmm5
6745; SSE2-NEXT:    pandn %xmm1, %xmm10
6746; SSE2-NEXT:    por %xmm5, %xmm10
6747; SSE2-NEXT:    pand %xmm9, %xmm6
6748; SSE2-NEXT:    pandn %xmm2, %xmm9
6749; SSE2-NEXT:    por %xmm6, %xmm9
6750; SSE2-NEXT:    pand %xmm8, %xmm7
6751; SSE2-NEXT:    pandn %xmm3, %xmm8
6752; SSE2-NEXT:    por %xmm7, %xmm8
6753; SSE2-NEXT:    movdqa %xmm10, %xmm1
6754; SSE2-NEXT:    movdqa %xmm9, %xmm2
6755; SSE2-NEXT:    movdqa %xmm8, %xmm3
6756; SSE2-NEXT:    retq
6757;
6758; SSE4-LABEL: test143:
6759; SSE4:       # BB#0: # %entry
6760; SSE4-NEXT:    pminuw %xmm4, %xmm0
6761; SSE4-NEXT:    pminuw %xmm5, %xmm1
6762; SSE4-NEXT:    pminuw %xmm6, %xmm2
6763; SSE4-NEXT:    pminuw %xmm7, %xmm3
6764; SSE4-NEXT:    retq
6765;
6766; AVX1-LABEL: test143:
6767; AVX1:       # BB#0: # %entry
6768; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6769; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6770; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6771; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6772; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6773; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6774; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6775; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6776; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6777; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6778; AVX1-NEXT:    retq
6779;
6780; AVX2-LABEL: test143:
6781; AVX2:       # BB#0: # %entry
6782; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6783; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6784; AVX2-NEXT:    retq
6785;
6786; AVX512BW-LABEL: test143:
6787; AVX512BW:       # BB#0: # %entry
6788; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6789; AVX512BW-NEXT:    retq
6790entry:
6791  %cmp = icmp ugt <32 x i16> %a, %b
6792  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6793  ret <32 x i16> %sel
6794}
6795
6796define <32 x i16> @test144(<32 x i16> %a, <32 x i16> %b) {
6797; SSE2-LABEL: test144:
6798; SSE2:       # BB#0: # %entry
6799; SSE2-NEXT:    movdqa %xmm3, %xmm8
6800; SSE2-NEXT:    movdqa %xmm2, %xmm9
6801; SSE2-NEXT:    movdqa %xmm1, %xmm10
6802; SSE2-NEXT:    movdqa %xmm7, %xmm3
6803; SSE2-NEXT:    psubusw %xmm8, %xmm3
6804; SSE2-NEXT:    pxor %xmm12, %xmm12
6805; SSE2-NEXT:    pcmpeqw %xmm12, %xmm3
6806; SSE2-NEXT:    movdqa %xmm6, %xmm2
6807; SSE2-NEXT:    psubusw %xmm9, %xmm2
6808; SSE2-NEXT:    pcmpeqw %xmm12, %xmm2
6809; SSE2-NEXT:    movdqa %xmm5, %xmm1
6810; SSE2-NEXT:    psubusw %xmm10, %xmm1
6811; SSE2-NEXT:    pcmpeqw %xmm12, %xmm1
6812; SSE2-NEXT:    movdqa %xmm4, %xmm11
6813; SSE2-NEXT:    psubusw %xmm0, %xmm11
6814; SSE2-NEXT:    pcmpeqw %xmm12, %xmm11
6815; SSE2-NEXT:    pand %xmm11, %xmm4
6816; SSE2-NEXT:    pandn %xmm0, %xmm11
6817; SSE2-NEXT:    por %xmm4, %xmm11
6818; SSE2-NEXT:    pand %xmm1, %xmm5
6819; SSE2-NEXT:    pandn %xmm10, %xmm1
6820; SSE2-NEXT:    por %xmm5, %xmm1
6821; SSE2-NEXT:    pand %xmm2, %xmm6
6822; SSE2-NEXT:    pandn %xmm9, %xmm2
6823; SSE2-NEXT:    por %xmm6, %xmm2
6824; SSE2-NEXT:    pand %xmm3, %xmm7
6825; SSE2-NEXT:    pandn %xmm8, %xmm3
6826; SSE2-NEXT:    por %xmm7, %xmm3
6827; SSE2-NEXT:    movdqa %xmm11, %xmm0
6828; SSE2-NEXT:    retq
6829;
6830; SSE4-LABEL: test144:
6831; SSE4:       # BB#0: # %entry
6832; SSE4-NEXT:    pminuw %xmm4, %xmm0
6833; SSE4-NEXT:    pminuw %xmm5, %xmm1
6834; SSE4-NEXT:    pminuw %xmm6, %xmm2
6835; SSE4-NEXT:    pminuw %xmm7, %xmm3
6836; SSE4-NEXT:    retq
6837;
6838; AVX1-LABEL: test144:
6839; AVX1:       # BB#0: # %entry
6840; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6841; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6842; AVX1-NEXT:    vpminuw %xmm4, %xmm5, %xmm4
6843; AVX1-NEXT:    vpminuw %xmm2, %xmm0, %xmm0
6844; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6845; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6846; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6847; AVX1-NEXT:    vpminuw %xmm2, %xmm4, %xmm2
6848; AVX1-NEXT:    vpminuw %xmm3, %xmm1, %xmm1
6849; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6850; AVX1-NEXT:    retq
6851;
6852; AVX2-LABEL: test144:
6853; AVX2:       # BB#0: # %entry
6854; AVX2-NEXT:    vpminuw %ymm2, %ymm0, %ymm0
6855; AVX2-NEXT:    vpminuw %ymm3, %ymm1, %ymm1
6856; AVX2-NEXT:    retq
6857;
6858; AVX512BW-LABEL: test144:
6859; AVX512BW:       # BB#0: # %entry
6860; AVX512BW-NEXT:    vpminuw %zmm1, %zmm0, %zmm0
6861; AVX512BW-NEXT:    retq
6862entry:
6863  %cmp = icmp uge <32 x i16> %a, %b
6864  %sel = select <32 x i1> %cmp, <32 x i16> %b, <32 x i16> %a
6865  ret <32 x i16> %sel
6866}
6867
6868define <16 x i32> @test145(<16 x i32> %a, <16 x i32> %b) {
6869; SSE2-LABEL: test145:
6870; SSE2:       # BB#0: # %entry
6871; SSE2-NEXT:    movdqa %xmm3, %xmm8
6872; SSE2-NEXT:    movdqa %xmm7, %xmm3
6873; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
6874; SSE2-NEXT:    movdqa %xmm6, %xmm9
6875; SSE2-NEXT:    pcmpgtd %xmm2, %xmm9
6876; SSE2-NEXT:    movdqa %xmm5, %xmm10
6877; SSE2-NEXT:    pcmpgtd %xmm1, %xmm10
6878; SSE2-NEXT:    movdqa %xmm4, %xmm11
6879; SSE2-NEXT:    pcmpgtd %xmm0, %xmm11
6880; SSE2-NEXT:    pand %xmm11, %xmm4
6881; SSE2-NEXT:    pandn %xmm0, %xmm11
6882; SSE2-NEXT:    por %xmm4, %xmm11
6883; SSE2-NEXT:    pand %xmm10, %xmm5
6884; SSE2-NEXT:    pandn %xmm1, %xmm10
6885; SSE2-NEXT:    por %xmm5, %xmm10
6886; SSE2-NEXT:    pand %xmm9, %xmm6
6887; SSE2-NEXT:    pandn %xmm2, %xmm9
6888; SSE2-NEXT:    por %xmm6, %xmm9
6889; SSE2-NEXT:    pand %xmm3, %xmm7
6890; SSE2-NEXT:    pandn %xmm8, %xmm3
6891; SSE2-NEXT:    por %xmm7, %xmm3
6892; SSE2-NEXT:    movdqa %xmm11, %xmm0
6893; SSE2-NEXT:    movdqa %xmm10, %xmm1
6894; SSE2-NEXT:    movdqa %xmm9, %xmm2
6895; SSE2-NEXT:    retq
6896;
6897; SSE4-LABEL: test145:
6898; SSE4:       # BB#0: # %entry
6899; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6900; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6901; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6902; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6903; SSE4-NEXT:    retq
6904;
6905; AVX1-LABEL: test145:
6906; AVX1:       # BB#0: # %entry
6907; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6908; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6909; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6910; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6911; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6912; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6913; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6914; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6915; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6916; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6917; AVX1-NEXT:    retq
6918;
6919; AVX2-LABEL: test145:
6920; AVX2:       # BB#0: # %entry
6921; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6922; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6923; AVX2-NEXT:    retq
6924;
6925; AVX512F-LABEL: test145:
6926; AVX512F:       # BB#0: # %entry
6927; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
6928; AVX512F-NEXT:    retq
6929entry:
6930  %cmp = icmp slt <16 x i32> %a, %b
6931  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
6932  ret <16 x i32> %sel
6933}
6934
6935define <16 x i32> @test146(<16 x i32> %a, <16 x i32> %b) {
6936; SSE2-LABEL: test146:
6937; SSE2:       # BB#0: # %entry
6938; SSE2-NEXT:    movdqa %xmm2, %xmm8
6939; SSE2-NEXT:    movdqa %xmm3, %xmm12
6940; SSE2-NEXT:    pcmpgtd %xmm7, %xmm12
6941; SSE2-NEXT:    pcmpeqd %xmm13, %xmm13
6942; SSE2-NEXT:    movdqa %xmm12, %xmm9
6943; SSE2-NEXT:    pxor %xmm13, %xmm9
6944; SSE2-NEXT:    movdqa %xmm8, %xmm14
6945; SSE2-NEXT:    pcmpgtd %xmm6, %xmm14
6946; SSE2-NEXT:    movdqa %xmm14, %xmm2
6947; SSE2-NEXT:    pxor %xmm13, %xmm2
6948; SSE2-NEXT:    movdqa %xmm1, %xmm15
6949; SSE2-NEXT:    pcmpgtd %xmm5, %xmm15
6950; SSE2-NEXT:    movdqa %xmm15, %xmm10
6951; SSE2-NEXT:    pxor %xmm13, %xmm10
6952; SSE2-NEXT:    movdqa %xmm0, %xmm11
6953; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
6954; SSE2-NEXT:    pxor %xmm11, %xmm13
6955; SSE2-NEXT:    pandn %xmm4, %xmm11
6956; SSE2-NEXT:    pandn %xmm0, %xmm13
6957; SSE2-NEXT:    por %xmm13, %xmm11
6958; SSE2-NEXT:    pandn %xmm5, %xmm15
6959; SSE2-NEXT:    pandn %xmm1, %xmm10
6960; SSE2-NEXT:    por %xmm15, %xmm10
6961; SSE2-NEXT:    pandn %xmm6, %xmm14
6962; SSE2-NEXT:    pandn %xmm8, %xmm2
6963; SSE2-NEXT:    por %xmm14, %xmm2
6964; SSE2-NEXT:    pandn %xmm7, %xmm12
6965; SSE2-NEXT:    pandn %xmm3, %xmm9
6966; SSE2-NEXT:    por %xmm12, %xmm9
6967; SSE2-NEXT:    movdqa %xmm11, %xmm0
6968; SSE2-NEXT:    movdqa %xmm10, %xmm1
6969; SSE2-NEXT:    movdqa %xmm9, %xmm3
6970; SSE2-NEXT:    retq
6971;
6972; SSE4-LABEL: test146:
6973; SSE4:       # BB#0: # %entry
6974; SSE4-NEXT:    pmaxsd %xmm4, %xmm0
6975; SSE4-NEXT:    pmaxsd %xmm5, %xmm1
6976; SSE4-NEXT:    pmaxsd %xmm6, %xmm2
6977; SSE4-NEXT:    pmaxsd %xmm7, %xmm3
6978; SSE4-NEXT:    retq
6979;
6980; AVX1-LABEL: test146:
6981; AVX1:       # BB#0: # %entry
6982; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
6983; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
6984; AVX1-NEXT:    vpmaxsd %xmm4, %xmm5, %xmm4
6985; AVX1-NEXT:    vpmaxsd %xmm2, %xmm0, %xmm0
6986; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
6987; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
6988; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
6989; AVX1-NEXT:    vpmaxsd %xmm2, %xmm4, %xmm2
6990; AVX1-NEXT:    vpmaxsd %xmm3, %xmm1, %xmm1
6991; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
6992; AVX1-NEXT:    retq
6993;
6994; AVX2-LABEL: test146:
6995; AVX2:       # BB#0: # %entry
6996; AVX2-NEXT:    vpmaxsd %ymm2, %ymm0, %ymm0
6997; AVX2-NEXT:    vpmaxsd %ymm3, %ymm1, %ymm1
6998; AVX2-NEXT:    retq
6999;
7000; AVX512F-LABEL: test146:
7001; AVX512F:       # BB#0: # %entry
7002; AVX512F-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
7003; AVX512F-NEXT:    retq
7004entry:
7005  %cmp = icmp sle <16 x i32> %a, %b
7006  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7007  ret <16 x i32> %sel
7008}
7009
7010define <16 x i32> @test147(<16 x i32> %a, <16 x i32> %b) {
7011; SSE2-LABEL: test147:
7012; SSE2:       # BB#0: # %entry
7013; SSE2-NEXT:    movdqa %xmm3, %xmm8
7014; SSE2-NEXT:    pcmpgtd %xmm7, %xmm3
7015; SSE2-NEXT:    movdqa %xmm2, %xmm9
7016; SSE2-NEXT:    pcmpgtd %xmm6, %xmm9
7017; SSE2-NEXT:    movdqa %xmm1, %xmm10
7018; SSE2-NEXT:    pcmpgtd %xmm5, %xmm10
7019; SSE2-NEXT:    movdqa %xmm0, %xmm11
7020; SSE2-NEXT:    pcmpgtd %xmm4, %xmm11
7021; SSE2-NEXT:    pand %xmm11, %xmm4
7022; SSE2-NEXT:    pandn %xmm0, %xmm11
7023; SSE2-NEXT:    por %xmm4, %xmm11
7024; SSE2-NEXT:    pand %xmm10, %xmm5
7025; SSE2-NEXT:    pandn %xmm1, %xmm10
7026; SSE2-NEXT:    por %xmm5, %xmm10
7027; SSE2-NEXT:    pand %xmm9, %xmm6
7028; SSE2-NEXT:    pandn %xmm2, %xmm9
7029; SSE2-NEXT:    por %xmm6, %xmm9
7030; SSE2-NEXT:    pand %xmm3, %xmm7
7031; SSE2-NEXT:    pandn %xmm8, %xmm3
7032; SSE2-NEXT:    por %xmm7, %xmm3
7033; SSE2-NEXT:    movdqa %xmm11, %xmm0
7034; SSE2-NEXT:    movdqa %xmm10, %xmm1
7035; SSE2-NEXT:    movdqa %xmm9, %xmm2
7036; SSE2-NEXT:    retq
7037;
7038; SSE4-LABEL: test147:
7039; SSE4:       # BB#0: # %entry
7040; SSE4-NEXT:    pminsd %xmm4, %xmm0
7041; SSE4-NEXT:    pminsd %xmm5, %xmm1
7042; SSE4-NEXT:    pminsd %xmm6, %xmm2
7043; SSE4-NEXT:    pminsd %xmm7, %xmm3
7044; SSE4-NEXT:    retq
7045;
7046; AVX1-LABEL: test147:
7047; AVX1:       # BB#0: # %entry
7048; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7049; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7050; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
7051; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
7052; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7053; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7054; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7055; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
7056; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
7057; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7058; AVX1-NEXT:    retq
7059;
7060; AVX2-LABEL: test147:
7061; AVX2:       # BB#0: # %entry
7062; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
7063; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
7064; AVX2-NEXT:    retq
7065;
7066; AVX512F-LABEL: test147:
7067; AVX512F:       # BB#0: # %entry
7068; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
7069; AVX512F-NEXT:    retq
7070entry:
7071  %cmp = icmp sgt <16 x i32> %a, %b
7072  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7073  ret <16 x i32> %sel
7074}
7075
7076define <16 x i32> @test148(<16 x i32> %a, <16 x i32> %b) {
7077; SSE2-LABEL: test148:
7078; SSE2:       # BB#0: # %entry
7079; SSE2-NEXT:    movdqa %xmm2, %xmm8
7080; SSE2-NEXT:    movdqa %xmm0, %xmm10
7081; SSE2-NEXT:    movdqa %xmm7, %xmm12
7082; SSE2-NEXT:    pcmpgtd %xmm3, %xmm12
7083; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
7084; SSE2-NEXT:    movdqa %xmm12, %xmm9
7085; SSE2-NEXT:    pxor %xmm0, %xmm9
7086; SSE2-NEXT:    movdqa %xmm6, %xmm13
7087; SSE2-NEXT:    pcmpgtd %xmm8, %xmm13
7088; SSE2-NEXT:    movdqa %xmm13, %xmm2
7089; SSE2-NEXT:    pxor %xmm0, %xmm2
7090; SSE2-NEXT:    movdqa %xmm5, %xmm14
7091; SSE2-NEXT:    pcmpgtd %xmm1, %xmm14
7092; SSE2-NEXT:    movdqa %xmm14, %xmm11
7093; SSE2-NEXT:    pxor %xmm0, %xmm11
7094; SSE2-NEXT:    movdqa %xmm4, %xmm15
7095; SSE2-NEXT:    pcmpgtd %xmm10, %xmm15
7096; SSE2-NEXT:    pxor %xmm15, %xmm0
7097; SSE2-NEXT:    pandn %xmm4, %xmm15
7098; SSE2-NEXT:    pandn %xmm10, %xmm0
7099; SSE2-NEXT:    por %xmm15, %xmm0
7100; SSE2-NEXT:    pandn %xmm5, %xmm14
7101; SSE2-NEXT:    pandn %xmm1, %xmm11
7102; SSE2-NEXT:    por %xmm14, %xmm11
7103; SSE2-NEXT:    pandn %xmm6, %xmm13
7104; SSE2-NEXT:    pandn %xmm8, %xmm2
7105; SSE2-NEXT:    por %xmm13, %xmm2
7106; SSE2-NEXT:    pandn %xmm7, %xmm12
7107; SSE2-NEXT:    pandn %xmm3, %xmm9
7108; SSE2-NEXT:    por %xmm12, %xmm9
7109; SSE2-NEXT:    movdqa %xmm11, %xmm1
7110; SSE2-NEXT:    movdqa %xmm9, %xmm3
7111; SSE2-NEXT:    retq
7112;
7113; SSE4-LABEL: test148:
7114; SSE4:       # BB#0: # %entry
7115; SSE4-NEXT:    pminsd %xmm4, %xmm0
7116; SSE4-NEXT:    pminsd %xmm5, %xmm1
7117; SSE4-NEXT:    pminsd %xmm6, %xmm2
7118; SSE4-NEXT:    pminsd %xmm7, %xmm3
7119; SSE4-NEXT:    retq
7120;
7121; AVX1-LABEL: test148:
7122; AVX1:       # BB#0: # %entry
7123; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7124; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7125; AVX1-NEXT:    vpminsd %xmm4, %xmm5, %xmm4
7126; AVX1-NEXT:    vpminsd %xmm2, %xmm0, %xmm0
7127; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7128; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7129; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7130; AVX1-NEXT:    vpminsd %xmm2, %xmm4, %xmm2
7131; AVX1-NEXT:    vpminsd %xmm3, %xmm1, %xmm1
7132; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7133; AVX1-NEXT:    retq
7134;
7135; AVX2-LABEL: test148:
7136; AVX2:       # BB#0: # %entry
7137; AVX2-NEXT:    vpminsd %ymm2, %ymm0, %ymm0
7138; AVX2-NEXT:    vpminsd %ymm3, %ymm1, %ymm1
7139; AVX2-NEXT:    retq
7140;
7141; AVX512F-LABEL: test148:
7142; AVX512F:       # BB#0: # %entry
7143; AVX512F-NEXT:    vpminsd %zmm1, %zmm0, %zmm0
7144; AVX512F-NEXT:    retq
7145entry:
7146  %cmp = icmp sge <16 x i32> %a, %b
7147  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7148  ret <16 x i32> %sel
7149}
7150
7151define <16 x i32> @test149(<16 x i32> %a, <16 x i32> %b) {
7152; SSE2-LABEL: test149:
7153; SSE2:       # BB#0: # %entry
7154; SSE2-NEXT:    movdqa %xmm0, %xmm11
7155; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
7156; SSE2-NEXT:    movdqa %xmm3, %xmm9
7157; SSE2-NEXT:    pxor %xmm0, %xmm9
7158; SSE2-NEXT:    movdqa %xmm7, %xmm8
7159; SSE2-NEXT:    pxor %xmm0, %xmm8
7160; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
7161; SSE2-NEXT:    movdqa %xmm2, %xmm10
7162; SSE2-NEXT:    pxor %xmm0, %xmm10
7163; SSE2-NEXT:    movdqa %xmm6, %xmm9
7164; SSE2-NEXT:    pxor %xmm0, %xmm9
7165; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
7166; SSE2-NEXT:    movdqa %xmm1, %xmm12
7167; SSE2-NEXT:    pxor %xmm0, %xmm12
7168; SSE2-NEXT:    movdqa %xmm5, %xmm10
7169; SSE2-NEXT:    pxor %xmm0, %xmm10
7170; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
7171; SSE2-NEXT:    movdqa %xmm11, %xmm12
7172; SSE2-NEXT:    pxor %xmm0, %xmm12
7173; SSE2-NEXT:    pxor %xmm4, %xmm0
7174; SSE2-NEXT:    pcmpgtd %xmm12, %xmm0
7175; SSE2-NEXT:    pand %xmm0, %xmm4
7176; SSE2-NEXT:    pandn %xmm11, %xmm0
7177; SSE2-NEXT:    por %xmm4, %xmm0
7178; SSE2-NEXT:    pand %xmm10, %xmm5
7179; SSE2-NEXT:    pandn %xmm1, %xmm10
7180; SSE2-NEXT:    por %xmm5, %xmm10
7181; SSE2-NEXT:    pand %xmm9, %xmm6
7182; SSE2-NEXT:    pandn %xmm2, %xmm9
7183; SSE2-NEXT:    por %xmm6, %xmm9
7184; SSE2-NEXT:    pand %xmm8, %xmm7
7185; SSE2-NEXT:    pandn %xmm3, %xmm8
7186; SSE2-NEXT:    por %xmm7, %xmm8
7187; SSE2-NEXT:    movdqa %xmm10, %xmm1
7188; SSE2-NEXT:    movdqa %xmm9, %xmm2
7189; SSE2-NEXT:    movdqa %xmm8, %xmm3
7190; SSE2-NEXT:    retq
7191;
7192; SSE4-LABEL: test149:
7193; SSE4:       # BB#0: # %entry
7194; SSE4-NEXT:    pmaxud %xmm4, %xmm0
7195; SSE4-NEXT:    pmaxud %xmm5, %xmm1
7196; SSE4-NEXT:    pmaxud %xmm6, %xmm2
7197; SSE4-NEXT:    pmaxud %xmm7, %xmm3
7198; SSE4-NEXT:    retq
7199;
7200; AVX1-LABEL: test149:
7201; AVX1:       # BB#0: # %entry
7202; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7203; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7204; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
7205; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
7206; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7207; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7208; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7209; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
7210; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
7211; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7212; AVX1-NEXT:    retq
7213;
7214; AVX2-LABEL: test149:
7215; AVX2:       # BB#0: # %entry
7216; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
7217; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
7218; AVX2-NEXT:    retq
7219;
7220; AVX512F-LABEL: test149:
7221; AVX512F:       # BB#0: # %entry
7222; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
7223; AVX512F-NEXT:    retq
7224entry:
7225  %cmp = icmp ult <16 x i32> %a, %b
7226  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7227  ret <16 x i32> %sel
7228}
7229
7230define <16 x i32> @test150(<16 x i32> %a, <16 x i32> %b) {
7231; SSE2-LABEL: test150:
7232; SSE2:       # BB#0: # %entry
7233; SSE2-NEXT:    movdqa %xmm0, %xmm10
7234; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
7235; SSE2-NEXT:    movdqa %xmm7, %xmm0
7236; SSE2-NEXT:    pxor %xmm14, %xmm0
7237; SSE2-NEXT:    movdqa %xmm3, %xmm12
7238; SSE2-NEXT:    pxor %xmm14, %xmm12
7239; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
7240; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
7241; SSE2-NEXT:    movdqa %xmm12, %xmm8
7242; SSE2-NEXT:    pxor %xmm0, %xmm8
7243; SSE2-NEXT:    movdqa %xmm6, %xmm9
7244; SSE2-NEXT:    pxor %xmm14, %xmm9
7245; SSE2-NEXT:    movdqa %xmm2, %xmm13
7246; SSE2-NEXT:    pxor %xmm14, %xmm13
7247; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
7248; SSE2-NEXT:    movdqa %xmm13, %xmm9
7249; SSE2-NEXT:    pxor %xmm0, %xmm9
7250; SSE2-NEXT:    movdqa %xmm5, %xmm11
7251; SSE2-NEXT:    pxor %xmm14, %xmm11
7252; SSE2-NEXT:    movdqa %xmm1, %xmm15
7253; SSE2-NEXT:    pxor %xmm14, %xmm15
7254; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
7255; SSE2-NEXT:    movdqa %xmm4, %xmm11
7256; SSE2-NEXT:    pxor %xmm14, %xmm11
7257; SSE2-NEXT:    pxor %xmm10, %xmm14
7258; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
7259; SSE2-NEXT:    movdqa %xmm15, %xmm11
7260; SSE2-NEXT:    pxor %xmm0, %xmm11
7261; SSE2-NEXT:    pxor %xmm14, %xmm0
7262; SSE2-NEXT:    pandn %xmm4, %xmm14
7263; SSE2-NEXT:    pandn %xmm10, %xmm0
7264; SSE2-NEXT:    por %xmm14, %xmm0
7265; SSE2-NEXT:    pandn %xmm5, %xmm15
7266; SSE2-NEXT:    pandn %xmm1, %xmm11
7267; SSE2-NEXT:    por %xmm15, %xmm11
7268; SSE2-NEXT:    pandn %xmm6, %xmm13
7269; SSE2-NEXT:    pandn %xmm2, %xmm9
7270; SSE2-NEXT:    por %xmm13, %xmm9
7271; SSE2-NEXT:    pandn %xmm7, %xmm12
7272; SSE2-NEXT:    pandn %xmm3, %xmm8
7273; SSE2-NEXT:    por %xmm12, %xmm8
7274; SSE2-NEXT:    movdqa %xmm11, %xmm1
7275; SSE2-NEXT:    movdqa %xmm9, %xmm2
7276; SSE2-NEXT:    movdqa %xmm8, %xmm3
7277; SSE2-NEXT:    retq
7278;
7279; SSE4-LABEL: test150:
7280; SSE4:       # BB#0: # %entry
7281; SSE4-NEXT:    pmaxud %xmm4, %xmm0
7282; SSE4-NEXT:    pmaxud %xmm5, %xmm1
7283; SSE4-NEXT:    pmaxud %xmm6, %xmm2
7284; SSE4-NEXT:    pmaxud %xmm7, %xmm3
7285; SSE4-NEXT:    retq
7286;
7287; AVX1-LABEL: test150:
7288; AVX1:       # BB#0: # %entry
7289; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7290; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7291; AVX1-NEXT:    vpmaxud %xmm4, %xmm5, %xmm4
7292; AVX1-NEXT:    vpmaxud %xmm2, %xmm0, %xmm0
7293; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7294; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7295; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7296; AVX1-NEXT:    vpmaxud %xmm2, %xmm4, %xmm2
7297; AVX1-NEXT:    vpmaxud %xmm3, %xmm1, %xmm1
7298; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7299; AVX1-NEXT:    retq
7300;
7301; AVX2-LABEL: test150:
7302; AVX2:       # BB#0: # %entry
7303; AVX2-NEXT:    vpmaxud %ymm2, %ymm0, %ymm0
7304; AVX2-NEXT:    vpmaxud %ymm3, %ymm1, %ymm1
7305; AVX2-NEXT:    retq
7306;
7307; AVX512F-LABEL: test150:
7308; AVX512F:       # BB#0: # %entry
7309; AVX512F-NEXT:    vpmaxud %zmm1, %zmm0, %zmm0
7310; AVX512F-NEXT:    retq
7311entry:
7312  %cmp = icmp ule <16 x i32> %a, %b
7313  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7314  ret <16 x i32> %sel
7315}
7316
7317define <16 x i32> @test151(<16 x i32> %a, <16 x i32> %b) {
7318; SSE2-LABEL: test151:
7319; SSE2:       # BB#0: # %entry
7320; SSE2-NEXT:    movdqa %xmm0, %xmm11
7321; SSE2-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
7322; SSE2-NEXT:    movdqa %xmm7, %xmm9
7323; SSE2-NEXT:    pxor %xmm0, %xmm9
7324; SSE2-NEXT:    movdqa %xmm3, %xmm8
7325; SSE2-NEXT:    pxor %xmm0, %xmm8
7326; SSE2-NEXT:    pcmpgtd %xmm9, %xmm8
7327; SSE2-NEXT:    movdqa %xmm6, %xmm10
7328; SSE2-NEXT:    pxor %xmm0, %xmm10
7329; SSE2-NEXT:    movdqa %xmm2, %xmm9
7330; SSE2-NEXT:    pxor %xmm0, %xmm9
7331; SSE2-NEXT:    pcmpgtd %xmm10, %xmm9
7332; SSE2-NEXT:    movdqa %xmm5, %xmm12
7333; SSE2-NEXT:    pxor %xmm0, %xmm12
7334; SSE2-NEXT:    movdqa %xmm1, %xmm10
7335; SSE2-NEXT:    pxor %xmm0, %xmm10
7336; SSE2-NEXT:    pcmpgtd %xmm12, %xmm10
7337; SSE2-NEXT:    movdqa %xmm4, %xmm12
7338; SSE2-NEXT:    pxor %xmm0, %xmm12
7339; SSE2-NEXT:    pxor %xmm11, %xmm0
7340; SSE2-NEXT:    pcmpgtd %xmm12, %xmm0
7341; SSE2-NEXT:    pand %xmm0, %xmm4
7342; SSE2-NEXT:    pandn %xmm11, %xmm0
7343; SSE2-NEXT:    por %xmm4, %xmm0
7344; SSE2-NEXT:    pand %xmm10, %xmm5
7345; SSE2-NEXT:    pandn %xmm1, %xmm10
7346; SSE2-NEXT:    por %xmm5, %xmm10
7347; SSE2-NEXT:    pand %xmm9, %xmm6
7348; SSE2-NEXT:    pandn %xmm2, %xmm9
7349; SSE2-NEXT:    por %xmm6, %xmm9
7350; SSE2-NEXT:    pand %xmm8, %xmm7
7351; SSE2-NEXT:    pandn %xmm3, %xmm8
7352; SSE2-NEXT:    por %xmm7, %xmm8
7353; SSE2-NEXT:    movdqa %xmm10, %xmm1
7354; SSE2-NEXT:    movdqa %xmm9, %xmm2
7355; SSE2-NEXT:    movdqa %xmm8, %xmm3
7356; SSE2-NEXT:    retq
7357;
7358; SSE4-LABEL: test151:
7359; SSE4:       # BB#0: # %entry
7360; SSE4-NEXT:    pminud %xmm4, %xmm0
7361; SSE4-NEXT:    pminud %xmm5, %xmm1
7362; SSE4-NEXT:    pminud %xmm6, %xmm2
7363; SSE4-NEXT:    pminud %xmm7, %xmm3
7364; SSE4-NEXT:    retq
7365;
7366; AVX1-LABEL: test151:
7367; AVX1:       # BB#0: # %entry
7368; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7369; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7370; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
7371; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
7372; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7373; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7374; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7375; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
7376; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
7377; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7378; AVX1-NEXT:    retq
7379;
7380; AVX2-LABEL: test151:
7381; AVX2:       # BB#0: # %entry
7382; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
7383; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
7384; AVX2-NEXT:    retq
7385;
7386; AVX512F-LABEL: test151:
7387; AVX512F:       # BB#0: # %entry
7388; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
7389; AVX512F-NEXT:    retq
7390entry:
7391  %cmp = icmp ugt <16 x i32> %a, %b
7392  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7393  ret <16 x i32> %sel
7394}
7395
7396define <16 x i32> @test152(<16 x i32> %a, <16 x i32> %b) {
7397; SSE2-LABEL: test152:
7398; SSE2:       # BB#0: # %entry
7399; SSE2-NEXT:    movdqa %xmm0, %xmm10
7400; SSE2-NEXT:    movdqa {{.*#+}} xmm14 = [2147483648,2147483648,2147483648,2147483648]
7401; SSE2-NEXT:    movdqa %xmm3, %xmm0
7402; SSE2-NEXT:    pxor %xmm14, %xmm0
7403; SSE2-NEXT:    movdqa %xmm7, %xmm12
7404; SSE2-NEXT:    pxor %xmm14, %xmm12
7405; SSE2-NEXT:    pcmpgtd %xmm0, %xmm12
7406; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
7407; SSE2-NEXT:    movdqa %xmm12, %xmm8
7408; SSE2-NEXT:    pxor %xmm0, %xmm8
7409; SSE2-NEXT:    movdqa %xmm2, %xmm9
7410; SSE2-NEXT:    pxor %xmm14, %xmm9
7411; SSE2-NEXT:    movdqa %xmm6, %xmm13
7412; SSE2-NEXT:    pxor %xmm14, %xmm13
7413; SSE2-NEXT:    pcmpgtd %xmm9, %xmm13
7414; SSE2-NEXT:    movdqa %xmm13, %xmm9
7415; SSE2-NEXT:    pxor %xmm0, %xmm9
7416; SSE2-NEXT:    movdqa %xmm1, %xmm11
7417; SSE2-NEXT:    pxor %xmm14, %xmm11
7418; SSE2-NEXT:    movdqa %xmm5, %xmm15
7419; SSE2-NEXT:    pxor %xmm14, %xmm15
7420; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
7421; SSE2-NEXT:    movdqa %xmm10, %xmm11
7422; SSE2-NEXT:    pxor %xmm14, %xmm11
7423; SSE2-NEXT:    pxor %xmm4, %xmm14
7424; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
7425; SSE2-NEXT:    movdqa %xmm15, %xmm11
7426; SSE2-NEXT:    pxor %xmm0, %xmm11
7427; SSE2-NEXT:    pxor %xmm14, %xmm0
7428; SSE2-NEXT:    pandn %xmm4, %xmm14
7429; SSE2-NEXT:    pandn %xmm10, %xmm0
7430; SSE2-NEXT:    por %xmm14, %xmm0
7431; SSE2-NEXT:    pandn %xmm5, %xmm15
7432; SSE2-NEXT:    pandn %xmm1, %xmm11
7433; SSE2-NEXT:    por %xmm15, %xmm11
7434; SSE2-NEXT:    pandn %xmm6, %xmm13
7435; SSE2-NEXT:    pandn %xmm2, %xmm9
7436; SSE2-NEXT:    por %xmm13, %xmm9
7437; SSE2-NEXT:    pandn %xmm7, %xmm12
7438; SSE2-NEXT:    pandn %xmm3, %xmm8
7439; SSE2-NEXT:    por %xmm12, %xmm8
7440; SSE2-NEXT:    movdqa %xmm11, %xmm1
7441; SSE2-NEXT:    movdqa %xmm9, %xmm2
7442; SSE2-NEXT:    movdqa %xmm8, %xmm3
7443; SSE2-NEXT:    retq
7444;
7445; SSE4-LABEL: test152:
7446; SSE4:       # BB#0: # %entry
7447; SSE4-NEXT:    pminud %xmm4, %xmm0
7448; SSE4-NEXT:    pminud %xmm5, %xmm1
7449; SSE4-NEXT:    pminud %xmm6, %xmm2
7450; SSE4-NEXT:    pminud %xmm7, %xmm3
7451; SSE4-NEXT:    retq
7452;
7453; AVX1-LABEL: test152:
7454; AVX1:       # BB#0: # %entry
7455; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm4
7456; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7457; AVX1-NEXT:    vpminud %xmm4, %xmm5, %xmm4
7458; AVX1-NEXT:    vpminud %xmm2, %xmm0, %xmm0
7459; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0
7460; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm2
7461; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7462; AVX1-NEXT:    vpminud %xmm2, %xmm4, %xmm2
7463; AVX1-NEXT:    vpminud %xmm3, %xmm1, %xmm1
7464; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm1
7465; AVX1-NEXT:    retq
7466;
7467; AVX2-LABEL: test152:
7468; AVX2:       # BB#0: # %entry
7469; AVX2-NEXT:    vpminud %ymm2, %ymm0, %ymm0
7470; AVX2-NEXT:    vpminud %ymm3, %ymm1, %ymm1
7471; AVX2-NEXT:    retq
7472;
7473; AVX512F-LABEL: test152:
7474; AVX512F:       # BB#0: # %entry
7475; AVX512F-NEXT:    vpminud %zmm1, %zmm0, %zmm0
7476; AVX512F-NEXT:    retq
7477entry:
7478  %cmp = icmp uge <16 x i32> %a, %b
7479  %sel = select <16 x i1> %cmp, <16 x i32> %b, <16 x i32> %a
7480  ret <16 x i32> %sel
7481}
7482
7483; -----------------------
7484
7485define <8 x i64> @test153(<8 x i64> %a, <8 x i64> %b) {
7486; SSE2-LABEL: test153:
7487; SSE2:       # BB#0: # %entry
7488; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0]
7489; SSE2-NEXT:    movdqa %xmm3, %xmm8
7490; SSE2-NEXT:    pxor %xmm11, %xmm8
7491; SSE2-NEXT:    movdqa %xmm7, %xmm9
7492; SSE2-NEXT:    pxor %xmm11, %xmm9
7493; SSE2-NEXT:    movdqa %xmm9, %xmm10
7494; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
7495; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
7496; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
7497; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
7498; SSE2-NEXT:    pand %xmm12, %xmm9
7499; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
7500; SSE2-NEXT:    por %xmm9, %xmm8
7501; SSE2-NEXT:    movdqa %xmm2, %xmm9
7502; SSE2-NEXT:    pxor %xmm11, %xmm9
7503; SSE2-NEXT:    movdqa %xmm6, %xmm10
7504; SSE2-NEXT:    pxor %xmm11, %xmm10
7505; SSE2-NEXT:    movdqa %xmm10, %xmm12
7506; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
7507; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
7508; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7509; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
7510; SSE2-NEXT:    pand %xmm13, %xmm10
7511; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
7512; SSE2-NEXT:    por %xmm10, %xmm9
7513; SSE2-NEXT:    movdqa %xmm1, %xmm10
7514; SSE2-NEXT:    pxor %xmm11, %xmm10
7515; SSE2-NEXT:    movdqa %xmm5, %xmm12
7516; SSE2-NEXT:    pxor %xmm11, %xmm12
7517; SSE2-NEXT:    movdqa %xmm12, %xmm13
7518; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
7519; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
7520; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
7521; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
7522; SSE2-NEXT:    pand %xmm14, %xmm12
7523; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
7524; SSE2-NEXT:    por %xmm12, %xmm10
7525; SSE2-NEXT:    movdqa %xmm0, %xmm12
7526; SSE2-NEXT:    pxor %xmm11, %xmm12
7527; SSE2-NEXT:    pxor %xmm4, %xmm11
7528; SSE2-NEXT:    movdqa %xmm11, %xmm13
7529; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
7530; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
7531; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
7532; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
7533; SSE2-NEXT:    pand %xmm14, %xmm12
7534; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
7535; SSE2-NEXT:    por %xmm12, %xmm11
7536; SSE2-NEXT:    pand %xmm11, %xmm4
7537; SSE2-NEXT:    pandn %xmm0, %xmm11
7538; SSE2-NEXT:    por %xmm4, %xmm11
7539; SSE2-NEXT:    pand %xmm10, %xmm5
7540; SSE2-NEXT:    pandn %xmm1, %xmm10
7541; SSE2-NEXT:    por %xmm5, %xmm10
7542; SSE2-NEXT:    pand %xmm9, %xmm6
7543; SSE2-NEXT:    pandn %xmm2, %xmm9
7544; SSE2-NEXT:    por %xmm6, %xmm9
7545; SSE2-NEXT:    pand %xmm8, %xmm7
7546; SSE2-NEXT:    pandn %xmm3, %xmm8
7547; SSE2-NEXT:    por %xmm7, %xmm8
7548; SSE2-NEXT:    movdqa %xmm11, %xmm0
7549; SSE2-NEXT:    movdqa %xmm10, %xmm1
7550; SSE2-NEXT:    movdqa %xmm9, %xmm2
7551; SSE2-NEXT:    movdqa %xmm8, %xmm3
7552; SSE2-NEXT:    retq
7553;
7554; SSE4-LABEL: test153:
7555; SSE4:       # BB#0: # %entry
7556; SSE4-NEXT:    movdqa %xmm0, %xmm8
7557; SSE4-NEXT:    movdqa %xmm7, %xmm9
7558; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
7559; SSE4-NEXT:    movdqa %xmm6, %xmm10
7560; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
7561; SSE4-NEXT:    movdqa %xmm5, %xmm11
7562; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
7563; SSE4-NEXT:    movdqa %xmm4, %xmm0
7564; SSE4-NEXT:    pcmpgtq %xmm8, %xmm0
7565; SSE4-NEXT:    blendvpd %xmm4, %xmm8
7566; SSE4-NEXT:    movdqa %xmm11, %xmm0
7567; SSE4-NEXT:    blendvpd %xmm5, %xmm1
7568; SSE4-NEXT:    movdqa %xmm10, %xmm0
7569; SSE4-NEXT:    blendvpd %xmm6, %xmm2
7570; SSE4-NEXT:    movdqa %xmm9, %xmm0
7571; SSE4-NEXT:    blendvpd %xmm7, %xmm3
7572; SSE4-NEXT:    movapd %xmm8, %xmm0
7573; SSE4-NEXT:    retq
7574;
7575; AVX1-LABEL: test153:
7576; AVX1:       # BB#0: # %entry
7577; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7578; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
7579; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7580; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm5
7581; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7582; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
7583; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7584; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
7585; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm6
7586; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
7587; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7588; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7589; AVX1-NEXT:    retq
7590;
7591; AVX2-LABEL: test153:
7592; AVX2:       # BB#0: # %entry
7593; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
7594; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm5
7595; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7596; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7597; AVX2-NEXT:    retq
7598;
7599; AVX512F-LABEL: test153:
7600; AVX512F:       # BB#0: # %entry
7601; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7602; AVX512F-NEXT:    retq
7603entry:
7604  %cmp = icmp slt <8 x i64> %a, %b
7605  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7606  ret <8 x i64> %sel
7607}
7608
7609define <8 x i64> @test154(<8 x i64> %a, <8 x i64> %b) {
7610; SSE2-LABEL: test154:
7611; SSE2:       # BB#0: # %entry
7612; SSE2-NEXT:    movdqa %xmm7, %xmm8
7613; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
7614; SSE2-NEXT:    movdqa %xmm3, %xmm7
7615; SSE2-NEXT:    movdqa %xmm2, %xmm3
7616; SSE2-NEXT:    movdqa %xmm1, %xmm2
7617; SSE2-NEXT:    movdqa %xmm0, %xmm9
7618; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
7619; SSE2-NEXT:    pxor %xmm10, %xmm8
7620; SSE2-NEXT:    movdqa %xmm7, %xmm0
7621; SSE2-NEXT:    pxor %xmm10, %xmm0
7622; SSE2-NEXT:    movdqa %xmm0, %xmm11
7623; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
7624; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7625; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
7626; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7627; SSE2-NEXT:    pand %xmm12, %xmm0
7628; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
7629; SSE2-NEXT:    por %xmm0, %xmm12
7630; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
7631; SSE2-NEXT:    movdqa %xmm12, %xmm8
7632; SSE2-NEXT:    pxor %xmm1, %xmm8
7633; SSE2-NEXT:    movdqa %xmm6, %xmm11
7634; SSE2-NEXT:    pxor %xmm10, %xmm11
7635; SSE2-NEXT:    movdqa %xmm3, %xmm13
7636; SSE2-NEXT:    pxor %xmm10, %xmm13
7637; SSE2-NEXT:    movdqa %xmm13, %xmm14
7638; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
7639; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
7640; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
7641; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
7642; SSE2-NEXT:    pand %xmm15, %xmm11
7643; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
7644; SSE2-NEXT:    por %xmm11, %xmm13
7645; SSE2-NEXT:    movdqa %xmm5, %xmm11
7646; SSE2-NEXT:    pxor %xmm10, %xmm11
7647; SSE2-NEXT:    movdqa %xmm2, %xmm14
7648; SSE2-NEXT:    pxor %xmm10, %xmm14
7649; SSE2-NEXT:    movdqa %xmm14, %xmm15
7650; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
7651; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
7652; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
7653; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
7654; SSE2-NEXT:    pand %xmm11, %xmm14
7655; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
7656; SSE2-NEXT:    por %xmm14, %xmm15
7657; SSE2-NEXT:    movdqa %xmm4, %xmm11
7658; SSE2-NEXT:    pxor %xmm10, %xmm11
7659; SSE2-NEXT:    pxor %xmm9, %xmm10
7660; SSE2-NEXT:    movdqa %xmm10, %xmm14
7661; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
7662; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
7663; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
7664; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
7665; SSE2-NEXT:    pand %xmm11, %xmm0
7666; SSE2-NEXT:    movdqa %xmm13, %xmm10
7667; SSE2-NEXT:    pxor %xmm1, %xmm10
7668; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
7669; SSE2-NEXT:    por %xmm0, %xmm14
7670; SSE2-NEXT:    movdqa %xmm15, %xmm11
7671; SSE2-NEXT:    pxor %xmm1, %xmm11
7672; SSE2-NEXT:    pxor %xmm14, %xmm1
7673; SSE2-NEXT:    pandn %xmm4, %xmm14
7674; SSE2-NEXT:    pandn %xmm9, %xmm1
7675; SSE2-NEXT:    por %xmm14, %xmm1
7676; SSE2-NEXT:    pandn %xmm5, %xmm15
7677; SSE2-NEXT:    pandn %xmm2, %xmm11
7678; SSE2-NEXT:    por %xmm15, %xmm11
7679; SSE2-NEXT:    pandn %xmm6, %xmm13
7680; SSE2-NEXT:    pandn %xmm3, %xmm10
7681; SSE2-NEXT:    por %xmm13, %xmm10
7682; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
7683; SSE2-NEXT:    pandn %xmm7, %xmm8
7684; SSE2-NEXT:    por %xmm12, %xmm8
7685; SSE2-NEXT:    movdqa %xmm1, %xmm0
7686; SSE2-NEXT:    movdqa %xmm11, %xmm1
7687; SSE2-NEXT:    movdqa %xmm10, %xmm2
7688; SSE2-NEXT:    movdqa %xmm8, %xmm3
7689; SSE2-NEXT:    retq
7690;
7691; SSE4-LABEL: test154:
7692; SSE4:       # BB#0: # %entry
7693; SSE4-NEXT:    movdqa %xmm0, %xmm8
7694; SSE4-NEXT:    movdqa %xmm3, %xmm9
7695; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
7696; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
7697; SSE4-NEXT:    pxor %xmm12, %xmm9
7698; SSE4-NEXT:    movdqa %xmm2, %xmm10
7699; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
7700; SSE4-NEXT:    pxor %xmm12, %xmm10
7701; SSE4-NEXT:    movdqa %xmm1, %xmm11
7702; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
7703; SSE4-NEXT:    pxor %xmm12, %xmm11
7704; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7705; SSE4-NEXT:    pxor %xmm12, %xmm0
7706; SSE4-NEXT:    blendvpd %xmm4, %xmm8
7707; SSE4-NEXT:    movdqa %xmm11, %xmm0
7708; SSE4-NEXT:    blendvpd %xmm5, %xmm1
7709; SSE4-NEXT:    movdqa %xmm10, %xmm0
7710; SSE4-NEXT:    blendvpd %xmm6, %xmm2
7711; SSE4-NEXT:    movdqa %xmm9, %xmm0
7712; SSE4-NEXT:    blendvpd %xmm7, %xmm3
7713; SSE4-NEXT:    movapd %xmm8, %xmm0
7714; SSE4-NEXT:    retq
7715;
7716; AVX1-LABEL: test154:
7717; AVX1:       # BB#0: # %entry
7718; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7719; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
7720; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7721; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
7722; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7723; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm6
7724; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7725; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
7726; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
7727; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
7728; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
7729; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7730; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm7
7731; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
7732; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
7733; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7734; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7735; AVX1-NEXT:    retq
7736;
7737; AVX2-LABEL: test154:
7738; AVX2:       # BB#0: # %entry
7739; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
7740; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
7741; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
7742; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm6
7743; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
7744; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7745; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7746; AVX2-NEXT:    retq
7747;
7748; AVX512F-LABEL: test154:
7749; AVX512F:       # BB#0: # %entry
7750; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
7751; AVX512F-NEXT:    retq
7752entry:
7753  %cmp = icmp sle <8 x i64> %a, %b
7754  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7755  ret <8 x i64> %sel
7756}
7757
7758define <8 x i64> @test155(<8 x i64> %a, <8 x i64> %b) {
7759; SSE2-LABEL: test155:
7760; SSE2:       # BB#0: # %entry
7761; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,0,2147483648,0]
7762; SSE2-NEXT:    movdqa %xmm7, %xmm8
7763; SSE2-NEXT:    pxor %xmm11, %xmm8
7764; SSE2-NEXT:    movdqa %xmm3, %xmm9
7765; SSE2-NEXT:    pxor %xmm11, %xmm9
7766; SSE2-NEXT:    movdqa %xmm9, %xmm10
7767; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
7768; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
7769; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
7770; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
7771; SSE2-NEXT:    pand %xmm12, %xmm9
7772; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
7773; SSE2-NEXT:    por %xmm9, %xmm8
7774; SSE2-NEXT:    movdqa %xmm6, %xmm9
7775; SSE2-NEXT:    pxor %xmm11, %xmm9
7776; SSE2-NEXT:    movdqa %xmm2, %xmm10
7777; SSE2-NEXT:    pxor %xmm11, %xmm10
7778; SSE2-NEXT:    movdqa %xmm10, %xmm12
7779; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
7780; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
7781; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
7782; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
7783; SSE2-NEXT:    pand %xmm13, %xmm10
7784; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
7785; SSE2-NEXT:    por %xmm10, %xmm9
7786; SSE2-NEXT:    movdqa %xmm5, %xmm10
7787; SSE2-NEXT:    pxor %xmm11, %xmm10
7788; SSE2-NEXT:    movdqa %xmm1, %xmm12
7789; SSE2-NEXT:    pxor %xmm11, %xmm12
7790; SSE2-NEXT:    movdqa %xmm12, %xmm13
7791; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
7792; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
7793; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
7794; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
7795; SSE2-NEXT:    pand %xmm14, %xmm12
7796; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
7797; SSE2-NEXT:    por %xmm12, %xmm10
7798; SSE2-NEXT:    movdqa %xmm4, %xmm12
7799; SSE2-NEXT:    pxor %xmm11, %xmm12
7800; SSE2-NEXT:    pxor %xmm0, %xmm11
7801; SSE2-NEXT:    movdqa %xmm11, %xmm13
7802; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
7803; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
7804; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
7805; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
7806; SSE2-NEXT:    pand %xmm14, %xmm12
7807; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
7808; SSE2-NEXT:    por %xmm12, %xmm11
7809; SSE2-NEXT:    pand %xmm11, %xmm4
7810; SSE2-NEXT:    pandn %xmm0, %xmm11
7811; SSE2-NEXT:    por %xmm4, %xmm11
7812; SSE2-NEXT:    pand %xmm10, %xmm5
7813; SSE2-NEXT:    pandn %xmm1, %xmm10
7814; SSE2-NEXT:    por %xmm5, %xmm10
7815; SSE2-NEXT:    pand %xmm9, %xmm6
7816; SSE2-NEXT:    pandn %xmm2, %xmm9
7817; SSE2-NEXT:    por %xmm6, %xmm9
7818; SSE2-NEXT:    pand %xmm8, %xmm7
7819; SSE2-NEXT:    pandn %xmm3, %xmm8
7820; SSE2-NEXT:    por %xmm7, %xmm8
7821; SSE2-NEXT:    movdqa %xmm11, %xmm0
7822; SSE2-NEXT:    movdqa %xmm10, %xmm1
7823; SSE2-NEXT:    movdqa %xmm9, %xmm2
7824; SSE2-NEXT:    movdqa %xmm8, %xmm3
7825; SSE2-NEXT:    retq
7826;
7827; SSE4-LABEL: test155:
7828; SSE4:       # BB#0: # %entry
7829; SSE4-NEXT:    movdqa %xmm0, %xmm8
7830; SSE4-NEXT:    movdqa %xmm3, %xmm9
7831; SSE4-NEXT:    pcmpgtq %xmm7, %xmm9
7832; SSE4-NEXT:    movdqa %xmm2, %xmm10
7833; SSE4-NEXT:    pcmpgtq %xmm6, %xmm10
7834; SSE4-NEXT:    movdqa %xmm1, %xmm11
7835; SSE4-NEXT:    pcmpgtq %xmm5, %xmm11
7836; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
7837; SSE4-NEXT:    blendvpd %xmm4, %xmm8
7838; SSE4-NEXT:    movdqa %xmm11, %xmm0
7839; SSE4-NEXT:    blendvpd %xmm5, %xmm1
7840; SSE4-NEXT:    movdqa %xmm10, %xmm0
7841; SSE4-NEXT:    blendvpd %xmm6, %xmm2
7842; SSE4-NEXT:    movdqa %xmm9, %xmm0
7843; SSE4-NEXT:    blendvpd %xmm7, %xmm3
7844; SSE4-NEXT:    movapd %xmm8, %xmm0
7845; SSE4-NEXT:    retq
7846;
7847; AVX1-LABEL: test155:
7848; AVX1:       # BB#0: # %entry
7849; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
7850; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
7851; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7852; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm1, %xmm5
7853; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4
7854; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
7855; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
7856; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
7857; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm6
7858; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
7859; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7860; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7861; AVX1-NEXT:    retq
7862;
7863; AVX2-LABEL: test155:
7864; AVX2:       # BB#0: # %entry
7865; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm1, %ymm4
7866; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm5
7867; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
7868; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
7869; AVX2-NEXT:    retq
7870;
7871; AVX512F-LABEL: test155:
7872; AVX512F:       # BB#0: # %entry
7873; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
7874; AVX512F-NEXT:    retq
7875entry:
7876  %cmp = icmp sgt <8 x i64> %a, %b
7877  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
7878  ret <8 x i64> %sel
7879}
7880
7881define <8 x i64> @test156(<8 x i64> %a, <8 x i64> %b) {
7882; SSE2-LABEL: test156:
7883; SSE2:       # BB#0: # %entry
7884; SSE2-NEXT:    movdqa %xmm7, %xmm11
7885; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
7886; SSE2-NEXT:    movdqa %xmm3, %xmm7
7887; SSE2-NEXT:    movdqa %xmm2, %xmm3
7888; SSE2-NEXT:    movdqa %xmm1, %xmm2
7889; SSE2-NEXT:    movdqa %xmm0, %xmm9
7890; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
7891; SSE2-NEXT:    movdqa %xmm7, %xmm8
7892; SSE2-NEXT:    pxor %xmm10, %xmm8
7893; SSE2-NEXT:    movdqa %xmm11, %xmm0
7894; SSE2-NEXT:    pxor %xmm10, %xmm0
7895; SSE2-NEXT:    movdqa %xmm0, %xmm11
7896; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
7897; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
7898; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
7899; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
7900; SSE2-NEXT:    pand %xmm12, %xmm0
7901; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
7902; SSE2-NEXT:    por %xmm0, %xmm12
7903; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
7904; SSE2-NEXT:    movdqa %xmm12, %xmm8
7905; SSE2-NEXT:    pxor %xmm1, %xmm8
7906; SSE2-NEXT:    movdqa %xmm3, %xmm11
7907; SSE2-NEXT:    pxor %xmm10, %xmm11
7908; SSE2-NEXT:    movdqa %xmm6, %xmm13
7909; SSE2-NEXT:    pxor %xmm10, %xmm13
7910; SSE2-NEXT:    movdqa %xmm13, %xmm14
7911; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
7912; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
7913; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
7914; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
7915; SSE2-NEXT:    pand %xmm15, %xmm11
7916; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
7917; SSE2-NEXT:    por %xmm11, %xmm13
7918; SSE2-NEXT:    movdqa %xmm2, %xmm11
7919; SSE2-NEXT:    pxor %xmm10, %xmm11
7920; SSE2-NEXT:    movdqa %xmm5, %xmm14
7921; SSE2-NEXT:    pxor %xmm10, %xmm14
7922; SSE2-NEXT:    movdqa %xmm14, %xmm15
7923; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
7924; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
7925; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
7926; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
7927; SSE2-NEXT:    pand %xmm11, %xmm14
7928; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
7929; SSE2-NEXT:    por %xmm14, %xmm15
7930; SSE2-NEXT:    movdqa %xmm9, %xmm11
7931; SSE2-NEXT:    pxor %xmm10, %xmm11
7932; SSE2-NEXT:    pxor %xmm4, %xmm10
7933; SSE2-NEXT:    movdqa %xmm10, %xmm14
7934; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
7935; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
7936; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
7937; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
7938; SSE2-NEXT:    pand %xmm11, %xmm0
7939; SSE2-NEXT:    movdqa %xmm13, %xmm10
7940; SSE2-NEXT:    pxor %xmm1, %xmm10
7941; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
7942; SSE2-NEXT:    por %xmm0, %xmm14
7943; SSE2-NEXT:    movdqa %xmm15, %xmm11
7944; SSE2-NEXT:    pxor %xmm1, %xmm11
7945; SSE2-NEXT:    pxor %xmm14, %xmm1
7946; SSE2-NEXT:    pandn %xmm4, %xmm14
7947; SSE2-NEXT:    pandn %xmm9, %xmm1
7948; SSE2-NEXT:    por %xmm14, %xmm1
7949; SSE2-NEXT:    pandn %xmm5, %xmm15
7950; SSE2-NEXT:    pandn %xmm2, %xmm11
7951; SSE2-NEXT:    por %xmm15, %xmm11
7952; SSE2-NEXT:    pandn %xmm6, %xmm13
7953; SSE2-NEXT:    pandn %xmm3, %xmm10
7954; SSE2-NEXT:    por %xmm13, %xmm10
7955; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
7956; SSE2-NEXT:    pandn %xmm7, %xmm8
7957; SSE2-NEXT:    por %xmm12, %xmm8
7958; SSE2-NEXT:    movdqa %xmm1, %xmm0
7959; SSE2-NEXT:    movdqa %xmm11, %xmm1
7960; SSE2-NEXT:    movdqa %xmm10, %xmm2
7961; SSE2-NEXT:    movdqa %xmm8, %xmm3
7962; SSE2-NEXT:    retq
7963;
7964; SSE4-LABEL: test156:
7965; SSE4:       # BB#0: # %entry
7966; SSE4-NEXT:    movdqa %xmm0, %xmm8
7967; SSE4-NEXT:    movdqa %xmm7, %xmm9
7968; SSE4-NEXT:    pcmpgtq %xmm3, %xmm9
7969; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
7970; SSE4-NEXT:    pxor %xmm0, %xmm9
7971; SSE4-NEXT:    movdqa %xmm6, %xmm10
7972; SSE4-NEXT:    pcmpgtq %xmm2, %xmm10
7973; SSE4-NEXT:    pxor %xmm0, %xmm10
7974; SSE4-NEXT:    movdqa %xmm5, %xmm11
7975; SSE4-NEXT:    pcmpgtq %xmm1, %xmm11
7976; SSE4-NEXT:    pxor %xmm0, %xmm11
7977; SSE4-NEXT:    movdqa %xmm4, %xmm12
7978; SSE4-NEXT:    pcmpgtq %xmm8, %xmm12
7979; SSE4-NEXT:    pxor %xmm12, %xmm0
7980; SSE4-NEXT:    blendvpd %xmm4, %xmm8
7981; SSE4-NEXT:    movdqa %xmm11, %xmm0
7982; SSE4-NEXT:    blendvpd %xmm5, %xmm1
7983; SSE4-NEXT:    movdqa %xmm10, %xmm0
7984; SSE4-NEXT:    blendvpd %xmm6, %xmm2
7985; SSE4-NEXT:    movdqa %xmm9, %xmm0
7986; SSE4-NEXT:    blendvpd %xmm7, %xmm3
7987; SSE4-NEXT:    movapd %xmm8, %xmm0
7988; SSE4-NEXT:    retq
7989;
7990; AVX1-LABEL: test156:
7991; AVX1:       # BB#0: # %entry
7992; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
7993; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
7994; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm4
7995; AVX1-NEXT:    vpcmpeqd %xmm5, %xmm5, %xmm5
7996; AVX1-NEXT:    vpxor %xmm5, %xmm4, %xmm4
7997; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm6
7998; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
7999; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
8000; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
8001; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
8002; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
8003; AVX1-NEXT:    vpxor %xmm5, %xmm6, %xmm6
8004; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm2, %xmm7
8005; AVX1-NEXT:    vpxor %xmm5, %xmm7, %xmm5
8006; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
8007; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8008; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8009; AVX1-NEXT:    retq
8010;
8011; AVX2-LABEL: test156:
8012; AVX2:       # BB#0: # %entry
8013; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm3, %ymm4
8014; AVX2-NEXT:    vpcmpeqd %ymm5, %ymm5, %ymm5
8015; AVX2-NEXT:    vpxor %ymm5, %ymm4, %ymm4
8016; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm6
8017; AVX2-NEXT:    vpxor %ymm5, %ymm6, %ymm5
8018; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8019; AVX2-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8020; AVX2-NEXT:    retq
8021;
8022; AVX512F-LABEL: test156:
8023; AVX512F:       # BB#0: # %entry
8024; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
8025; AVX512F-NEXT:    retq
8026entry:
8027  %cmp = icmp sge <8 x i64> %a, %b
8028  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8029  ret <8 x i64> %sel
8030}
8031
8032define <8 x i64> @test157(<8 x i64> %a, <8 x i64> %b) {
8033; SSE2-LABEL: test157:
8034; SSE2:       # BB#0: # %entry
8035; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
8036; SSE2-NEXT:    movdqa %xmm3, %xmm8
8037; SSE2-NEXT:    pxor %xmm11, %xmm8
8038; SSE2-NEXT:    movdqa %xmm7, %xmm9
8039; SSE2-NEXT:    pxor %xmm11, %xmm9
8040; SSE2-NEXT:    movdqa %xmm9, %xmm10
8041; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
8042; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
8043; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
8044; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
8045; SSE2-NEXT:    pand %xmm12, %xmm9
8046; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
8047; SSE2-NEXT:    por %xmm9, %xmm8
8048; SSE2-NEXT:    movdqa %xmm2, %xmm9
8049; SSE2-NEXT:    pxor %xmm11, %xmm9
8050; SSE2-NEXT:    movdqa %xmm6, %xmm10
8051; SSE2-NEXT:    pxor %xmm11, %xmm10
8052; SSE2-NEXT:    movdqa %xmm10, %xmm12
8053; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
8054; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
8055; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
8056; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
8057; SSE2-NEXT:    pand %xmm13, %xmm10
8058; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
8059; SSE2-NEXT:    por %xmm10, %xmm9
8060; SSE2-NEXT:    movdqa %xmm1, %xmm10
8061; SSE2-NEXT:    pxor %xmm11, %xmm10
8062; SSE2-NEXT:    movdqa %xmm5, %xmm12
8063; SSE2-NEXT:    pxor %xmm11, %xmm12
8064; SSE2-NEXT:    movdqa %xmm12, %xmm13
8065; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
8066; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
8067; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
8068; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
8069; SSE2-NEXT:    pand %xmm14, %xmm12
8070; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
8071; SSE2-NEXT:    por %xmm12, %xmm10
8072; SSE2-NEXT:    movdqa %xmm0, %xmm12
8073; SSE2-NEXT:    pxor %xmm11, %xmm12
8074; SSE2-NEXT:    pxor %xmm4, %xmm11
8075; SSE2-NEXT:    movdqa %xmm11, %xmm13
8076; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
8077; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
8078; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
8079; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
8080; SSE2-NEXT:    pand %xmm14, %xmm12
8081; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
8082; SSE2-NEXT:    por %xmm12, %xmm11
8083; SSE2-NEXT:    pand %xmm11, %xmm4
8084; SSE2-NEXT:    pandn %xmm0, %xmm11
8085; SSE2-NEXT:    por %xmm4, %xmm11
8086; SSE2-NEXT:    pand %xmm10, %xmm5
8087; SSE2-NEXT:    pandn %xmm1, %xmm10
8088; SSE2-NEXT:    por %xmm5, %xmm10
8089; SSE2-NEXT:    pand %xmm9, %xmm6
8090; SSE2-NEXT:    pandn %xmm2, %xmm9
8091; SSE2-NEXT:    por %xmm6, %xmm9
8092; SSE2-NEXT:    pand %xmm8, %xmm7
8093; SSE2-NEXT:    pandn %xmm3, %xmm8
8094; SSE2-NEXT:    por %xmm7, %xmm8
8095; SSE2-NEXT:    movdqa %xmm11, %xmm0
8096; SSE2-NEXT:    movdqa %xmm10, %xmm1
8097; SSE2-NEXT:    movdqa %xmm9, %xmm2
8098; SSE2-NEXT:    movdqa %xmm8, %xmm3
8099; SSE2-NEXT:    retq
8100;
8101; SSE4-LABEL: test157:
8102; SSE4:       # BB#0: # %entry
8103; SSE4-NEXT:    movdqa %xmm0, %xmm8
8104; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
8105; SSE4-NEXT:    movdqa %xmm3, %xmm10
8106; SSE4-NEXT:    pxor %xmm0, %xmm10
8107; SSE4-NEXT:    movdqa %xmm7, %xmm9
8108; SSE4-NEXT:    pxor %xmm0, %xmm9
8109; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
8110; SSE4-NEXT:    movdqa %xmm2, %xmm11
8111; SSE4-NEXT:    pxor %xmm0, %xmm11
8112; SSE4-NEXT:    movdqa %xmm6, %xmm10
8113; SSE4-NEXT:    pxor %xmm0, %xmm10
8114; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
8115; SSE4-NEXT:    movdqa %xmm1, %xmm12
8116; SSE4-NEXT:    pxor %xmm0, %xmm12
8117; SSE4-NEXT:    movdqa %xmm5, %xmm11
8118; SSE4-NEXT:    pxor %xmm0, %xmm11
8119; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
8120; SSE4-NEXT:    movdqa %xmm8, %xmm12
8121; SSE4-NEXT:    pxor %xmm0, %xmm12
8122; SSE4-NEXT:    pxor %xmm4, %xmm0
8123; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
8124; SSE4-NEXT:    blendvpd %xmm4, %xmm8
8125; SSE4-NEXT:    movdqa %xmm11, %xmm0
8126; SSE4-NEXT:    blendvpd %xmm5, %xmm1
8127; SSE4-NEXT:    movdqa %xmm10, %xmm0
8128; SSE4-NEXT:    blendvpd %xmm6, %xmm2
8129; SSE4-NEXT:    movdqa %xmm9, %xmm0
8130; SSE4-NEXT:    blendvpd %xmm7, %xmm3
8131; SSE4-NEXT:    movapd %xmm8, %xmm0
8132; SSE4-NEXT:    retq
8133;
8134; AVX1-LABEL: test157:
8135; AVX1:       # BB#0: # %entry
8136; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8137; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8138; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
8139; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
8140; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
8141; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
8142; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
8143; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
8144; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
8145; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
8146; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
8147; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
8148; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
8149; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
8150; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
8151; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
8152; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
8153; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
8154; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
8155; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8156; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8157; AVX1-NEXT:    retq
8158;
8159; AVX2-LABEL: test157:
8160; AVX2:       # BB#0: # %entry
8161; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
8162; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
8163; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
8164; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
8165; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm6
8166; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
8167; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
8168; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
8169; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
8170; AVX2-NEXT:    retq
8171;
8172; AVX512F-LABEL: test157:
8173; AVX512F:       # BB#0: # %entry
8174; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8175; AVX512F-NEXT:    retq
8176entry:
8177  %cmp = icmp ult <8 x i64> %a, %b
8178  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8179  ret <8 x i64> %sel
8180}
8181
8182define <8 x i64> @test158(<8 x i64> %a, <8 x i64> %b) {
8183; SSE2-LABEL: test158:
8184; SSE2:       # BB#0: # %entry
8185; SSE2-NEXT:    movdqa %xmm7, %xmm8
8186; SSE2-NEXT:    movdqa %xmm8, -{{[0-9]+}}(%rsp) # 16-byte Spill
8187; SSE2-NEXT:    movdqa %xmm3, %xmm7
8188; SSE2-NEXT:    movdqa %xmm2, %xmm3
8189; SSE2-NEXT:    movdqa %xmm1, %xmm2
8190; SSE2-NEXT:    movdqa %xmm0, %xmm9
8191; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
8192; SSE2-NEXT:    pxor %xmm10, %xmm8
8193; SSE2-NEXT:    movdqa %xmm7, %xmm0
8194; SSE2-NEXT:    pxor %xmm10, %xmm0
8195; SSE2-NEXT:    movdqa %xmm0, %xmm11
8196; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
8197; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
8198; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
8199; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
8200; SSE2-NEXT:    pand %xmm12, %xmm0
8201; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
8202; SSE2-NEXT:    por %xmm0, %xmm12
8203; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
8204; SSE2-NEXT:    movdqa %xmm12, %xmm8
8205; SSE2-NEXT:    pxor %xmm1, %xmm8
8206; SSE2-NEXT:    movdqa %xmm6, %xmm11
8207; SSE2-NEXT:    pxor %xmm10, %xmm11
8208; SSE2-NEXT:    movdqa %xmm3, %xmm13
8209; SSE2-NEXT:    pxor %xmm10, %xmm13
8210; SSE2-NEXT:    movdqa %xmm13, %xmm14
8211; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
8212; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
8213; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
8214; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
8215; SSE2-NEXT:    pand %xmm15, %xmm11
8216; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
8217; SSE2-NEXT:    por %xmm11, %xmm13
8218; SSE2-NEXT:    movdqa %xmm5, %xmm11
8219; SSE2-NEXT:    pxor %xmm10, %xmm11
8220; SSE2-NEXT:    movdqa %xmm2, %xmm14
8221; SSE2-NEXT:    pxor %xmm10, %xmm14
8222; SSE2-NEXT:    movdqa %xmm14, %xmm15
8223; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
8224; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
8225; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
8226; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
8227; SSE2-NEXT:    pand %xmm11, %xmm14
8228; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
8229; SSE2-NEXT:    por %xmm14, %xmm15
8230; SSE2-NEXT:    movdqa %xmm4, %xmm11
8231; SSE2-NEXT:    pxor %xmm10, %xmm11
8232; SSE2-NEXT:    pxor %xmm9, %xmm10
8233; SSE2-NEXT:    movdqa %xmm10, %xmm14
8234; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
8235; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
8236; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
8237; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
8238; SSE2-NEXT:    pand %xmm11, %xmm0
8239; SSE2-NEXT:    movdqa %xmm13, %xmm10
8240; SSE2-NEXT:    pxor %xmm1, %xmm10
8241; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
8242; SSE2-NEXT:    por %xmm0, %xmm14
8243; SSE2-NEXT:    movdqa %xmm15, %xmm11
8244; SSE2-NEXT:    pxor %xmm1, %xmm11
8245; SSE2-NEXT:    pxor %xmm14, %xmm1
8246; SSE2-NEXT:    pandn %xmm4, %xmm14
8247; SSE2-NEXT:    pandn %xmm9, %xmm1
8248; SSE2-NEXT:    por %xmm14, %xmm1
8249; SSE2-NEXT:    pandn %xmm5, %xmm15
8250; SSE2-NEXT:    pandn %xmm2, %xmm11
8251; SSE2-NEXT:    por %xmm15, %xmm11
8252; SSE2-NEXT:    pandn %xmm6, %xmm13
8253; SSE2-NEXT:    pandn %xmm3, %xmm10
8254; SSE2-NEXT:    por %xmm13, %xmm10
8255; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
8256; SSE2-NEXT:    pandn %xmm7, %xmm8
8257; SSE2-NEXT:    por %xmm12, %xmm8
8258; SSE2-NEXT:    movdqa %xmm1, %xmm0
8259; SSE2-NEXT:    movdqa %xmm11, %xmm1
8260; SSE2-NEXT:    movdqa %xmm10, %xmm2
8261; SSE2-NEXT:    movdqa %xmm8, %xmm3
8262; SSE2-NEXT:    retq
8263;
8264; SSE4-LABEL: test158:
8265; SSE4:       # BB#0: # %entry
8266; SSE4-NEXT:    movdqa %xmm0, %xmm8
8267; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
8268; SSE4-NEXT:    movdqa %xmm7, %xmm10
8269; SSE4-NEXT:    pxor %xmm0, %xmm10
8270; SSE4-NEXT:    movdqa %xmm3, %xmm9
8271; SSE4-NEXT:    pxor %xmm0, %xmm9
8272; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
8273; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
8274; SSE4-NEXT:    pxor %xmm12, %xmm9
8275; SSE4-NEXT:    movdqa %xmm6, %xmm11
8276; SSE4-NEXT:    pxor %xmm0, %xmm11
8277; SSE4-NEXT:    movdqa %xmm2, %xmm10
8278; SSE4-NEXT:    pxor %xmm0, %xmm10
8279; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
8280; SSE4-NEXT:    pxor %xmm12, %xmm10
8281; SSE4-NEXT:    movdqa %xmm5, %xmm13
8282; SSE4-NEXT:    pxor %xmm0, %xmm13
8283; SSE4-NEXT:    movdqa %xmm1, %xmm11
8284; SSE4-NEXT:    pxor %xmm0, %xmm11
8285; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
8286; SSE4-NEXT:    pxor %xmm12, %xmm11
8287; SSE4-NEXT:    movdqa %xmm4, %xmm13
8288; SSE4-NEXT:    pxor %xmm0, %xmm13
8289; SSE4-NEXT:    pxor %xmm8, %xmm0
8290; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
8291; SSE4-NEXT:    pxor %xmm12, %xmm0
8292; SSE4-NEXT:    blendvpd %xmm4, %xmm8
8293; SSE4-NEXT:    movdqa %xmm11, %xmm0
8294; SSE4-NEXT:    blendvpd %xmm5, %xmm1
8295; SSE4-NEXT:    movdqa %xmm10, %xmm0
8296; SSE4-NEXT:    blendvpd %xmm6, %xmm2
8297; SSE4-NEXT:    movdqa %xmm9, %xmm0
8298; SSE4-NEXT:    blendvpd %xmm7, %xmm3
8299; SSE4-NEXT:    movapd %xmm8, %xmm0
8300; SSE4-NEXT:    retq
8301;
8302; AVX1-LABEL: test158:
8303; AVX1:       # BB#0: # %entry
8304; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
8305; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8306; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
8307; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
8308; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
8309; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
8310; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
8311; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
8312; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm7
8313; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm6
8314; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
8315; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
8316; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
8317; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
8318; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
8319; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
8320; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
8321; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
8322; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
8323; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
8324; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
8325; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
8326; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
8327; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
8328; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8329; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8330; AVX1-NEXT:    retq
8331;
8332; AVX2-LABEL: test158:
8333; AVX2:       # BB#0: # %entry
8334; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
8335; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
8336; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
8337; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
8338; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
8339; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
8340; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm7
8341; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
8342; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
8343; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
8344; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
8345; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
8346; AVX2-NEXT:    retq
8347;
8348; AVX512F-LABEL: test158:
8349; AVX512F:       # BB#0: # %entry
8350; AVX512F-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
8351; AVX512F-NEXT:    retq
8352entry:
8353  %cmp = icmp ule <8 x i64> %a, %b
8354  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8355  ret <8 x i64> %sel
8356}
8357
8358define <8 x i64> @test159(<8 x i64> %a, <8 x i64> %b) {
8359; SSE2-LABEL: test159:
8360; SSE2:       # BB#0: # %entry
8361; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483648,2147483648,2147483648,2147483648]
8362; SSE2-NEXT:    movdqa %xmm7, %xmm8
8363; SSE2-NEXT:    pxor %xmm11, %xmm8
8364; SSE2-NEXT:    movdqa %xmm3, %xmm9
8365; SSE2-NEXT:    pxor %xmm11, %xmm9
8366; SSE2-NEXT:    movdqa %xmm9, %xmm10
8367; SSE2-NEXT:    pcmpgtd %xmm8, %xmm10
8368; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm10[0,0,2,2]
8369; SSE2-NEXT:    pcmpeqd %xmm8, %xmm9
8370; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm9[1,1,3,3]
8371; SSE2-NEXT:    pand %xmm12, %xmm9
8372; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm10[1,1,3,3]
8373; SSE2-NEXT:    por %xmm9, %xmm8
8374; SSE2-NEXT:    movdqa %xmm6, %xmm9
8375; SSE2-NEXT:    pxor %xmm11, %xmm9
8376; SSE2-NEXT:    movdqa %xmm2, %xmm10
8377; SSE2-NEXT:    pxor %xmm11, %xmm10
8378; SSE2-NEXT:    movdqa %xmm10, %xmm12
8379; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
8380; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
8381; SSE2-NEXT:    pcmpeqd %xmm9, %xmm10
8382; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm10[1,1,3,3]
8383; SSE2-NEXT:    pand %xmm13, %xmm10
8384; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
8385; SSE2-NEXT:    por %xmm10, %xmm9
8386; SSE2-NEXT:    movdqa %xmm5, %xmm10
8387; SSE2-NEXT:    pxor %xmm11, %xmm10
8388; SSE2-NEXT:    movdqa %xmm1, %xmm12
8389; SSE2-NEXT:    pxor %xmm11, %xmm12
8390; SSE2-NEXT:    movdqa %xmm12, %xmm13
8391; SSE2-NEXT:    pcmpgtd %xmm10, %xmm13
8392; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
8393; SSE2-NEXT:    pcmpeqd %xmm10, %xmm12
8394; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
8395; SSE2-NEXT:    pand %xmm14, %xmm12
8396; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm13[1,1,3,3]
8397; SSE2-NEXT:    por %xmm12, %xmm10
8398; SSE2-NEXT:    movdqa %xmm4, %xmm12
8399; SSE2-NEXT:    pxor %xmm11, %xmm12
8400; SSE2-NEXT:    pxor %xmm0, %xmm11
8401; SSE2-NEXT:    movdqa %xmm11, %xmm13
8402; SSE2-NEXT:    pcmpgtd %xmm12, %xmm13
8403; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm13[0,0,2,2]
8404; SSE2-NEXT:    pcmpeqd %xmm12, %xmm11
8405; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
8406; SSE2-NEXT:    pand %xmm14, %xmm12
8407; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
8408; SSE2-NEXT:    por %xmm12, %xmm11
8409; SSE2-NEXT:    pand %xmm11, %xmm4
8410; SSE2-NEXT:    pandn %xmm0, %xmm11
8411; SSE2-NEXT:    por %xmm4, %xmm11
8412; SSE2-NEXT:    pand %xmm10, %xmm5
8413; SSE2-NEXT:    pandn %xmm1, %xmm10
8414; SSE2-NEXT:    por %xmm5, %xmm10
8415; SSE2-NEXT:    pand %xmm9, %xmm6
8416; SSE2-NEXT:    pandn %xmm2, %xmm9
8417; SSE2-NEXT:    por %xmm6, %xmm9
8418; SSE2-NEXT:    pand %xmm8, %xmm7
8419; SSE2-NEXT:    pandn %xmm3, %xmm8
8420; SSE2-NEXT:    por %xmm7, %xmm8
8421; SSE2-NEXT:    movdqa %xmm11, %xmm0
8422; SSE2-NEXT:    movdqa %xmm10, %xmm1
8423; SSE2-NEXT:    movdqa %xmm9, %xmm2
8424; SSE2-NEXT:    movdqa %xmm8, %xmm3
8425; SSE2-NEXT:    retq
8426;
8427; SSE4-LABEL: test159:
8428; SSE4:       # BB#0: # %entry
8429; SSE4-NEXT:    movdqa %xmm0, %xmm8
8430; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
8431; SSE4-NEXT:    movdqa %xmm7, %xmm10
8432; SSE4-NEXT:    pxor %xmm0, %xmm10
8433; SSE4-NEXT:    movdqa %xmm3, %xmm9
8434; SSE4-NEXT:    pxor %xmm0, %xmm9
8435; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
8436; SSE4-NEXT:    movdqa %xmm6, %xmm11
8437; SSE4-NEXT:    pxor %xmm0, %xmm11
8438; SSE4-NEXT:    movdqa %xmm2, %xmm10
8439; SSE4-NEXT:    pxor %xmm0, %xmm10
8440; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
8441; SSE4-NEXT:    movdqa %xmm5, %xmm12
8442; SSE4-NEXT:    pxor %xmm0, %xmm12
8443; SSE4-NEXT:    movdqa %xmm1, %xmm11
8444; SSE4-NEXT:    pxor %xmm0, %xmm11
8445; SSE4-NEXT:    pcmpgtq %xmm12, %xmm11
8446; SSE4-NEXT:    movdqa %xmm4, %xmm12
8447; SSE4-NEXT:    pxor %xmm0, %xmm12
8448; SSE4-NEXT:    pxor %xmm8, %xmm0
8449; SSE4-NEXT:    pcmpgtq %xmm12, %xmm0
8450; SSE4-NEXT:    blendvpd %xmm4, %xmm8
8451; SSE4-NEXT:    movdqa %xmm11, %xmm0
8452; SSE4-NEXT:    blendvpd %xmm5, %xmm1
8453; SSE4-NEXT:    movdqa %xmm10, %xmm0
8454; SSE4-NEXT:    blendvpd %xmm6, %xmm2
8455; SSE4-NEXT:    movdqa %xmm9, %xmm0
8456; SSE4-NEXT:    blendvpd %xmm7, %xmm3
8457; SSE4-NEXT:    movapd %xmm8, %xmm0
8458; SSE4-NEXT:    retq
8459;
8460; AVX1-LABEL: test159:
8461; AVX1:       # BB#0: # %entry
8462; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
8463; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8464; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
8465; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm6
8466; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
8467; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
8468; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
8469; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
8470; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
8471; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
8472; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm6
8473; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
8474; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm7
8475; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
8476; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
8477; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm7
8478; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm5
8479; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
8480; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
8481; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8482; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8483; AVX1-NEXT:    retq
8484;
8485; AVX2-LABEL: test159:
8486; AVX2:       # BB#0: # %entry
8487; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
8488; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm5
8489; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm6
8490; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
8491; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm6
8492; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm4
8493; AVX2-NEXT:    vpcmpgtq %ymm6, %ymm4, %ymm4
8494; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
8495; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
8496; AVX2-NEXT:    retq
8497;
8498; AVX512F-LABEL: test159:
8499; AVX512F:       # BB#0: # %entry
8500; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8501; AVX512F-NEXT:    retq
8502entry:
8503  %cmp = icmp ugt <8 x i64> %a, %b
8504  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8505  ret <8 x i64> %sel
8506}
8507
8508define <8 x i64> @test160(<8 x i64> %a, <8 x i64> %b) {
8509; SSE2-LABEL: test160:
8510; SSE2:       # BB#0: # %entry
8511; SSE2-NEXT:    movdqa %xmm7, %xmm11
8512; SSE2-NEXT:    movdqa %xmm11, -{{[0-9]+}}(%rsp) # 16-byte Spill
8513; SSE2-NEXT:    movdqa %xmm3, %xmm7
8514; SSE2-NEXT:    movdqa %xmm2, %xmm3
8515; SSE2-NEXT:    movdqa %xmm1, %xmm2
8516; SSE2-NEXT:    movdqa %xmm0, %xmm9
8517; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,2147483648,2147483648,2147483648]
8518; SSE2-NEXT:    movdqa %xmm7, %xmm8
8519; SSE2-NEXT:    pxor %xmm10, %xmm8
8520; SSE2-NEXT:    movdqa %xmm11, %xmm0
8521; SSE2-NEXT:    pxor %xmm10, %xmm0
8522; SSE2-NEXT:    movdqa %xmm0, %xmm11
8523; SSE2-NEXT:    pcmpgtd %xmm8, %xmm11
8524; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[0,0,2,2]
8525; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
8526; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
8527; SSE2-NEXT:    pand %xmm12, %xmm0
8528; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm11[1,1,3,3]
8529; SSE2-NEXT:    por %xmm0, %xmm12
8530; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
8531; SSE2-NEXT:    movdqa %xmm12, %xmm8
8532; SSE2-NEXT:    pxor %xmm1, %xmm8
8533; SSE2-NEXT:    movdqa %xmm3, %xmm11
8534; SSE2-NEXT:    pxor %xmm10, %xmm11
8535; SSE2-NEXT:    movdqa %xmm6, %xmm13
8536; SSE2-NEXT:    pxor %xmm10, %xmm13
8537; SSE2-NEXT:    movdqa %xmm13, %xmm14
8538; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
8539; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm14[0,0,2,2]
8540; SSE2-NEXT:    pcmpeqd %xmm11, %xmm13
8541; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm13[1,1,3,3]
8542; SSE2-NEXT:    pand %xmm15, %xmm11
8543; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm14[1,1,3,3]
8544; SSE2-NEXT:    por %xmm11, %xmm13
8545; SSE2-NEXT:    movdqa %xmm2, %xmm11
8546; SSE2-NEXT:    pxor %xmm10, %xmm11
8547; SSE2-NEXT:    movdqa %xmm5, %xmm14
8548; SSE2-NEXT:    pxor %xmm10, %xmm14
8549; SSE2-NEXT:    movdqa %xmm14, %xmm15
8550; SSE2-NEXT:    pcmpgtd %xmm11, %xmm15
8551; SSE2-NEXT:    pcmpeqd %xmm11, %xmm14
8552; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm15[0,0,2,2]
8553; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
8554; SSE2-NEXT:    pand %xmm11, %xmm14
8555; SSE2-NEXT:    pshufd {{.*#+}} xmm15 = xmm15[1,1,3,3]
8556; SSE2-NEXT:    por %xmm14, %xmm15
8557; SSE2-NEXT:    movdqa %xmm9, %xmm11
8558; SSE2-NEXT:    pxor %xmm10, %xmm11
8559; SSE2-NEXT:    pxor %xmm4, %xmm10
8560; SSE2-NEXT:    movdqa %xmm10, %xmm14
8561; SSE2-NEXT:    pcmpgtd %xmm11, %xmm14
8562; SSE2-NEXT:    pcmpeqd %xmm11, %xmm10
8563; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm14[0,0,2,2]
8564; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
8565; SSE2-NEXT:    pand %xmm11, %xmm0
8566; SSE2-NEXT:    movdqa %xmm13, %xmm10
8567; SSE2-NEXT:    pxor %xmm1, %xmm10
8568; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm14[1,1,3,3]
8569; SSE2-NEXT:    por %xmm0, %xmm14
8570; SSE2-NEXT:    movdqa %xmm15, %xmm11
8571; SSE2-NEXT:    pxor %xmm1, %xmm11
8572; SSE2-NEXT:    pxor %xmm14, %xmm1
8573; SSE2-NEXT:    pandn %xmm4, %xmm14
8574; SSE2-NEXT:    pandn %xmm9, %xmm1
8575; SSE2-NEXT:    por %xmm14, %xmm1
8576; SSE2-NEXT:    pandn %xmm5, %xmm15
8577; SSE2-NEXT:    pandn %xmm2, %xmm11
8578; SSE2-NEXT:    por %xmm15, %xmm11
8579; SSE2-NEXT:    pandn %xmm6, %xmm13
8580; SSE2-NEXT:    pandn %xmm3, %xmm10
8581; SSE2-NEXT:    por %xmm13, %xmm10
8582; SSE2-NEXT:    pandn -{{[0-9]+}}(%rsp), %xmm12 # 16-byte Folded Reload
8583; SSE2-NEXT:    pandn %xmm7, %xmm8
8584; SSE2-NEXT:    por %xmm12, %xmm8
8585; SSE2-NEXT:    movdqa %xmm1, %xmm0
8586; SSE2-NEXT:    movdqa %xmm11, %xmm1
8587; SSE2-NEXT:    movdqa %xmm10, %xmm2
8588; SSE2-NEXT:    movdqa %xmm8, %xmm3
8589; SSE2-NEXT:    retq
8590;
8591; SSE4-LABEL: test160:
8592; SSE4:       # BB#0: # %entry
8593; SSE4-NEXT:    movdqa %xmm0, %xmm8
8594; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
8595; SSE4-NEXT:    movdqa %xmm3, %xmm10
8596; SSE4-NEXT:    pxor %xmm0, %xmm10
8597; SSE4-NEXT:    movdqa %xmm7, %xmm9
8598; SSE4-NEXT:    pxor %xmm0, %xmm9
8599; SSE4-NEXT:    pcmpgtq %xmm10, %xmm9
8600; SSE4-NEXT:    pcmpeqd %xmm12, %xmm12
8601; SSE4-NEXT:    pxor %xmm12, %xmm9
8602; SSE4-NEXT:    movdqa %xmm2, %xmm11
8603; SSE4-NEXT:    pxor %xmm0, %xmm11
8604; SSE4-NEXT:    movdqa %xmm6, %xmm10
8605; SSE4-NEXT:    pxor %xmm0, %xmm10
8606; SSE4-NEXT:    pcmpgtq %xmm11, %xmm10
8607; SSE4-NEXT:    pxor %xmm12, %xmm10
8608; SSE4-NEXT:    movdqa %xmm1, %xmm13
8609; SSE4-NEXT:    pxor %xmm0, %xmm13
8610; SSE4-NEXT:    movdqa %xmm5, %xmm11
8611; SSE4-NEXT:    pxor %xmm0, %xmm11
8612; SSE4-NEXT:    pcmpgtq %xmm13, %xmm11
8613; SSE4-NEXT:    pxor %xmm12, %xmm11
8614; SSE4-NEXT:    movdqa %xmm8, %xmm13
8615; SSE4-NEXT:    pxor %xmm0, %xmm13
8616; SSE4-NEXT:    pxor %xmm4, %xmm0
8617; SSE4-NEXT:    pcmpgtq %xmm13, %xmm0
8618; SSE4-NEXT:    pxor %xmm12, %xmm0
8619; SSE4-NEXT:    blendvpd %xmm4, %xmm8
8620; SSE4-NEXT:    movdqa %xmm11, %xmm0
8621; SSE4-NEXT:    blendvpd %xmm5, %xmm1
8622; SSE4-NEXT:    movdqa %xmm10, %xmm0
8623; SSE4-NEXT:    blendvpd %xmm6, %xmm2
8624; SSE4-NEXT:    movdqa %xmm9, %xmm0
8625; SSE4-NEXT:    blendvpd %xmm7, %xmm3
8626; SSE4-NEXT:    movapd %xmm8, %xmm0
8627; SSE4-NEXT:    retq
8628;
8629; AVX1-LABEL: test160:
8630; AVX1:       # BB#0: # %entry
8631; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
8632; AVX1-NEXT:    vmovaps {{.*#+}} xmm5 = [9223372036854775808,9223372036854775808]
8633; AVX1-NEXT:    vxorps %xmm5, %xmm4, %xmm4
8634; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm6
8635; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
8636; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm6, %xmm4
8637; AVX1-NEXT:    vpcmpeqd %xmm8, %xmm8, %xmm8
8638; AVX1-NEXT:    vpxor %xmm8, %xmm4, %xmm4
8639; AVX1-NEXT:    vxorps %xmm5, %xmm1, %xmm7
8640; AVX1-NEXT:    vxorps %xmm5, %xmm3, %xmm6
8641; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm6, %xmm6
8642; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
8643; AVX1-NEXT:    vinsertf128 $1, %xmm4, %ymm6, %ymm4
8644; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
8645; AVX1-NEXT:    vxorps %xmm5, %xmm6, %xmm6
8646; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm7
8647; AVX1-NEXT:    vxorps %xmm5, %xmm7, %xmm7
8648; AVX1-NEXT:    vpcmpgtq %xmm6, %xmm7, %xmm6
8649; AVX1-NEXT:    vpxor %xmm8, %xmm6, %xmm6
8650; AVX1-NEXT:    vxorps %xmm5, %xmm0, %xmm7
8651; AVX1-NEXT:    vxorps %xmm5, %xmm2, %xmm5
8652; AVX1-NEXT:    vpcmpgtq %xmm7, %xmm5, %xmm5
8653; AVX1-NEXT:    vpxor %xmm8, %xmm5, %xmm5
8654; AVX1-NEXT:    vinsertf128 $1, %xmm6, %ymm5, %ymm5
8655; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm0, %ymm0
8656; AVX1-NEXT:    vblendvpd %ymm4, %ymm3, %ymm1, %ymm1
8657; AVX1-NEXT:    retq
8658;
8659; AVX2-LABEL: test160:
8660; AVX2:       # BB#0: # %entry
8661; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm4
8662; AVX2-NEXT:    vpxor %ymm4, %ymm1, %ymm5
8663; AVX2-NEXT:    vpxor %ymm4, %ymm3, %ymm6
8664; AVX2-NEXT:    vpcmpgtq %ymm5, %ymm6, %ymm5
8665; AVX2-NEXT:    vpcmpeqd %ymm6, %ymm6, %ymm6
8666; AVX2-NEXT:    vpxor %ymm6, %ymm5, %ymm5
8667; AVX2-NEXT:    vpxor %ymm4, %ymm0, %ymm7
8668; AVX2-NEXT:    vpxor %ymm4, %ymm2, %ymm4
8669; AVX2-NEXT:    vpcmpgtq %ymm7, %ymm4, %ymm4
8670; AVX2-NEXT:    vpxor %ymm6, %ymm4, %ymm4
8671; AVX2-NEXT:    vblendvpd %ymm4, %ymm2, %ymm0, %ymm0
8672; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm1, %ymm1
8673; AVX2-NEXT:    retq
8674;
8675; AVX512F-LABEL: test160:
8676; AVX512F:       # BB#0: # %entry
8677; AVX512F-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
8678; AVX512F-NEXT:    retq
8679entry:
8680  %cmp = icmp uge <8 x i64> %a, %b
8681  %sel = select <8 x i1> %cmp, <8 x i64> %b, <8 x i64> %a
8682  ret <8 x i64> %sel
8683}
8684
8685define <4 x i64> @test161(<4 x i64> %a, <4 x i64> %b) {
8686; SSE2-LABEL: test161:
8687; SSE2:       # BB#0: # %entry
8688; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8689; SSE2-NEXT:    movdqa %xmm1, %xmm5
8690; SSE2-NEXT:    pxor %xmm4, %xmm5
8691; SSE2-NEXT:    movdqa %xmm3, %xmm6
8692; SSE2-NEXT:    pxor %xmm4, %xmm6
8693; SSE2-NEXT:    movdqa %xmm6, %xmm7
8694; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8695; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8696; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8697; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8698; SSE2-NEXT:    pand %xmm8, %xmm5
8699; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8700; SSE2-NEXT:    por %xmm5, %xmm6
8701; SSE2-NEXT:    movdqa %xmm0, %xmm5
8702; SSE2-NEXT:    pxor %xmm4, %xmm5
8703; SSE2-NEXT:    pxor %xmm2, %xmm4
8704; SSE2-NEXT:    movdqa %xmm4, %xmm7
8705; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8706; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8707; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
8708; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
8709; SSE2-NEXT:    pand %xmm8, %xmm4
8710; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
8711; SSE2-NEXT:    por %xmm4, %xmm5
8712; SSE2-NEXT:    pand %xmm5, %xmm0
8713; SSE2-NEXT:    pandn %xmm2, %xmm5
8714; SSE2-NEXT:    por %xmm5, %xmm0
8715; SSE2-NEXT:    pand %xmm6, %xmm1
8716; SSE2-NEXT:    pandn %xmm3, %xmm6
8717; SSE2-NEXT:    por %xmm6, %xmm1
8718; SSE2-NEXT:    retq
8719;
8720; SSE4-LABEL: test161:
8721; SSE4:       # BB#0: # %entry
8722; SSE4-NEXT:    movdqa %xmm0, %xmm4
8723; SSE4-NEXT:    movdqa %xmm3, %xmm5
8724; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
8725; SSE4-NEXT:    movdqa %xmm2, %xmm0
8726; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
8727; SSE4-NEXT:    blendvpd %xmm4, %xmm2
8728; SSE4-NEXT:    movdqa %xmm5, %xmm0
8729; SSE4-NEXT:    blendvpd %xmm1, %xmm3
8730; SSE4-NEXT:    movapd %xmm2, %xmm0
8731; SSE4-NEXT:    movapd %xmm3, %xmm1
8732; SSE4-NEXT:    retq
8733;
8734; AVX1-LABEL: test161:
8735; AVX1:       # BB#0: # %entry
8736; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8737; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8738; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8739; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
8740; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8741; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8742; AVX1-NEXT:    retq
8743;
8744; AVX2-LABEL: test161:
8745; AVX2:       # BB#0: # %entry
8746; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8747; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8748; AVX2-NEXT:    retq
8749;
8750; AVX512BW-LABEL: test161:
8751; AVX512BW:       # BB#0: # %entry
8752; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8753; AVX512BW-NEXT:    retq
8754entry:
8755  %cmp = icmp slt <4 x i64> %a, %b
8756  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8757  ret <4 x i64> %sel
8758}
8759
8760define <4 x i64> @test162(<4 x i64> %a, <4 x i64> %b) {
8761; SSE2-LABEL: test162:
8762; SSE2:       # BB#0: # %entry
8763; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
8764; SSE2-NEXT:    movdqa %xmm3, %xmm4
8765; SSE2-NEXT:    pxor %xmm7, %xmm4
8766; SSE2-NEXT:    movdqa %xmm1, %xmm5
8767; SSE2-NEXT:    pxor %xmm7, %xmm5
8768; SSE2-NEXT:    movdqa %xmm5, %xmm6
8769; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
8770; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
8771; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
8772; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8773; SSE2-NEXT:    pand %xmm8, %xmm4
8774; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
8775; SSE2-NEXT:    por %xmm4, %xmm8
8776; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
8777; SSE2-NEXT:    movdqa %xmm8, %xmm9
8778; SSE2-NEXT:    pxor %xmm4, %xmm9
8779; SSE2-NEXT:    movdqa %xmm2, %xmm6
8780; SSE2-NEXT:    pxor %xmm7, %xmm6
8781; SSE2-NEXT:    pxor %xmm0, %xmm7
8782; SSE2-NEXT:    movdqa %xmm7, %xmm5
8783; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
8784; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
8785; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
8786; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8787; SSE2-NEXT:    pand %xmm10, %xmm6
8788; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
8789; SSE2-NEXT:    por %xmm6, %xmm5
8790; SSE2-NEXT:    pxor %xmm5, %xmm4
8791; SSE2-NEXT:    pandn %xmm0, %xmm5
8792; SSE2-NEXT:    pandn %xmm2, %xmm4
8793; SSE2-NEXT:    por %xmm5, %xmm4
8794; SSE2-NEXT:    pandn %xmm1, %xmm8
8795; SSE2-NEXT:    pandn %xmm3, %xmm9
8796; SSE2-NEXT:    por %xmm8, %xmm9
8797; SSE2-NEXT:    movdqa %xmm4, %xmm0
8798; SSE2-NEXT:    movdqa %xmm9, %xmm1
8799; SSE2-NEXT:    retq
8800;
8801; SSE4-LABEL: test162:
8802; SSE4:       # BB#0: # %entry
8803; SSE4-NEXT:    movdqa %xmm0, %xmm4
8804; SSE4-NEXT:    movdqa %xmm1, %xmm5
8805; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
8806; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
8807; SSE4-NEXT:    pxor %xmm6, %xmm5
8808; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8809; SSE4-NEXT:    pxor %xmm6, %xmm0
8810; SSE4-NEXT:    blendvpd %xmm4, %xmm2
8811; SSE4-NEXT:    movdqa %xmm5, %xmm0
8812; SSE4-NEXT:    blendvpd %xmm1, %xmm3
8813; SSE4-NEXT:    movapd %xmm2, %xmm0
8814; SSE4-NEXT:    movapd %xmm3, %xmm1
8815; SSE4-NEXT:    retq
8816;
8817; AVX1-LABEL: test162:
8818; AVX1:       # BB#0: # %entry
8819; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8820; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8821; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8822; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
8823; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8824; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm4
8825; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
8826; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8827; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8828; AVX1-NEXT:    retq
8829;
8830; AVX2-LABEL: test162:
8831; AVX2:       # BB#0: # %entry
8832; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8833; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
8834; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
8835; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8836; AVX2-NEXT:    retq
8837;
8838; AVX512BW-LABEL: test162:
8839; AVX512BW:       # BB#0: # %entry
8840; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
8841; AVX512BW-NEXT:    retq
8842entry:
8843  %cmp = icmp sle <4 x i64> %a, %b
8844  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8845  ret <4 x i64> %sel
8846}
8847
8848define <4 x i64> @test163(<4 x i64> %a, <4 x i64> %b) {
8849; SSE2-LABEL: test163:
8850; SSE2:       # BB#0: # %entry
8851; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,0,2147483648,0]
8852; SSE2-NEXT:    movdqa %xmm3, %xmm5
8853; SSE2-NEXT:    pxor %xmm4, %xmm5
8854; SSE2-NEXT:    movdqa %xmm1, %xmm6
8855; SSE2-NEXT:    pxor %xmm4, %xmm6
8856; SSE2-NEXT:    movdqa %xmm6, %xmm7
8857; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8858; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8859; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
8860; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
8861; SSE2-NEXT:    pand %xmm8, %xmm5
8862; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8863; SSE2-NEXT:    por %xmm5, %xmm6
8864; SSE2-NEXT:    movdqa %xmm2, %xmm5
8865; SSE2-NEXT:    pxor %xmm4, %xmm5
8866; SSE2-NEXT:    pxor %xmm0, %xmm4
8867; SSE2-NEXT:    movdqa %xmm4, %xmm7
8868; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
8869; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
8870; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
8871; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
8872; SSE2-NEXT:    pand %xmm8, %xmm4
8873; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
8874; SSE2-NEXT:    por %xmm4, %xmm5
8875; SSE2-NEXT:    pand %xmm5, %xmm0
8876; SSE2-NEXT:    pandn %xmm2, %xmm5
8877; SSE2-NEXT:    por %xmm5, %xmm0
8878; SSE2-NEXT:    pand %xmm6, %xmm1
8879; SSE2-NEXT:    pandn %xmm3, %xmm6
8880; SSE2-NEXT:    por %xmm6, %xmm1
8881; SSE2-NEXT:    retq
8882;
8883; SSE4-LABEL: test163:
8884; SSE4:       # BB#0: # %entry
8885; SSE4-NEXT:    movdqa %xmm0, %xmm4
8886; SSE4-NEXT:    movdqa %xmm1, %xmm5
8887; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
8888; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
8889; SSE4-NEXT:    blendvpd %xmm4, %xmm2
8890; SSE4-NEXT:    movdqa %xmm5, %xmm0
8891; SSE4-NEXT:    blendvpd %xmm1, %xmm3
8892; SSE4-NEXT:    movapd %xmm2, %xmm0
8893; SSE4-NEXT:    movapd %xmm3, %xmm1
8894; SSE4-NEXT:    retq
8895;
8896; AVX1-LABEL: test163:
8897; AVX1:       # BB#0: # %entry
8898; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
8899; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
8900; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8901; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
8902; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8903; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8904; AVX1-NEXT:    retq
8905;
8906; AVX2-LABEL: test163:
8907; AVX2:       # BB#0: # %entry
8908; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
8909; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8910; AVX2-NEXT:    retq
8911;
8912; AVX512BW-LABEL: test163:
8913; AVX512BW:       # BB#0: # %entry
8914; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
8915; AVX512BW-NEXT:    retq
8916entry:
8917  %cmp = icmp sgt <4 x i64> %a, %b
8918  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
8919  ret <4 x i64> %sel
8920}
8921
8922define <4 x i64> @test164(<4 x i64> %a, <4 x i64> %b) {
8923; SSE2-LABEL: test164:
8924; SSE2:       # BB#0: # %entry
8925; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
8926; SSE2-NEXT:    movdqa %xmm1, %xmm4
8927; SSE2-NEXT:    pxor %xmm7, %xmm4
8928; SSE2-NEXT:    movdqa %xmm3, %xmm5
8929; SSE2-NEXT:    pxor %xmm7, %xmm5
8930; SSE2-NEXT:    movdqa %xmm5, %xmm6
8931; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
8932; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
8933; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
8934; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
8935; SSE2-NEXT:    pand %xmm8, %xmm4
8936; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
8937; SSE2-NEXT:    por %xmm4, %xmm8
8938; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
8939; SSE2-NEXT:    movdqa %xmm8, %xmm9
8940; SSE2-NEXT:    pxor %xmm4, %xmm9
8941; SSE2-NEXT:    movdqa %xmm0, %xmm6
8942; SSE2-NEXT:    pxor %xmm7, %xmm6
8943; SSE2-NEXT:    pxor %xmm2, %xmm7
8944; SSE2-NEXT:    movdqa %xmm7, %xmm5
8945; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
8946; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
8947; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
8948; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
8949; SSE2-NEXT:    pand %xmm10, %xmm6
8950; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
8951; SSE2-NEXT:    por %xmm6, %xmm5
8952; SSE2-NEXT:    pxor %xmm5, %xmm4
8953; SSE2-NEXT:    pandn %xmm0, %xmm5
8954; SSE2-NEXT:    pandn %xmm2, %xmm4
8955; SSE2-NEXT:    por %xmm5, %xmm4
8956; SSE2-NEXT:    pandn %xmm1, %xmm8
8957; SSE2-NEXT:    pandn %xmm3, %xmm9
8958; SSE2-NEXT:    por %xmm8, %xmm9
8959; SSE2-NEXT:    movdqa %xmm4, %xmm0
8960; SSE2-NEXT:    movdqa %xmm9, %xmm1
8961; SSE2-NEXT:    retq
8962;
8963; SSE4-LABEL: test164:
8964; SSE4:       # BB#0: # %entry
8965; SSE4-NEXT:    movdqa %xmm0, %xmm4
8966; SSE4-NEXT:    movdqa %xmm3, %xmm5
8967; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
8968; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
8969; SSE4-NEXT:    pxor %xmm0, %xmm5
8970; SSE4-NEXT:    movdqa %xmm2, %xmm6
8971; SSE4-NEXT:    pcmpgtq %xmm4, %xmm6
8972; SSE4-NEXT:    pxor %xmm6, %xmm0
8973; SSE4-NEXT:    blendvpd %xmm4, %xmm2
8974; SSE4-NEXT:    movdqa %xmm5, %xmm0
8975; SSE4-NEXT:    blendvpd %xmm1, %xmm3
8976; SSE4-NEXT:    movapd %xmm2, %xmm0
8977; SSE4-NEXT:    movapd %xmm3, %xmm1
8978; SSE4-NEXT:    retq
8979;
8980; AVX1-LABEL: test164:
8981; AVX1:       # BB#0: # %entry
8982; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
8983; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
8984; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
8985; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
8986; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
8987; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm4
8988; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
8989; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
8990; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8991; AVX1-NEXT:    retq
8992;
8993; AVX2-LABEL: test164:
8994; AVX2:       # BB#0: # %entry
8995; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
8996; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
8997; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
8998; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
8999; AVX2-NEXT:    retq
9000;
9001; AVX512BW-LABEL: test164:
9002; AVX512BW:       # BB#0: # %entry
9003; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
9004; AVX512BW-NEXT:    retq
9005entry:
9006  %cmp = icmp sge <4 x i64> %a, %b
9007  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9008  ret <4 x i64> %sel
9009}
9010
9011define <4 x i64> @test165(<4 x i64> %a, <4 x i64> %b) {
9012; SSE2-LABEL: test165:
9013; SSE2:       # BB#0: # %entry
9014; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
9015; SSE2-NEXT:    movdqa %xmm1, %xmm5
9016; SSE2-NEXT:    pxor %xmm4, %xmm5
9017; SSE2-NEXT:    movdqa %xmm3, %xmm6
9018; SSE2-NEXT:    pxor %xmm4, %xmm6
9019; SSE2-NEXT:    movdqa %xmm6, %xmm7
9020; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9021; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9022; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9023; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9024; SSE2-NEXT:    pand %xmm8, %xmm5
9025; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9026; SSE2-NEXT:    por %xmm5, %xmm6
9027; SSE2-NEXT:    movdqa %xmm0, %xmm5
9028; SSE2-NEXT:    pxor %xmm4, %xmm5
9029; SSE2-NEXT:    pxor %xmm2, %xmm4
9030; SSE2-NEXT:    movdqa %xmm4, %xmm7
9031; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9032; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9033; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
9034; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
9035; SSE2-NEXT:    pand %xmm8, %xmm4
9036; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9037; SSE2-NEXT:    por %xmm4, %xmm5
9038; SSE2-NEXT:    pand %xmm5, %xmm0
9039; SSE2-NEXT:    pandn %xmm2, %xmm5
9040; SSE2-NEXT:    por %xmm5, %xmm0
9041; SSE2-NEXT:    pand %xmm6, %xmm1
9042; SSE2-NEXT:    pandn %xmm3, %xmm6
9043; SSE2-NEXT:    por %xmm6, %xmm1
9044; SSE2-NEXT:    retq
9045;
9046; SSE4-LABEL: test165:
9047; SSE4:       # BB#0: # %entry
9048; SSE4-NEXT:    movdqa %xmm0, %xmm4
9049; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9050; SSE4-NEXT:    movdqa %xmm1, %xmm6
9051; SSE4-NEXT:    pxor %xmm0, %xmm6
9052; SSE4-NEXT:    movdqa %xmm3, %xmm5
9053; SSE4-NEXT:    pxor %xmm0, %xmm5
9054; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
9055; SSE4-NEXT:    movdqa %xmm4, %xmm6
9056; SSE4-NEXT:    pxor %xmm0, %xmm6
9057; SSE4-NEXT:    pxor %xmm2, %xmm0
9058; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9059; SSE4-NEXT:    blendvpd %xmm4, %xmm2
9060; SSE4-NEXT:    movdqa %xmm5, %xmm0
9061; SSE4-NEXT:    blendvpd %xmm1, %xmm3
9062; SSE4-NEXT:    movapd %xmm2, %xmm0
9063; SSE4-NEXT:    movapd %xmm3, %xmm1
9064; SSE4-NEXT:    retq
9065;
9066; AVX1-LABEL: test165:
9067; AVX1:       # BB#0: # %entry
9068; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9069; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9070; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
9071; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9072; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
9073; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9074; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm4
9075; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
9076; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9077; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9078; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9079; AVX1-NEXT:    retq
9080;
9081; AVX2-LABEL: test165:
9082; AVX2:       # BB#0: # %entry
9083; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
9084; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9085; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9086; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9087; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9088; AVX2-NEXT:    retq
9089;
9090; AVX512BW-LABEL: test165:
9091; AVX512BW:       # BB#0: # %entry
9092; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9093; AVX512BW-NEXT:    retq
9094entry:
9095  %cmp = icmp ult <4 x i64> %a, %b
9096  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9097  ret <4 x i64> %sel
9098}
9099
9100define <4 x i64> @test166(<4 x i64> %a, <4 x i64> %b) {
9101; SSE2-LABEL: test166:
9102; SSE2:       # BB#0: # %entry
9103; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
9104; SSE2-NEXT:    movdqa %xmm3, %xmm4
9105; SSE2-NEXT:    pxor %xmm7, %xmm4
9106; SSE2-NEXT:    movdqa %xmm1, %xmm5
9107; SSE2-NEXT:    pxor %xmm7, %xmm5
9108; SSE2-NEXT:    movdqa %xmm5, %xmm6
9109; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
9110; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9111; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
9112; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9113; SSE2-NEXT:    pand %xmm8, %xmm4
9114; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9115; SSE2-NEXT:    por %xmm4, %xmm8
9116; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
9117; SSE2-NEXT:    movdqa %xmm8, %xmm9
9118; SSE2-NEXT:    pxor %xmm4, %xmm9
9119; SSE2-NEXT:    movdqa %xmm2, %xmm6
9120; SSE2-NEXT:    pxor %xmm7, %xmm6
9121; SSE2-NEXT:    pxor %xmm0, %xmm7
9122; SSE2-NEXT:    movdqa %xmm7, %xmm5
9123; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
9124; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9125; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
9126; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9127; SSE2-NEXT:    pand %xmm10, %xmm6
9128; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9129; SSE2-NEXT:    por %xmm6, %xmm5
9130; SSE2-NEXT:    pxor %xmm5, %xmm4
9131; SSE2-NEXT:    pandn %xmm0, %xmm5
9132; SSE2-NEXT:    pandn %xmm2, %xmm4
9133; SSE2-NEXT:    por %xmm5, %xmm4
9134; SSE2-NEXT:    pandn %xmm1, %xmm8
9135; SSE2-NEXT:    pandn %xmm3, %xmm9
9136; SSE2-NEXT:    por %xmm8, %xmm9
9137; SSE2-NEXT:    movdqa %xmm4, %xmm0
9138; SSE2-NEXT:    movdqa %xmm9, %xmm1
9139; SSE2-NEXT:    retq
9140;
9141; SSE4-LABEL: test166:
9142; SSE4:       # BB#0: # %entry
9143; SSE4-NEXT:    movdqa %xmm0, %xmm4
9144; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9145; SSE4-NEXT:    movdqa %xmm3, %xmm6
9146; SSE4-NEXT:    pxor %xmm0, %xmm6
9147; SSE4-NEXT:    movdqa %xmm1, %xmm5
9148; SSE4-NEXT:    pxor %xmm0, %xmm5
9149; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
9150; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
9151; SSE4-NEXT:    pxor %xmm6, %xmm5
9152; SSE4-NEXT:    movdqa %xmm2, %xmm7
9153; SSE4-NEXT:    pxor %xmm0, %xmm7
9154; SSE4-NEXT:    pxor %xmm4, %xmm0
9155; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
9156; SSE4-NEXT:    pxor %xmm6, %xmm0
9157; SSE4-NEXT:    blendvpd %xmm4, %xmm2
9158; SSE4-NEXT:    movdqa %xmm5, %xmm0
9159; SSE4-NEXT:    blendvpd %xmm1, %xmm3
9160; SSE4-NEXT:    movapd %xmm2, %xmm0
9161; SSE4-NEXT:    movapd %xmm3, %xmm1
9162; SSE4-NEXT:    retq
9163;
9164; AVX1-LABEL: test166:
9165; AVX1:       # BB#0: # %entry
9166; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9167; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9168; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
9169; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9170; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
9171; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9172; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
9173; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
9174; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm5
9175; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
9176; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
9177; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
9178; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9179; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9180; AVX1-NEXT:    retq
9181;
9182; AVX2-LABEL: test166:
9183; AVX2:       # BB#0: # %entry
9184; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
9185; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9186; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9187; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9188; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
9189; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
9190; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9191; AVX2-NEXT:    retq
9192;
9193; AVX512BW-LABEL: test166:
9194; AVX512BW:       # BB#0: # %entry
9195; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9196; AVX512BW-NEXT:    retq
9197entry:
9198  %cmp = icmp ule <4 x i64> %a, %b
9199  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9200  ret <4 x i64> %sel
9201}
9202
9203define <4 x i64> @test167(<4 x i64> %a, <4 x i64> %b) {
9204; SSE2-LABEL: test167:
9205; SSE2:       # BB#0: # %entry
9206; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
9207; SSE2-NEXT:    movdqa %xmm3, %xmm5
9208; SSE2-NEXT:    pxor %xmm4, %xmm5
9209; SSE2-NEXT:    movdqa %xmm1, %xmm6
9210; SSE2-NEXT:    pxor %xmm4, %xmm6
9211; SSE2-NEXT:    movdqa %xmm6, %xmm7
9212; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9213; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9214; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
9215; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
9216; SSE2-NEXT:    pand %xmm8, %xmm5
9217; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9218; SSE2-NEXT:    por %xmm5, %xmm6
9219; SSE2-NEXT:    movdqa %xmm2, %xmm5
9220; SSE2-NEXT:    pxor %xmm4, %xmm5
9221; SSE2-NEXT:    pxor %xmm0, %xmm4
9222; SSE2-NEXT:    movdqa %xmm4, %xmm7
9223; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
9224; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9225; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
9226; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
9227; SSE2-NEXT:    pand %xmm8, %xmm4
9228; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9229; SSE2-NEXT:    por %xmm4, %xmm5
9230; SSE2-NEXT:    pand %xmm5, %xmm0
9231; SSE2-NEXT:    pandn %xmm2, %xmm5
9232; SSE2-NEXT:    por %xmm5, %xmm0
9233; SSE2-NEXT:    pand %xmm6, %xmm1
9234; SSE2-NEXT:    pandn %xmm3, %xmm6
9235; SSE2-NEXT:    por %xmm6, %xmm1
9236; SSE2-NEXT:    retq
9237;
9238; SSE4-LABEL: test167:
9239; SSE4:       # BB#0: # %entry
9240; SSE4-NEXT:    movdqa %xmm0, %xmm4
9241; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9242; SSE4-NEXT:    movdqa %xmm3, %xmm6
9243; SSE4-NEXT:    pxor %xmm0, %xmm6
9244; SSE4-NEXT:    movdqa %xmm1, %xmm5
9245; SSE4-NEXT:    pxor %xmm0, %xmm5
9246; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
9247; SSE4-NEXT:    movdqa %xmm2, %xmm6
9248; SSE4-NEXT:    pxor %xmm0, %xmm6
9249; SSE4-NEXT:    pxor %xmm4, %xmm0
9250; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9251; SSE4-NEXT:    blendvpd %xmm4, %xmm2
9252; SSE4-NEXT:    movdqa %xmm5, %xmm0
9253; SSE4-NEXT:    blendvpd %xmm1, %xmm3
9254; SSE4-NEXT:    movapd %xmm2, %xmm0
9255; SSE4-NEXT:    movapd %xmm3, %xmm1
9256; SSE4-NEXT:    retq
9257;
9258; AVX1-LABEL: test167:
9259; AVX1:       # BB#0: # %entry
9260; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9261; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9262; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
9263; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9264; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
9265; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9266; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm4
9267; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
9268; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9269; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9270; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9271; AVX1-NEXT:    retq
9272;
9273; AVX2-LABEL: test167:
9274; AVX2:       # BB#0: # %entry
9275; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
9276; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9277; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9278; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9279; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9280; AVX2-NEXT:    retq
9281;
9282; AVX512BW-LABEL: test167:
9283; AVX512BW:       # BB#0: # %entry
9284; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9285; AVX512BW-NEXT:    retq
9286entry:
9287  %cmp = icmp ugt <4 x i64> %a, %b
9288  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9289  ret <4 x i64> %sel
9290}
9291
9292define <4 x i64> @test168(<4 x i64> %a, <4 x i64> %b) {
9293; SSE2-LABEL: test168:
9294; SSE2:       # BB#0: # %entry
9295; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
9296; SSE2-NEXT:    movdqa %xmm1, %xmm4
9297; SSE2-NEXT:    pxor %xmm7, %xmm4
9298; SSE2-NEXT:    movdqa %xmm3, %xmm5
9299; SSE2-NEXT:    pxor %xmm7, %xmm5
9300; SSE2-NEXT:    movdqa %xmm5, %xmm6
9301; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
9302; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9303; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
9304; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9305; SSE2-NEXT:    pand %xmm8, %xmm4
9306; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9307; SSE2-NEXT:    por %xmm4, %xmm8
9308; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
9309; SSE2-NEXT:    movdqa %xmm8, %xmm9
9310; SSE2-NEXT:    pxor %xmm4, %xmm9
9311; SSE2-NEXT:    movdqa %xmm0, %xmm6
9312; SSE2-NEXT:    pxor %xmm7, %xmm6
9313; SSE2-NEXT:    pxor %xmm2, %xmm7
9314; SSE2-NEXT:    movdqa %xmm7, %xmm5
9315; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
9316; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9317; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
9318; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9319; SSE2-NEXT:    pand %xmm10, %xmm6
9320; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9321; SSE2-NEXT:    por %xmm6, %xmm5
9322; SSE2-NEXT:    pxor %xmm5, %xmm4
9323; SSE2-NEXT:    pandn %xmm0, %xmm5
9324; SSE2-NEXT:    pandn %xmm2, %xmm4
9325; SSE2-NEXT:    por %xmm5, %xmm4
9326; SSE2-NEXT:    pandn %xmm1, %xmm8
9327; SSE2-NEXT:    pandn %xmm3, %xmm9
9328; SSE2-NEXT:    por %xmm8, %xmm9
9329; SSE2-NEXT:    movdqa %xmm4, %xmm0
9330; SSE2-NEXT:    movdqa %xmm9, %xmm1
9331; SSE2-NEXT:    retq
9332;
9333; SSE4-LABEL: test168:
9334; SSE4:       # BB#0: # %entry
9335; SSE4-NEXT:    movdqa %xmm0, %xmm4
9336; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9337; SSE4-NEXT:    movdqa %xmm1, %xmm6
9338; SSE4-NEXT:    pxor %xmm0, %xmm6
9339; SSE4-NEXT:    movdqa %xmm3, %xmm5
9340; SSE4-NEXT:    pxor %xmm0, %xmm5
9341; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
9342; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
9343; SSE4-NEXT:    pxor %xmm6, %xmm5
9344; SSE4-NEXT:    movdqa %xmm4, %xmm7
9345; SSE4-NEXT:    pxor %xmm0, %xmm7
9346; SSE4-NEXT:    pxor %xmm2, %xmm0
9347; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
9348; SSE4-NEXT:    pxor %xmm6, %xmm0
9349; SSE4-NEXT:    blendvpd %xmm4, %xmm2
9350; SSE4-NEXT:    movdqa %xmm5, %xmm0
9351; SSE4-NEXT:    blendvpd %xmm1, %xmm3
9352; SSE4-NEXT:    movapd %xmm2, %xmm0
9353; SSE4-NEXT:    movapd %xmm3, %xmm1
9354; SSE4-NEXT:    retq
9355;
9356; AVX1-LABEL: test168:
9357; AVX1:       # BB#0: # %entry
9358; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9359; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9360; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
9361; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9362; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
9363; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9364; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
9365; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
9366; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm5
9367; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
9368; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
9369; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
9370; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9371; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9372; AVX1-NEXT:    retq
9373;
9374; AVX2-LABEL: test168:
9375; AVX2:       # BB#0: # %entry
9376; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
9377; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9378; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9379; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9380; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
9381; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
9382; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
9383; AVX2-NEXT:    retq
9384;
9385; AVX512BW-LABEL: test168:
9386; AVX512BW:       # BB#0: # %entry
9387; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9388; AVX512BW-NEXT:    retq
9389entry:
9390  %cmp = icmp uge <4 x i64> %a, %b
9391  %sel = select <4 x i1> %cmp, <4 x i64> %a, <4 x i64> %b
9392  ret <4 x i64> %sel
9393}
9394
9395define <4 x i64> @test169(<4 x i64> %a, <4 x i64> %b) {
9396; SSE2-LABEL: test169:
9397; SSE2:       # BB#0: # %entry
9398; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0]
9399; SSE2-NEXT:    movdqa %xmm1, %xmm4
9400; SSE2-NEXT:    pxor %xmm5, %xmm4
9401; SSE2-NEXT:    movdqa %xmm3, %xmm6
9402; SSE2-NEXT:    pxor %xmm5, %xmm6
9403; SSE2-NEXT:    movdqa %xmm6, %xmm7
9404; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
9405; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9406; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
9407; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9408; SSE2-NEXT:    pand %xmm8, %xmm6
9409; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9410; SSE2-NEXT:    por %xmm6, %xmm4
9411; SSE2-NEXT:    movdqa %xmm0, %xmm6
9412; SSE2-NEXT:    pxor %xmm5, %xmm6
9413; SSE2-NEXT:    pxor %xmm2, %xmm5
9414; SSE2-NEXT:    movdqa %xmm5, %xmm7
9415; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
9416; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9417; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
9418; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
9419; SSE2-NEXT:    pand %xmm8, %xmm6
9420; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9421; SSE2-NEXT:    por %xmm6, %xmm5
9422; SSE2-NEXT:    pand %xmm5, %xmm2
9423; SSE2-NEXT:    pandn %xmm0, %xmm5
9424; SSE2-NEXT:    por %xmm2, %xmm5
9425; SSE2-NEXT:    pand %xmm4, %xmm3
9426; SSE2-NEXT:    pandn %xmm1, %xmm4
9427; SSE2-NEXT:    por %xmm3, %xmm4
9428; SSE2-NEXT:    movdqa %xmm5, %xmm0
9429; SSE2-NEXT:    movdqa %xmm4, %xmm1
9430; SSE2-NEXT:    retq
9431;
9432; SSE4-LABEL: test169:
9433; SSE4:       # BB#0: # %entry
9434; SSE4-NEXT:    movdqa %xmm0, %xmm4
9435; SSE4-NEXT:    movdqa %xmm3, %xmm5
9436; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
9437; SSE4-NEXT:    movdqa %xmm2, %xmm0
9438; SSE4-NEXT:    pcmpgtq %xmm4, %xmm0
9439; SSE4-NEXT:    blendvpd %xmm2, %xmm4
9440; SSE4-NEXT:    movdqa %xmm5, %xmm0
9441; SSE4-NEXT:    blendvpd %xmm3, %xmm1
9442; SSE4-NEXT:    movapd %xmm4, %xmm0
9443; SSE4-NEXT:    retq
9444;
9445; AVX1-LABEL: test169:
9446; AVX1:       # BB#0: # %entry
9447; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9448; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
9449; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
9450; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm3
9451; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9452; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9453; AVX1-NEXT:    retq
9454;
9455; AVX2-LABEL: test169:
9456; AVX2:       # BB#0: # %entry
9457; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
9458; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9459; AVX2-NEXT:    retq
9460;
9461; AVX512BW-LABEL: test169:
9462; AVX512BW:       # BB#0: # %entry
9463; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
9464; AVX512BW-NEXT:    retq
9465entry:
9466  %cmp = icmp slt <4 x i64> %a, %b
9467  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9468  ret <4 x i64> %sel
9469}
9470
9471define <4 x i64> @test170(<4 x i64> %a, <4 x i64> %b) {
9472; SSE2-LABEL: test170:
9473; SSE2:       # BB#0: # %entry
9474; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
9475; SSE2-NEXT:    movdqa %xmm3, %xmm4
9476; SSE2-NEXT:    pxor %xmm7, %xmm4
9477; SSE2-NEXT:    movdqa %xmm1, %xmm5
9478; SSE2-NEXT:    pxor %xmm7, %xmm5
9479; SSE2-NEXT:    movdqa %xmm5, %xmm6
9480; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
9481; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9482; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
9483; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9484; SSE2-NEXT:    pand %xmm8, %xmm4
9485; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9486; SSE2-NEXT:    por %xmm4, %xmm8
9487; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
9488; SSE2-NEXT:    movdqa %xmm8, %xmm9
9489; SSE2-NEXT:    pxor %xmm4, %xmm9
9490; SSE2-NEXT:    movdqa %xmm2, %xmm6
9491; SSE2-NEXT:    pxor %xmm7, %xmm6
9492; SSE2-NEXT:    pxor %xmm0, %xmm7
9493; SSE2-NEXT:    movdqa %xmm7, %xmm5
9494; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
9495; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9496; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
9497; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9498; SSE2-NEXT:    pand %xmm10, %xmm6
9499; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9500; SSE2-NEXT:    por %xmm6, %xmm5
9501; SSE2-NEXT:    pxor %xmm5, %xmm4
9502; SSE2-NEXT:    pandn %xmm2, %xmm5
9503; SSE2-NEXT:    pandn %xmm0, %xmm4
9504; SSE2-NEXT:    por %xmm5, %xmm4
9505; SSE2-NEXT:    pandn %xmm3, %xmm8
9506; SSE2-NEXT:    pandn %xmm1, %xmm9
9507; SSE2-NEXT:    por %xmm8, %xmm9
9508; SSE2-NEXT:    movdqa %xmm4, %xmm0
9509; SSE2-NEXT:    movdqa %xmm9, %xmm1
9510; SSE2-NEXT:    retq
9511;
9512; SSE4-LABEL: test170:
9513; SSE4:       # BB#0: # %entry
9514; SSE4-NEXT:    movdqa %xmm0, %xmm4
9515; SSE4-NEXT:    movdqa %xmm1, %xmm5
9516; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
9517; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
9518; SSE4-NEXT:    pxor %xmm6, %xmm5
9519; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9520; SSE4-NEXT:    pxor %xmm6, %xmm0
9521; SSE4-NEXT:    blendvpd %xmm2, %xmm4
9522; SSE4-NEXT:    movdqa %xmm5, %xmm0
9523; SSE4-NEXT:    blendvpd %xmm3, %xmm1
9524; SSE4-NEXT:    movapd %xmm4, %xmm0
9525; SSE4-NEXT:    retq
9526;
9527; AVX1-LABEL: test170:
9528; AVX1:       # BB#0: # %entry
9529; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9530; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
9531; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
9532; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
9533; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9534; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm4
9535; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
9536; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9537; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9538; AVX1-NEXT:    retq
9539;
9540; AVX2-LABEL: test170:
9541; AVX2:       # BB#0: # %entry
9542; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
9543; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
9544; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
9545; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9546; AVX2-NEXT:    retq
9547;
9548; AVX512BW-LABEL: test170:
9549; AVX512BW:       # BB#0: # %entry
9550; AVX512BW-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
9551; AVX512BW-NEXT:    retq
9552entry:
9553  %cmp = icmp sle <4 x i64> %a, %b
9554  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9555  ret <4 x i64> %sel
9556}
9557
9558define <4 x i64> @test171(<4 x i64> %a, <4 x i64> %b) {
9559; SSE2-LABEL: test171:
9560; SSE2:       # BB#0: # %entry
9561; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,0,2147483648,0]
9562; SSE2-NEXT:    movdqa %xmm3, %xmm4
9563; SSE2-NEXT:    pxor %xmm5, %xmm4
9564; SSE2-NEXT:    movdqa %xmm1, %xmm6
9565; SSE2-NEXT:    pxor %xmm5, %xmm6
9566; SSE2-NEXT:    movdqa %xmm6, %xmm7
9567; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
9568; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9569; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
9570; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9571; SSE2-NEXT:    pand %xmm8, %xmm6
9572; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9573; SSE2-NEXT:    por %xmm6, %xmm4
9574; SSE2-NEXT:    movdqa %xmm2, %xmm6
9575; SSE2-NEXT:    pxor %xmm5, %xmm6
9576; SSE2-NEXT:    pxor %xmm0, %xmm5
9577; SSE2-NEXT:    movdqa %xmm5, %xmm7
9578; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
9579; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9580; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
9581; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
9582; SSE2-NEXT:    pand %xmm8, %xmm6
9583; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9584; SSE2-NEXT:    por %xmm6, %xmm5
9585; SSE2-NEXT:    pand %xmm5, %xmm2
9586; SSE2-NEXT:    pandn %xmm0, %xmm5
9587; SSE2-NEXT:    por %xmm2, %xmm5
9588; SSE2-NEXT:    pand %xmm4, %xmm3
9589; SSE2-NEXT:    pandn %xmm1, %xmm4
9590; SSE2-NEXT:    por %xmm3, %xmm4
9591; SSE2-NEXT:    movdqa %xmm5, %xmm0
9592; SSE2-NEXT:    movdqa %xmm4, %xmm1
9593; SSE2-NEXT:    retq
9594;
9595; SSE4-LABEL: test171:
9596; SSE4:       # BB#0: # %entry
9597; SSE4-NEXT:    movdqa %xmm0, %xmm4
9598; SSE4-NEXT:    movdqa %xmm1, %xmm5
9599; SSE4-NEXT:    pcmpgtq %xmm3, %xmm5
9600; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
9601; SSE4-NEXT:    blendvpd %xmm2, %xmm4
9602; SSE4-NEXT:    movdqa %xmm5, %xmm0
9603; SSE4-NEXT:    blendvpd %xmm3, %xmm1
9604; SSE4-NEXT:    movapd %xmm4, %xmm0
9605; SSE4-NEXT:    retq
9606;
9607; AVX1-LABEL: test171:
9608; AVX1:       # BB#0: # %entry
9609; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9610; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
9611; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
9612; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm3
9613; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9614; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9615; AVX1-NEXT:    retq
9616;
9617; AVX2-LABEL: test171:
9618; AVX2:       # BB#0: # %entry
9619; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm2
9620; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9621; AVX2-NEXT:    retq
9622;
9623; AVX512BW-LABEL: test171:
9624; AVX512BW:       # BB#0: # %entry
9625; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
9626; AVX512BW-NEXT:    retq
9627entry:
9628  %cmp = icmp sgt <4 x i64> %a, %b
9629  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9630  ret <4 x i64> %sel
9631}
9632
9633define <4 x i64> @test172(<4 x i64> %a, <4 x i64> %b) {
9634; SSE2-LABEL: test172:
9635; SSE2:       # BB#0: # %entry
9636; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,0,2147483648,0]
9637; SSE2-NEXT:    movdqa %xmm1, %xmm4
9638; SSE2-NEXT:    pxor %xmm7, %xmm4
9639; SSE2-NEXT:    movdqa %xmm3, %xmm5
9640; SSE2-NEXT:    pxor %xmm7, %xmm5
9641; SSE2-NEXT:    movdqa %xmm5, %xmm6
9642; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
9643; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9644; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
9645; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9646; SSE2-NEXT:    pand %xmm8, %xmm4
9647; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9648; SSE2-NEXT:    por %xmm4, %xmm8
9649; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
9650; SSE2-NEXT:    movdqa %xmm8, %xmm9
9651; SSE2-NEXT:    pxor %xmm4, %xmm9
9652; SSE2-NEXT:    movdqa %xmm0, %xmm6
9653; SSE2-NEXT:    pxor %xmm7, %xmm6
9654; SSE2-NEXT:    pxor %xmm2, %xmm7
9655; SSE2-NEXT:    movdqa %xmm7, %xmm5
9656; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
9657; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9658; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
9659; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9660; SSE2-NEXT:    pand %xmm10, %xmm6
9661; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9662; SSE2-NEXT:    por %xmm6, %xmm5
9663; SSE2-NEXT:    pxor %xmm5, %xmm4
9664; SSE2-NEXT:    pandn %xmm2, %xmm5
9665; SSE2-NEXT:    pandn %xmm0, %xmm4
9666; SSE2-NEXT:    por %xmm5, %xmm4
9667; SSE2-NEXT:    pandn %xmm3, %xmm8
9668; SSE2-NEXT:    pandn %xmm1, %xmm9
9669; SSE2-NEXT:    por %xmm8, %xmm9
9670; SSE2-NEXT:    movdqa %xmm4, %xmm0
9671; SSE2-NEXT:    movdqa %xmm9, %xmm1
9672; SSE2-NEXT:    retq
9673;
9674; SSE4-LABEL: test172:
9675; SSE4:       # BB#0: # %entry
9676; SSE4-NEXT:    movdqa %xmm0, %xmm4
9677; SSE4-NEXT:    movdqa %xmm3, %xmm5
9678; SSE4-NEXT:    pcmpgtq %xmm1, %xmm5
9679; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
9680; SSE4-NEXT:    pxor %xmm0, %xmm5
9681; SSE4-NEXT:    movdqa %xmm2, %xmm6
9682; SSE4-NEXT:    pcmpgtq %xmm4, %xmm6
9683; SSE4-NEXT:    pxor %xmm6, %xmm0
9684; SSE4-NEXT:    blendvpd %xmm2, %xmm4
9685; SSE4-NEXT:    movdqa %xmm5, %xmm0
9686; SSE4-NEXT:    blendvpd %xmm3, %xmm1
9687; SSE4-NEXT:    movapd %xmm4, %xmm0
9688; SSE4-NEXT:    retq
9689;
9690; AVX1-LABEL: test172:
9691; AVX1:       # BB#0: # %entry
9692; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9693; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
9694; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
9695; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
9696; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
9697; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm4
9698; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm3
9699; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9700; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9701; AVX1-NEXT:    retq
9702;
9703; AVX2-LABEL: test172:
9704; AVX2:       # BB#0: # %entry
9705; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
9706; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
9707; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
9708; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9709; AVX2-NEXT:    retq
9710;
9711; AVX512BW-LABEL: test172:
9712; AVX512BW:       # BB#0: # %entry
9713; AVX512BW-NEXT:    vpminsq %ymm1, %ymm0, %ymm0
9714; AVX512BW-NEXT:    retq
9715entry:
9716  %cmp = icmp sge <4 x i64> %a, %b
9717  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9718  ret <4 x i64> %sel
9719}
9720
9721define <4 x i64> @test173(<4 x i64> %a, <4 x i64> %b) {
9722; SSE2-LABEL: test173:
9723; SSE2:       # BB#0: # %entry
9724; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
9725; SSE2-NEXT:    movdqa %xmm1, %xmm4
9726; SSE2-NEXT:    pxor %xmm5, %xmm4
9727; SSE2-NEXT:    movdqa %xmm3, %xmm6
9728; SSE2-NEXT:    pxor %xmm5, %xmm6
9729; SSE2-NEXT:    movdqa %xmm6, %xmm7
9730; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
9731; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9732; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
9733; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9734; SSE2-NEXT:    pand %xmm8, %xmm6
9735; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9736; SSE2-NEXT:    por %xmm6, %xmm4
9737; SSE2-NEXT:    movdqa %xmm0, %xmm6
9738; SSE2-NEXT:    pxor %xmm5, %xmm6
9739; SSE2-NEXT:    pxor %xmm2, %xmm5
9740; SSE2-NEXT:    movdqa %xmm5, %xmm7
9741; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
9742; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9743; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
9744; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
9745; SSE2-NEXT:    pand %xmm8, %xmm6
9746; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9747; SSE2-NEXT:    por %xmm6, %xmm5
9748; SSE2-NEXT:    pand %xmm5, %xmm2
9749; SSE2-NEXT:    pandn %xmm0, %xmm5
9750; SSE2-NEXT:    por %xmm2, %xmm5
9751; SSE2-NEXT:    pand %xmm4, %xmm3
9752; SSE2-NEXT:    pandn %xmm1, %xmm4
9753; SSE2-NEXT:    por %xmm3, %xmm4
9754; SSE2-NEXT:    movdqa %xmm5, %xmm0
9755; SSE2-NEXT:    movdqa %xmm4, %xmm1
9756; SSE2-NEXT:    retq
9757;
9758; SSE4-LABEL: test173:
9759; SSE4:       # BB#0: # %entry
9760; SSE4-NEXT:    movdqa %xmm0, %xmm4
9761; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9762; SSE4-NEXT:    movdqa %xmm1, %xmm6
9763; SSE4-NEXT:    pxor %xmm0, %xmm6
9764; SSE4-NEXT:    movdqa %xmm3, %xmm5
9765; SSE4-NEXT:    pxor %xmm0, %xmm5
9766; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
9767; SSE4-NEXT:    movdqa %xmm4, %xmm6
9768; SSE4-NEXT:    pxor %xmm0, %xmm6
9769; SSE4-NEXT:    pxor %xmm2, %xmm0
9770; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9771; SSE4-NEXT:    blendvpd %xmm2, %xmm4
9772; SSE4-NEXT:    movdqa %xmm5, %xmm0
9773; SSE4-NEXT:    blendvpd %xmm3, %xmm1
9774; SSE4-NEXT:    movapd %xmm4, %xmm0
9775; SSE4-NEXT:    retq
9776;
9777; AVX1-LABEL: test173:
9778; AVX1:       # BB#0: # %entry
9779; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
9780; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9781; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
9782; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
9783; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
9784; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9785; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm4
9786; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
9787; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9788; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9789; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9790; AVX1-NEXT:    retq
9791;
9792; AVX2-LABEL: test173:
9793; AVX2:       # BB#0: # %entry
9794; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
9795; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
9796; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
9797; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9798; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9799; AVX2-NEXT:    retq
9800;
9801; AVX512BW-LABEL: test173:
9802; AVX512BW:       # BB#0: # %entry
9803; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9804; AVX512BW-NEXT:    retq
9805entry:
9806  %cmp = icmp ult <4 x i64> %a, %b
9807  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9808  ret <4 x i64> %sel
9809}
9810
9811define <4 x i64> @test174(<4 x i64> %a, <4 x i64> %b) {
9812; SSE2-LABEL: test174:
9813; SSE2:       # BB#0: # %entry
9814; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
9815; SSE2-NEXT:    movdqa %xmm3, %xmm4
9816; SSE2-NEXT:    pxor %xmm7, %xmm4
9817; SSE2-NEXT:    movdqa %xmm1, %xmm5
9818; SSE2-NEXT:    pxor %xmm7, %xmm5
9819; SSE2-NEXT:    movdqa %xmm5, %xmm6
9820; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
9821; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
9822; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
9823; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
9824; SSE2-NEXT:    pand %xmm8, %xmm4
9825; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
9826; SSE2-NEXT:    por %xmm4, %xmm8
9827; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
9828; SSE2-NEXT:    movdqa %xmm8, %xmm9
9829; SSE2-NEXT:    pxor %xmm4, %xmm9
9830; SSE2-NEXT:    movdqa %xmm2, %xmm6
9831; SSE2-NEXT:    pxor %xmm7, %xmm6
9832; SSE2-NEXT:    pxor %xmm0, %xmm7
9833; SSE2-NEXT:    movdqa %xmm7, %xmm5
9834; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
9835; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
9836; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
9837; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
9838; SSE2-NEXT:    pand %xmm10, %xmm6
9839; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
9840; SSE2-NEXT:    por %xmm6, %xmm5
9841; SSE2-NEXT:    pxor %xmm5, %xmm4
9842; SSE2-NEXT:    pandn %xmm2, %xmm5
9843; SSE2-NEXT:    pandn %xmm0, %xmm4
9844; SSE2-NEXT:    por %xmm5, %xmm4
9845; SSE2-NEXT:    pandn %xmm3, %xmm8
9846; SSE2-NEXT:    pandn %xmm1, %xmm9
9847; SSE2-NEXT:    por %xmm8, %xmm9
9848; SSE2-NEXT:    movdqa %xmm4, %xmm0
9849; SSE2-NEXT:    movdqa %xmm9, %xmm1
9850; SSE2-NEXT:    retq
9851;
9852; SSE4-LABEL: test174:
9853; SSE4:       # BB#0: # %entry
9854; SSE4-NEXT:    movdqa %xmm0, %xmm4
9855; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9856; SSE4-NEXT:    movdqa %xmm3, %xmm6
9857; SSE4-NEXT:    pxor %xmm0, %xmm6
9858; SSE4-NEXT:    movdqa %xmm1, %xmm5
9859; SSE4-NEXT:    pxor %xmm0, %xmm5
9860; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
9861; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
9862; SSE4-NEXT:    pxor %xmm6, %xmm5
9863; SSE4-NEXT:    movdqa %xmm2, %xmm7
9864; SSE4-NEXT:    pxor %xmm0, %xmm7
9865; SSE4-NEXT:    pxor %xmm4, %xmm0
9866; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
9867; SSE4-NEXT:    pxor %xmm6, %xmm0
9868; SSE4-NEXT:    blendvpd %xmm2, %xmm4
9869; SSE4-NEXT:    movdqa %xmm5, %xmm0
9870; SSE4-NEXT:    blendvpd %xmm3, %xmm1
9871; SSE4-NEXT:    movapd %xmm4, %xmm0
9872; SSE4-NEXT:    retq
9873;
9874; AVX1-LABEL: test174:
9875; AVX1:       # BB#0: # %entry
9876; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9877; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9878; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
9879; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9880; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
9881; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9882; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
9883; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
9884; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm5
9885; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
9886; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
9887; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
9888; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9889; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9890; AVX1-NEXT:    retq
9891;
9892; AVX2-LABEL: test174:
9893; AVX2:       # BB#0: # %entry
9894; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
9895; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9896; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9897; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9898; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
9899; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
9900; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9901; AVX2-NEXT:    retq
9902;
9903; AVX512BW-LABEL: test174:
9904; AVX512BW:       # BB#0: # %entry
9905; AVX512BW-NEXT:    vpmaxuq %ymm1, %ymm0, %ymm0
9906; AVX512BW-NEXT:    retq
9907entry:
9908  %cmp = icmp ule <4 x i64> %a, %b
9909  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
9910  ret <4 x i64> %sel
9911}
9912
9913define <4 x i64> @test175(<4 x i64> %a, <4 x i64> %b) {
9914; SSE2-LABEL: test175:
9915; SSE2:       # BB#0: # %entry
9916; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
9917; SSE2-NEXT:    movdqa %xmm3, %xmm4
9918; SSE2-NEXT:    pxor %xmm5, %xmm4
9919; SSE2-NEXT:    movdqa %xmm1, %xmm6
9920; SSE2-NEXT:    pxor %xmm5, %xmm6
9921; SSE2-NEXT:    movdqa %xmm6, %xmm7
9922; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
9923; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9924; SSE2-NEXT:    pcmpeqd %xmm4, %xmm6
9925; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
9926; SSE2-NEXT:    pand %xmm8, %xmm6
9927; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[1,1,3,3]
9928; SSE2-NEXT:    por %xmm6, %xmm4
9929; SSE2-NEXT:    movdqa %xmm2, %xmm6
9930; SSE2-NEXT:    pxor %xmm5, %xmm6
9931; SSE2-NEXT:    pxor %xmm0, %xmm5
9932; SSE2-NEXT:    movdqa %xmm5, %xmm7
9933; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
9934; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
9935; SSE2-NEXT:    pcmpeqd %xmm6, %xmm5
9936; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[1,1,3,3]
9937; SSE2-NEXT:    pand %xmm8, %xmm6
9938; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
9939; SSE2-NEXT:    por %xmm6, %xmm5
9940; SSE2-NEXT:    pand %xmm5, %xmm2
9941; SSE2-NEXT:    pandn %xmm0, %xmm5
9942; SSE2-NEXT:    por %xmm2, %xmm5
9943; SSE2-NEXT:    pand %xmm4, %xmm3
9944; SSE2-NEXT:    pandn %xmm1, %xmm4
9945; SSE2-NEXT:    por %xmm3, %xmm4
9946; SSE2-NEXT:    movdqa %xmm5, %xmm0
9947; SSE2-NEXT:    movdqa %xmm4, %xmm1
9948; SSE2-NEXT:    retq
9949;
9950; SSE4-LABEL: test175:
9951; SSE4:       # BB#0: # %entry
9952; SSE4-NEXT:    movdqa %xmm0, %xmm4
9953; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
9954; SSE4-NEXT:    movdqa %xmm3, %xmm6
9955; SSE4-NEXT:    pxor %xmm0, %xmm6
9956; SSE4-NEXT:    movdqa %xmm1, %xmm5
9957; SSE4-NEXT:    pxor %xmm0, %xmm5
9958; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
9959; SSE4-NEXT:    movdqa %xmm2, %xmm6
9960; SSE4-NEXT:    pxor %xmm0, %xmm6
9961; SSE4-NEXT:    pxor %xmm4, %xmm0
9962; SSE4-NEXT:    pcmpgtq %xmm6, %xmm0
9963; SSE4-NEXT:    blendvpd %xmm2, %xmm4
9964; SSE4-NEXT:    movdqa %xmm5, %xmm0
9965; SSE4-NEXT:    blendvpd %xmm3, %xmm1
9966; SSE4-NEXT:    movapd %xmm4, %xmm0
9967; SSE4-NEXT:    retq
9968;
9969; AVX1-LABEL: test175:
9970; AVX1:       # BB#0: # %entry
9971; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
9972; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
9973; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
9974; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
9975; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
9976; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
9977; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm4
9978; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm3
9979; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
9980; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
9981; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9982; AVX1-NEXT:    retq
9983;
9984; AVX2-LABEL: test175:
9985; AVX2:       # BB#0: # %entry
9986; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
9987; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
9988; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
9989; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
9990; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
9991; AVX2-NEXT:    retq
9992;
9993; AVX512BW-LABEL: test175:
9994; AVX512BW:       # BB#0: # %entry
9995; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
9996; AVX512BW-NEXT:    retq
9997entry:
9998  %cmp = icmp ugt <4 x i64> %a, %b
9999  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
10000  ret <4 x i64> %sel
10001}
10002
10003define <4 x i64> @test176(<4 x i64> %a, <4 x i64> %b) {
10004; SSE2-LABEL: test176:
10005; SSE2:       # BB#0: # %entry
10006; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
10007; SSE2-NEXT:    movdqa %xmm1, %xmm4
10008; SSE2-NEXT:    pxor %xmm7, %xmm4
10009; SSE2-NEXT:    movdqa %xmm3, %xmm5
10010; SSE2-NEXT:    pxor %xmm7, %xmm5
10011; SSE2-NEXT:    movdqa %xmm5, %xmm6
10012; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
10013; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
10014; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
10015; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
10016; SSE2-NEXT:    pand %xmm8, %xmm4
10017; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
10018; SSE2-NEXT:    por %xmm4, %xmm8
10019; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
10020; SSE2-NEXT:    movdqa %xmm8, %xmm9
10021; SSE2-NEXT:    pxor %xmm4, %xmm9
10022; SSE2-NEXT:    movdqa %xmm0, %xmm6
10023; SSE2-NEXT:    pxor %xmm7, %xmm6
10024; SSE2-NEXT:    pxor %xmm2, %xmm7
10025; SSE2-NEXT:    movdqa %xmm7, %xmm5
10026; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
10027; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
10028; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
10029; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
10030; SSE2-NEXT:    pand %xmm10, %xmm6
10031; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
10032; SSE2-NEXT:    por %xmm6, %xmm5
10033; SSE2-NEXT:    pxor %xmm5, %xmm4
10034; SSE2-NEXT:    pandn %xmm2, %xmm5
10035; SSE2-NEXT:    pandn %xmm0, %xmm4
10036; SSE2-NEXT:    por %xmm5, %xmm4
10037; SSE2-NEXT:    pandn %xmm3, %xmm8
10038; SSE2-NEXT:    pandn %xmm1, %xmm9
10039; SSE2-NEXT:    por %xmm8, %xmm9
10040; SSE2-NEXT:    movdqa %xmm4, %xmm0
10041; SSE2-NEXT:    movdqa %xmm9, %xmm1
10042; SSE2-NEXT:    retq
10043;
10044; SSE4-LABEL: test176:
10045; SSE4:       # BB#0: # %entry
10046; SSE4-NEXT:    movdqa %xmm0, %xmm4
10047; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10048; SSE4-NEXT:    movdqa %xmm1, %xmm6
10049; SSE4-NEXT:    pxor %xmm0, %xmm6
10050; SSE4-NEXT:    movdqa %xmm3, %xmm5
10051; SSE4-NEXT:    pxor %xmm0, %xmm5
10052; SSE4-NEXT:    pcmpgtq %xmm6, %xmm5
10053; SSE4-NEXT:    pcmpeqd %xmm6, %xmm6
10054; SSE4-NEXT:    pxor %xmm6, %xmm5
10055; SSE4-NEXT:    movdqa %xmm4, %xmm7
10056; SSE4-NEXT:    pxor %xmm0, %xmm7
10057; SSE4-NEXT:    pxor %xmm2, %xmm0
10058; SSE4-NEXT:    pcmpgtq %xmm7, %xmm0
10059; SSE4-NEXT:    pxor %xmm6, %xmm0
10060; SSE4-NEXT:    blendvpd %xmm2, %xmm4
10061; SSE4-NEXT:    movdqa %xmm5, %xmm0
10062; SSE4-NEXT:    blendvpd %xmm3, %xmm1
10063; SSE4-NEXT:    movapd %xmm4, %xmm0
10064; SSE4-NEXT:    retq
10065;
10066; AVX1-LABEL: test176:
10067; AVX1:       # BB#0: # %entry
10068; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
10069; AVX1-NEXT:    vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10070; AVX1-NEXT:    vxorps %xmm3, %xmm2, %xmm2
10071; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
10072; AVX1-NEXT:    vxorps %xmm3, %xmm4, %xmm4
10073; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
10074; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
10075; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
10076; AVX1-NEXT:    vxorps %xmm3, %xmm0, %xmm5
10077; AVX1-NEXT:    vxorps %xmm3, %xmm1, %xmm3
10078; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
10079; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
10080; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
10081; AVX1-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
10082; AVX1-NEXT:    retq
10083;
10084; AVX2-LABEL: test176:
10085; AVX2:       # BB#0: # %entry
10086; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
10087; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
10088; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
10089; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
10090; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
10091; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
10092; AVX2-NEXT:    vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
10093; AVX2-NEXT:    retq
10094;
10095; AVX512BW-LABEL: test176:
10096; AVX512BW:       # BB#0: # %entry
10097; AVX512BW-NEXT:    vpminuq %ymm1, %ymm0, %ymm0
10098; AVX512BW-NEXT:    retq
10099entry:
10100  %cmp = icmp uge <4 x i64> %a, %b
10101  %sel = select <4 x i1> %cmp, <4 x i64> %b, <4 x i64> %a
10102  ret <4 x i64> %sel
10103}
10104
10105define <2 x i64> @test177(<2 x i64> %a, <2 x i64> %b) {
10106; SSE2-LABEL: test177:
10107; SSE2:       # BB#0: # %entry
10108; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10109; SSE2-NEXT:    movdqa %xmm0, %xmm3
10110; SSE2-NEXT:    pxor %xmm2, %xmm3
10111; SSE2-NEXT:    pxor %xmm1, %xmm2
10112; SSE2-NEXT:    movdqa %xmm2, %xmm4
10113; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10114; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10115; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10116; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10117; SSE2-NEXT:    pand %xmm5, %xmm2
10118; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10119; SSE2-NEXT:    por %xmm2, %xmm3
10120; SSE2-NEXT:    pand %xmm3, %xmm0
10121; SSE2-NEXT:    pandn %xmm1, %xmm3
10122; SSE2-NEXT:    por %xmm3, %xmm0
10123; SSE2-NEXT:    retq
10124;
10125; SSE4-LABEL: test177:
10126; SSE4:       # BB#0: # %entry
10127; SSE4-NEXT:    movdqa %xmm0, %xmm2
10128; SSE4-NEXT:    movdqa %xmm1, %xmm0
10129; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
10130; SSE4-NEXT:    blendvpd %xmm2, %xmm1
10131; SSE4-NEXT:    movapd %xmm1, %xmm0
10132; SSE4-NEXT:    retq
10133;
10134; AVX1-LABEL: test177:
10135; AVX1:       # BB#0: # %entry
10136; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10137; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10138; AVX1-NEXT:    retq
10139;
10140; AVX2-LABEL: test177:
10141; AVX2:       # BB#0: # %entry
10142; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10143; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10144; AVX2-NEXT:    retq
10145;
10146; AVX512BW-LABEL: test177:
10147; AVX512BW:       # BB#0: # %entry
10148; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
10149; AVX512BW-NEXT:    retq
10150entry:
10151  %cmp = icmp slt <2 x i64> %a, %b
10152  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10153  ret <2 x i64> %sel
10154}
10155
10156define <2 x i64> @test178(<2 x i64> %a, <2 x i64> %b) {
10157; SSE2-LABEL: test178:
10158; SSE2:       # BB#0: # %entry
10159; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10160; SSE2-NEXT:    movdqa %xmm1, %xmm3
10161; SSE2-NEXT:    pxor %xmm2, %xmm3
10162; SSE2-NEXT:    pxor %xmm0, %xmm2
10163; SSE2-NEXT:    movdqa %xmm2, %xmm4
10164; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10165; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10166; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10167; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10168; SSE2-NEXT:    pand %xmm5, %xmm2
10169; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10170; SSE2-NEXT:    por %xmm2, %xmm3
10171; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
10172; SSE2-NEXT:    pxor %xmm3, %xmm2
10173; SSE2-NEXT:    pandn %xmm0, %xmm3
10174; SSE2-NEXT:    pandn %xmm1, %xmm2
10175; SSE2-NEXT:    por %xmm3, %xmm2
10176; SSE2-NEXT:    movdqa %xmm2, %xmm0
10177; SSE2-NEXT:    retq
10178;
10179; SSE4-LABEL: test178:
10180; SSE4:       # BB#0: # %entry
10181; SSE4-NEXT:    movdqa %xmm0, %xmm2
10182; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
10183; SSE4-NEXT:    pcmpeqd %xmm3, %xmm3
10184; SSE4-NEXT:    pxor %xmm3, %xmm0
10185; SSE4-NEXT:    blendvpd %xmm2, %xmm1
10186; SSE4-NEXT:    movapd %xmm1, %xmm0
10187; SSE4-NEXT:    retq
10188;
10189; AVX1-LABEL: test178:
10190; AVX1:       # BB#0: # %entry
10191; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10192; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10193; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10194; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10195; AVX1-NEXT:    retq
10196;
10197; AVX2-LABEL: test178:
10198; AVX2:       # BB#0: # %entry
10199; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10200; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10201; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10202; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10203; AVX2-NEXT:    retq
10204;
10205; AVX512BW-LABEL: test178:
10206; AVX512BW:       # BB#0: # %entry
10207; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
10208; AVX512BW-NEXT:    retq
10209entry:
10210  %cmp = icmp sle <2 x i64> %a, %b
10211  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10212  ret <2 x i64> %sel
10213}
10214
10215define <2 x i64> @test179(<2 x i64> %a, <2 x i64> %b) {
10216; SSE2-LABEL: test179:
10217; SSE2:       # BB#0: # %entry
10218; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10219; SSE2-NEXT:    movdqa %xmm1, %xmm3
10220; SSE2-NEXT:    pxor %xmm2, %xmm3
10221; SSE2-NEXT:    pxor %xmm0, %xmm2
10222; SSE2-NEXT:    movdqa %xmm2, %xmm4
10223; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10224; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10225; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10226; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10227; SSE2-NEXT:    pand %xmm5, %xmm2
10228; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10229; SSE2-NEXT:    por %xmm2, %xmm3
10230; SSE2-NEXT:    pand %xmm3, %xmm0
10231; SSE2-NEXT:    pandn %xmm1, %xmm3
10232; SSE2-NEXT:    por %xmm3, %xmm0
10233; SSE2-NEXT:    retq
10234;
10235; SSE4-LABEL: test179:
10236; SSE4:       # BB#0: # %entry
10237; SSE4-NEXT:    movdqa %xmm0, %xmm2
10238; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
10239; SSE4-NEXT:    blendvpd %xmm2, %xmm1
10240; SSE4-NEXT:    movapd %xmm1, %xmm0
10241; SSE4-NEXT:    retq
10242;
10243; AVX1-LABEL: test179:
10244; AVX1:       # BB#0: # %entry
10245; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10246; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10247; AVX1-NEXT:    retq
10248;
10249; AVX2-LABEL: test179:
10250; AVX2:       # BB#0: # %entry
10251; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10252; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10253; AVX2-NEXT:    retq
10254;
10255; AVX512BW-LABEL: test179:
10256; AVX512BW:       # BB#0: # %entry
10257; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
10258; AVX512BW-NEXT:    retq
10259entry:
10260  %cmp = icmp sgt <2 x i64> %a, %b
10261  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10262  ret <2 x i64> %sel
10263}
10264
10265define <2 x i64> @test180(<2 x i64> %a, <2 x i64> %b) {
10266; SSE2-LABEL: test180:
10267; SSE2:       # BB#0: # %entry
10268; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10269; SSE2-NEXT:    movdqa %xmm0, %xmm3
10270; SSE2-NEXT:    pxor %xmm2, %xmm3
10271; SSE2-NEXT:    pxor %xmm1, %xmm2
10272; SSE2-NEXT:    movdqa %xmm2, %xmm4
10273; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10274; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10275; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10276; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10277; SSE2-NEXT:    pand %xmm5, %xmm2
10278; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10279; SSE2-NEXT:    por %xmm2, %xmm3
10280; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
10281; SSE2-NEXT:    pxor %xmm3, %xmm2
10282; SSE2-NEXT:    pandn %xmm0, %xmm3
10283; SSE2-NEXT:    pandn %xmm1, %xmm2
10284; SSE2-NEXT:    por %xmm3, %xmm2
10285; SSE2-NEXT:    movdqa %xmm2, %xmm0
10286; SSE2-NEXT:    retq
10287;
10288; SSE4-LABEL: test180:
10289; SSE4:       # BB#0: # %entry
10290; SSE4-NEXT:    movdqa %xmm0, %xmm2
10291; SSE4-NEXT:    movdqa %xmm1, %xmm3
10292; SSE4-NEXT:    pcmpgtq %xmm2, %xmm3
10293; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
10294; SSE4-NEXT:    pxor %xmm3, %xmm0
10295; SSE4-NEXT:    blendvpd %xmm2, %xmm1
10296; SSE4-NEXT:    movapd %xmm1, %xmm0
10297; SSE4-NEXT:    retq
10298;
10299; AVX1-LABEL: test180:
10300; AVX1:       # BB#0: # %entry
10301; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10302; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10303; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10304; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10305; AVX1-NEXT:    retq
10306;
10307; AVX2-LABEL: test180:
10308; AVX2:       # BB#0: # %entry
10309; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10310; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10311; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10312; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10313; AVX2-NEXT:    retq
10314;
10315; AVX512BW-LABEL: test180:
10316; AVX512BW:       # BB#0: # %entry
10317; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
10318; AVX512BW-NEXT:    retq
10319entry:
10320  %cmp = icmp sge <2 x i64> %a, %b
10321  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10322  ret <2 x i64> %sel
10323}
10324
10325define <2 x i64> @test181(<2 x i64> %a, <2 x i64> %b) {
10326; SSE2-LABEL: test181:
10327; SSE2:       # BB#0: # %entry
10328; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10329; SSE2-NEXT:    movdqa %xmm0, %xmm3
10330; SSE2-NEXT:    pxor %xmm2, %xmm3
10331; SSE2-NEXT:    pxor %xmm1, %xmm2
10332; SSE2-NEXT:    movdqa %xmm2, %xmm4
10333; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10334; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10335; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10336; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10337; SSE2-NEXT:    pand %xmm5, %xmm2
10338; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10339; SSE2-NEXT:    por %xmm2, %xmm3
10340; SSE2-NEXT:    pand %xmm3, %xmm0
10341; SSE2-NEXT:    pandn %xmm1, %xmm3
10342; SSE2-NEXT:    por %xmm3, %xmm0
10343; SSE2-NEXT:    retq
10344;
10345; SSE4-LABEL: test181:
10346; SSE4:       # BB#0: # %entry
10347; SSE4-NEXT:    movdqa %xmm0, %xmm2
10348; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10349; SSE4-NEXT:    movdqa %xmm2, %xmm3
10350; SSE4-NEXT:    pxor %xmm0, %xmm3
10351; SSE4-NEXT:    pxor %xmm1, %xmm0
10352; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10353; SSE4-NEXT:    blendvpd %xmm2, %xmm1
10354; SSE4-NEXT:    movapd %xmm1, %xmm0
10355; SSE4-NEXT:    retq
10356;
10357; AVX1-LABEL: test181:
10358; AVX1:       # BB#0: # %entry
10359; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10360; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10361; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10362; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10363; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10364; AVX1-NEXT:    retq
10365;
10366; AVX2-LABEL: test181:
10367; AVX2:       # BB#0: # %entry
10368; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10369; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10370; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10371; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10372; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10373; AVX2-NEXT:    retq
10374;
10375; AVX512BW-LABEL: test181:
10376; AVX512BW:       # BB#0: # %entry
10377; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10378; AVX512BW-NEXT:    retq
10379entry:
10380  %cmp = icmp ult <2 x i64> %a, %b
10381  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10382  ret <2 x i64> %sel
10383}
10384
10385define <2 x i64> @test182(<2 x i64> %a, <2 x i64> %b) {
10386; SSE2-LABEL: test182:
10387; SSE2:       # BB#0: # %entry
10388; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10389; SSE2-NEXT:    movdqa %xmm1, %xmm3
10390; SSE2-NEXT:    pxor %xmm2, %xmm3
10391; SSE2-NEXT:    pxor %xmm0, %xmm2
10392; SSE2-NEXT:    movdqa %xmm2, %xmm4
10393; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10394; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10395; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10396; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10397; SSE2-NEXT:    pand %xmm5, %xmm2
10398; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10399; SSE2-NEXT:    por %xmm2, %xmm3
10400; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
10401; SSE2-NEXT:    pxor %xmm3, %xmm2
10402; SSE2-NEXT:    pandn %xmm0, %xmm3
10403; SSE2-NEXT:    pandn %xmm1, %xmm2
10404; SSE2-NEXT:    por %xmm3, %xmm2
10405; SSE2-NEXT:    movdqa %xmm2, %xmm0
10406; SSE2-NEXT:    retq
10407;
10408; SSE4-LABEL: test182:
10409; SSE4:       # BB#0: # %entry
10410; SSE4-NEXT:    movdqa %xmm0, %xmm2
10411; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10412; SSE4-NEXT:    movdqa %xmm1, %xmm0
10413; SSE4-NEXT:    pxor %xmm3, %xmm0
10414; SSE4-NEXT:    pxor %xmm2, %xmm3
10415; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
10416; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
10417; SSE4-NEXT:    pxor %xmm3, %xmm0
10418; SSE4-NEXT:    blendvpd %xmm2, %xmm1
10419; SSE4-NEXT:    movapd %xmm1, %xmm0
10420; SSE4-NEXT:    retq
10421;
10422; AVX1-LABEL: test182:
10423; AVX1:       # BB#0: # %entry
10424; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10425; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10426; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10427; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10428; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10429; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10430; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10431; AVX1-NEXT:    retq
10432;
10433; AVX2-LABEL: test182:
10434; AVX2:       # BB#0: # %entry
10435; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10436; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10437; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10438; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10439; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10440; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10441; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10442; AVX2-NEXT:    retq
10443;
10444; AVX512BW-LABEL: test182:
10445; AVX512BW:       # BB#0: # %entry
10446; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10447; AVX512BW-NEXT:    retq
10448entry:
10449  %cmp = icmp ule <2 x i64> %a, %b
10450  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10451  ret <2 x i64> %sel
10452}
10453
10454define <2 x i64> @test183(<2 x i64> %a, <2 x i64> %b) {
10455; SSE2-LABEL: test183:
10456; SSE2:       # BB#0: # %entry
10457; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10458; SSE2-NEXT:    movdqa %xmm1, %xmm3
10459; SSE2-NEXT:    pxor %xmm2, %xmm3
10460; SSE2-NEXT:    pxor %xmm0, %xmm2
10461; SSE2-NEXT:    movdqa %xmm2, %xmm4
10462; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10463; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10464; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10465; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10466; SSE2-NEXT:    pand %xmm5, %xmm2
10467; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10468; SSE2-NEXT:    por %xmm2, %xmm3
10469; SSE2-NEXT:    pand %xmm3, %xmm0
10470; SSE2-NEXT:    pandn %xmm1, %xmm3
10471; SSE2-NEXT:    por %xmm3, %xmm0
10472; SSE2-NEXT:    retq
10473;
10474; SSE4-LABEL: test183:
10475; SSE4:       # BB#0: # %entry
10476; SSE4-NEXT:    movdqa %xmm0, %xmm2
10477; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10478; SSE4-NEXT:    movdqa %xmm1, %xmm3
10479; SSE4-NEXT:    pxor %xmm0, %xmm3
10480; SSE4-NEXT:    pxor %xmm2, %xmm0
10481; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10482; SSE4-NEXT:    blendvpd %xmm2, %xmm1
10483; SSE4-NEXT:    movapd %xmm1, %xmm0
10484; SSE4-NEXT:    retq
10485;
10486; AVX1-LABEL: test183:
10487; AVX1:       # BB#0: # %entry
10488; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10489; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10490; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10491; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10492; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10493; AVX1-NEXT:    retq
10494;
10495; AVX2-LABEL: test183:
10496; AVX2:       # BB#0: # %entry
10497; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10498; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10499; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10500; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10501; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10502; AVX2-NEXT:    retq
10503;
10504; AVX512BW-LABEL: test183:
10505; AVX512BW:       # BB#0: # %entry
10506; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10507; AVX512BW-NEXT:    retq
10508entry:
10509  %cmp = icmp ugt <2 x i64> %a, %b
10510  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10511  ret <2 x i64> %sel
10512}
10513
10514define <2 x i64> @test184(<2 x i64> %a, <2 x i64> %b) {
10515; SSE2-LABEL: test184:
10516; SSE2:       # BB#0: # %entry
10517; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10518; SSE2-NEXT:    movdqa %xmm0, %xmm3
10519; SSE2-NEXT:    pxor %xmm2, %xmm3
10520; SSE2-NEXT:    pxor %xmm1, %xmm2
10521; SSE2-NEXT:    movdqa %xmm2, %xmm4
10522; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10523; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10524; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10525; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10526; SSE2-NEXT:    pand %xmm5, %xmm2
10527; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10528; SSE2-NEXT:    por %xmm2, %xmm3
10529; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
10530; SSE2-NEXT:    pxor %xmm3, %xmm2
10531; SSE2-NEXT:    pandn %xmm0, %xmm3
10532; SSE2-NEXT:    pandn %xmm1, %xmm2
10533; SSE2-NEXT:    por %xmm3, %xmm2
10534; SSE2-NEXT:    movdqa %xmm2, %xmm0
10535; SSE2-NEXT:    retq
10536;
10537; SSE4-LABEL: test184:
10538; SSE4:       # BB#0: # %entry
10539; SSE4-NEXT:    movdqa %xmm0, %xmm2
10540; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10541; SSE4-NEXT:    pxor %xmm3, %xmm0
10542; SSE4-NEXT:    pxor %xmm1, %xmm3
10543; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
10544; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
10545; SSE4-NEXT:    pxor %xmm3, %xmm0
10546; SSE4-NEXT:    blendvpd %xmm2, %xmm1
10547; SSE4-NEXT:    movapd %xmm1, %xmm0
10548; SSE4-NEXT:    retq
10549;
10550; AVX1-LABEL: test184:
10551; AVX1:       # BB#0: # %entry
10552; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10553; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10554; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10555; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10556; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10557; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10558; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10559; AVX1-NEXT:    retq
10560;
10561; AVX2-LABEL: test184:
10562; AVX2:       # BB#0: # %entry
10563; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10564; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10565; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10566; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10567; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10568; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10569; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
10570; AVX2-NEXT:    retq
10571;
10572; AVX512BW-LABEL: test184:
10573; AVX512BW:       # BB#0: # %entry
10574; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10575; AVX512BW-NEXT:    retq
10576entry:
10577  %cmp = icmp uge <2 x i64> %a, %b
10578  %sel = select <2 x i1> %cmp, <2 x i64> %a, <2 x i64> %b
10579  ret <2 x i64> %sel
10580}
10581
10582define <2 x i64> @test185(<2 x i64> %a, <2 x i64> %b) {
10583; SSE2-LABEL: test185:
10584; SSE2:       # BB#0: # %entry
10585; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10586; SSE2-NEXT:    movdqa %xmm0, %xmm3
10587; SSE2-NEXT:    pxor %xmm2, %xmm3
10588; SSE2-NEXT:    pxor %xmm1, %xmm2
10589; SSE2-NEXT:    movdqa %xmm2, %xmm4
10590; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10591; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10592; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10593; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
10594; SSE2-NEXT:    pand %xmm5, %xmm3
10595; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
10596; SSE2-NEXT:    por %xmm3, %xmm2
10597; SSE2-NEXT:    pand %xmm2, %xmm1
10598; SSE2-NEXT:    pandn %xmm0, %xmm2
10599; SSE2-NEXT:    por %xmm1, %xmm2
10600; SSE2-NEXT:    movdqa %xmm2, %xmm0
10601; SSE2-NEXT:    retq
10602;
10603; SSE4-LABEL: test185:
10604; SSE4:       # BB#0: # %entry
10605; SSE4-NEXT:    movdqa %xmm0, %xmm2
10606; SSE4-NEXT:    movdqa %xmm1, %xmm0
10607; SSE4-NEXT:    pcmpgtq %xmm2, %xmm0
10608; SSE4-NEXT:    blendvpd %xmm1, %xmm2
10609; SSE4-NEXT:    movapd %xmm2, %xmm0
10610; SSE4-NEXT:    retq
10611;
10612; AVX1-LABEL: test185:
10613; AVX1:       # BB#0: # %entry
10614; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10615; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10616; AVX1-NEXT:    retq
10617;
10618; AVX2-LABEL: test185:
10619; AVX2:       # BB#0: # %entry
10620; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10621; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10622; AVX2-NEXT:    retq
10623;
10624; AVX512BW-LABEL: test185:
10625; AVX512BW:       # BB#0: # %entry
10626; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
10627; AVX512BW-NEXT:    retq
10628entry:
10629  %cmp = icmp slt <2 x i64> %a, %b
10630  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10631  ret <2 x i64> %sel
10632}
10633
10634define <2 x i64> @test186(<2 x i64> %a, <2 x i64> %b) {
10635; SSE2-LABEL: test186:
10636; SSE2:       # BB#0: # %entry
10637; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10638; SSE2-NEXT:    movdqa %xmm1, %xmm3
10639; SSE2-NEXT:    pxor %xmm2, %xmm3
10640; SSE2-NEXT:    pxor %xmm0, %xmm2
10641; SSE2-NEXT:    movdqa %xmm2, %xmm4
10642; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10643; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10644; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10645; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10646; SSE2-NEXT:    pand %xmm5, %xmm2
10647; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10648; SSE2-NEXT:    por %xmm2, %xmm3
10649; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
10650; SSE2-NEXT:    pxor %xmm3, %xmm2
10651; SSE2-NEXT:    pandn %xmm1, %xmm3
10652; SSE2-NEXT:    pandn %xmm0, %xmm2
10653; SSE2-NEXT:    por %xmm3, %xmm2
10654; SSE2-NEXT:    movdqa %xmm2, %xmm0
10655; SSE2-NEXT:    retq
10656;
10657; SSE4-LABEL: test186:
10658; SSE4:       # BB#0: # %entry
10659; SSE4-NEXT:    movdqa %xmm0, %xmm2
10660; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
10661; SSE4-NEXT:    pcmpeqd %xmm3, %xmm3
10662; SSE4-NEXT:    pxor %xmm3, %xmm0
10663; SSE4-NEXT:    blendvpd %xmm1, %xmm2
10664; SSE4-NEXT:    movapd %xmm2, %xmm0
10665; SSE4-NEXT:    retq
10666;
10667; AVX1-LABEL: test186:
10668; AVX1:       # BB#0: # %entry
10669; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10670; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10671; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10672; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10673; AVX1-NEXT:    retq
10674;
10675; AVX2-LABEL: test186:
10676; AVX2:       # BB#0: # %entry
10677; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10678; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10679; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10680; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10681; AVX2-NEXT:    retq
10682;
10683; AVX512BW-LABEL: test186:
10684; AVX512BW:       # BB#0: # %entry
10685; AVX512BW-NEXT:    vpmaxsq %xmm1, %xmm0, %xmm0
10686; AVX512BW-NEXT:    retq
10687entry:
10688  %cmp = icmp sle <2 x i64> %a, %b
10689  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10690  ret <2 x i64> %sel
10691}
10692
10693define <2 x i64> @test187(<2 x i64> %a, <2 x i64> %b) {
10694; SSE2-LABEL: test187:
10695; SSE2:       # BB#0: # %entry
10696; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10697; SSE2-NEXT:    movdqa %xmm1, %xmm3
10698; SSE2-NEXT:    pxor %xmm2, %xmm3
10699; SSE2-NEXT:    pxor %xmm0, %xmm2
10700; SSE2-NEXT:    movdqa %xmm2, %xmm4
10701; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10702; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10703; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10704; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
10705; SSE2-NEXT:    pand %xmm5, %xmm3
10706; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
10707; SSE2-NEXT:    por %xmm3, %xmm2
10708; SSE2-NEXT:    pand %xmm2, %xmm1
10709; SSE2-NEXT:    pandn %xmm0, %xmm2
10710; SSE2-NEXT:    por %xmm1, %xmm2
10711; SSE2-NEXT:    movdqa %xmm2, %xmm0
10712; SSE2-NEXT:    retq
10713;
10714; SSE4-LABEL: test187:
10715; SSE4:       # BB#0: # %entry
10716; SSE4-NEXT:    movdqa %xmm0, %xmm2
10717; SSE4-NEXT:    pcmpgtq %xmm1, %xmm0
10718; SSE4-NEXT:    blendvpd %xmm1, %xmm2
10719; SSE4-NEXT:    movapd %xmm2, %xmm0
10720; SSE4-NEXT:    retq
10721;
10722; AVX1-LABEL: test187:
10723; AVX1:       # BB#0: # %entry
10724; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10725; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10726; AVX1-NEXT:    retq
10727;
10728; AVX2-LABEL: test187:
10729; AVX2:       # BB#0: # %entry
10730; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
10731; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10732; AVX2-NEXT:    retq
10733;
10734; AVX512BW-LABEL: test187:
10735; AVX512BW:       # BB#0: # %entry
10736; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
10737; AVX512BW-NEXT:    retq
10738entry:
10739  %cmp = icmp sgt <2 x i64> %a, %b
10740  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10741  ret <2 x i64> %sel
10742}
10743
10744define <2 x i64> @test188(<2 x i64> %a, <2 x i64> %b) {
10745; SSE2-LABEL: test188:
10746; SSE2:       # BB#0: # %entry
10747; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
10748; SSE2-NEXT:    movdqa %xmm0, %xmm3
10749; SSE2-NEXT:    pxor %xmm2, %xmm3
10750; SSE2-NEXT:    pxor %xmm1, %xmm2
10751; SSE2-NEXT:    movdqa %xmm2, %xmm4
10752; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10753; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10754; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10755; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10756; SSE2-NEXT:    pand %xmm5, %xmm2
10757; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10758; SSE2-NEXT:    por %xmm2, %xmm3
10759; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
10760; SSE2-NEXT:    pxor %xmm3, %xmm2
10761; SSE2-NEXT:    pandn %xmm1, %xmm3
10762; SSE2-NEXT:    pandn %xmm0, %xmm2
10763; SSE2-NEXT:    por %xmm3, %xmm2
10764; SSE2-NEXT:    movdqa %xmm2, %xmm0
10765; SSE2-NEXT:    retq
10766;
10767; SSE4-LABEL: test188:
10768; SSE4:       # BB#0: # %entry
10769; SSE4-NEXT:    movdqa %xmm0, %xmm2
10770; SSE4-NEXT:    movdqa %xmm1, %xmm3
10771; SSE4-NEXT:    pcmpgtq %xmm2, %xmm3
10772; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
10773; SSE4-NEXT:    pxor %xmm3, %xmm0
10774; SSE4-NEXT:    blendvpd %xmm1, %xmm2
10775; SSE4-NEXT:    movapd %xmm2, %xmm0
10776; SSE4-NEXT:    retq
10777;
10778; AVX1-LABEL: test188:
10779; AVX1:       # BB#0: # %entry
10780; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10781; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10782; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10783; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10784; AVX1-NEXT:    retq
10785;
10786; AVX2-LABEL: test188:
10787; AVX2:       # BB#0: # %entry
10788; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm2
10789; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10790; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10791; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10792; AVX2-NEXT:    retq
10793;
10794; AVX512BW-LABEL: test188:
10795; AVX512BW:       # BB#0: # %entry
10796; AVX512BW-NEXT:    vpminsq %xmm1, %xmm0, %xmm0
10797; AVX512BW-NEXT:    retq
10798entry:
10799  %cmp = icmp sge <2 x i64> %a, %b
10800  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10801  ret <2 x i64> %sel
10802}
10803
10804define <2 x i64> @test189(<2 x i64> %a, <2 x i64> %b) {
10805; SSE2-LABEL: test189:
10806; SSE2:       # BB#0: # %entry
10807; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10808; SSE2-NEXT:    movdqa %xmm0, %xmm3
10809; SSE2-NEXT:    pxor %xmm2, %xmm3
10810; SSE2-NEXT:    pxor %xmm1, %xmm2
10811; SSE2-NEXT:    movdqa %xmm2, %xmm4
10812; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10813; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10814; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10815; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
10816; SSE2-NEXT:    pand %xmm5, %xmm3
10817; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
10818; SSE2-NEXT:    por %xmm3, %xmm2
10819; SSE2-NEXT:    pand %xmm2, %xmm1
10820; SSE2-NEXT:    pandn %xmm0, %xmm2
10821; SSE2-NEXT:    por %xmm1, %xmm2
10822; SSE2-NEXT:    movdqa %xmm2, %xmm0
10823; SSE2-NEXT:    retq
10824;
10825; SSE4-LABEL: test189:
10826; SSE4:       # BB#0: # %entry
10827; SSE4-NEXT:    movdqa %xmm0, %xmm2
10828; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10829; SSE4-NEXT:    movdqa %xmm2, %xmm3
10830; SSE4-NEXT:    pxor %xmm0, %xmm3
10831; SSE4-NEXT:    pxor %xmm1, %xmm0
10832; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10833; SSE4-NEXT:    blendvpd %xmm1, %xmm2
10834; SSE4-NEXT:    movapd %xmm2, %xmm0
10835; SSE4-NEXT:    retq
10836;
10837; AVX1-LABEL: test189:
10838; AVX1:       # BB#0: # %entry
10839; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10840; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10841; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10842; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10843; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10844; AVX1-NEXT:    retq
10845;
10846; AVX2-LABEL: test189:
10847; AVX2:       # BB#0: # %entry
10848; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10849; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
10850; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
10851; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10852; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10853; AVX2-NEXT:    retq
10854;
10855; AVX512BW-LABEL: test189:
10856; AVX512BW:       # BB#0: # %entry
10857; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10858; AVX512BW-NEXT:    retq
10859entry:
10860  %cmp = icmp ult <2 x i64> %a, %b
10861  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10862  ret <2 x i64> %sel
10863}
10864
10865define <2 x i64> @test190(<2 x i64> %a, <2 x i64> %b) {
10866; SSE2-LABEL: test190:
10867; SSE2:       # BB#0: # %entry
10868; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10869; SSE2-NEXT:    movdqa %xmm1, %xmm3
10870; SSE2-NEXT:    pxor %xmm2, %xmm3
10871; SSE2-NEXT:    pxor %xmm0, %xmm2
10872; SSE2-NEXT:    movdqa %xmm2, %xmm4
10873; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10874; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10875; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10876; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
10877; SSE2-NEXT:    pand %xmm5, %xmm2
10878; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
10879; SSE2-NEXT:    por %xmm2, %xmm3
10880; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
10881; SSE2-NEXT:    pxor %xmm3, %xmm2
10882; SSE2-NEXT:    pandn %xmm1, %xmm3
10883; SSE2-NEXT:    pandn %xmm0, %xmm2
10884; SSE2-NEXT:    por %xmm3, %xmm2
10885; SSE2-NEXT:    movdqa %xmm2, %xmm0
10886; SSE2-NEXT:    retq
10887;
10888; SSE4-LABEL: test190:
10889; SSE4:       # BB#0: # %entry
10890; SSE4-NEXT:    movdqa %xmm0, %xmm2
10891; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
10892; SSE4-NEXT:    movdqa %xmm1, %xmm0
10893; SSE4-NEXT:    pxor %xmm3, %xmm0
10894; SSE4-NEXT:    pxor %xmm2, %xmm3
10895; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
10896; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
10897; SSE4-NEXT:    pxor %xmm3, %xmm0
10898; SSE4-NEXT:    blendvpd %xmm1, %xmm2
10899; SSE4-NEXT:    movapd %xmm2, %xmm0
10900; SSE4-NEXT:    retq
10901;
10902; AVX1-LABEL: test190:
10903; AVX1:       # BB#0: # %entry
10904; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10905; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10906; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10907; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10908; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10909; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10910; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10911; AVX1-NEXT:    retq
10912;
10913; AVX2-LABEL: test190:
10914; AVX2:       # BB#0: # %entry
10915; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10916; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10917; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10918; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10919; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
10920; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
10921; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10922; AVX2-NEXT:    retq
10923;
10924; AVX512BW-LABEL: test190:
10925; AVX512BW:       # BB#0: # %entry
10926; AVX512BW-NEXT:    vpmaxuq %xmm1, %xmm0, %xmm0
10927; AVX512BW-NEXT:    retq
10928entry:
10929  %cmp = icmp ule <2 x i64> %a, %b
10930  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10931  ret <2 x i64> %sel
10932}
10933
10934define <2 x i64> @test191(<2 x i64> %a, <2 x i64> %b) {
10935; SSE2-LABEL: test191:
10936; SSE2:       # BB#0: # %entry
10937; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10938; SSE2-NEXT:    movdqa %xmm1, %xmm3
10939; SSE2-NEXT:    pxor %xmm2, %xmm3
10940; SSE2-NEXT:    pxor %xmm0, %xmm2
10941; SSE2-NEXT:    movdqa %xmm2, %xmm4
10942; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
10943; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
10944; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
10945; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[1,1,3,3]
10946; SSE2-NEXT:    pand %xmm5, %xmm3
10947; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
10948; SSE2-NEXT:    por %xmm3, %xmm2
10949; SSE2-NEXT:    pand %xmm2, %xmm1
10950; SSE2-NEXT:    pandn %xmm0, %xmm2
10951; SSE2-NEXT:    por %xmm1, %xmm2
10952; SSE2-NEXT:    movdqa %xmm2, %xmm0
10953; SSE2-NEXT:    retq
10954;
10955; SSE4-LABEL: test191:
10956; SSE4:       # BB#0: # %entry
10957; SSE4-NEXT:    movdqa %xmm0, %xmm2
10958; SSE4-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
10959; SSE4-NEXT:    movdqa %xmm1, %xmm3
10960; SSE4-NEXT:    pxor %xmm0, %xmm3
10961; SSE4-NEXT:    pxor %xmm2, %xmm0
10962; SSE4-NEXT:    pcmpgtq %xmm3, %xmm0
10963; SSE4-NEXT:    blendvpd %xmm1, %xmm2
10964; SSE4-NEXT:    movapd %xmm2, %xmm0
10965; SSE4-NEXT:    retq
10966;
10967; AVX1-LABEL: test191:
10968; AVX1:       # BB#0: # %entry
10969; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10970; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10971; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10972; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10973; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10974; AVX1-NEXT:    retq
10975;
10976; AVX2-LABEL: test191:
10977; AVX2:       # BB#0: # %entry
10978; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
10979; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
10980; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
10981; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
10982; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
10983; AVX2-NEXT:    retq
10984;
10985; AVX512BW-LABEL: test191:
10986; AVX512BW:       # BB#0: # %entry
10987; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
10988; AVX512BW-NEXT:    retq
10989entry:
10990  %cmp = icmp ugt <2 x i64> %a, %b
10991  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
10992  ret <2 x i64> %sel
10993}
10994
10995define <2 x i64> @test192(<2 x i64> %a, <2 x i64> %b) {
10996; SSE2-LABEL: test192:
10997; SSE2:       # BB#0: # %entry
10998; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
10999; SSE2-NEXT:    movdqa %xmm0, %xmm3
11000; SSE2-NEXT:    pxor %xmm2, %xmm3
11001; SSE2-NEXT:    pxor %xmm1, %xmm2
11002; SSE2-NEXT:    movdqa %xmm2, %xmm4
11003; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
11004; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
11005; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
11006; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
11007; SSE2-NEXT:    pand %xmm5, %xmm2
11008; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
11009; SSE2-NEXT:    por %xmm2, %xmm3
11010; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
11011; SSE2-NEXT:    pxor %xmm3, %xmm2
11012; SSE2-NEXT:    pandn %xmm1, %xmm3
11013; SSE2-NEXT:    pandn %xmm0, %xmm2
11014; SSE2-NEXT:    por %xmm3, %xmm2
11015; SSE2-NEXT:    movdqa %xmm2, %xmm0
11016; SSE2-NEXT:    retq
11017;
11018; SSE4-LABEL: test192:
11019; SSE4:       # BB#0: # %entry
11020; SSE4-NEXT:    movdqa %xmm0, %xmm2
11021; SSE4-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
11022; SSE4-NEXT:    pxor %xmm3, %xmm0
11023; SSE4-NEXT:    pxor %xmm1, %xmm3
11024; SSE4-NEXT:    pcmpgtq %xmm0, %xmm3
11025; SSE4-NEXT:    pcmpeqd %xmm0, %xmm0
11026; SSE4-NEXT:    pxor %xmm3, %xmm0
11027; SSE4-NEXT:    blendvpd %xmm1, %xmm2
11028; SSE4-NEXT:    movapd %xmm2, %xmm0
11029; SSE4-NEXT:    retq
11030;
11031; AVX1-LABEL: test192:
11032; AVX1:       # BB#0: # %entry
11033; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
11034; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
11035; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
11036; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
11037; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
11038; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
11039; AVX1-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
11040; AVX1-NEXT:    retq
11041;
11042; AVX2-LABEL: test192:
11043; AVX2:       # BB#0: # %entry
11044; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
11045; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
11046; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
11047; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
11048; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
11049; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
11050; AVX2-NEXT:    vblendvpd %xmm2, %xmm1, %xmm0, %xmm0
11051; AVX2-NEXT:    retq
11052;
11053; AVX512BW-LABEL: test192:
11054; AVX512BW:       # BB#0: # %entry
11055; AVX512BW-NEXT:    vpminuq %xmm1, %xmm0, %xmm0
11056; AVX512BW-NEXT:    retq
11057entry:
11058  %cmp = icmp uge <2 x i64> %a, %b
11059  %sel = select <2 x i1> %cmp, <2 x i64> %b, <2 x i64> %a
11060  ret <2 x i64> %sel
11061}
11062