[X86] Allow VPMAXUQ/VPMAXSQ/VPMINUQ/VPMINSQ to be used with 128/256 bit vectors when...
[llvm-complete.git] / test / CodeGen / X86 / vec_minmax_uint.ll
blob9782384ebe112323ed783c204269e93141592ade
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=ALL --check-prefix=SSE --check-prefix=SSE2
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE42
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
11 ; Unsigned Maximum (GT)
14 define <2 x i64> @max_gt_v2i64(<2 x i64> %a, <2 x i64> %b) {
15 ; SSE2-LABEL: max_gt_v2i64:
16 ; SSE2:       # BB#0:
17 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
18 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
19 ; SSE2-NEXT:    pxor %xmm2, %xmm3
20 ; SSE2-NEXT:    pxor %xmm0, %xmm2
21 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
22 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
23 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
24 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
25 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
26 ; SSE2-NEXT:    pand %xmm5, %xmm2
27 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
28 ; SSE2-NEXT:    por %xmm2, %xmm3
29 ; SSE2-NEXT:    pand %xmm3, %xmm0
30 ; SSE2-NEXT:    pandn %xmm1, %xmm3
31 ; SSE2-NEXT:    por %xmm3, %xmm0
32 ; SSE2-NEXT:    retq
34 ; SSE41-LABEL: max_gt_v2i64:
35 ; SSE41:       # BB#0:
36 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
37 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
38 ; SSE41-NEXT:    movdqa %xmm1, %xmm3
39 ; SSE41-NEXT:    pxor %xmm0, %xmm3
40 ; SSE41-NEXT:    pxor %xmm2, %xmm0
41 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
42 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
43 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
44 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm0
45 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
46 ; SSE41-NEXT:    pand %xmm5, %xmm3
47 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
48 ; SSE41-NEXT:    por %xmm3, %xmm0
49 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
50 ; SSE41-NEXT:    movapd %xmm1, %xmm0
51 ; SSE41-NEXT:    retq
53 ; SSE42-LABEL: max_gt_v2i64:
54 ; SSE42:       # BB#0:
55 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
56 ; SSE42-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
57 ; SSE42-NEXT:    movdqa %xmm1, %xmm3
58 ; SSE42-NEXT:    pxor %xmm0, %xmm3
59 ; SSE42-NEXT:    pxor %xmm2, %xmm0
60 ; SSE42-NEXT:    pcmpgtq %xmm3, %xmm0
61 ; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
62 ; SSE42-NEXT:    movapd %xmm1, %xmm0
63 ; SSE42-NEXT:    retq
65 ; AVX1-LABEL: max_gt_v2i64:
66 ; AVX1:       # BB#0:
67 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
68 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
69 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
70 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
71 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
72 ; AVX1-NEXT:    retq
74 ; AVX2-LABEL: max_gt_v2i64:
75 ; AVX2:       # BB#0:
76 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
77 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
78 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
79 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
80 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
81 ; AVX2-NEXT:    retq
83 ; AVX512-LABEL: max_gt_v2i64:
84 ; AVX512:       # BB#0:
85 ; AVX512-NEXT:    # kill: %xmm1<def> %xmm1<kill> %zmm1<def>
86 ; AVX512-NEXT:    # kill: %xmm0<def> %xmm0<kill> %zmm0<def>
87 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
88 ; AVX512-NEXT:    # kill: %xmm0<def> %xmm0<kill> %zmm0<kill>
89 ; AVX512-NEXT:    vzeroupper
90 ; AVX512-NEXT:    retq
91   %1 = icmp ugt <2 x i64> %a, %b
92   %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
93   ret <2 x i64> %2
96 define <4 x i64> @max_gt_v4i64(<4 x i64> %a, <4 x i64> %b) {
97 ; SSE2-LABEL: max_gt_v4i64:
98 ; SSE2:       # BB#0:
99 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
100 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
101 ; SSE2-NEXT:    pxor %xmm4, %xmm5
102 ; SSE2-NEXT:    movdqa %xmm1, %xmm6
103 ; SSE2-NEXT:    pxor %xmm4, %xmm6
104 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
105 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
106 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
107 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
108 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
109 ; SSE2-NEXT:    pand %xmm8, %xmm5
110 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
111 ; SSE2-NEXT:    por %xmm5, %xmm6
112 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
113 ; SSE2-NEXT:    pxor %xmm4, %xmm5
114 ; SSE2-NEXT:    pxor %xmm0, %xmm4
115 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
116 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
117 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
118 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
119 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
120 ; SSE2-NEXT:    pand %xmm8, %xmm4
121 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
122 ; SSE2-NEXT:    por %xmm4, %xmm5
123 ; SSE2-NEXT:    pand %xmm5, %xmm0
124 ; SSE2-NEXT:    pandn %xmm2, %xmm5
125 ; SSE2-NEXT:    por %xmm5, %xmm0
126 ; SSE2-NEXT:    pand %xmm6, %xmm1
127 ; SSE2-NEXT:    pandn %xmm3, %xmm6
128 ; SSE2-NEXT:    por %xmm6, %xmm1
129 ; SSE2-NEXT:    retq
131 ; SSE41-LABEL: max_gt_v4i64:
132 ; SSE41:       # BB#0:
133 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
134 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
135 ; SSE41-NEXT:    movdqa %xmm3, %xmm5
136 ; SSE41-NEXT:    pxor %xmm0, %xmm5
137 ; SSE41-NEXT:    movdqa %xmm1, %xmm6
138 ; SSE41-NEXT:    pxor %xmm0, %xmm6
139 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
140 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm7
141 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
142 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm6
143 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
144 ; SSE41-NEXT:    pand %xmm4, %xmm6
145 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
146 ; SSE41-NEXT:    por %xmm6, %xmm5
147 ; SSE41-NEXT:    movdqa %xmm2, %xmm4
148 ; SSE41-NEXT:    pxor %xmm0, %xmm4
149 ; SSE41-NEXT:    pxor %xmm8, %xmm0
150 ; SSE41-NEXT:    movdqa %xmm0, %xmm6
151 ; SSE41-NEXT:    pcmpgtd %xmm4, %xmm6
152 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
153 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
154 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
155 ; SSE41-NEXT:    pand %xmm7, %xmm4
156 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
157 ; SSE41-NEXT:    por %xmm4, %xmm0
158 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm2
159 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
160 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
161 ; SSE41-NEXT:    movapd %xmm2, %xmm0
162 ; SSE41-NEXT:    movapd %xmm3, %xmm1
163 ; SSE41-NEXT:    retq
165 ; SSE42-LABEL: max_gt_v4i64:
166 ; SSE42:       # BB#0:
167 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
168 ; SSE42-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
169 ; SSE42-NEXT:    movdqa %xmm3, %xmm6
170 ; SSE42-NEXT:    pxor %xmm0, %xmm6
171 ; SSE42-NEXT:    movdqa %xmm1, %xmm5
172 ; SSE42-NEXT:    pxor %xmm0, %xmm5
173 ; SSE42-NEXT:    pcmpgtq %xmm6, %xmm5
174 ; SSE42-NEXT:    movdqa %xmm2, %xmm6
175 ; SSE42-NEXT:    pxor %xmm0, %xmm6
176 ; SSE42-NEXT:    pxor %xmm4, %xmm0
177 ; SSE42-NEXT:    pcmpgtq %xmm6, %xmm0
178 ; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
179 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
180 ; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
181 ; SSE42-NEXT:    movapd %xmm2, %xmm0
182 ; SSE42-NEXT:    movapd %xmm3, %xmm1
183 ; SSE42-NEXT:    retq
185 ; AVX1-LABEL: max_gt_v4i64:
186 ; AVX1:       # BB#0:
187 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
188 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
189 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
190 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
191 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
192 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
193 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm4
194 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
195 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
196 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
197 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
198 ; AVX1-NEXT:    retq
200 ; AVX2-LABEL: max_gt_v4i64:
201 ; AVX2:       # BB#0:
202 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
203 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
204 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
205 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
206 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
207 ; AVX2-NEXT:    retq
209 ; AVX512-LABEL: max_gt_v4i64:
210 ; AVX512:       # BB#0:
211 ; AVX512-NEXT:    # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
212 ; AVX512-NEXT:    # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
213 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
214 ; AVX512-NEXT:    # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
215 ; AVX512-NEXT:    retq
216   %1 = icmp ugt <4 x i64> %a, %b
217   %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
218   ret <4 x i64> %2
221 define <4 x i32> @max_gt_v4i32(<4 x i32> %a, <4 x i32> %b) {
222 ; SSE2-LABEL: max_gt_v4i32:
223 ; SSE2:       # BB#0:
224 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
225 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
226 ; SSE2-NEXT:    pxor %xmm2, %xmm3
227 ; SSE2-NEXT:    pxor %xmm0, %xmm2
228 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
229 ; SSE2-NEXT:    pand %xmm2, %xmm0
230 ; SSE2-NEXT:    pandn %xmm1, %xmm2
231 ; SSE2-NEXT:    por %xmm2, %xmm0
232 ; SSE2-NEXT:    retq
234 ; SSE41-LABEL: max_gt_v4i32:
235 ; SSE41:       # BB#0:
236 ; SSE41-NEXT:    pmaxud %xmm1, %xmm0
237 ; SSE41-NEXT:    retq
239 ; SSE42-LABEL: max_gt_v4i32:
240 ; SSE42:       # BB#0:
241 ; SSE42-NEXT:    pmaxud %xmm1, %xmm0
242 ; SSE42-NEXT:    retq
244 ; AVX-LABEL: max_gt_v4i32:
245 ; AVX:       # BB#0:
246 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
247 ; AVX-NEXT:    retq
248   %1 = icmp ugt <4 x i32> %a, %b
249   %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
250   ret <4 x i32> %2
253 define <8 x i32> @max_gt_v8i32(<8 x i32> %a, <8 x i32> %b) {
254 ; SSE2-LABEL: max_gt_v8i32:
255 ; SSE2:       # BB#0:
256 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
257 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
258 ; SSE2-NEXT:    pxor %xmm5, %xmm6
259 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
260 ; SSE2-NEXT:    pxor %xmm5, %xmm4
261 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm4
262 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
263 ; SSE2-NEXT:    pxor %xmm5, %xmm6
264 ; SSE2-NEXT:    pxor %xmm0, %xmm5
265 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
266 ; SSE2-NEXT:    pand %xmm5, %xmm0
267 ; SSE2-NEXT:    pandn %xmm2, %xmm5
268 ; SSE2-NEXT:    por %xmm5, %xmm0
269 ; SSE2-NEXT:    pand %xmm4, %xmm1
270 ; SSE2-NEXT:    pandn %xmm3, %xmm4
271 ; SSE2-NEXT:    por %xmm1, %xmm4
272 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
273 ; SSE2-NEXT:    retq
275 ; SSE41-LABEL: max_gt_v8i32:
276 ; SSE41:       # BB#0:
277 ; SSE41-NEXT:    pmaxud %xmm2, %xmm0
278 ; SSE41-NEXT:    pmaxud %xmm3, %xmm1
279 ; SSE41-NEXT:    retq
281 ; SSE42-LABEL: max_gt_v8i32:
282 ; SSE42:       # BB#0:
283 ; SSE42-NEXT:    pmaxud %xmm2, %xmm0
284 ; SSE42-NEXT:    pmaxud %xmm3, %xmm1
285 ; SSE42-NEXT:    retq
287 ; AVX1-LABEL: max_gt_v8i32:
288 ; AVX1:       # BB#0:
289 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
290 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
291 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
292 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
293 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
294 ; AVX1-NEXT:    retq
296 ; AVX2-LABEL: max_gt_v8i32:
297 ; AVX2:       # BB#0:
298 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
299 ; AVX2-NEXT:    retq
301 ; AVX512-LABEL: max_gt_v8i32:
302 ; AVX512:       # BB#0:
303 ; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
304 ; AVX512-NEXT:    retq
305   %1 = icmp ugt <8 x i32> %a, %b
306   %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
307   ret <8 x i32> %2
310 define <8 x i16> @max_gt_v8i16(<8 x i16> %a, <8 x i16> %b) {
311 ; SSE2-LABEL: max_gt_v8i16:
312 ; SSE2:       # BB#0:
313 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
314 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
315 ; SSE2-NEXT:    pxor %xmm2, %xmm3
316 ; SSE2-NEXT:    pxor %xmm0, %xmm2
317 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
318 ; SSE2-NEXT:    pand %xmm2, %xmm0
319 ; SSE2-NEXT:    pandn %xmm1, %xmm2
320 ; SSE2-NEXT:    por %xmm2, %xmm0
321 ; SSE2-NEXT:    retq
323 ; SSE41-LABEL: max_gt_v8i16:
324 ; SSE41:       # BB#0:
325 ; SSE41-NEXT:    pmaxuw %xmm1, %xmm0
326 ; SSE41-NEXT:    retq
328 ; SSE42-LABEL: max_gt_v8i16:
329 ; SSE42:       # BB#0:
330 ; SSE42-NEXT:    pmaxuw %xmm1, %xmm0
331 ; SSE42-NEXT:    retq
333 ; AVX-LABEL: max_gt_v8i16:
334 ; AVX:       # BB#0:
335 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
336 ; AVX-NEXT:    retq
337   %1 = icmp ugt <8 x i16> %a, %b
338   %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
339   ret <8 x i16> %2
342 define <16 x i16> @max_gt_v16i16(<16 x i16> %a, <16 x i16> %b) {
343 ; SSE2-LABEL: max_gt_v16i16:
344 ; SSE2:       # BB#0:
345 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
346 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
347 ; SSE2-NEXT:    pxor %xmm5, %xmm6
348 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
349 ; SSE2-NEXT:    pxor %xmm5, %xmm4
350 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm4
351 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
352 ; SSE2-NEXT:    pxor %xmm5, %xmm6
353 ; SSE2-NEXT:    pxor %xmm0, %xmm5
354 ; SSE2-NEXT:    pcmpgtw %xmm6, %xmm5
355 ; SSE2-NEXT:    pand %xmm5, %xmm0
356 ; SSE2-NEXT:    pandn %xmm2, %xmm5
357 ; SSE2-NEXT:    por %xmm5, %xmm0
358 ; SSE2-NEXT:    pand %xmm4, %xmm1
359 ; SSE2-NEXT:    pandn %xmm3, %xmm4
360 ; SSE2-NEXT:    por %xmm1, %xmm4
361 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
362 ; SSE2-NEXT:    retq
364 ; SSE41-LABEL: max_gt_v16i16:
365 ; SSE41:       # BB#0:
366 ; SSE41-NEXT:    pmaxuw %xmm2, %xmm0
367 ; SSE41-NEXT:    pmaxuw %xmm3, %xmm1
368 ; SSE41-NEXT:    retq
370 ; SSE42-LABEL: max_gt_v16i16:
371 ; SSE42:       # BB#0:
372 ; SSE42-NEXT:    pmaxuw %xmm2, %xmm0
373 ; SSE42-NEXT:    pmaxuw %xmm3, %xmm1
374 ; SSE42-NEXT:    retq
376 ; AVX1-LABEL: max_gt_v16i16:
377 ; AVX1:       # BB#0:
378 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
379 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
380 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
381 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
382 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
383 ; AVX1-NEXT:    retq
385 ; AVX2-LABEL: max_gt_v16i16:
386 ; AVX2:       # BB#0:
387 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
388 ; AVX2-NEXT:    retq
390 ; AVX512-LABEL: max_gt_v16i16:
391 ; AVX512:       # BB#0:
392 ; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
393 ; AVX512-NEXT:    retq
394   %1 = icmp ugt <16 x i16> %a, %b
395   %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
396   ret <16 x i16> %2
399 define <16 x i8> @max_gt_v16i8(<16 x i8> %a, <16 x i8> %b) {
400 ; SSE-LABEL: max_gt_v16i8:
401 ; SSE:       # BB#0:
402 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
403 ; SSE-NEXT:    retq
405 ; AVX-LABEL: max_gt_v16i8:
406 ; AVX:       # BB#0:
407 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
408 ; AVX-NEXT:    retq
409   %1 = icmp ugt <16 x i8> %a, %b
410   %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
411   ret <16 x i8> %2
414 define <32 x i8> @max_gt_v32i8(<32 x i8> %a, <32 x i8> %b) {
415 ; SSE-LABEL: max_gt_v32i8:
416 ; SSE:       # BB#0:
417 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
418 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
419 ; SSE-NEXT:    retq
421 ; AVX1-LABEL: max_gt_v32i8:
422 ; AVX1:       # BB#0:
423 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
424 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
425 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
426 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
427 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
428 ; AVX1-NEXT:    retq
430 ; AVX2-LABEL: max_gt_v32i8:
431 ; AVX2:       # BB#0:
432 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
433 ; AVX2-NEXT:    retq
435 ; AVX512-LABEL: max_gt_v32i8:
436 ; AVX512:       # BB#0:
437 ; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
438 ; AVX512-NEXT:    retq
439   %1 = icmp ugt <32 x i8> %a, %b
440   %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
441   ret <32 x i8> %2
445 ; Unsigned Maximum (GE)
448 define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) {
449 ; SSE2-LABEL: max_ge_v2i64:
450 ; SSE2:       # BB#0:
451 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
452 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
453 ; SSE2-NEXT:    pxor %xmm2, %xmm3
454 ; SSE2-NEXT:    pxor %xmm1, %xmm2
455 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
456 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
457 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
458 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
459 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
460 ; SSE2-NEXT:    pand %xmm5, %xmm2
461 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
462 ; SSE2-NEXT:    por %xmm2, %xmm3
463 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
464 ; SSE2-NEXT:    pxor %xmm3, %xmm2
465 ; SSE2-NEXT:    pandn %xmm0, %xmm3
466 ; SSE2-NEXT:    pandn %xmm1, %xmm2
467 ; SSE2-NEXT:    por %xmm3, %xmm2
468 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
469 ; SSE2-NEXT:    retq
471 ; SSE41-LABEL: max_ge_v2i64:
472 ; SSE41:       # BB#0:
473 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
474 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
475 ; SSE41-NEXT:    movdqa %xmm2, %xmm3
476 ; SSE41-NEXT:    pxor %xmm0, %xmm3
477 ; SSE41-NEXT:    pxor %xmm1, %xmm0
478 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
479 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
480 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
481 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm0
482 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
483 ; SSE41-NEXT:    pand %xmm5, %xmm0
484 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
485 ; SSE41-NEXT:    por %xmm0, %xmm3
486 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
487 ; SSE41-NEXT:    pxor %xmm3, %xmm0
488 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
489 ; SSE41-NEXT:    movapd %xmm1, %xmm0
490 ; SSE41-NEXT:    retq
492 ; SSE42-LABEL: max_ge_v2i64:
493 ; SSE42:       # BB#0:
494 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
495 ; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
496 ; SSE42-NEXT:    pxor %xmm3, %xmm0
497 ; SSE42-NEXT:    pxor %xmm1, %xmm3
498 ; SSE42-NEXT:    pcmpgtq %xmm0, %xmm3
499 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0
500 ; SSE42-NEXT:    pxor %xmm3, %xmm0
501 ; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
502 ; SSE42-NEXT:    movapd %xmm1, %xmm0
503 ; SSE42-NEXT:    retq
505 ; AVX1-LABEL: max_ge_v2i64:
506 ; AVX1:       # BB#0:
507 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
508 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
509 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
510 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
511 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
512 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
513 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
514 ; AVX1-NEXT:    retq
516 ; AVX2-LABEL: max_ge_v2i64:
517 ; AVX2:       # BB#0:
518 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
519 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
520 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
521 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
522 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
523 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
524 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
525 ; AVX2-NEXT:    retq
527 ; AVX512-LABEL: max_ge_v2i64:
528 ; AVX512:       # BB#0:
529 ; AVX512-NEXT:    # kill: %xmm1<def> %xmm1<kill> %zmm1<def>
530 ; AVX512-NEXT:    # kill: %xmm0<def> %xmm0<kill> %zmm0<def>
531 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
532 ; AVX512-NEXT:    # kill: %xmm0<def> %xmm0<kill> %zmm0<kill>
533 ; AVX512-NEXT:    vzeroupper
534 ; AVX512-NEXT:    retq
535   %1 = icmp uge <2 x i64> %a, %b
536   %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
537   ret <2 x i64> %2
540 define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) {
541 ; SSE2-LABEL: max_ge_v4i64:
542 ; SSE2:       # BB#0:
543 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
544 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
545 ; SSE2-NEXT:    pxor %xmm7, %xmm4
546 ; SSE2-NEXT:    movdqa %xmm3, %xmm5
547 ; SSE2-NEXT:    pxor %xmm7, %xmm5
548 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
549 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
550 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
551 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
552 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
553 ; SSE2-NEXT:    pand %xmm8, %xmm4
554 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
555 ; SSE2-NEXT:    por %xmm4, %xmm8
556 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
557 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
558 ; SSE2-NEXT:    pxor %xmm4, %xmm9
559 ; SSE2-NEXT:    movdqa %xmm0, %xmm6
560 ; SSE2-NEXT:    pxor %xmm7, %xmm6
561 ; SSE2-NEXT:    pxor %xmm2, %xmm7
562 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
563 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
564 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
565 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
566 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
567 ; SSE2-NEXT:    pand %xmm10, %xmm6
568 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
569 ; SSE2-NEXT:    por %xmm6, %xmm5
570 ; SSE2-NEXT:    pxor %xmm5, %xmm4
571 ; SSE2-NEXT:    pandn %xmm0, %xmm5
572 ; SSE2-NEXT:    pandn %xmm2, %xmm4
573 ; SSE2-NEXT:    por %xmm5, %xmm4
574 ; SSE2-NEXT:    pandn %xmm1, %xmm8
575 ; SSE2-NEXT:    pandn %xmm3, %xmm9
576 ; SSE2-NEXT:    por %xmm8, %xmm9
577 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
578 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
579 ; SSE2-NEXT:    retq
581 ; SSE41-LABEL: max_ge_v4i64:
582 ; SSE41:       # BB#0:
583 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
584 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
585 ; SSE41-NEXT:    movdqa %xmm1, %xmm5
586 ; SSE41-NEXT:    pxor %xmm0, %xmm5
587 ; SSE41-NEXT:    movdqa %xmm3, %xmm6
588 ; SSE41-NEXT:    pxor %xmm0, %xmm6
589 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
590 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm7
591 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
592 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm6
593 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
594 ; SSE41-NEXT:    pand %xmm4, %xmm6
595 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
596 ; SSE41-NEXT:    por %xmm6, %xmm5
597 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm9
598 ; SSE41-NEXT:    pxor %xmm9, %xmm5
599 ; SSE41-NEXT:    movdqa %xmm8, %xmm6
600 ; SSE41-NEXT:    pxor %xmm0, %xmm6
601 ; SSE41-NEXT:    pxor %xmm2, %xmm0
602 ; SSE41-NEXT:    movdqa %xmm0, %xmm7
603 ; SSE41-NEXT:    pcmpgtd %xmm6, %xmm7
604 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
605 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
606 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
607 ; SSE41-NEXT:    pand %xmm4, %xmm6
608 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
609 ; SSE41-NEXT:    por %xmm6, %xmm0
610 ; SSE41-NEXT:    pxor %xmm9, %xmm0
611 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm2
612 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
613 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
614 ; SSE41-NEXT:    movapd %xmm2, %xmm0
615 ; SSE41-NEXT:    movapd %xmm3, %xmm1
616 ; SSE41-NEXT:    retq
618 ; SSE42-LABEL: max_ge_v4i64:
619 ; SSE42:       # BB#0:
620 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
621 ; SSE42-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
622 ; SSE42-NEXT:    movdqa %xmm1, %xmm6
623 ; SSE42-NEXT:    pxor %xmm0, %xmm6
624 ; SSE42-NEXT:    movdqa %xmm3, %xmm5
625 ; SSE42-NEXT:    pxor %xmm0, %xmm5
626 ; SSE42-NEXT:    pcmpgtq %xmm6, %xmm5
627 ; SSE42-NEXT:    pcmpeqd %xmm6, %xmm6
628 ; SSE42-NEXT:    pxor %xmm6, %xmm5
629 ; SSE42-NEXT:    movdqa %xmm4, %xmm7
630 ; SSE42-NEXT:    pxor %xmm0, %xmm7
631 ; SSE42-NEXT:    pxor %xmm2, %xmm0
632 ; SSE42-NEXT:    pcmpgtq %xmm7, %xmm0
633 ; SSE42-NEXT:    pxor %xmm6, %xmm0
634 ; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
635 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
636 ; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
637 ; SSE42-NEXT:    movapd %xmm2, %xmm0
638 ; SSE42-NEXT:    movapd %xmm3, %xmm1
639 ; SSE42-NEXT:    retq
641 ; AVX1-LABEL: max_ge_v4i64:
642 ; AVX1:       # BB#0:
643 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
644 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
645 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
646 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
647 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
648 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
649 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
650 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
651 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm5
652 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
653 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
654 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
655 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
656 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
657 ; AVX1-NEXT:    retq
659 ; AVX2-LABEL: max_ge_v4i64:
660 ; AVX2:       # BB#0:
661 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
662 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
663 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
664 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
665 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
666 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
667 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
668 ; AVX2-NEXT:    retq
670 ; AVX512-LABEL: max_ge_v4i64:
671 ; AVX512:       # BB#0:
672 ; AVX512-NEXT:    # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
673 ; AVX512-NEXT:    # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
674 ; AVX512-NEXT:    vpmaxuq %zmm1, %zmm0, %zmm0
675 ; AVX512-NEXT:    # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
676 ; AVX512-NEXT:    retq
677   %1 = icmp uge <4 x i64> %a, %b
678   %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
679   ret <4 x i64> %2
682 define <4 x i32> @max_ge_v4i32(<4 x i32> %a, <4 x i32> %b) {
683 ; SSE2-LABEL: max_ge_v4i32:
684 ; SSE2:       # BB#0:
685 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
686 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
687 ; SSE2-NEXT:    pxor %xmm3, %xmm2
688 ; SSE2-NEXT:    pxor %xmm1, %xmm3
689 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
690 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
691 ; SSE2-NEXT:    pxor %xmm3, %xmm2
692 ; SSE2-NEXT:    pandn %xmm0, %xmm3
693 ; SSE2-NEXT:    pandn %xmm1, %xmm2
694 ; SSE2-NEXT:    por %xmm3, %xmm2
695 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
696 ; SSE2-NEXT:    retq
698 ; SSE41-LABEL: max_ge_v4i32:
699 ; SSE41:       # BB#0:
700 ; SSE41-NEXT:    pmaxud %xmm1, %xmm0
701 ; SSE41-NEXT:    retq
703 ; SSE42-LABEL: max_ge_v4i32:
704 ; SSE42:       # BB#0:
705 ; SSE42-NEXT:    pmaxud %xmm1, %xmm0
706 ; SSE42-NEXT:    retq
708 ; AVX-LABEL: max_ge_v4i32:
709 ; AVX:       # BB#0:
710 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
711 ; AVX-NEXT:    retq
712   %1 = icmp uge <4 x i32> %a, %b
713   %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
714   ret <4 x i32> %2
717 define <8 x i32> @max_ge_v8i32(<8 x i32> %a, <8 x i32> %b) {
718 ; SSE2-LABEL: max_ge_v8i32:
719 ; SSE2:       # BB#0:
720 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
721 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
722 ; SSE2-NEXT:    pxor %xmm6, %xmm4
723 ; SSE2-NEXT:    movdqa %xmm3, %xmm7
724 ; SSE2-NEXT:    pxor %xmm6, %xmm7
725 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
726 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
727 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
728 ; SSE2-NEXT:    pxor %xmm4, %xmm5
729 ; SSE2-NEXT:    movdqa %xmm0, %xmm8
730 ; SSE2-NEXT:    pxor %xmm6, %xmm8
731 ; SSE2-NEXT:    pxor %xmm2, %xmm6
732 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
733 ; SSE2-NEXT:    pxor %xmm6, %xmm4
734 ; SSE2-NEXT:    pandn %xmm0, %xmm6
735 ; SSE2-NEXT:    pandn %xmm2, %xmm4
736 ; SSE2-NEXT:    por %xmm6, %xmm4
737 ; SSE2-NEXT:    pandn %xmm1, %xmm7
738 ; SSE2-NEXT:    pandn %xmm3, %xmm5
739 ; SSE2-NEXT:    por %xmm7, %xmm5
740 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
741 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
742 ; SSE2-NEXT:    retq
744 ; SSE41-LABEL: max_ge_v8i32:
745 ; SSE41:       # BB#0:
746 ; SSE41-NEXT:    pmaxud %xmm2, %xmm0
747 ; SSE41-NEXT:    pmaxud %xmm3, %xmm1
748 ; SSE41-NEXT:    retq
750 ; SSE42-LABEL: max_ge_v8i32:
751 ; SSE42:       # BB#0:
752 ; SSE42-NEXT:    pmaxud %xmm2, %xmm0
753 ; SSE42-NEXT:    pmaxud %xmm3, %xmm1
754 ; SSE42-NEXT:    retq
756 ; AVX1-LABEL: max_ge_v8i32:
757 ; AVX1:       # BB#0:
758 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
759 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
760 ; AVX1-NEXT:    vpmaxud %xmm2, %xmm3, %xmm2
761 ; AVX1-NEXT:    vpmaxud %xmm1, %xmm0, %xmm0
762 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
763 ; AVX1-NEXT:    retq
765 ; AVX2-LABEL: max_ge_v8i32:
766 ; AVX2:       # BB#0:
767 ; AVX2-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
768 ; AVX2-NEXT:    retq
770 ; AVX512-LABEL: max_ge_v8i32:
771 ; AVX512:       # BB#0:
772 ; AVX512-NEXT:    vpmaxud %ymm1, %ymm0, %ymm0
773 ; AVX512-NEXT:    retq
774   %1 = icmp uge <8 x i32> %a, %b
775   %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
776   ret <8 x i32> %2
779 define <8 x i16> @max_ge_v8i16(<8 x i16> %a, <8 x i16> %b) {
780 ; SSE2-LABEL: max_ge_v8i16:
781 ; SSE2:       # BB#0:
782 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
783 ; SSE2-NEXT:    psubusw %xmm0, %xmm2
784 ; SSE2-NEXT:    pxor %xmm3, %xmm3
785 ; SSE2-NEXT:    pcmpeqw %xmm2, %xmm3
786 ; SSE2-NEXT:    pand %xmm3, %xmm0
787 ; SSE2-NEXT:    pandn %xmm1, %xmm3
788 ; SSE2-NEXT:    por %xmm3, %xmm0
789 ; SSE2-NEXT:    retq
791 ; SSE41-LABEL: max_ge_v8i16:
792 ; SSE41:       # BB#0:
793 ; SSE41-NEXT:    pmaxuw %xmm1, %xmm0
794 ; SSE41-NEXT:    retq
796 ; SSE42-LABEL: max_ge_v8i16:
797 ; SSE42:       # BB#0:
798 ; SSE42-NEXT:    pmaxuw %xmm1, %xmm0
799 ; SSE42-NEXT:    retq
801 ; AVX-LABEL: max_ge_v8i16:
802 ; AVX:       # BB#0:
803 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
804 ; AVX-NEXT:    retq
805   %1 = icmp uge <8 x i16> %a, %b
806   %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
807   ret <8 x i16> %2
810 define <16 x i16> @max_ge_v16i16(<16 x i16> %a, <16 x i16> %b) {
811 ; SSE2-LABEL: max_ge_v16i16:
812 ; SSE2:       # BB#0:
813 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
814 ; SSE2-NEXT:    psubusw %xmm1, %xmm4
815 ; SSE2-NEXT:    pxor %xmm5, %xmm5
816 ; SSE2-NEXT:    pcmpeqw %xmm5, %xmm4
817 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
818 ; SSE2-NEXT:    psubusw %xmm0, %xmm6
819 ; SSE2-NEXT:    pcmpeqw %xmm5, %xmm6
820 ; SSE2-NEXT:    pand %xmm6, %xmm0
821 ; SSE2-NEXT:    pandn %xmm2, %xmm6
822 ; SSE2-NEXT:    por %xmm6, %xmm0
823 ; SSE2-NEXT:    pand %xmm4, %xmm1
824 ; SSE2-NEXT:    pandn %xmm3, %xmm4
825 ; SSE2-NEXT:    por %xmm4, %xmm1
826 ; SSE2-NEXT:    retq
828 ; SSE41-LABEL: max_ge_v16i16:
829 ; SSE41:       # BB#0:
830 ; SSE41-NEXT:    pmaxuw %xmm2, %xmm0
831 ; SSE41-NEXT:    pmaxuw %xmm3, %xmm1
832 ; SSE41-NEXT:    retq
834 ; SSE42-LABEL: max_ge_v16i16:
835 ; SSE42:       # BB#0:
836 ; SSE42-NEXT:    pmaxuw %xmm2, %xmm0
837 ; SSE42-NEXT:    pmaxuw %xmm3, %xmm1
838 ; SSE42-NEXT:    retq
840 ; AVX1-LABEL: max_ge_v16i16:
841 ; AVX1:       # BB#0:
842 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
843 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
844 ; AVX1-NEXT:    vpmaxuw %xmm2, %xmm3, %xmm2
845 ; AVX1-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm0
846 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
847 ; AVX1-NEXT:    retq
849 ; AVX2-LABEL: max_ge_v16i16:
850 ; AVX2:       # BB#0:
851 ; AVX2-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
852 ; AVX2-NEXT:    retq
854 ; AVX512-LABEL: max_ge_v16i16:
855 ; AVX512:       # BB#0:
856 ; AVX512-NEXT:    vpmaxuw %ymm1, %ymm0, %ymm0
857 ; AVX512-NEXT:    retq
858   %1 = icmp uge <16 x i16> %a, %b
859   %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
860   ret <16 x i16> %2
863 define <16 x i8> @max_ge_v16i8(<16 x i8> %a, <16 x i8> %b) {
864 ; SSE-LABEL: max_ge_v16i8:
865 ; SSE:       # BB#0:
866 ; SSE-NEXT:    pmaxub %xmm1, %xmm0
867 ; SSE-NEXT:    retq
869 ; AVX-LABEL: max_ge_v16i8:
870 ; AVX:       # BB#0:
871 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
872 ; AVX-NEXT:    retq
873   %1 = icmp uge <16 x i8> %a, %b
874   %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
875   ret <16 x i8> %2
878 define <32 x i8> @max_ge_v32i8(<32 x i8> %a, <32 x i8> %b) {
879 ; SSE-LABEL: max_ge_v32i8:
880 ; SSE:       # BB#0:
881 ; SSE-NEXT:    pmaxub %xmm2, %xmm0
882 ; SSE-NEXT:    pmaxub %xmm3, %xmm1
883 ; SSE-NEXT:    retq
885 ; AVX1-LABEL: max_ge_v32i8:
886 ; AVX1:       # BB#0:
887 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
888 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
889 ; AVX1-NEXT:    vpmaxub %xmm2, %xmm3, %xmm2
890 ; AVX1-NEXT:    vpmaxub %xmm1, %xmm0, %xmm0
891 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
892 ; AVX1-NEXT:    retq
894 ; AVX2-LABEL: max_ge_v32i8:
895 ; AVX2:       # BB#0:
896 ; AVX2-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
897 ; AVX2-NEXT:    retq
899 ; AVX512-LABEL: max_ge_v32i8:
900 ; AVX512:       # BB#0:
901 ; AVX512-NEXT:    vpmaxub %ymm1, %ymm0, %ymm0
902 ; AVX512-NEXT:    retq
903   %1 = icmp uge <32 x i8> %a, %b
904   %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
905   ret <32 x i8> %2
909 ; Unsigned Minimum (LT)
912 define <2 x i64> @min_lt_v2i64(<2 x i64> %a, <2 x i64> %b) {
913 ; SSE2-LABEL: min_lt_v2i64:
914 ; SSE2:       # BB#0:
915 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
916 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
917 ; SSE2-NEXT:    pxor %xmm2, %xmm3
918 ; SSE2-NEXT:    pxor %xmm1, %xmm2
919 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
920 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
921 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
922 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
923 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
924 ; SSE2-NEXT:    pand %xmm5, %xmm2
925 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
926 ; SSE2-NEXT:    por %xmm2, %xmm3
927 ; SSE2-NEXT:    pand %xmm3, %xmm0
928 ; SSE2-NEXT:    pandn %xmm1, %xmm3
929 ; SSE2-NEXT:    por %xmm3, %xmm0
930 ; SSE2-NEXT:    retq
932 ; SSE41-LABEL: min_lt_v2i64:
933 ; SSE41:       # BB#0:
934 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
935 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
936 ; SSE41-NEXT:    movdqa %xmm2, %xmm3
937 ; SSE41-NEXT:    pxor %xmm0, %xmm3
938 ; SSE41-NEXT:    pxor %xmm1, %xmm0
939 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
940 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
941 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
942 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm0
943 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
944 ; SSE41-NEXT:    pand %xmm5, %xmm3
945 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
946 ; SSE41-NEXT:    por %xmm3, %xmm0
947 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
948 ; SSE41-NEXT:    movapd %xmm1, %xmm0
949 ; SSE41-NEXT:    retq
951 ; SSE42-LABEL: min_lt_v2i64:
952 ; SSE42:       # BB#0:
953 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
954 ; SSE42-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
955 ; SSE42-NEXT:    movdqa %xmm2, %xmm3
956 ; SSE42-NEXT:    pxor %xmm0, %xmm3
957 ; SSE42-NEXT:    pxor %xmm1, %xmm0
958 ; SSE42-NEXT:    pcmpgtq %xmm3, %xmm0
959 ; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
960 ; SSE42-NEXT:    movapd %xmm1, %xmm0
961 ; SSE42-NEXT:    retq
963 ; AVX1-LABEL: min_lt_v2i64:
964 ; AVX1:       # BB#0:
965 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
966 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm3
967 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm2
968 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
969 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
970 ; AVX1-NEXT:    retq
972 ; AVX2-LABEL: min_lt_v2i64:
973 ; AVX2:       # BB#0:
974 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
975 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm3
976 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm2
977 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
978 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
979 ; AVX2-NEXT:    retq
981 ; AVX512-LABEL: min_lt_v2i64:
982 ; AVX512:       # BB#0:
983 ; AVX512-NEXT:    # kill: %xmm1<def> %xmm1<kill> %zmm1<def>
984 ; AVX512-NEXT:    # kill: %xmm0<def> %xmm0<kill> %zmm0<def>
985 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
986 ; AVX512-NEXT:    # kill: %xmm0<def> %xmm0<kill> %zmm0<kill>
987 ; AVX512-NEXT:    vzeroupper
988 ; AVX512-NEXT:    retq
989   %1 = icmp ult <2 x i64> %a, %b
990   %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
991   ret <2 x i64> %2
994 define <4 x i64> @min_lt_v4i64(<4 x i64> %a, <4 x i64> %b) {
995 ; SSE2-LABEL: min_lt_v4i64:
996 ; SSE2:       # BB#0:
997 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
998 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
999 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1000 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
1001 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1002 ; SSE2-NEXT:    movdqa %xmm6, %xmm7
1003 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
1004 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
1005 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm6
1006 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
1007 ; SSE2-NEXT:    pand %xmm8, %xmm5
1008 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
1009 ; SSE2-NEXT:    por %xmm5, %xmm6
1010 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1011 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1012 ; SSE2-NEXT:    pxor %xmm2, %xmm4
1013 ; SSE2-NEXT:    movdqa %xmm4, %xmm7
1014 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
1015 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
1016 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm4
1017 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
1018 ; SSE2-NEXT:    pand %xmm8, %xmm4
1019 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1020 ; SSE2-NEXT:    por %xmm4, %xmm5
1021 ; SSE2-NEXT:    pand %xmm5, %xmm0
1022 ; SSE2-NEXT:    pandn %xmm2, %xmm5
1023 ; SSE2-NEXT:    por %xmm5, %xmm0
1024 ; SSE2-NEXT:    pand %xmm6, %xmm1
1025 ; SSE2-NEXT:    pandn %xmm3, %xmm6
1026 ; SSE2-NEXT:    por %xmm6, %xmm1
1027 ; SSE2-NEXT:    retq
1029 ; SSE41-LABEL: min_lt_v4i64:
1030 ; SSE41:       # BB#0:
1031 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
1032 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
1033 ; SSE41-NEXT:    movdqa %xmm1, %xmm5
1034 ; SSE41-NEXT:    pxor %xmm0, %xmm5
1035 ; SSE41-NEXT:    movdqa %xmm3, %xmm6
1036 ; SSE41-NEXT:    pxor %xmm0, %xmm6
1037 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
1038 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm7
1039 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
1040 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm6
1041 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
1042 ; SSE41-NEXT:    pand %xmm4, %xmm6
1043 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1044 ; SSE41-NEXT:    por %xmm6, %xmm5
1045 ; SSE41-NEXT:    movdqa %xmm8, %xmm4
1046 ; SSE41-NEXT:    pxor %xmm0, %xmm4
1047 ; SSE41-NEXT:    pxor %xmm2, %xmm0
1048 ; SSE41-NEXT:    movdqa %xmm0, %xmm6
1049 ; SSE41-NEXT:    pcmpgtd %xmm4, %xmm6
1050 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
1051 ; SSE41-NEXT:    pcmpeqd %xmm4, %xmm0
1052 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
1053 ; SSE41-NEXT:    pand %xmm7, %xmm4
1054 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
1055 ; SSE41-NEXT:    por %xmm4, %xmm0
1056 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm2
1057 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
1058 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
1059 ; SSE41-NEXT:    movapd %xmm2, %xmm0
1060 ; SSE41-NEXT:    movapd %xmm3, %xmm1
1061 ; SSE41-NEXT:    retq
1063 ; SSE42-LABEL: min_lt_v4i64:
1064 ; SSE42:       # BB#0:
1065 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
1066 ; SSE42-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
1067 ; SSE42-NEXT:    movdqa %xmm1, %xmm6
1068 ; SSE42-NEXT:    pxor %xmm0, %xmm6
1069 ; SSE42-NEXT:    movdqa %xmm3, %xmm5
1070 ; SSE42-NEXT:    pxor %xmm0, %xmm5
1071 ; SSE42-NEXT:    pcmpgtq %xmm6, %xmm5
1072 ; SSE42-NEXT:    movdqa %xmm4, %xmm6
1073 ; SSE42-NEXT:    pxor %xmm0, %xmm6
1074 ; SSE42-NEXT:    pxor %xmm2, %xmm0
1075 ; SSE42-NEXT:    pcmpgtq %xmm6, %xmm0
1076 ; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
1077 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
1078 ; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
1079 ; SSE42-NEXT:    movapd %xmm2, %xmm0
1080 ; SSE42-NEXT:    movapd %xmm3, %xmm1
1081 ; SSE42-NEXT:    retq
1083 ; AVX1-LABEL: min_lt_v4i64:
1084 ; AVX1:       # BB#0:
1085 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
1086 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1087 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
1088 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm4
1089 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
1090 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
1091 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm4
1092 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm3
1093 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm3
1094 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
1095 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1096 ; AVX1-NEXT:    retq
1098 ; AVX2-LABEL: min_lt_v4i64:
1099 ; AVX2:       # BB#0:
1100 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
1101 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm3
1102 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm2
1103 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
1104 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1105 ; AVX2-NEXT:    retq
1107 ; AVX512-LABEL: min_lt_v4i64:
1108 ; AVX512:       # BB#0:
1109 ; AVX512-NEXT:    # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
1110 ; AVX512-NEXT:    # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
1111 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
1112 ; AVX512-NEXT:    # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
1113 ; AVX512-NEXT:    retq
1114   %1 = icmp ult <4 x i64> %a, %b
1115   %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
1116   ret <4 x i64> %2
1119 define <4 x i32> @min_lt_v4i32(<4 x i32> %a, <4 x i32> %b) {
1120 ; SSE2-LABEL: min_lt_v4i32:
1121 ; SSE2:       # BB#0:
1122 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1123 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
1124 ; SSE2-NEXT:    pxor %xmm2, %xmm3
1125 ; SSE2-NEXT:    pxor %xmm1, %xmm2
1126 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm2
1127 ; SSE2-NEXT:    pand %xmm2, %xmm0
1128 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1129 ; SSE2-NEXT:    por %xmm2, %xmm0
1130 ; SSE2-NEXT:    retq
1132 ; SSE41-LABEL: min_lt_v4i32:
1133 ; SSE41:       # BB#0:
1134 ; SSE41-NEXT:    pminud %xmm1, %xmm0
1135 ; SSE41-NEXT:    retq
1137 ; SSE42-LABEL: min_lt_v4i32:
1138 ; SSE42:       # BB#0:
1139 ; SSE42-NEXT:    pminud %xmm1, %xmm0
1140 ; SSE42-NEXT:    retq
1142 ; AVX-LABEL: min_lt_v4i32:
1143 ; AVX:       # BB#0:
1144 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1145 ; AVX-NEXT:    retq
1146   %1 = icmp ult <4 x i32> %a, %b
1147   %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
1148   ret <4 x i32> %2
1151 define <8 x i32> @min_lt_v8i32(<8 x i32> %a, <8 x i32> %b) {
1152 ; SSE2-LABEL: min_lt_v8i32:
1153 ; SSE2:       # BB#0:
1154 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1155 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
1156 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1157 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
1158 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1159 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
1160 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1161 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1162 ; SSE2-NEXT:    pxor %xmm2, %xmm4
1163 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm4
1164 ; SSE2-NEXT:    pand %xmm4, %xmm0
1165 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1166 ; SSE2-NEXT:    por %xmm4, %xmm0
1167 ; SSE2-NEXT:    pand %xmm6, %xmm1
1168 ; SSE2-NEXT:    pandn %xmm3, %xmm6
1169 ; SSE2-NEXT:    por %xmm6, %xmm1
1170 ; SSE2-NEXT:    retq
1172 ; SSE41-LABEL: min_lt_v8i32:
1173 ; SSE41:       # BB#0:
1174 ; SSE41-NEXT:    pminud %xmm2, %xmm0
1175 ; SSE41-NEXT:    pminud %xmm3, %xmm1
1176 ; SSE41-NEXT:    retq
1178 ; SSE42-LABEL: min_lt_v8i32:
1179 ; SSE42:       # BB#0:
1180 ; SSE42-NEXT:    pminud %xmm2, %xmm0
1181 ; SSE42-NEXT:    pminud %xmm3, %xmm1
1182 ; SSE42-NEXT:    retq
1184 ; AVX1-LABEL: min_lt_v8i32:
1185 ; AVX1:       # BB#0:
1186 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1187 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1188 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1189 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1190 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1191 ; AVX1-NEXT:    retq
1193 ; AVX2-LABEL: min_lt_v8i32:
1194 ; AVX2:       # BB#0:
1195 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1196 ; AVX2-NEXT:    retq
1198 ; AVX512-LABEL: min_lt_v8i32:
1199 ; AVX512:       # BB#0:
1200 ; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1201 ; AVX512-NEXT:    retq
1202   %1 = icmp ult <8 x i32> %a, %b
1203   %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
1204   ret <8 x i32> %2
1207 define <8 x i16> @min_lt_v8i16(<8 x i16> %a, <8 x i16> %b) {
1208 ; SSE2-LABEL: min_lt_v8i16:
1209 ; SSE2:       # BB#0:
1210 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1211 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
1212 ; SSE2-NEXT:    pxor %xmm2, %xmm3
1213 ; SSE2-NEXT:    pxor %xmm1, %xmm2
1214 ; SSE2-NEXT:    pcmpgtw %xmm3, %xmm2
1215 ; SSE2-NEXT:    pand %xmm2, %xmm0
1216 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1217 ; SSE2-NEXT:    por %xmm2, %xmm0
1218 ; SSE2-NEXT:    retq
1220 ; SSE41-LABEL: min_lt_v8i16:
1221 ; SSE41:       # BB#0:
1222 ; SSE41-NEXT:    pminuw %xmm1, %xmm0
1223 ; SSE41-NEXT:    retq
1225 ; SSE42-LABEL: min_lt_v8i16:
1226 ; SSE42:       # BB#0:
1227 ; SSE42-NEXT:    pminuw %xmm1, %xmm0
1228 ; SSE42-NEXT:    retq
1230 ; AVX-LABEL: min_lt_v8i16:
1231 ; AVX:       # BB#0:
1232 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1233 ; AVX-NEXT:    retq
1234   %1 = icmp ult <8 x i16> %a, %b
1235   %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
1236   ret <8 x i16> %2
1239 define <16 x i16> @min_lt_v16i16(<16 x i16> %a, <16 x i16> %b) {
1240 ; SSE2-LABEL: min_lt_v16i16:
1241 ; SSE2:       # BB#0:
1242 ; SSE2-NEXT:    movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1243 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
1244 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1245 ; SSE2-NEXT:    movdqa %xmm3, %xmm6
1246 ; SSE2-NEXT:    pxor %xmm4, %xmm6
1247 ; SSE2-NEXT:    pcmpgtw %xmm5, %xmm6
1248 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1249 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1250 ; SSE2-NEXT:    pxor %xmm2, %xmm4
1251 ; SSE2-NEXT:    pcmpgtw %xmm5, %xmm4
1252 ; SSE2-NEXT:    pand %xmm4, %xmm0
1253 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1254 ; SSE2-NEXT:    por %xmm4, %xmm0
1255 ; SSE2-NEXT:    pand %xmm6, %xmm1
1256 ; SSE2-NEXT:    pandn %xmm3, %xmm6
1257 ; SSE2-NEXT:    por %xmm6, %xmm1
1258 ; SSE2-NEXT:    retq
1260 ; SSE41-LABEL: min_lt_v16i16:
1261 ; SSE41:       # BB#0:
1262 ; SSE41-NEXT:    pminuw %xmm2, %xmm0
1263 ; SSE41-NEXT:    pminuw %xmm3, %xmm1
1264 ; SSE41-NEXT:    retq
1266 ; SSE42-LABEL: min_lt_v16i16:
1267 ; SSE42:       # BB#0:
1268 ; SSE42-NEXT:    pminuw %xmm2, %xmm0
1269 ; SSE42-NEXT:    pminuw %xmm3, %xmm1
1270 ; SSE42-NEXT:    retq
1272 ; AVX1-LABEL: min_lt_v16i16:
1273 ; AVX1:       # BB#0:
1274 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1275 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1276 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1277 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1278 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1279 ; AVX1-NEXT:    retq
1281 ; AVX2-LABEL: min_lt_v16i16:
1282 ; AVX2:       # BB#0:
1283 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1284 ; AVX2-NEXT:    retq
1286 ; AVX512-LABEL: min_lt_v16i16:
1287 ; AVX512:       # BB#0:
1288 ; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1289 ; AVX512-NEXT:    retq
1290   %1 = icmp ult <16 x i16> %a, %b
1291   %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
1292   ret <16 x i16> %2
1295 define <16 x i8> @min_lt_v16i8(<16 x i8> %a, <16 x i8> %b) {
1296 ; SSE-LABEL: min_lt_v16i8:
1297 ; SSE:       # BB#0:
1298 ; SSE-NEXT:    pminub %xmm1, %xmm0
1299 ; SSE-NEXT:    retq
1301 ; AVX-LABEL: min_lt_v16i8:
1302 ; AVX:       # BB#0:
1303 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1304 ; AVX-NEXT:    retq
1305   %1 = icmp ult <16 x i8> %a, %b
1306   %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
1307   ret <16 x i8> %2
1310 define <32 x i8> @min_lt_v32i8(<32 x i8> %a, <32 x i8> %b) {
1311 ; SSE-LABEL: min_lt_v32i8:
1312 ; SSE:       # BB#0:
1313 ; SSE-NEXT:    pminub %xmm2, %xmm0
1314 ; SSE-NEXT:    pminub %xmm3, %xmm1
1315 ; SSE-NEXT:    retq
1317 ; AVX1-LABEL: min_lt_v32i8:
1318 ; AVX1:       # BB#0:
1319 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1320 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1321 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
1322 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1323 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1324 ; AVX1-NEXT:    retq
1326 ; AVX2-LABEL: min_lt_v32i8:
1327 ; AVX2:       # BB#0:
1328 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
1329 ; AVX2-NEXT:    retq
1331 ; AVX512-LABEL: min_lt_v32i8:
1332 ; AVX512:       # BB#0:
1333 ; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
1334 ; AVX512-NEXT:    retq
1335   %1 = icmp ult <32 x i8> %a, %b
1336   %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
1337   ret <32 x i8> %2
1341 ; Unsigned Minimum (LE)
1344 define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) {
1345 ; SSE2-LABEL: min_le_v2i64:
1346 ; SSE2:       # BB#0:
1347 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1348 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
1349 ; SSE2-NEXT:    pxor %xmm2, %xmm3
1350 ; SSE2-NEXT:    pxor %xmm0, %xmm2
1351 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
1352 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
1353 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1354 ; SSE2-NEXT:    pcmpeqd %xmm3, %xmm2
1355 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1356 ; SSE2-NEXT:    pand %xmm5, %xmm2
1357 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1358 ; SSE2-NEXT:    por %xmm2, %xmm3
1359 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
1360 ; SSE2-NEXT:    pxor %xmm3, %xmm2
1361 ; SSE2-NEXT:    pandn %xmm0, %xmm3
1362 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1363 ; SSE2-NEXT:    por %xmm3, %xmm2
1364 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1365 ; SSE2-NEXT:    retq
1367 ; SSE41-LABEL: min_le_v2i64:
1368 ; SSE41:       # BB#0:
1369 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
1370 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
1371 ; SSE41-NEXT:    movdqa %xmm1, %xmm3
1372 ; SSE41-NEXT:    pxor %xmm0, %xmm3
1373 ; SSE41-NEXT:    pxor %xmm2, %xmm0
1374 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
1375 ; SSE41-NEXT:    pcmpgtd %xmm3, %xmm4
1376 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1377 ; SSE41-NEXT:    pcmpeqd %xmm3, %xmm0
1378 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1379 ; SSE41-NEXT:    pand %xmm5, %xmm0
1380 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1381 ; SSE41-NEXT:    por %xmm0, %xmm3
1382 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
1383 ; SSE41-NEXT:    pxor %xmm3, %xmm0
1384 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
1385 ; SSE41-NEXT:    movapd %xmm1, %xmm0
1386 ; SSE41-NEXT:    retq
1388 ; SSE42-LABEL: min_le_v2i64:
1389 ; SSE42:       # BB#0:
1390 ; SSE42-NEXT:    movdqa %xmm0, %xmm2
1391 ; SSE42-NEXT:    movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1392 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
1393 ; SSE42-NEXT:    pxor %xmm3, %xmm0
1394 ; SSE42-NEXT:    pxor %xmm2, %xmm3
1395 ; SSE42-NEXT:    pcmpgtq %xmm0, %xmm3
1396 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0
1397 ; SSE42-NEXT:    pxor %xmm3, %xmm0
1398 ; SSE42-NEXT:    blendvpd %xmm0, %xmm2, %xmm1
1399 ; SSE42-NEXT:    movapd %xmm1, %xmm0
1400 ; SSE42-NEXT:    retq
1402 ; AVX1-LABEL: min_le_v2i64:
1403 ; AVX1:       # BB#0:
1404 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
1405 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm3
1406 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm2
1407 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
1408 ; AVX1-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
1409 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
1410 ; AVX1-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1411 ; AVX1-NEXT:    retq
1413 ; AVX2-LABEL: min_le_v2i64:
1414 ; AVX2:       # BB#0:
1415 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
1416 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm3
1417 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm2
1418 ; AVX2-NEXT:    vpcmpgtq %xmm3, %xmm2, %xmm2
1419 ; AVX2-NEXT:    vpcmpeqd %xmm3, %xmm3, %xmm3
1420 ; AVX2-NEXT:    vpxor %xmm3, %xmm2, %xmm2
1421 ; AVX2-NEXT:    vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1422 ; AVX2-NEXT:    retq
1424 ; AVX512-LABEL: min_le_v2i64:
1425 ; AVX512:       # BB#0:
1426 ; AVX512-NEXT:    # kill: %xmm1<def> %xmm1<kill> %zmm1<def>
1427 ; AVX512-NEXT:    # kill: %xmm0<def> %xmm0<kill> %zmm0<def>
1428 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
1429 ; AVX512-NEXT:    # kill: %xmm0<def> %xmm0<kill> %zmm0<kill>
1430 ; AVX512-NEXT:    vzeroupper
1431 ; AVX512-NEXT:    retq
1432   %1 = icmp ule <2 x i64> %a, %b
1433   %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
1434   ret <2 x i64> %2
1437 define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) {
1438 ; SSE2-LABEL: min_le_v4i64:
1439 ; SSE2:       # BB#0:
1440 ; SSE2-NEXT:    movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
1441 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
1442 ; SSE2-NEXT:    pxor %xmm7, %xmm4
1443 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
1444 ; SSE2-NEXT:    pxor %xmm7, %xmm5
1445 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
1446 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
1447 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
1448 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm5
1449 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1450 ; SSE2-NEXT:    pand %xmm8, %xmm4
1451 ; SSE2-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
1452 ; SSE2-NEXT:    por %xmm4, %xmm8
1453 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
1454 ; SSE2-NEXT:    movdqa %xmm8, %xmm9
1455 ; SSE2-NEXT:    pxor %xmm4, %xmm9
1456 ; SSE2-NEXT:    movdqa %xmm2, %xmm6
1457 ; SSE2-NEXT:    pxor %xmm7, %xmm6
1458 ; SSE2-NEXT:    pxor %xmm0, %xmm7
1459 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
1460 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm5
1461 ; SSE2-NEXT:    pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
1462 ; SSE2-NEXT:    pcmpeqd %xmm6, %xmm7
1463 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
1464 ; SSE2-NEXT:    pand %xmm10, %xmm6
1465 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
1466 ; SSE2-NEXT:    por %xmm6, %xmm5
1467 ; SSE2-NEXT:    pxor %xmm5, %xmm4
1468 ; SSE2-NEXT:    pandn %xmm0, %xmm5
1469 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1470 ; SSE2-NEXT:    por %xmm5, %xmm4
1471 ; SSE2-NEXT:    pandn %xmm1, %xmm8
1472 ; SSE2-NEXT:    pandn %xmm3, %xmm9
1473 ; SSE2-NEXT:    por %xmm8, %xmm9
1474 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1475 ; SSE2-NEXT:    movdqa %xmm9, %xmm1
1476 ; SSE2-NEXT:    retq
1478 ; SSE41-LABEL: min_le_v4i64:
1479 ; SSE41:       # BB#0:
1480 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
1481 ; SSE41-NEXT:    movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
1482 ; SSE41-NEXT:    movdqa %xmm3, %xmm5
1483 ; SSE41-NEXT:    pxor %xmm0, %xmm5
1484 ; SSE41-NEXT:    movdqa %xmm1, %xmm6
1485 ; SSE41-NEXT:    pxor %xmm0, %xmm6
1486 ; SSE41-NEXT:    movdqa %xmm6, %xmm7
1487 ; SSE41-NEXT:    pcmpgtd %xmm5, %xmm7
1488 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
1489 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm6
1490 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
1491 ; SSE41-NEXT:    pand %xmm4, %xmm6
1492 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1493 ; SSE41-NEXT:    por %xmm6, %xmm5
1494 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm9
1495 ; SSE41-NEXT:    pxor %xmm9, %xmm5
1496 ; SSE41-NEXT:    movdqa %xmm2, %xmm6
1497 ; SSE41-NEXT:    pxor %xmm0, %xmm6
1498 ; SSE41-NEXT:    pxor %xmm8, %xmm0
1499 ; SSE41-NEXT:    movdqa %xmm0, %xmm7
1500 ; SSE41-NEXT:    pcmpgtd %xmm6, %xmm7
1501 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
1502 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
1503 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
1504 ; SSE41-NEXT:    pand %xmm4, %xmm6
1505 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
1506 ; SSE41-NEXT:    por %xmm6, %xmm0
1507 ; SSE41-NEXT:    pxor %xmm9, %xmm0
1508 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm2
1509 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
1510 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
1511 ; SSE41-NEXT:    movapd %xmm2, %xmm0
1512 ; SSE41-NEXT:    movapd %xmm3, %xmm1
1513 ; SSE41-NEXT:    retq
1515 ; SSE42-LABEL: min_le_v4i64:
1516 ; SSE42:       # BB#0:
1517 ; SSE42-NEXT:    movdqa %xmm0, %xmm4
1518 ; SSE42-NEXT:    movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
1519 ; SSE42-NEXT:    movdqa %xmm3, %xmm6
1520 ; SSE42-NEXT:    pxor %xmm0, %xmm6
1521 ; SSE42-NEXT:    movdqa %xmm1, %xmm5
1522 ; SSE42-NEXT:    pxor %xmm0, %xmm5
1523 ; SSE42-NEXT:    pcmpgtq %xmm6, %xmm5
1524 ; SSE42-NEXT:    pcmpeqd %xmm6, %xmm6
1525 ; SSE42-NEXT:    pxor %xmm6, %xmm5
1526 ; SSE42-NEXT:    movdqa %xmm2, %xmm7
1527 ; SSE42-NEXT:    pxor %xmm0, %xmm7
1528 ; SSE42-NEXT:    pxor %xmm4, %xmm0
1529 ; SSE42-NEXT:    pcmpgtq %xmm7, %xmm0
1530 ; SSE42-NEXT:    pxor %xmm6, %xmm0
1531 ; SSE42-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
1532 ; SSE42-NEXT:    movdqa %xmm5, %xmm0
1533 ; SSE42-NEXT:    blendvpd %xmm0, %xmm1, %xmm3
1534 ; SSE42-NEXT:    movapd %xmm2, %xmm0
1535 ; SSE42-NEXT:    movapd %xmm3, %xmm1
1536 ; SSE42-NEXT:    retq
1538 ; AVX1-LABEL: min_le_v4i64:
1539 ; AVX1:       # BB#0:
1540 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1541 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1542 ; AVX1-NEXT:    vpxor %xmm3, %xmm2, %xmm2
1543 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
1544 ; AVX1-NEXT:    vpxor %xmm3, %xmm4, %xmm4
1545 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm2
1546 ; AVX1-NEXT:    vpcmpeqd %xmm4, %xmm4, %xmm4
1547 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
1548 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm5
1549 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm3
1550 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm3, %xmm3
1551 ; AVX1-NEXT:    vpxor %xmm4, %xmm3, %xmm3
1552 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
1553 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1554 ; AVX1-NEXT:    retq
1556 ; AVX2-LABEL: min_le_v4i64:
1557 ; AVX2:       # BB#0:
1558 ; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
1559 ; AVX2-NEXT:    vpxor %ymm2, %ymm1, %ymm3
1560 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm2
1561 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm2, %ymm2
1562 ; AVX2-NEXT:    vpcmpeqd %ymm3, %ymm3, %ymm3
1563 ; AVX2-NEXT:    vpxor %ymm3, %ymm2, %ymm2
1564 ; AVX2-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1565 ; AVX2-NEXT:    retq
1567 ; AVX512-LABEL: min_le_v4i64:
1568 ; AVX512:       # BB#0:
1569 ; AVX512-NEXT:    # kill: %ymm1<def> %ymm1<kill> %zmm1<def>
1570 ; AVX512-NEXT:    # kill: %ymm0<def> %ymm0<kill> %zmm0<def>
1571 ; AVX512-NEXT:    vpminuq %zmm1, %zmm0, %zmm0
1572 ; AVX512-NEXT:    # kill: %ymm0<def> %ymm0<kill> %zmm0<kill>
1573 ; AVX512-NEXT:    retq
1574   %1 = icmp ule <4 x i64> %a, %b
1575   %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
1576   ret <4 x i64> %2
1579 define <4 x i32> @min_le_v4i32(<4 x i32> %a, <4 x i32> %b) {
1580 ; SSE2-LABEL: min_le_v4i32:
1581 ; SSE2:       # BB#0:
1582 ; SSE2-NEXT:    movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
1583 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
1584 ; SSE2-NEXT:    pxor %xmm3, %xmm2
1585 ; SSE2-NEXT:    pxor %xmm0, %xmm3
1586 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
1587 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm2
1588 ; SSE2-NEXT:    pxor %xmm3, %xmm2
1589 ; SSE2-NEXT:    pandn %xmm0, %xmm3
1590 ; SSE2-NEXT:    pandn %xmm1, %xmm2
1591 ; SSE2-NEXT:    por %xmm3, %xmm2
1592 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
1593 ; SSE2-NEXT:    retq
1595 ; SSE41-LABEL: min_le_v4i32:
1596 ; SSE41:       # BB#0:
1597 ; SSE41-NEXT:    pminud %xmm1, %xmm0
1598 ; SSE41-NEXT:    retq
1600 ; SSE42-LABEL: min_le_v4i32:
1601 ; SSE42:       # BB#0:
1602 ; SSE42-NEXT:    pminud %xmm1, %xmm0
1603 ; SSE42-NEXT:    retq
1605 ; AVX-LABEL: min_le_v4i32:
1606 ; AVX:       # BB#0:
1607 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1608 ; AVX-NEXT:    retq
1609   %1 = icmp ule <4 x i32> %a, %b
1610   %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
1611   ret <4 x i32> %2
1614 define <8 x i32> @min_le_v8i32(<8 x i32> %a, <8 x i32> %b) {
1615 ; SSE2-LABEL: min_le_v8i32:
1616 ; SSE2:       # BB#0:
1617 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
1618 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
1619 ; SSE2-NEXT:    pxor %xmm6, %xmm4
1620 ; SSE2-NEXT:    movdqa %xmm1, %xmm7
1621 ; SSE2-NEXT:    pxor %xmm6, %xmm7
1622 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm7
1623 ; SSE2-NEXT:    pcmpeqd %xmm4, %xmm4
1624 ; SSE2-NEXT:    movdqa %xmm7, %xmm5
1625 ; SSE2-NEXT:    pxor %xmm4, %xmm5
1626 ; SSE2-NEXT:    movdqa %xmm2, %xmm8
1627 ; SSE2-NEXT:    pxor %xmm6, %xmm8
1628 ; SSE2-NEXT:    pxor %xmm0, %xmm6
1629 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm6
1630 ; SSE2-NEXT:    pxor %xmm6, %xmm4
1631 ; SSE2-NEXT:    pandn %xmm0, %xmm6
1632 ; SSE2-NEXT:    pandn %xmm2, %xmm4
1633 ; SSE2-NEXT:    por %xmm6, %xmm4
1634 ; SSE2-NEXT:    pandn %xmm1, %xmm7
1635 ; SSE2-NEXT:    pandn %xmm3, %xmm5
1636 ; SSE2-NEXT:    por %xmm7, %xmm5
1637 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
1638 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
1639 ; SSE2-NEXT:    retq
1641 ; SSE41-LABEL: min_le_v8i32:
1642 ; SSE41:       # BB#0:
1643 ; SSE41-NEXT:    pminud %xmm2, %xmm0
1644 ; SSE41-NEXT:    pminud %xmm3, %xmm1
1645 ; SSE41-NEXT:    retq
1647 ; SSE42-LABEL: min_le_v8i32:
1648 ; SSE42:       # BB#0:
1649 ; SSE42-NEXT:    pminud %xmm2, %xmm0
1650 ; SSE42-NEXT:    pminud %xmm3, %xmm1
1651 ; SSE42-NEXT:    retq
1653 ; AVX1-LABEL: min_le_v8i32:
1654 ; AVX1:       # BB#0:
1655 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1656 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1657 ; AVX1-NEXT:    vpminud %xmm2, %xmm3, %xmm2
1658 ; AVX1-NEXT:    vpminud %xmm1, %xmm0, %xmm0
1659 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1660 ; AVX1-NEXT:    retq
1662 ; AVX2-LABEL: min_le_v8i32:
1663 ; AVX2:       # BB#0:
1664 ; AVX2-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1665 ; AVX2-NEXT:    retq
1667 ; AVX512-LABEL: min_le_v8i32:
1668 ; AVX512:       # BB#0:
1669 ; AVX512-NEXT:    vpminud %ymm1, %ymm0, %ymm0
1670 ; AVX512-NEXT:    retq
1671   %1 = icmp ule <8 x i32> %a, %b
1672   %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
1673   ret <8 x i32> %2
1676 define <8 x i16> @min_le_v8i16(<8 x i16> %a, <8 x i16> %b) {
1677 ; SSE2-LABEL: min_le_v8i16:
1678 ; SSE2:       # BB#0:
1679 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
1680 ; SSE2-NEXT:    psubusw %xmm1, %xmm2
1681 ; SSE2-NEXT:    pxor %xmm3, %xmm3
1682 ; SSE2-NEXT:    pcmpeqw %xmm2, %xmm3
1683 ; SSE2-NEXT:    pand %xmm3, %xmm0
1684 ; SSE2-NEXT:    pandn %xmm1, %xmm3
1685 ; SSE2-NEXT:    por %xmm3, %xmm0
1686 ; SSE2-NEXT:    retq
1688 ; SSE41-LABEL: min_le_v8i16:
1689 ; SSE41:       # BB#0:
1690 ; SSE41-NEXT:    pminuw %xmm1, %xmm0
1691 ; SSE41-NEXT:    retq
1693 ; SSE42-LABEL: min_le_v8i16:
1694 ; SSE42:       # BB#0:
1695 ; SSE42-NEXT:    pminuw %xmm1, %xmm0
1696 ; SSE42-NEXT:    retq
1698 ; AVX-LABEL: min_le_v8i16:
1699 ; AVX:       # BB#0:
1700 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1701 ; AVX-NEXT:    retq
1702   %1 = icmp ule <8 x i16> %a, %b
1703   %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
1704   ret <8 x i16> %2
1707 define <16 x i16> @min_le_v16i16(<16 x i16> %a, <16 x i16> %b) {
1708 ; SSE2-LABEL: min_le_v16i16:
1709 ; SSE2:       # BB#0:
1710 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
1711 ; SSE2-NEXT:    psubusw %xmm3, %xmm4
1712 ; SSE2-NEXT:    pxor %xmm6, %xmm6
1713 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm4
1714 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
1715 ; SSE2-NEXT:    psubusw %xmm2, %xmm5
1716 ; SSE2-NEXT:    pcmpeqw %xmm6, %xmm5
1717 ; SSE2-NEXT:    pand %xmm5, %xmm0
1718 ; SSE2-NEXT:    pandn %xmm2, %xmm5
1719 ; SSE2-NEXT:    por %xmm0, %xmm5
1720 ; SSE2-NEXT:    pand %xmm4, %xmm1
1721 ; SSE2-NEXT:    pandn %xmm3, %xmm4
1722 ; SSE2-NEXT:    por %xmm1, %xmm4
1723 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
1724 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
1725 ; SSE2-NEXT:    retq
1727 ; SSE41-LABEL: min_le_v16i16:
1728 ; SSE41:       # BB#0:
1729 ; SSE41-NEXT:    pminuw %xmm2, %xmm0
1730 ; SSE41-NEXT:    pminuw %xmm3, %xmm1
1731 ; SSE41-NEXT:    retq
1733 ; SSE42-LABEL: min_le_v16i16:
1734 ; SSE42:       # BB#0:
1735 ; SSE42-NEXT:    pminuw %xmm2, %xmm0
1736 ; SSE42-NEXT:    pminuw %xmm3, %xmm1
1737 ; SSE42-NEXT:    retq
1739 ; AVX1-LABEL: min_le_v16i16:
1740 ; AVX1:       # BB#0:
1741 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1742 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1743 ; AVX1-NEXT:    vpminuw %xmm2, %xmm3, %xmm2
1744 ; AVX1-NEXT:    vpminuw %xmm1, %xmm0, %xmm0
1745 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1746 ; AVX1-NEXT:    retq
1748 ; AVX2-LABEL: min_le_v16i16:
1749 ; AVX2:       # BB#0:
1750 ; AVX2-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1751 ; AVX2-NEXT:    retq
1753 ; AVX512-LABEL: min_le_v16i16:
1754 ; AVX512:       # BB#0:
1755 ; AVX512-NEXT:    vpminuw %ymm1, %ymm0, %ymm0
1756 ; AVX512-NEXT:    retq
1757   %1 = icmp ule <16 x i16> %a, %b
1758   %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
1759   ret <16 x i16> %2
1762 define <16 x i8> @min_le_v16i8(<16 x i8> %a, <16 x i8> %b) {
1763 ; SSE-LABEL: min_le_v16i8:
1764 ; SSE:       # BB#0:
1765 ; SSE-NEXT:    pminub %xmm1, %xmm0
1766 ; SSE-NEXT:    retq
1768 ; AVX-LABEL: min_le_v16i8:
1769 ; AVX:       # BB#0:
1770 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1771 ; AVX-NEXT:    retq
1772   %1 = icmp ule <16 x i8> %a, %b
1773   %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
1774   ret <16 x i8> %2
1777 define <32 x i8> @min_le_v32i8(<32 x i8> %a, <32 x i8> %b) {
1778 ; SSE-LABEL: min_le_v32i8:
1779 ; SSE:       # BB#0:
1780 ; SSE-NEXT:    pminub %xmm2, %xmm0
1781 ; SSE-NEXT:    pminub %xmm3, %xmm1
1782 ; SSE-NEXT:    retq
1784 ; AVX1-LABEL: min_le_v32i8:
1785 ; AVX1:       # BB#0:
1786 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
1787 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
1788 ; AVX1-NEXT:    vpminub %xmm2, %xmm3, %xmm2
1789 ; AVX1-NEXT:    vpminub %xmm1, %xmm0, %xmm0
1790 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
1791 ; AVX1-NEXT:    retq
1793 ; AVX2-LABEL: min_le_v32i8:
1794 ; AVX2:       # BB#0:
1795 ; AVX2-NEXT:    vpminub %ymm1, %ymm0, %ymm0
1796 ; AVX2-NEXT:    retq
1798 ; AVX512-LABEL: min_le_v32i8:
1799 ; AVX512:       # BB#0:
1800 ; AVX512-NEXT:    vpminub %ymm1, %ymm0, %ymm0
1801 ; AVX512-NEXT:    retq
1802   %1 = icmp ule <32 x i8> %a, %b
1803   %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
1804   ret <32 x i8> %2
1808 ; Constant Folding
1811 define <2 x i64> @max_gt_v2i64c() {
1812 ; SSE-LABEL: max_gt_v2i64c:
1813 ; SSE:       # BB#0:
1814 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551615,7]
1815 ; SSE-NEXT:    retq
1817 ; AVX-LABEL: max_gt_v2i64c:
1818 ; AVX:       # BB#0:
1819 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]
1820 ; AVX-NEXT:    retq
1821   %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
1822   %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
1823   %3 = icmp ugt <2 x i64> %1, %2
1824   %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
1825   ret <2 x i64> %4
1828 define <4 x i64> @max_gt_v4i64c() {
1829 ; SSE-LABEL: max_gt_v4i64c:
1830 ; SSE:       # BB#0:
1831 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,7]
1832 ; SSE-NEXT:    pcmpeqd %xmm0, %xmm0
1833 ; SSE-NEXT:    retq
1835 ; AVX-LABEL: max_gt_v4i64c:
1836 ; AVX:       # BB#0:
1837 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]
1838 ; AVX-NEXT:    retq
1839   %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
1840   %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
1841   %3 = icmp ugt <4 x i64> %1, %2
1842   %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
1843   ret <4 x i64> %4
1846 define <4 x i32> @max_gt_v4i32c() {
1847 ; SSE-LABEL: max_gt_v4i32c:
1848 ; SSE:       # BB#0:
1849 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1850 ; SSE-NEXT:    retq
1852 ; AVX-LABEL: max_gt_v4i32c:
1853 ; AVX:       # BB#0:
1854 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1855 ; AVX-NEXT:    retq
1856   %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
1857   %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
1858   %3 = icmp ugt <4 x i32> %1, %2
1859   %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
1860   ret <4 x i32> %4
1863 define <8 x i32> @max_gt_v8i32c() {
1864 ; SSE-LABEL: max_gt_v8i32c:
1865 ; SSE:       # BB#0:
1866 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]
1867 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,5,5,7]
1868 ; SSE-NEXT:    retq
1870 ; AVX-LABEL: max_gt_v8i32c:
1871 ; AVX:       # BB#0:
1872 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]
1873 ; AVX-NEXT:    retq
1874   %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0
1875   %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0
1876   %3 = icmp ugt <8 x i32> %1, %2
1877   %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
1878   ret <8 x i32> %4
1881 define <8 x i16> @max_gt_v8i16c() {
1882 ; SSE-LABEL: max_gt_v8i16c:
1883 ; SSE:       # BB#0:
1884 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
1885 ; SSE-NEXT:    retq
1887 ; AVX-LABEL: max_gt_v8i16c:
1888 ; AVX:       # BB#0:
1889 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
1890 ; AVX-NEXT:    retq
1891   %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0
1892   %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0
1893   %3 = icmp ugt <8 x i16> %1, %2
1894   %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
1895   ret <8 x i16> %4
1898 define <16 x i16> @max_gt_v16i16c() {
1899 ; SSE-LABEL: max_gt_v16i16c:
1900 ; SSE:       # BB#0:
1901 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]
1902 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]
1903 ; SSE-NEXT:    retq
1905 ; AVX-LABEL: max_gt_v16i16c:
1906 ; AVX:       # BB#0:
1907 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]
1908 ; AVX-NEXT:    retq
1909   %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0
1910   %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0
1911   %3 = icmp ugt <16 x i16> %1, %2
1912   %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
1913   ret <16 x i16> %4
1916 define <16 x i8> @max_gt_v16i8c() {
1917 ; SSE-LABEL: max_gt_v16i8c:
1918 ; SSE:       # BB#0:
1919 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
1920 ; SSE-NEXT:    retq
1922 ; AVX-LABEL: max_gt_v16i8c:
1923 ; AVX:       # BB#0:
1924 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
1925 ; AVX-NEXT:    retq
1926   %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0
1927   %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0
1928   %3 = icmp ugt <16 x i8> %1, %2
1929   %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
1930   ret <16 x i8> %4
1933 define <2 x i64> @max_ge_v2i64c() {
1934 ; SSE-LABEL: max_ge_v2i64c:
1935 ; SSE:       # BB#0:
1936 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551615,7]
1937 ; SSE-NEXT:    retq
1939 ; AVX-LABEL: max_ge_v2i64c:
1940 ; AVX:       # BB#0:
1941 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]
1942 ; AVX-NEXT:    retq
1943   %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
1944   %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
1945   %3 = icmp uge <2 x i64> %1, %2
1946   %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
1947   ret <2 x i64> %4
1950 define <4 x i64> @max_ge_v4i64c() {
1951 ; SSE-LABEL: max_ge_v4i64c:
1952 ; SSE:       # BB#0:
1953 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,7]
1954 ; SSE-NEXT:    pcmpeqd %xmm0, %xmm0
1955 ; SSE-NEXT:    retq
1957 ; AVX-LABEL: max_ge_v4i64c:
1958 ; AVX:       # BB#0:
1959 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]
1960 ; AVX-NEXT:    retq
1961   %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
1962   %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
1963   %3 = icmp uge <4 x i64> %1, %2
1964   %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
1965   ret <4 x i64> %4
1968 define <4 x i32> @max_ge_v4i32c() {
1969 ; SSE-LABEL: max_ge_v4i32c:
1970 ; SSE:       # BB#0:
1971 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1972 ; SSE-NEXT:    retq
1974 ; AVX-LABEL: max_ge_v4i32c:
1975 ; AVX:       # BB#0:
1976 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1977 ; AVX-NEXT:    retq
1978   %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
1979   %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
1980   %3 = icmp uge <4 x i32> %1, %2
1981   %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
1982   ret <4 x i32> %4
1985 define <8 x i32> @max_ge_v8i32c() {
1986 ; SSE-LABEL: max_ge_v8i32c:
1987 ; SSE:       # BB#0:
1988 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]
1989 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,5,5,7]
1990 ; SSE-NEXT:    retq
1992 ; AVX-LABEL: max_ge_v8i32c:
1993 ; AVX:       # BB#0:
1994 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]
1995 ; AVX-NEXT:    retq
1996   %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0
1997   %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0
1998   %3 = icmp uge <8 x i32> %1, %2
1999   %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
2000   ret <8 x i32> %4
2003 define <8 x i16> @max_ge_v8i16c() {
2004 ; SSE-LABEL: max_ge_v8i16c:
2005 ; SSE:       # BB#0:
2006 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
2007 ; SSE-NEXT:    retq
2009 ; AVX-LABEL: max_ge_v8i16c:
2010 ; AVX:       # BB#0:
2011 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
2012 ; AVX-NEXT:    retq
2013   %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0
2014   %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0
2015   %3 = icmp uge <8 x i16> %1, %2
2016   %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
2017   ret <8 x i16> %4
2020 define <16 x i16> @max_ge_v16i16c() {
2021 ; SSE-LABEL: max_ge_v16i16c:
2022 ; SSE:       # BB#0:
2023 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]
2024 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]
2025 ; SSE-NEXT:    retq
2027 ; AVX-LABEL: max_ge_v16i16c:
2028 ; AVX:       # BB#0:
2029 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]
2030 ; AVX-NEXT:    retq
2031   %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0
2032   %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0
2033   %3 = icmp uge <16 x i16> %1, %2
2034   %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
2035   ret <16 x i16> %4
2038 define <16 x i8> @max_ge_v16i8c() {
2039 ; SSE-LABEL: max_ge_v16i8c:
2040 ; SSE:       # BB#0:
2041 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
2042 ; SSE-NEXT:    retq
2044 ; AVX-LABEL: max_ge_v16i8c:
2045 ; AVX:       # BB#0:
2046 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
2047 ; AVX-NEXT:    retq
2048   %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0
2049   %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0
2050   %3 = icmp uge <16 x i8> %1, %2
2051   %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
2052   ret <16 x i8> %4
2055 define <2 x i64> @min_lt_v2i64c() {
2056 ; SSE-LABEL: min_lt_v2i64c:
2057 ; SSE:       # BB#0:
2058 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551609,1]
2059 ; SSE-NEXT:    retq
2061 ; AVX-LABEL: min_lt_v2i64c:
2062 ; AVX:       # BB#0:
2063 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]
2064 ; AVX-NEXT:    retq
2065   %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
2066   %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
2067   %3 = icmp ult <2 x i64> %1, %2
2068   %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
2069   ret <2 x i64> %4
2072 define <4 x i64> @min_lt_v4i64c() {
2073 ; SSE-LABEL: min_lt_v4i64c:
2074 ; SSE:       # BB#0:
2075 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]
2076 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,1]
2077 ; SSE-NEXT:    retq
2079 ; AVX-LABEL: min_lt_v4i64c:
2080 ; AVX:       # BB#0:
2081 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]
2082 ; AVX-NEXT:    retq
2083   %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
2084   %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
2085   %3 = icmp ult <4 x i64> %1, %2
2086   %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
2087   ret <4 x i64> %4
2090 define <4 x i32> @min_lt_v4i32c() {
2091 ; SSE-LABEL: min_lt_v4i32c:
2092 ; SSE:       # BB#0:
2093 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2094 ; SSE-NEXT:    retq
2096 ; AVX-LABEL: min_lt_v4i32c:
2097 ; AVX:       # BB#0:
2098 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2099 ; AVX-NEXT:    retq
2100   %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
2101   %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
2102   %3 = icmp ult <4 x i32> %1, %2
2103   %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
2104   ret <4 x i32> %4
2107 define <8 x i32> @min_lt_v8i32c() {
2108 ; SSE-LABEL: min_lt_v8i32c:
2109 ; SSE:       # BB#0:
2110 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]
2111 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,3,3,1]
2112 ; SSE-NEXT:    retq
2114 ; AVX-LABEL: min_lt_v8i32c:
2115 ; AVX:       # BB#0:
2116 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]
2117 ; AVX-NEXT:    retq
2118   %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0
2119   %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0
2120   %3 = icmp ult <8 x i32> %1, %2
2121   %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
2122   ret <8 x i32> %4
2125 define <8 x i16> @min_lt_v8i16c() {
2126 ; SSE-LABEL: min_lt_v8i16c:
2127 ; SSE:       # BB#0:
2128 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1]
2129 ; SSE-NEXT:    retq
2131 ; AVX-LABEL: min_lt_v8i16c:
2132 ; AVX:       # BB#0:
2133 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1]
2134 ; AVX-NEXT:    retq
2135   %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0
2136   %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16  1, i32 0
2137   %3 = icmp ult <8 x i16> %1, %2
2138   %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
2139   ret <8 x i16> %4
2142 define <16 x i16> @min_lt_v16i16c() {
2143 ; SSE-LABEL: min_lt_v16i16c:
2144 ; SSE:       # BB#0:
2145 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,65530,65531,65532,65531,65530,65529,0]
2146 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]
2147 ; SSE-NEXT:    retq
2149 ; AVX-LABEL: min_lt_v16i16c:
2150 ; AVX:       # BB#0:
2151 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [1,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]
2152 ; AVX-NEXT:    retq
2153   %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0
2154   %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16  1, i32 0
2155   %3 = icmp ult <16 x i16> %1, %2
2156   %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
2157   ret <16 x i16> %4
2160 define <16 x i8> @min_lt_v16i8c() {
2161 ; SSE-LABEL: min_lt_v16i8c:
2162 ; SSE:       # BB#0:
2163 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2164 ; SSE-NEXT:    retq
2166 ; AVX-LABEL: min_lt_v16i8c:
2167 ; AVX:       # BB#0:
2168 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2169 ; AVX-NEXT:    retq
2170   %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0
2171   %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8  1, i32 0
2172   %3 = icmp ult <16 x i8> %1, %2
2173   %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
2174   ret <16 x i8> %4
2177 define <2 x i64> @min_le_v2i64c() {
2178 ; SSE-LABEL: min_le_v2i64c:
2179 ; SSE:       # BB#0:
2180 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551609,1]
2181 ; SSE-NEXT:    retq
2183 ; AVX-LABEL: min_le_v2i64c:
2184 ; AVX:       # BB#0:
2185 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]
2186 ; AVX-NEXT:    retq
2187   %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
2188   %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
2189   %3 = icmp ule <2 x i64> %1, %2
2190   %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
2191   ret <2 x i64> %4
2194 define <4 x i64> @min_le_v4i64c() {
2195 ; SSE-LABEL: min_le_v4i64c:
2196 ; SSE:       # BB#0:
2197 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]
2198 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,1]
2199 ; SSE-NEXT:    retq
2201 ; AVX-LABEL: min_le_v4i64c:
2202 ; AVX:       # BB#0:
2203 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]
2204 ; AVX-NEXT:    retq
2205   %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
2206   %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
2207   %3 = icmp ule <4 x i64> %1, %2
2208   %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
2209   ret <4 x i64> %4
2212 define <4 x i32> @min_le_v4i32c() {
2213 ; SSE-LABEL: min_le_v4i32c:
2214 ; SSE:       # BB#0:
2215 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2216 ; SSE-NEXT:    retq
2218 ; AVX-LABEL: min_le_v4i32c:
2219 ; AVX:       # BB#0:
2220 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2221 ; AVX-NEXT:    retq
2222   %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
2223   %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
2224   %3 = icmp ule <4 x i32> %1, %2
2225   %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
2226   ret <4 x i32> %4
2229 define <8 x i32> @min_le_v8i32c() {
2230 ; SSE-LABEL: min_le_v8i32c:
2231 ; SSE:       # BB#0:
2232 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]
2233 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,3,3,1]
2234 ; SSE-NEXT:    retq
2236 ; AVX-LABEL: min_le_v8i32c:
2237 ; AVX:       # BB#0:
2238 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]
2239 ; AVX-NEXT:    retq
2240   %1 = insertelement <8 x i32> <i32 -7, i32 -5, i32 -3, i32 -1, i32 1, i32 3, i32 5, i32 7>, i32 -7, i32 0
2241   %2 = insertelement <8 x i32> <i32 -1, i32 -3, i32 -5, i32 -7, i32 7, i32 5, i32 3, i32 1>, i32 -1, i32 0
2242   %3 = icmp ule <8 x i32> %1, %2
2243   %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
2244   ret <8 x i32> %4
2247 define <8 x i16> @min_le_v8i16c() {
2248 ; SSE-LABEL: min_le_v8i16c:
2249 ; SSE:       # BB#0:
2250 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
2251 ; SSE-NEXT:    retq
2253 ; AVX-LABEL: min_le_v8i16c:
2254 ; AVX:       # BB#0:
2255 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
2256 ; AVX-NEXT:    retq
2257   %1 = insertelement <8 x i16> <i16 -7, i16 -5, i16 -3, i16 -1, i16 1, i16 3, i16 5, i16 7>, i16 -7, i32 0
2258   %2 = insertelement <8 x i16> <i16 -1, i16 -3, i16 -5, i16 -7, i16 7, i16 5, i16 3, i16 1>, i16 -1, i32 0
2259   %3 = icmp ule <8 x i16> %1, %2
2260   %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
2261   ret <8 x i16> %4
2264 define <16 x i16> @min_le_v16i16c() {
2265 ; SSE-LABEL: min_le_v16i16c:
2266 ; SSE:       # BB#0:
2267 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [65529,65530,65531,65532,65531,65530,65529,0]
2268 ; SSE-NEXT:    movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]
2269 ; SSE-NEXT:    retq
2271 ; AVX-LABEL: min_le_v16i16c:
2272 ; AVX:       # BB#0:
2273 ; AVX-NEXT:    vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]
2274 ; AVX-NEXT:    retq
2275   %1 = insertelement <16 x i16> <i16 -7, i16 -6, i16 -5, i16 -4, i16 -3, i16 -2, i16 -1, i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8>, i16 -7, i32 0
2276   %2 = insertelement <16 x i16> <i16 -1, i16 -2, i16 -3, i16 -4, i16 -5, i16 -6, i16 -7, i16 0, i16 7, i16 6, i16 5, i16 4, i16 3, i16 2, i16 1, i16 0>, i16 -1, i32 0
2277   %3 = icmp ule <16 x i16> %1, %2
2278   %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
2279   ret <16 x i16> %4
2282 define <16 x i8> @min_le_v16i8c() {
2283 ; SSE-LABEL: min_le_v16i8c:
2284 ; SSE:       # BB#0:
2285 ; SSE-NEXT:    movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2286 ; SSE-NEXT:    retq
2288 ; AVX-LABEL: min_le_v16i8c:
2289 ; AVX:       # BB#0:
2290 ; AVX-NEXT:    vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2291 ; AVX-NEXT:    retq
2292   %1 = insertelement <16 x i8> <i8 -7, i8 -6, i8 -5, i8 -4, i8 -3, i8 -2, i8 -1, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, i8 -7, i32 0
2293   %2 = insertelement <16 x i8> <i8 -1, i8 -2, i8 -3, i8 -4, i8 -5, i8 -6, i8 -7, i8 0, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>, i8 -1, i32 0
2294   %3 = icmp ule <16 x i8> %1, %2
2295   %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
2296   ret <16 x i8> %4