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:
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
34 ; SSE41-LABEL: max_gt_v2i64:
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
53 ; SSE42-LABEL: max_gt_v2i64:
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
65 ; AVX1-LABEL: max_gt_v2i64:
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
74 ; AVX2-LABEL: max_gt_v2i64:
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
83 ; AVX512-LABEL: max_gt_v2i64:
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
91 %1 = icmp ugt <2 x i64> %a, %b
92 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
96 define <4 x i64> @max_gt_v4i64(<4 x i64> %a, <4 x i64> %b) {
97 ; SSE2-LABEL: max_gt_v4i64:
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
131 ; SSE41-LABEL: max_gt_v4i64:
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
165 ; SSE42-LABEL: max_gt_v4i64:
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
185 ; AVX1-LABEL: max_gt_v4i64:
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
200 ; AVX2-LABEL: max_gt_v4i64:
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
209 ; AVX512-LABEL: max_gt_v4i64:
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>
216 %1 = icmp ugt <4 x i64> %a, %b
217 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
221 define <4 x i32> @max_gt_v4i32(<4 x i32> %a, <4 x i32> %b) {
222 ; SSE2-LABEL: max_gt_v4i32:
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
234 ; SSE41-LABEL: max_gt_v4i32:
236 ; SSE41-NEXT: pmaxud %xmm1, %xmm0
239 ; SSE42-LABEL: max_gt_v4i32:
241 ; SSE42-NEXT: pmaxud %xmm1, %xmm0
244 ; AVX-LABEL: max_gt_v4i32:
246 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
248 %1 = icmp ugt <4 x i32> %a, %b
249 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
253 define <8 x i32> @max_gt_v8i32(<8 x i32> %a, <8 x i32> %b) {
254 ; SSE2-LABEL: max_gt_v8i32:
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
275 ; SSE41-LABEL: max_gt_v8i32:
277 ; SSE41-NEXT: pmaxud %xmm2, %xmm0
278 ; SSE41-NEXT: pmaxud %xmm3, %xmm1
281 ; SSE42-LABEL: max_gt_v8i32:
283 ; SSE42-NEXT: pmaxud %xmm2, %xmm0
284 ; SSE42-NEXT: pmaxud %xmm3, %xmm1
287 ; AVX1-LABEL: max_gt_v8i32:
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
296 ; AVX2-LABEL: max_gt_v8i32:
298 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
301 ; AVX512-LABEL: max_gt_v8i32:
303 ; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
305 %1 = icmp ugt <8 x i32> %a, %b
306 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
310 define <8 x i16> @max_gt_v8i16(<8 x i16> %a, <8 x i16> %b) {
311 ; SSE2-LABEL: max_gt_v8i16:
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
323 ; SSE41-LABEL: max_gt_v8i16:
325 ; SSE41-NEXT: pmaxuw %xmm1, %xmm0
328 ; SSE42-LABEL: max_gt_v8i16:
330 ; SSE42-NEXT: pmaxuw %xmm1, %xmm0
333 ; AVX-LABEL: max_gt_v8i16:
335 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
337 %1 = icmp ugt <8 x i16> %a, %b
338 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
342 define <16 x i16> @max_gt_v16i16(<16 x i16> %a, <16 x i16> %b) {
343 ; SSE2-LABEL: max_gt_v16i16:
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
364 ; SSE41-LABEL: max_gt_v16i16:
366 ; SSE41-NEXT: pmaxuw %xmm2, %xmm0
367 ; SSE41-NEXT: pmaxuw %xmm3, %xmm1
370 ; SSE42-LABEL: max_gt_v16i16:
372 ; SSE42-NEXT: pmaxuw %xmm2, %xmm0
373 ; SSE42-NEXT: pmaxuw %xmm3, %xmm1
376 ; AVX1-LABEL: max_gt_v16i16:
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
385 ; AVX2-LABEL: max_gt_v16i16:
387 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
390 ; AVX512-LABEL: max_gt_v16i16:
392 ; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
394 %1 = icmp ugt <16 x i16> %a, %b
395 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
399 define <16 x i8> @max_gt_v16i8(<16 x i8> %a, <16 x i8> %b) {
400 ; SSE-LABEL: max_gt_v16i8:
402 ; SSE-NEXT: pmaxub %xmm1, %xmm0
405 ; AVX-LABEL: max_gt_v16i8:
407 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
409 %1 = icmp ugt <16 x i8> %a, %b
410 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
414 define <32 x i8> @max_gt_v32i8(<32 x i8> %a, <32 x i8> %b) {
415 ; SSE-LABEL: max_gt_v32i8:
417 ; SSE-NEXT: pmaxub %xmm2, %xmm0
418 ; SSE-NEXT: pmaxub %xmm3, %xmm1
421 ; AVX1-LABEL: max_gt_v32i8:
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
430 ; AVX2-LABEL: max_gt_v32i8:
432 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
435 ; AVX512-LABEL: max_gt_v32i8:
437 ; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
439 %1 = icmp ugt <32 x i8> %a, %b
440 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
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:
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
471 ; SSE41-LABEL: max_ge_v2i64:
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
492 ; SSE42-LABEL: max_ge_v2i64:
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
505 ; AVX1-LABEL: max_ge_v2i64:
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
516 ; AVX2-LABEL: max_ge_v2i64:
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
527 ; AVX512-LABEL: max_ge_v2i64:
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
535 %1 = icmp uge <2 x i64> %a, %b
536 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
540 define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) {
541 ; SSE2-LABEL: max_ge_v4i64:
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
581 ; SSE41-LABEL: max_ge_v4i64:
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
618 ; SSE42-LABEL: max_ge_v4i64:
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
641 ; AVX1-LABEL: max_ge_v4i64:
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
659 ; AVX2-LABEL: max_ge_v4i64:
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
670 ; AVX512-LABEL: max_ge_v4i64:
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>
677 %1 = icmp uge <4 x i64> %a, %b
678 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
682 define <4 x i32> @max_ge_v4i32(<4 x i32> %a, <4 x i32> %b) {
683 ; SSE2-LABEL: max_ge_v4i32:
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
698 ; SSE41-LABEL: max_ge_v4i32:
700 ; SSE41-NEXT: pmaxud %xmm1, %xmm0
703 ; SSE42-LABEL: max_ge_v4i32:
705 ; SSE42-NEXT: pmaxud %xmm1, %xmm0
708 ; AVX-LABEL: max_ge_v4i32:
710 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
712 %1 = icmp uge <4 x i32> %a, %b
713 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
717 define <8 x i32> @max_ge_v8i32(<8 x i32> %a, <8 x i32> %b) {
718 ; SSE2-LABEL: max_ge_v8i32:
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
744 ; SSE41-LABEL: max_ge_v8i32:
746 ; SSE41-NEXT: pmaxud %xmm2, %xmm0
747 ; SSE41-NEXT: pmaxud %xmm3, %xmm1
750 ; SSE42-LABEL: max_ge_v8i32:
752 ; SSE42-NEXT: pmaxud %xmm2, %xmm0
753 ; SSE42-NEXT: pmaxud %xmm3, %xmm1
756 ; AVX1-LABEL: max_ge_v8i32:
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
765 ; AVX2-LABEL: max_ge_v8i32:
767 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
770 ; AVX512-LABEL: max_ge_v8i32:
772 ; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
774 %1 = icmp uge <8 x i32> %a, %b
775 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
779 define <8 x i16> @max_ge_v8i16(<8 x i16> %a, <8 x i16> %b) {
780 ; SSE2-LABEL: max_ge_v8i16:
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
791 ; SSE41-LABEL: max_ge_v8i16:
793 ; SSE41-NEXT: pmaxuw %xmm1, %xmm0
796 ; SSE42-LABEL: max_ge_v8i16:
798 ; SSE42-NEXT: pmaxuw %xmm1, %xmm0
801 ; AVX-LABEL: max_ge_v8i16:
803 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
805 %1 = icmp uge <8 x i16> %a, %b
806 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
810 define <16 x i16> @max_ge_v16i16(<16 x i16> %a, <16 x i16> %b) {
811 ; SSE2-LABEL: max_ge_v16i16:
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
828 ; SSE41-LABEL: max_ge_v16i16:
830 ; SSE41-NEXT: pmaxuw %xmm2, %xmm0
831 ; SSE41-NEXT: pmaxuw %xmm3, %xmm1
834 ; SSE42-LABEL: max_ge_v16i16:
836 ; SSE42-NEXT: pmaxuw %xmm2, %xmm0
837 ; SSE42-NEXT: pmaxuw %xmm3, %xmm1
840 ; AVX1-LABEL: max_ge_v16i16:
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
849 ; AVX2-LABEL: max_ge_v16i16:
851 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
854 ; AVX512-LABEL: max_ge_v16i16:
856 ; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
858 %1 = icmp uge <16 x i16> %a, %b
859 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
863 define <16 x i8> @max_ge_v16i8(<16 x i8> %a, <16 x i8> %b) {
864 ; SSE-LABEL: max_ge_v16i8:
866 ; SSE-NEXT: pmaxub %xmm1, %xmm0
869 ; AVX-LABEL: max_ge_v16i8:
871 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
873 %1 = icmp uge <16 x i8> %a, %b
874 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
878 define <32 x i8> @max_ge_v32i8(<32 x i8> %a, <32 x i8> %b) {
879 ; SSE-LABEL: max_ge_v32i8:
881 ; SSE-NEXT: pmaxub %xmm2, %xmm0
882 ; SSE-NEXT: pmaxub %xmm3, %xmm1
885 ; AVX1-LABEL: max_ge_v32i8:
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
894 ; AVX2-LABEL: max_ge_v32i8:
896 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
899 ; AVX512-LABEL: max_ge_v32i8:
901 ; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
903 %1 = icmp uge <32 x i8> %a, %b
904 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
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:
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
932 ; SSE41-LABEL: min_lt_v2i64:
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
951 ; SSE42-LABEL: min_lt_v2i64:
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
963 ; AVX1-LABEL: min_lt_v2i64:
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
972 ; AVX2-LABEL: min_lt_v2i64:
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
981 ; AVX512-LABEL: min_lt_v2i64:
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
989 %1 = icmp ult <2 x i64> %a, %b
990 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
994 define <4 x i64> @min_lt_v4i64(<4 x i64> %a, <4 x i64> %b) {
995 ; SSE2-LABEL: min_lt_v4i64:
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
1029 ; SSE41-LABEL: min_lt_v4i64:
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
1063 ; SSE42-LABEL: min_lt_v4i64:
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
1083 ; AVX1-LABEL: min_lt_v4i64:
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
1098 ; AVX2-LABEL: min_lt_v4i64:
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
1107 ; AVX512-LABEL: min_lt_v4i64:
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>
1114 %1 = icmp ult <4 x i64> %a, %b
1115 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
1119 define <4 x i32> @min_lt_v4i32(<4 x i32> %a, <4 x i32> %b) {
1120 ; SSE2-LABEL: min_lt_v4i32:
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
1132 ; SSE41-LABEL: min_lt_v4i32:
1134 ; SSE41-NEXT: pminud %xmm1, %xmm0
1137 ; SSE42-LABEL: min_lt_v4i32:
1139 ; SSE42-NEXT: pminud %xmm1, %xmm0
1142 ; AVX-LABEL: min_lt_v4i32:
1144 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
1146 %1 = icmp ult <4 x i32> %a, %b
1147 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
1151 define <8 x i32> @min_lt_v8i32(<8 x i32> %a, <8 x i32> %b) {
1152 ; SSE2-LABEL: min_lt_v8i32:
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
1172 ; SSE41-LABEL: min_lt_v8i32:
1174 ; SSE41-NEXT: pminud %xmm2, %xmm0
1175 ; SSE41-NEXT: pminud %xmm3, %xmm1
1178 ; SSE42-LABEL: min_lt_v8i32:
1180 ; SSE42-NEXT: pminud %xmm2, %xmm0
1181 ; SSE42-NEXT: pminud %xmm3, %xmm1
1184 ; AVX1-LABEL: min_lt_v8i32:
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
1193 ; AVX2-LABEL: min_lt_v8i32:
1195 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
1198 ; AVX512-LABEL: min_lt_v8i32:
1200 ; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0
1202 %1 = icmp ult <8 x i32> %a, %b
1203 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
1207 define <8 x i16> @min_lt_v8i16(<8 x i16> %a, <8 x i16> %b) {
1208 ; SSE2-LABEL: min_lt_v8i16:
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
1220 ; SSE41-LABEL: min_lt_v8i16:
1222 ; SSE41-NEXT: pminuw %xmm1, %xmm0
1225 ; SSE42-LABEL: min_lt_v8i16:
1227 ; SSE42-NEXT: pminuw %xmm1, %xmm0
1230 ; AVX-LABEL: min_lt_v8i16:
1232 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1234 %1 = icmp ult <8 x i16> %a, %b
1235 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
1239 define <16 x i16> @min_lt_v16i16(<16 x i16> %a, <16 x i16> %b) {
1240 ; SSE2-LABEL: min_lt_v16i16:
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
1260 ; SSE41-LABEL: min_lt_v16i16:
1262 ; SSE41-NEXT: pminuw %xmm2, %xmm0
1263 ; SSE41-NEXT: pminuw %xmm3, %xmm1
1266 ; SSE42-LABEL: min_lt_v16i16:
1268 ; SSE42-NEXT: pminuw %xmm2, %xmm0
1269 ; SSE42-NEXT: pminuw %xmm3, %xmm1
1272 ; AVX1-LABEL: min_lt_v16i16:
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
1281 ; AVX2-LABEL: min_lt_v16i16:
1283 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1286 ; AVX512-LABEL: min_lt_v16i16:
1288 ; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1290 %1 = icmp ult <16 x i16> %a, %b
1291 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
1295 define <16 x i8> @min_lt_v16i8(<16 x i8> %a, <16 x i8> %b) {
1296 ; SSE-LABEL: min_lt_v16i8:
1298 ; SSE-NEXT: pminub %xmm1, %xmm0
1301 ; AVX-LABEL: min_lt_v16i8:
1303 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
1305 %1 = icmp ult <16 x i8> %a, %b
1306 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
1310 define <32 x i8> @min_lt_v32i8(<32 x i8> %a, <32 x i8> %b) {
1311 ; SSE-LABEL: min_lt_v32i8:
1313 ; SSE-NEXT: pminub %xmm2, %xmm0
1314 ; SSE-NEXT: pminub %xmm3, %xmm1
1317 ; AVX1-LABEL: min_lt_v32i8:
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
1326 ; AVX2-LABEL: min_lt_v32i8:
1328 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
1331 ; AVX512-LABEL: min_lt_v32i8:
1333 ; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0
1335 %1 = icmp ult <32 x i8> %a, %b
1336 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
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:
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
1367 ; SSE41-LABEL: min_le_v2i64:
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
1388 ; SSE42-LABEL: min_le_v2i64:
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
1402 ; AVX1-LABEL: min_le_v2i64:
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
1413 ; AVX2-LABEL: min_le_v2i64:
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
1424 ; AVX512-LABEL: min_le_v2i64:
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
1432 %1 = icmp ule <2 x i64> %a, %b
1433 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
1437 define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) {
1438 ; SSE2-LABEL: min_le_v4i64:
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
1478 ; SSE41-LABEL: min_le_v4i64:
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
1515 ; SSE42-LABEL: min_le_v4i64:
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
1538 ; AVX1-LABEL: min_le_v4i64:
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
1556 ; AVX2-LABEL: min_le_v4i64:
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
1567 ; AVX512-LABEL: min_le_v4i64:
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>
1574 %1 = icmp ule <4 x i64> %a, %b
1575 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
1579 define <4 x i32> @min_le_v4i32(<4 x i32> %a, <4 x i32> %b) {
1580 ; SSE2-LABEL: min_le_v4i32:
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
1595 ; SSE41-LABEL: min_le_v4i32:
1597 ; SSE41-NEXT: pminud %xmm1, %xmm0
1600 ; SSE42-LABEL: min_le_v4i32:
1602 ; SSE42-NEXT: pminud %xmm1, %xmm0
1605 ; AVX-LABEL: min_le_v4i32:
1607 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
1609 %1 = icmp ule <4 x i32> %a, %b
1610 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
1614 define <8 x i32> @min_le_v8i32(<8 x i32> %a, <8 x i32> %b) {
1615 ; SSE2-LABEL: min_le_v8i32:
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
1641 ; SSE41-LABEL: min_le_v8i32:
1643 ; SSE41-NEXT: pminud %xmm2, %xmm0
1644 ; SSE41-NEXT: pminud %xmm3, %xmm1
1647 ; SSE42-LABEL: min_le_v8i32:
1649 ; SSE42-NEXT: pminud %xmm2, %xmm0
1650 ; SSE42-NEXT: pminud %xmm3, %xmm1
1653 ; AVX1-LABEL: min_le_v8i32:
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
1662 ; AVX2-LABEL: min_le_v8i32:
1664 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
1667 ; AVX512-LABEL: min_le_v8i32:
1669 ; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0
1671 %1 = icmp ule <8 x i32> %a, %b
1672 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
1676 define <8 x i16> @min_le_v8i16(<8 x i16> %a, <8 x i16> %b) {
1677 ; SSE2-LABEL: min_le_v8i16:
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
1688 ; SSE41-LABEL: min_le_v8i16:
1690 ; SSE41-NEXT: pminuw %xmm1, %xmm0
1693 ; SSE42-LABEL: min_le_v8i16:
1695 ; SSE42-NEXT: pminuw %xmm1, %xmm0
1698 ; AVX-LABEL: min_le_v8i16:
1700 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1702 %1 = icmp ule <8 x i16> %a, %b
1703 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
1707 define <16 x i16> @min_le_v16i16(<16 x i16> %a, <16 x i16> %b) {
1708 ; SSE2-LABEL: min_le_v16i16:
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
1727 ; SSE41-LABEL: min_le_v16i16:
1729 ; SSE41-NEXT: pminuw %xmm2, %xmm0
1730 ; SSE41-NEXT: pminuw %xmm3, %xmm1
1733 ; SSE42-LABEL: min_le_v16i16:
1735 ; SSE42-NEXT: pminuw %xmm2, %xmm0
1736 ; SSE42-NEXT: pminuw %xmm3, %xmm1
1739 ; AVX1-LABEL: min_le_v16i16:
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
1748 ; AVX2-LABEL: min_le_v16i16:
1750 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1753 ; AVX512-LABEL: min_le_v16i16:
1755 ; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1757 %1 = icmp ule <16 x i16> %a, %b
1758 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
1762 define <16 x i8> @min_le_v16i8(<16 x i8> %a, <16 x i8> %b) {
1763 ; SSE-LABEL: min_le_v16i8:
1765 ; SSE-NEXT: pminub %xmm1, %xmm0
1768 ; AVX-LABEL: min_le_v16i8:
1770 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
1772 %1 = icmp ule <16 x i8> %a, %b
1773 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
1777 define <32 x i8> @min_le_v32i8(<32 x i8> %a, <32 x i8> %b) {
1778 ; SSE-LABEL: min_le_v32i8:
1780 ; SSE-NEXT: pminub %xmm2, %xmm0
1781 ; SSE-NEXT: pminub %xmm3, %xmm1
1784 ; AVX1-LABEL: min_le_v32i8:
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
1793 ; AVX2-LABEL: min_le_v32i8:
1795 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
1798 ; AVX512-LABEL: min_le_v32i8:
1800 ; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0
1802 %1 = icmp ule <32 x i8> %a, %b
1803 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
1811 define <2 x i64> @max_gt_v2i64c() {
1812 ; SSE-LABEL: max_gt_v2i64c:
1814 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7]
1817 ; AVX-LABEL: max_gt_v2i64c:
1819 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]
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
1828 define <4 x i64> @max_gt_v4i64c() {
1829 ; SSE-LABEL: max_gt_v4i64c:
1831 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7]
1832 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
1835 ; AVX-LABEL: max_gt_v4i64c:
1837 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]
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
1846 define <4 x i32> @max_gt_v4i32c() {
1847 ; SSE-LABEL: max_gt_v4i32c:
1849 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1852 ; AVX-LABEL: max_gt_v4i32c:
1854 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
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
1863 define <8 x i32> @max_gt_v8i32c() {
1864 ; SSE-LABEL: max_gt_v8i32c:
1866 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]
1867 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7]
1870 ; AVX-LABEL: max_gt_v8i32c:
1872 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]
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
1881 define <8 x i16> @max_gt_v8i16c() {
1882 ; SSE-LABEL: max_gt_v8i16c:
1884 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
1887 ; AVX-LABEL: max_gt_v8i16c:
1889 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
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
1898 define <16 x i16> @max_gt_v16i16c() {
1899 ; SSE-LABEL: max_gt_v16i16c:
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]
1905 ; AVX-LABEL: max_gt_v16i16c:
1907 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]
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
1916 define <16 x i8> @max_gt_v16i8c() {
1917 ; SSE-LABEL: max_gt_v16i8c:
1919 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
1922 ; AVX-LABEL: max_gt_v16i8c:
1924 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
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
1933 define <2 x i64> @max_ge_v2i64c() {
1934 ; SSE-LABEL: max_ge_v2i64c:
1936 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7]
1939 ; AVX-LABEL: max_ge_v2i64c:
1941 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]
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
1950 define <4 x i64> @max_ge_v4i64c() {
1951 ; SSE-LABEL: max_ge_v4i64c:
1953 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7]
1954 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
1957 ; AVX-LABEL: max_ge_v4i64c:
1959 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]
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
1968 define <4 x i32> @max_ge_v4i32c() {
1969 ; SSE-LABEL: max_ge_v4i32c:
1971 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1974 ; AVX-LABEL: max_ge_v4i32c:
1976 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
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
1985 define <8 x i32> @max_ge_v8i32c() {
1986 ; SSE-LABEL: max_ge_v8i32c:
1988 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]
1989 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7]
1992 ; AVX-LABEL: max_ge_v8i32c:
1994 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]
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
2003 define <8 x i16> @max_ge_v8i16c() {
2004 ; SSE-LABEL: max_ge_v8i16c:
2006 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
2009 ; AVX-LABEL: max_ge_v8i16c:
2011 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
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
2020 define <16 x i16> @max_ge_v16i16c() {
2021 ; SSE-LABEL: max_ge_v16i16c:
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]
2027 ; AVX-LABEL: max_ge_v16i16c:
2029 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]
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
2038 define <16 x i8> @max_ge_v16i8c() {
2039 ; SSE-LABEL: max_ge_v16i8c:
2041 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
2044 ; AVX-LABEL: max_ge_v16i8c:
2046 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
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
2055 define <2 x i64> @min_lt_v2i64c() {
2056 ; SSE-LABEL: min_lt_v2i64c:
2058 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1]
2061 ; AVX-LABEL: min_lt_v2i64c:
2063 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]
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
2072 define <4 x i64> @min_lt_v4i64c() {
2073 ; SSE-LABEL: min_lt_v4i64c:
2075 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]
2076 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1]
2079 ; AVX-LABEL: min_lt_v4i64c:
2081 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]
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
2090 define <4 x i32> @min_lt_v4i32c() {
2091 ; SSE-LABEL: min_lt_v4i32c:
2093 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2096 ; AVX-LABEL: min_lt_v4i32c:
2098 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
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
2107 define <8 x i32> @min_lt_v8i32c() {
2108 ; SSE-LABEL: min_lt_v8i32c:
2110 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]
2111 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1]
2114 ; AVX-LABEL: min_lt_v8i32c:
2116 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]
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
2125 define <8 x i16> @min_lt_v8i16c() {
2126 ; SSE-LABEL: min_lt_v8i16c:
2128 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1]
2131 ; AVX-LABEL: min_lt_v8i16c:
2133 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1]
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
2142 define <16 x i16> @min_lt_v16i16c() {
2143 ; SSE-LABEL: min_lt_v16i16c:
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]
2149 ; AVX-LABEL: min_lt_v16i16c:
2151 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [1,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]
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
2160 define <16 x i8> @min_lt_v16i8c() {
2161 ; SSE-LABEL: min_lt_v16i8c:
2163 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2166 ; AVX-LABEL: min_lt_v16i8c:
2168 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
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
2177 define <2 x i64> @min_le_v2i64c() {
2178 ; SSE-LABEL: min_le_v2i64c:
2180 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1]
2183 ; AVX-LABEL: min_le_v2i64c:
2185 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]
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
2194 define <4 x i64> @min_le_v4i64c() {
2195 ; SSE-LABEL: min_le_v4i64c:
2197 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]
2198 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1]
2201 ; AVX-LABEL: min_le_v4i64c:
2203 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]
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
2212 define <4 x i32> @min_le_v4i32c() {
2213 ; SSE-LABEL: min_le_v4i32c:
2215 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2218 ; AVX-LABEL: min_le_v4i32c:
2220 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
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
2229 define <8 x i32> @min_le_v8i32c() {
2230 ; SSE-LABEL: min_le_v8i32c:
2232 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]
2233 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1]
2236 ; AVX-LABEL: min_le_v8i32c:
2238 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]
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
2247 define <8 x i16> @min_le_v8i16c() {
2248 ; SSE-LABEL: min_le_v8i16c:
2250 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
2253 ; AVX-LABEL: min_le_v8i16c:
2255 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
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
2264 define <16 x i16> @min_le_v16i16c() {
2265 ; SSE-LABEL: min_le_v16i16c:
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]
2271 ; AVX-LABEL: min_le_v16i16c:
2273 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]
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
2282 define <16 x i8> @min_le_v16i8c() {
2283 ; SSE-LABEL: min_le_v16i8c:
2285 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2288 ; AVX-LABEL: min_le_v16i8c:
2290 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
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