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 %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 %xmm2, %xmm1
62 ; SSE42-NEXT: movapd %xmm1, %xmm0
65 ; AVX-LABEL: max_gt_v2i64:
67 ; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
68 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm3
69 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm2
70 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
71 ; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
73 %1 = icmp ugt <2 x i64> %a, %b
74 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
78 define <4 x i64> @max_gt_v4i64(<4 x i64> %a, <4 x i64> %b) {
79 ; SSE2-LABEL: max_gt_v4i64:
81 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
82 ; SSE2-NEXT: movdqa %xmm3, %xmm5
83 ; SSE2-NEXT: pxor %xmm4, %xmm5
84 ; SSE2-NEXT: movdqa %xmm1, %xmm6
85 ; SSE2-NEXT: pxor %xmm4, %xmm6
86 ; SSE2-NEXT: movdqa %xmm6, %xmm7
87 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
88 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
89 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
90 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
91 ; SSE2-NEXT: pand %xmm8, %xmm5
92 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
93 ; SSE2-NEXT: por %xmm5, %xmm6
94 ; SSE2-NEXT: movdqa %xmm2, %xmm5
95 ; SSE2-NEXT: pxor %xmm4, %xmm5
96 ; SSE2-NEXT: pxor %xmm0, %xmm4
97 ; SSE2-NEXT: movdqa %xmm4, %xmm7
98 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
99 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
100 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4
101 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
102 ; SSE2-NEXT: pand %xmm8, %xmm4
103 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
104 ; SSE2-NEXT: por %xmm4, %xmm5
105 ; SSE2-NEXT: pand %xmm5, %xmm0
106 ; SSE2-NEXT: pandn %xmm2, %xmm5
107 ; SSE2-NEXT: por %xmm5, %xmm0
108 ; SSE2-NEXT: pand %xmm6, %xmm1
109 ; SSE2-NEXT: pandn %xmm3, %xmm6
110 ; SSE2-NEXT: por %xmm6, %xmm1
113 ; SSE41-LABEL: max_gt_v4i64:
115 ; SSE41-NEXT: movdqa %xmm0, %xmm8
116 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
117 ; SSE41-NEXT: movdqa %xmm3, %xmm5
118 ; SSE41-NEXT: pxor %xmm0, %xmm5
119 ; SSE41-NEXT: movdqa %xmm1, %xmm6
120 ; SSE41-NEXT: pxor %xmm0, %xmm6
121 ; SSE41-NEXT: movdqa %xmm6, %xmm7
122 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7
123 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
124 ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6
125 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
126 ; SSE41-NEXT: pand %xmm4, %xmm6
127 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
128 ; SSE41-NEXT: por %xmm6, %xmm5
129 ; SSE41-NEXT: movdqa %xmm2, %xmm4
130 ; SSE41-NEXT: pxor %xmm0, %xmm4
131 ; SSE41-NEXT: pxor %xmm8, %xmm0
132 ; SSE41-NEXT: movdqa %xmm0, %xmm6
133 ; SSE41-NEXT: pcmpgtd %xmm4, %xmm6
134 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
135 ; SSE41-NEXT: pcmpeqd %xmm4, %xmm0
136 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
137 ; SSE41-NEXT: pand %xmm7, %xmm4
138 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
139 ; SSE41-NEXT: por %xmm4, %xmm0
140 ; SSE41-NEXT: blendvpd %xmm8, %xmm2
141 ; SSE41-NEXT: movdqa %xmm5, %xmm0
142 ; SSE41-NEXT: blendvpd %xmm1, %xmm3
143 ; SSE41-NEXT: movapd %xmm2, %xmm0
144 ; SSE41-NEXT: movapd %xmm3, %xmm1
147 ; SSE42-LABEL: max_gt_v4i64:
149 ; SSE42-NEXT: movdqa %xmm0, %xmm4
150 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
151 ; SSE42-NEXT: movdqa %xmm3, %xmm6
152 ; SSE42-NEXT: pxor %xmm0, %xmm6
153 ; SSE42-NEXT: movdqa %xmm1, %xmm5
154 ; SSE42-NEXT: pxor %xmm0, %xmm5
155 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5
156 ; SSE42-NEXT: movdqa %xmm2, %xmm6
157 ; SSE42-NEXT: pxor %xmm0, %xmm6
158 ; SSE42-NEXT: pxor %xmm4, %xmm0
159 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm0
160 ; SSE42-NEXT: blendvpd %xmm4, %xmm2
161 ; SSE42-NEXT: movdqa %xmm5, %xmm0
162 ; SSE42-NEXT: blendvpd %xmm1, %xmm3
163 ; SSE42-NEXT: movapd %xmm2, %xmm0
164 ; SSE42-NEXT: movapd %xmm3, %xmm1
167 ; AVX1-LABEL: max_gt_v4i64:
169 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
170 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
171 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
172 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
173 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
174 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
175 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm4
176 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
177 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
178 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
179 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
182 ; AVX2-LABEL: max_gt_v4i64:
184 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
185 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
186 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
187 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
188 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
191 ; AVX512-LABEL: max_gt_v4i64:
193 ; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
194 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm3
195 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm2
196 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
197 ; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
199 %1 = icmp ugt <4 x i64> %a, %b
200 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
204 define <4 x i32> @max_gt_v4i32(<4 x i32> %a, <4 x i32> %b) {
205 ; SSE2-LABEL: max_gt_v4i32:
207 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
208 ; SSE2-NEXT: movdqa %xmm1, %xmm3
209 ; SSE2-NEXT: pxor %xmm2, %xmm3
210 ; SSE2-NEXT: pxor %xmm0, %xmm2
211 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
212 ; SSE2-NEXT: pand %xmm2, %xmm0
213 ; SSE2-NEXT: pandn %xmm1, %xmm2
214 ; SSE2-NEXT: por %xmm2, %xmm0
217 ; SSE41-LABEL: max_gt_v4i32:
219 ; SSE41-NEXT: pmaxud %xmm1, %xmm0
222 ; SSE42-LABEL: max_gt_v4i32:
224 ; SSE42-NEXT: pmaxud %xmm1, %xmm0
227 ; AVX-LABEL: max_gt_v4i32:
229 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
231 %1 = icmp ugt <4 x i32> %a, %b
232 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
236 define <8 x i32> @max_gt_v8i32(<8 x i32> %a, <8 x i32> %b) {
237 ; SSE2-LABEL: max_gt_v8i32:
239 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
240 ; SSE2-NEXT: movdqa %xmm3, %xmm6
241 ; SSE2-NEXT: pxor %xmm5, %xmm6
242 ; SSE2-NEXT: movdqa %xmm1, %xmm4
243 ; SSE2-NEXT: pxor %xmm5, %xmm4
244 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm4
245 ; SSE2-NEXT: movdqa %xmm2, %xmm6
246 ; SSE2-NEXT: pxor %xmm5, %xmm6
247 ; SSE2-NEXT: pxor %xmm0, %xmm5
248 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
249 ; SSE2-NEXT: pand %xmm5, %xmm0
250 ; SSE2-NEXT: pandn %xmm2, %xmm5
251 ; SSE2-NEXT: por %xmm5, %xmm0
252 ; SSE2-NEXT: pand %xmm4, %xmm1
253 ; SSE2-NEXT: pandn %xmm3, %xmm4
254 ; SSE2-NEXT: por %xmm1, %xmm4
255 ; SSE2-NEXT: movdqa %xmm4, %xmm1
258 ; SSE41-LABEL: max_gt_v8i32:
260 ; SSE41-NEXT: pmaxud %xmm2, %xmm0
261 ; SSE41-NEXT: pmaxud %xmm3, %xmm1
264 ; SSE42-LABEL: max_gt_v8i32:
266 ; SSE42-NEXT: pmaxud %xmm2, %xmm0
267 ; SSE42-NEXT: pmaxud %xmm3, %xmm1
270 ; AVX1-LABEL: max_gt_v8i32:
272 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
273 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
274 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
275 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
276 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
279 ; AVX2-LABEL: max_gt_v8i32:
281 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
284 ; AVX512-LABEL: max_gt_v8i32:
286 ; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
288 %1 = icmp ugt <8 x i32> %a, %b
289 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
293 define <8 x i16> @max_gt_v8i16(<8 x i16> %a, <8 x i16> %b) {
294 ; SSE2-LABEL: max_gt_v8i16:
296 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
297 ; SSE2-NEXT: movdqa %xmm1, %xmm3
298 ; SSE2-NEXT: pxor %xmm2, %xmm3
299 ; SSE2-NEXT: pxor %xmm0, %xmm2
300 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2
301 ; SSE2-NEXT: pand %xmm2, %xmm0
302 ; SSE2-NEXT: pandn %xmm1, %xmm2
303 ; SSE2-NEXT: por %xmm2, %xmm0
306 ; SSE41-LABEL: max_gt_v8i16:
308 ; SSE41-NEXT: pmaxuw %xmm1, %xmm0
311 ; SSE42-LABEL: max_gt_v8i16:
313 ; SSE42-NEXT: pmaxuw %xmm1, %xmm0
316 ; AVX-LABEL: max_gt_v8i16:
318 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
320 %1 = icmp ugt <8 x i16> %a, %b
321 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
325 define <16 x i16> @max_gt_v16i16(<16 x i16> %a, <16 x i16> %b) {
326 ; SSE2-LABEL: max_gt_v16i16:
328 ; SSE2-NEXT: movdqa {{.*#+}} xmm5 = [32768,32768,32768,32768,32768,32768,32768,32768]
329 ; SSE2-NEXT: movdqa %xmm3, %xmm6
330 ; SSE2-NEXT: pxor %xmm5, %xmm6
331 ; SSE2-NEXT: movdqa %xmm1, %xmm4
332 ; SSE2-NEXT: pxor %xmm5, %xmm4
333 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm4
334 ; SSE2-NEXT: movdqa %xmm2, %xmm6
335 ; SSE2-NEXT: pxor %xmm5, %xmm6
336 ; SSE2-NEXT: pxor %xmm0, %xmm5
337 ; SSE2-NEXT: pcmpgtw %xmm6, %xmm5
338 ; SSE2-NEXT: pand %xmm5, %xmm0
339 ; SSE2-NEXT: pandn %xmm2, %xmm5
340 ; SSE2-NEXT: por %xmm5, %xmm0
341 ; SSE2-NEXT: pand %xmm4, %xmm1
342 ; SSE2-NEXT: pandn %xmm3, %xmm4
343 ; SSE2-NEXT: por %xmm1, %xmm4
344 ; SSE2-NEXT: movdqa %xmm4, %xmm1
347 ; SSE41-LABEL: max_gt_v16i16:
349 ; SSE41-NEXT: pmaxuw %xmm2, %xmm0
350 ; SSE41-NEXT: pmaxuw %xmm3, %xmm1
353 ; SSE42-LABEL: max_gt_v16i16:
355 ; SSE42-NEXT: pmaxuw %xmm2, %xmm0
356 ; SSE42-NEXT: pmaxuw %xmm3, %xmm1
359 ; AVX1-LABEL: max_gt_v16i16:
361 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
362 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
363 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
364 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
365 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
368 ; AVX2-LABEL: max_gt_v16i16:
370 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
373 ; AVX512-LABEL: max_gt_v16i16:
375 ; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
377 %1 = icmp ugt <16 x i16> %a, %b
378 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
382 define <16 x i8> @max_gt_v16i8(<16 x i8> %a, <16 x i8> %b) {
383 ; SSE-LABEL: max_gt_v16i8:
385 ; SSE-NEXT: pmaxub %xmm1, %xmm0
388 ; AVX-LABEL: max_gt_v16i8:
390 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
392 %1 = icmp ugt <16 x i8> %a, %b
393 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
397 define <32 x i8> @max_gt_v32i8(<32 x i8> %a, <32 x i8> %b) {
398 ; SSE-LABEL: max_gt_v32i8:
400 ; SSE-NEXT: pmaxub %xmm2, %xmm0
401 ; SSE-NEXT: pmaxub %xmm3, %xmm1
404 ; AVX1-LABEL: max_gt_v32i8:
406 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
407 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
408 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
409 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
410 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
413 ; AVX2-LABEL: max_gt_v32i8:
415 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
418 ; AVX512-LABEL: max_gt_v32i8:
420 ; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
422 %1 = icmp ugt <32 x i8> %a, %b
423 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
428 ; Unsigned Maximum (GE)
431 define <2 x i64> @max_ge_v2i64(<2 x i64> %a, <2 x i64> %b) {
432 ; SSE2-LABEL: max_ge_v2i64:
434 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
435 ; SSE2-NEXT: movdqa %xmm0, %xmm3
436 ; SSE2-NEXT: pxor %xmm2, %xmm3
437 ; SSE2-NEXT: pxor %xmm1, %xmm2
438 ; SSE2-NEXT: movdqa %xmm2, %xmm4
439 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
440 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
441 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
442 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
443 ; SSE2-NEXT: pand %xmm5, %xmm2
444 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
445 ; SSE2-NEXT: por %xmm2, %xmm3
446 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
447 ; SSE2-NEXT: pxor %xmm3, %xmm2
448 ; SSE2-NEXT: pandn %xmm0, %xmm3
449 ; SSE2-NEXT: pandn %xmm1, %xmm2
450 ; SSE2-NEXT: por %xmm3, %xmm2
451 ; SSE2-NEXT: movdqa %xmm2, %xmm0
454 ; SSE41-LABEL: max_ge_v2i64:
456 ; SSE41-NEXT: movdqa %xmm0, %xmm2
457 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
458 ; SSE41-NEXT: movdqa %xmm2, %xmm3
459 ; SSE41-NEXT: pxor %xmm0, %xmm3
460 ; SSE41-NEXT: pxor %xmm1, %xmm0
461 ; SSE41-NEXT: movdqa %xmm0, %xmm4
462 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4
463 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
464 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0
465 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
466 ; SSE41-NEXT: pand %xmm5, %xmm0
467 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
468 ; SSE41-NEXT: por %xmm0, %xmm3
469 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
470 ; SSE41-NEXT: pxor %xmm3, %xmm0
471 ; SSE41-NEXT: blendvpd %xmm2, %xmm1
472 ; SSE41-NEXT: movapd %xmm1, %xmm0
475 ; SSE42-LABEL: max_ge_v2i64:
477 ; SSE42-NEXT: movdqa %xmm0, %xmm2
478 ; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
479 ; SSE42-NEXT: pxor %xmm3, %xmm0
480 ; SSE42-NEXT: pxor %xmm1, %xmm3
481 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm3
482 ; SSE42-NEXT: pcmpeqd %xmm0, %xmm0
483 ; SSE42-NEXT: pxor %xmm3, %xmm0
484 ; SSE42-NEXT: blendvpd %xmm2, %xmm1
485 ; SSE42-NEXT: movapd %xmm1, %xmm0
488 ; AVX-LABEL: max_ge_v2i64:
490 ; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
491 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm3
492 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm2
493 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
494 ; AVX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
495 ; AVX-NEXT: vpxor %xmm3, %xmm2, %xmm2
496 ; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
498 %1 = icmp uge <2 x i64> %a, %b
499 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
503 define <4 x i64> @max_ge_v4i64(<4 x i64> %a, <4 x i64> %b) {
504 ; SSE2-LABEL: max_ge_v4i64:
506 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
507 ; SSE2-NEXT: movdqa %xmm1, %xmm4
508 ; SSE2-NEXT: pxor %xmm7, %xmm4
509 ; SSE2-NEXT: movdqa %xmm3, %xmm5
510 ; SSE2-NEXT: pxor %xmm7, %xmm5
511 ; SSE2-NEXT: movdqa %xmm5, %xmm6
512 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
513 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
514 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
515 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
516 ; SSE2-NEXT: pand %xmm8, %xmm4
517 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
518 ; SSE2-NEXT: por %xmm4, %xmm8
519 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
520 ; SSE2-NEXT: movdqa %xmm8, %xmm9
521 ; SSE2-NEXT: pxor %xmm4, %xmm9
522 ; SSE2-NEXT: movdqa %xmm0, %xmm6
523 ; SSE2-NEXT: pxor %xmm7, %xmm6
524 ; SSE2-NEXT: pxor %xmm2, %xmm7
525 ; SSE2-NEXT: movdqa %xmm7, %xmm5
526 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
527 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
528 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
529 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
530 ; SSE2-NEXT: pand %xmm10, %xmm6
531 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
532 ; SSE2-NEXT: por %xmm6, %xmm5
533 ; SSE2-NEXT: pxor %xmm5, %xmm4
534 ; SSE2-NEXT: pandn %xmm0, %xmm5
535 ; SSE2-NEXT: pandn %xmm2, %xmm4
536 ; SSE2-NEXT: por %xmm5, %xmm4
537 ; SSE2-NEXT: pandn %xmm1, %xmm8
538 ; SSE2-NEXT: pandn %xmm3, %xmm9
539 ; SSE2-NEXT: por %xmm8, %xmm9
540 ; SSE2-NEXT: movdqa %xmm4, %xmm0
541 ; SSE2-NEXT: movdqa %xmm9, %xmm1
544 ; SSE41-LABEL: max_ge_v4i64:
546 ; SSE41-NEXT: movdqa %xmm0, %xmm8
547 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
548 ; SSE41-NEXT: movdqa %xmm1, %xmm5
549 ; SSE41-NEXT: pxor %xmm0, %xmm5
550 ; SSE41-NEXT: movdqa %xmm3, %xmm6
551 ; SSE41-NEXT: pxor %xmm0, %xmm6
552 ; SSE41-NEXT: movdqa %xmm6, %xmm7
553 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7
554 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
555 ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6
556 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
557 ; SSE41-NEXT: pand %xmm4, %xmm6
558 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
559 ; SSE41-NEXT: por %xmm6, %xmm5
560 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm9
561 ; SSE41-NEXT: pxor %xmm9, %xmm5
562 ; SSE41-NEXT: movdqa %xmm8, %xmm6
563 ; SSE41-NEXT: pxor %xmm0, %xmm6
564 ; SSE41-NEXT: pxor %xmm2, %xmm0
565 ; SSE41-NEXT: movdqa %xmm0, %xmm7
566 ; SSE41-NEXT: pcmpgtd %xmm6, %xmm7
567 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
568 ; SSE41-NEXT: pcmpeqd %xmm6, %xmm0
569 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
570 ; SSE41-NEXT: pand %xmm4, %xmm6
571 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
572 ; SSE41-NEXT: por %xmm6, %xmm0
573 ; SSE41-NEXT: pxor %xmm9, %xmm0
574 ; SSE41-NEXT: blendvpd %xmm8, %xmm2
575 ; SSE41-NEXT: movdqa %xmm5, %xmm0
576 ; SSE41-NEXT: blendvpd %xmm1, %xmm3
577 ; SSE41-NEXT: movapd %xmm2, %xmm0
578 ; SSE41-NEXT: movapd %xmm3, %xmm1
581 ; SSE42-LABEL: max_ge_v4i64:
583 ; SSE42-NEXT: movdqa %xmm0, %xmm4
584 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
585 ; SSE42-NEXT: movdqa %xmm1, %xmm6
586 ; SSE42-NEXT: pxor %xmm0, %xmm6
587 ; SSE42-NEXT: movdqa %xmm3, %xmm5
588 ; SSE42-NEXT: pxor %xmm0, %xmm5
589 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5
590 ; SSE42-NEXT: pcmpeqd %xmm6, %xmm6
591 ; SSE42-NEXT: pxor %xmm6, %xmm5
592 ; SSE42-NEXT: movdqa %xmm4, %xmm7
593 ; SSE42-NEXT: pxor %xmm0, %xmm7
594 ; SSE42-NEXT: pxor %xmm2, %xmm0
595 ; SSE42-NEXT: pcmpgtq %xmm7, %xmm0
596 ; SSE42-NEXT: pxor %xmm6, %xmm0
597 ; SSE42-NEXT: blendvpd %xmm4, %xmm2
598 ; SSE42-NEXT: movdqa %xmm5, %xmm0
599 ; SSE42-NEXT: blendvpd %xmm1, %xmm3
600 ; SSE42-NEXT: movapd %xmm2, %xmm0
601 ; SSE42-NEXT: movapd %xmm3, %xmm1
604 ; AVX1-LABEL: max_ge_v4i64:
606 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
607 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
608 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
609 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
610 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
611 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
612 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
613 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
614 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm5
615 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3
616 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
617 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
618 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
619 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
622 ; AVX2-LABEL: max_ge_v4i64:
624 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
625 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
626 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
627 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
628 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
629 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
630 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
633 ; AVX512-LABEL: max_ge_v4i64:
635 ; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
636 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm3
637 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm2
638 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
639 ; AVX512-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
640 ; AVX512-NEXT: vpxor %ymm3, %ymm2, %ymm2
641 ; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
643 %1 = icmp uge <4 x i64> %a, %b
644 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
648 define <4 x i32> @max_ge_v4i32(<4 x i32> %a, <4 x i32> %b) {
649 ; SSE2-LABEL: max_ge_v4i32:
651 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
652 ; SSE2-NEXT: movdqa %xmm0, %xmm2
653 ; SSE2-NEXT: pxor %xmm3, %xmm2
654 ; SSE2-NEXT: pxor %xmm1, %xmm3
655 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
656 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
657 ; SSE2-NEXT: pxor %xmm3, %xmm2
658 ; SSE2-NEXT: pandn %xmm0, %xmm3
659 ; SSE2-NEXT: pandn %xmm1, %xmm2
660 ; SSE2-NEXT: por %xmm3, %xmm2
661 ; SSE2-NEXT: movdqa %xmm2, %xmm0
664 ; SSE41-LABEL: max_ge_v4i32:
666 ; SSE41-NEXT: pmaxud %xmm1, %xmm0
669 ; SSE42-LABEL: max_ge_v4i32:
671 ; SSE42-NEXT: pmaxud %xmm1, %xmm0
674 ; AVX-LABEL: max_ge_v4i32:
676 ; AVX-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
678 %1 = icmp uge <4 x i32> %a, %b
679 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
683 define <8 x i32> @max_ge_v8i32(<8 x i32> %a, <8 x i32> %b) {
684 ; SSE2-LABEL: max_ge_v8i32:
686 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
687 ; SSE2-NEXT: movdqa %xmm1, %xmm4
688 ; SSE2-NEXT: pxor %xmm6, %xmm4
689 ; SSE2-NEXT: movdqa %xmm3, %xmm7
690 ; SSE2-NEXT: pxor %xmm6, %xmm7
691 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
692 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
693 ; SSE2-NEXT: movdqa %xmm7, %xmm5
694 ; SSE2-NEXT: pxor %xmm4, %xmm5
695 ; SSE2-NEXT: movdqa %xmm0, %xmm8
696 ; SSE2-NEXT: pxor %xmm6, %xmm8
697 ; SSE2-NEXT: pxor %xmm2, %xmm6
698 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
699 ; SSE2-NEXT: pxor %xmm6, %xmm4
700 ; SSE2-NEXT: pandn %xmm0, %xmm6
701 ; SSE2-NEXT: pandn %xmm2, %xmm4
702 ; SSE2-NEXT: por %xmm6, %xmm4
703 ; SSE2-NEXT: pandn %xmm1, %xmm7
704 ; SSE2-NEXT: pandn %xmm3, %xmm5
705 ; SSE2-NEXT: por %xmm7, %xmm5
706 ; SSE2-NEXT: movdqa %xmm4, %xmm0
707 ; SSE2-NEXT: movdqa %xmm5, %xmm1
710 ; SSE41-LABEL: max_ge_v8i32:
712 ; SSE41-NEXT: pmaxud %xmm2, %xmm0
713 ; SSE41-NEXT: pmaxud %xmm3, %xmm1
716 ; SSE42-LABEL: max_ge_v8i32:
718 ; SSE42-NEXT: pmaxud %xmm2, %xmm0
719 ; SSE42-NEXT: pmaxud %xmm3, %xmm1
722 ; AVX1-LABEL: max_ge_v8i32:
724 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
725 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
726 ; AVX1-NEXT: vpmaxud %xmm2, %xmm3, %xmm2
727 ; AVX1-NEXT: vpmaxud %xmm1, %xmm0, %xmm0
728 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
731 ; AVX2-LABEL: max_ge_v8i32:
733 ; AVX2-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
736 ; AVX512-LABEL: max_ge_v8i32:
738 ; AVX512-NEXT: vpmaxud %ymm1, %ymm0, %ymm0
740 %1 = icmp uge <8 x i32> %a, %b
741 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
745 define <8 x i16> @max_ge_v8i16(<8 x i16> %a, <8 x i16> %b) {
746 ; SSE2-LABEL: max_ge_v8i16:
748 ; SSE2-NEXT: movdqa %xmm1, %xmm2
749 ; SSE2-NEXT: psubusw %xmm0, %xmm2
750 ; SSE2-NEXT: pxor %xmm3, %xmm3
751 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3
752 ; SSE2-NEXT: pand %xmm3, %xmm0
753 ; SSE2-NEXT: pandn %xmm1, %xmm3
754 ; SSE2-NEXT: por %xmm3, %xmm0
757 ; SSE41-LABEL: max_ge_v8i16:
759 ; SSE41-NEXT: pmaxuw %xmm1, %xmm0
762 ; SSE42-LABEL: max_ge_v8i16:
764 ; SSE42-NEXT: pmaxuw %xmm1, %xmm0
767 ; AVX-LABEL: max_ge_v8i16:
769 ; AVX-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
771 %1 = icmp uge <8 x i16> %a, %b
772 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
776 define <16 x i16> @max_ge_v16i16(<16 x i16> %a, <16 x i16> %b) {
777 ; SSE2-LABEL: max_ge_v16i16:
779 ; SSE2-NEXT: movdqa %xmm3, %xmm4
780 ; SSE2-NEXT: psubusw %xmm1, %xmm4
781 ; SSE2-NEXT: pxor %xmm5, %xmm5
782 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm4
783 ; SSE2-NEXT: movdqa %xmm2, %xmm6
784 ; SSE2-NEXT: psubusw %xmm0, %xmm6
785 ; SSE2-NEXT: pcmpeqw %xmm5, %xmm6
786 ; SSE2-NEXT: pand %xmm6, %xmm0
787 ; SSE2-NEXT: pandn %xmm2, %xmm6
788 ; SSE2-NEXT: por %xmm6, %xmm0
789 ; SSE2-NEXT: pand %xmm4, %xmm1
790 ; SSE2-NEXT: pandn %xmm3, %xmm4
791 ; SSE2-NEXT: por %xmm4, %xmm1
794 ; SSE41-LABEL: max_ge_v16i16:
796 ; SSE41-NEXT: pmaxuw %xmm2, %xmm0
797 ; SSE41-NEXT: pmaxuw %xmm3, %xmm1
800 ; SSE42-LABEL: max_ge_v16i16:
802 ; SSE42-NEXT: pmaxuw %xmm2, %xmm0
803 ; SSE42-NEXT: pmaxuw %xmm3, %xmm1
806 ; AVX1-LABEL: max_ge_v16i16:
808 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
809 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
810 ; AVX1-NEXT: vpmaxuw %xmm2, %xmm3, %xmm2
811 ; AVX1-NEXT: vpmaxuw %xmm1, %xmm0, %xmm0
812 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
815 ; AVX2-LABEL: max_ge_v16i16:
817 ; AVX2-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
820 ; AVX512-LABEL: max_ge_v16i16:
822 ; AVX512-NEXT: vpmaxuw %ymm1, %ymm0, %ymm0
824 %1 = icmp uge <16 x i16> %a, %b
825 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
829 define <16 x i8> @max_ge_v16i8(<16 x i8> %a, <16 x i8> %b) {
830 ; SSE-LABEL: max_ge_v16i8:
832 ; SSE-NEXT: pmaxub %xmm1, %xmm0
835 ; AVX-LABEL: max_ge_v16i8:
837 ; AVX-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
839 %1 = icmp uge <16 x i8> %a, %b
840 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
844 define <32 x i8> @max_ge_v32i8(<32 x i8> %a, <32 x i8> %b) {
845 ; SSE-LABEL: max_ge_v32i8:
847 ; SSE-NEXT: pmaxub %xmm2, %xmm0
848 ; SSE-NEXT: pmaxub %xmm3, %xmm1
851 ; AVX1-LABEL: max_ge_v32i8:
853 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
854 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
855 ; AVX1-NEXT: vpmaxub %xmm2, %xmm3, %xmm2
856 ; AVX1-NEXT: vpmaxub %xmm1, %xmm0, %xmm0
857 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
860 ; AVX2-LABEL: max_ge_v32i8:
862 ; AVX2-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
865 ; AVX512-LABEL: max_ge_v32i8:
867 ; AVX512-NEXT: vpmaxub %ymm1, %ymm0, %ymm0
869 %1 = icmp uge <32 x i8> %a, %b
870 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
875 ; Unsigned Minimum (LT)
878 define <2 x i64> @min_lt_v2i64(<2 x i64> %a, <2 x i64> %b) {
879 ; SSE2-LABEL: min_lt_v2i64:
881 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
882 ; SSE2-NEXT: movdqa %xmm0, %xmm3
883 ; SSE2-NEXT: pxor %xmm2, %xmm3
884 ; SSE2-NEXT: pxor %xmm1, %xmm2
885 ; SSE2-NEXT: movdqa %xmm2, %xmm4
886 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
887 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
888 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
889 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
890 ; SSE2-NEXT: pand %xmm5, %xmm2
891 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
892 ; SSE2-NEXT: por %xmm2, %xmm3
893 ; SSE2-NEXT: pand %xmm3, %xmm0
894 ; SSE2-NEXT: pandn %xmm1, %xmm3
895 ; SSE2-NEXT: por %xmm3, %xmm0
898 ; SSE41-LABEL: min_lt_v2i64:
900 ; SSE41-NEXT: movdqa %xmm0, %xmm2
901 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
902 ; SSE41-NEXT: movdqa %xmm2, %xmm3
903 ; SSE41-NEXT: pxor %xmm0, %xmm3
904 ; SSE41-NEXT: pxor %xmm1, %xmm0
905 ; SSE41-NEXT: movdqa %xmm0, %xmm4
906 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4
907 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
908 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0
909 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
910 ; SSE41-NEXT: pand %xmm5, %xmm3
911 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
912 ; SSE41-NEXT: por %xmm3, %xmm0
913 ; SSE41-NEXT: blendvpd %xmm2, %xmm1
914 ; SSE41-NEXT: movapd %xmm1, %xmm0
917 ; SSE42-LABEL: min_lt_v2i64:
919 ; SSE42-NEXT: movdqa %xmm0, %xmm2
920 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
921 ; SSE42-NEXT: movdqa %xmm2, %xmm3
922 ; SSE42-NEXT: pxor %xmm0, %xmm3
923 ; SSE42-NEXT: pxor %xmm1, %xmm0
924 ; SSE42-NEXT: pcmpgtq %xmm3, %xmm0
925 ; SSE42-NEXT: blendvpd %xmm2, %xmm1
926 ; SSE42-NEXT: movapd %xmm1, %xmm0
929 ; AVX-LABEL: min_lt_v2i64:
931 ; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
932 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm3
933 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm2
934 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
935 ; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
937 %1 = icmp ult <2 x i64> %a, %b
938 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
942 define <4 x i64> @min_lt_v4i64(<4 x i64> %a, <4 x i64> %b) {
943 ; SSE2-LABEL: min_lt_v4i64:
945 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
946 ; SSE2-NEXT: movdqa %xmm1, %xmm5
947 ; SSE2-NEXT: pxor %xmm4, %xmm5
948 ; SSE2-NEXT: movdqa %xmm3, %xmm6
949 ; SSE2-NEXT: pxor %xmm4, %xmm6
950 ; SSE2-NEXT: movdqa %xmm6, %xmm7
951 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
952 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
953 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm6
954 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
955 ; SSE2-NEXT: pand %xmm8, %xmm5
956 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
957 ; SSE2-NEXT: por %xmm5, %xmm6
958 ; SSE2-NEXT: movdqa %xmm0, %xmm5
959 ; SSE2-NEXT: pxor %xmm4, %xmm5
960 ; SSE2-NEXT: pxor %xmm2, %xmm4
961 ; SSE2-NEXT: movdqa %xmm4, %xmm7
962 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm7
963 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm7[0,0,2,2]
964 ; SSE2-NEXT: pcmpeqd %xmm5, %xmm4
965 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
966 ; SSE2-NEXT: pand %xmm8, %xmm4
967 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
968 ; SSE2-NEXT: por %xmm4, %xmm5
969 ; SSE2-NEXT: pand %xmm5, %xmm0
970 ; SSE2-NEXT: pandn %xmm2, %xmm5
971 ; SSE2-NEXT: por %xmm5, %xmm0
972 ; SSE2-NEXT: pand %xmm6, %xmm1
973 ; SSE2-NEXT: pandn %xmm3, %xmm6
974 ; SSE2-NEXT: por %xmm6, %xmm1
977 ; SSE41-LABEL: min_lt_v4i64:
979 ; SSE41-NEXT: movdqa %xmm0, %xmm8
980 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
981 ; SSE41-NEXT: movdqa %xmm1, %xmm5
982 ; SSE41-NEXT: pxor %xmm0, %xmm5
983 ; SSE41-NEXT: movdqa %xmm3, %xmm6
984 ; SSE41-NEXT: pxor %xmm0, %xmm6
985 ; SSE41-NEXT: movdqa %xmm6, %xmm7
986 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7
987 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
988 ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6
989 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
990 ; SSE41-NEXT: pand %xmm4, %xmm6
991 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
992 ; SSE41-NEXT: por %xmm6, %xmm5
993 ; SSE41-NEXT: movdqa %xmm8, %xmm4
994 ; SSE41-NEXT: pxor %xmm0, %xmm4
995 ; SSE41-NEXT: pxor %xmm2, %xmm0
996 ; SSE41-NEXT: movdqa %xmm0, %xmm6
997 ; SSE41-NEXT: pcmpgtd %xmm4, %xmm6
998 ; SSE41-NEXT: pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
999 ; SSE41-NEXT: pcmpeqd %xmm4, %xmm0
1000 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
1001 ; SSE41-NEXT: pand %xmm7, %xmm4
1002 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
1003 ; SSE41-NEXT: por %xmm4, %xmm0
1004 ; SSE41-NEXT: blendvpd %xmm8, %xmm2
1005 ; SSE41-NEXT: movdqa %xmm5, %xmm0
1006 ; SSE41-NEXT: blendvpd %xmm1, %xmm3
1007 ; SSE41-NEXT: movapd %xmm2, %xmm0
1008 ; SSE41-NEXT: movapd %xmm3, %xmm1
1011 ; SSE42-LABEL: min_lt_v4i64:
1013 ; SSE42-NEXT: movdqa %xmm0, %xmm4
1014 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
1015 ; SSE42-NEXT: movdqa %xmm1, %xmm6
1016 ; SSE42-NEXT: pxor %xmm0, %xmm6
1017 ; SSE42-NEXT: movdqa %xmm3, %xmm5
1018 ; SSE42-NEXT: pxor %xmm0, %xmm5
1019 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5
1020 ; SSE42-NEXT: movdqa %xmm4, %xmm6
1021 ; SSE42-NEXT: pxor %xmm0, %xmm6
1022 ; SSE42-NEXT: pxor %xmm2, %xmm0
1023 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm0
1024 ; SSE42-NEXT: blendvpd %xmm4, %xmm2
1025 ; SSE42-NEXT: movdqa %xmm5, %xmm0
1026 ; SSE42-NEXT: blendvpd %xmm1, %xmm3
1027 ; SSE42-NEXT: movapd %xmm2, %xmm0
1028 ; SSE42-NEXT: movapd %xmm3, %xmm1
1031 ; AVX1-LABEL: min_lt_v4i64:
1033 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm2
1034 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1035 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
1036 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm4
1037 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
1038 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1039 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm4
1040 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm3
1041 ; AVX1-NEXT: vpcmpgtq %xmm4, %xmm3, %xmm3
1042 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1043 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1046 ; AVX2-LABEL: min_lt_v4i64:
1048 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
1049 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm3
1050 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm2
1051 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
1052 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1055 ; AVX512-LABEL: min_lt_v4i64:
1057 ; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
1058 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm3
1059 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm2
1060 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
1061 ; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1063 %1 = icmp ult <4 x i64> %a, %b
1064 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
1068 define <4 x i32> @min_lt_v4i32(<4 x i32> %a, <4 x i32> %b) {
1069 ; SSE2-LABEL: min_lt_v4i32:
1071 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1072 ; SSE2-NEXT: movdqa %xmm0, %xmm3
1073 ; SSE2-NEXT: pxor %xmm2, %xmm3
1074 ; SSE2-NEXT: pxor %xmm1, %xmm2
1075 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm2
1076 ; SSE2-NEXT: pand %xmm2, %xmm0
1077 ; SSE2-NEXT: pandn %xmm1, %xmm2
1078 ; SSE2-NEXT: por %xmm2, %xmm0
1081 ; SSE41-LABEL: min_lt_v4i32:
1083 ; SSE41-NEXT: pminud %xmm1, %xmm0
1086 ; SSE42-LABEL: min_lt_v4i32:
1088 ; SSE42-NEXT: pminud %xmm1, %xmm0
1091 ; AVX-LABEL: min_lt_v4i32:
1093 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
1095 %1 = icmp ult <4 x i32> %a, %b
1096 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
1100 define <8 x i32> @min_lt_v8i32(<8 x i32> %a, <8 x i32> %b) {
1101 ; SSE2-LABEL: min_lt_v8i32:
1103 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [2147483648,2147483648,2147483648,2147483648]
1104 ; SSE2-NEXT: movdqa %xmm1, %xmm5
1105 ; SSE2-NEXT: pxor %xmm4, %xmm5
1106 ; SSE2-NEXT: movdqa %xmm3, %xmm6
1107 ; SSE2-NEXT: pxor %xmm4, %xmm6
1108 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm6
1109 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1110 ; SSE2-NEXT: pxor %xmm4, %xmm5
1111 ; SSE2-NEXT: pxor %xmm2, %xmm4
1112 ; SSE2-NEXT: pcmpgtd %xmm5, %xmm4
1113 ; SSE2-NEXT: pand %xmm4, %xmm0
1114 ; SSE2-NEXT: pandn %xmm2, %xmm4
1115 ; SSE2-NEXT: por %xmm4, %xmm0
1116 ; SSE2-NEXT: pand %xmm6, %xmm1
1117 ; SSE2-NEXT: pandn %xmm3, %xmm6
1118 ; SSE2-NEXT: por %xmm6, %xmm1
1121 ; SSE41-LABEL: min_lt_v8i32:
1123 ; SSE41-NEXT: pminud %xmm2, %xmm0
1124 ; SSE41-NEXT: pminud %xmm3, %xmm1
1127 ; SSE42-LABEL: min_lt_v8i32:
1129 ; SSE42-NEXT: pminud %xmm2, %xmm0
1130 ; SSE42-NEXT: pminud %xmm3, %xmm1
1133 ; AVX1-LABEL: min_lt_v8i32:
1135 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1136 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1137 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
1138 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
1139 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1142 ; AVX2-LABEL: min_lt_v8i32:
1144 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
1147 ; AVX512-LABEL: min_lt_v8i32:
1149 ; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0
1151 %1 = icmp ult <8 x i32> %a, %b
1152 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
1156 define <8 x i16> @min_lt_v8i16(<8 x i16> %a, <8 x i16> %b) {
1157 ; SSE2-LABEL: min_lt_v8i16:
1159 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
1160 ; SSE2-NEXT: movdqa %xmm0, %xmm3
1161 ; SSE2-NEXT: pxor %xmm2, %xmm3
1162 ; SSE2-NEXT: pxor %xmm1, %xmm2
1163 ; SSE2-NEXT: pcmpgtw %xmm3, %xmm2
1164 ; SSE2-NEXT: pand %xmm2, %xmm0
1165 ; SSE2-NEXT: pandn %xmm1, %xmm2
1166 ; SSE2-NEXT: por %xmm2, %xmm0
1169 ; SSE41-LABEL: min_lt_v8i16:
1171 ; SSE41-NEXT: pminuw %xmm1, %xmm0
1174 ; SSE42-LABEL: min_lt_v8i16:
1176 ; SSE42-NEXT: pminuw %xmm1, %xmm0
1179 ; AVX-LABEL: min_lt_v8i16:
1181 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1183 %1 = icmp ult <8 x i16> %a, %b
1184 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
1188 define <16 x i16> @min_lt_v16i16(<16 x i16> %a, <16 x i16> %b) {
1189 ; SSE2-LABEL: min_lt_v16i16:
1191 ; SSE2-NEXT: movdqa {{.*#+}} xmm4 = [32768,32768,32768,32768,32768,32768,32768,32768]
1192 ; SSE2-NEXT: movdqa %xmm1, %xmm5
1193 ; SSE2-NEXT: pxor %xmm4, %xmm5
1194 ; SSE2-NEXT: movdqa %xmm3, %xmm6
1195 ; SSE2-NEXT: pxor %xmm4, %xmm6
1196 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm6
1197 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1198 ; SSE2-NEXT: pxor %xmm4, %xmm5
1199 ; SSE2-NEXT: pxor %xmm2, %xmm4
1200 ; SSE2-NEXT: pcmpgtw %xmm5, %xmm4
1201 ; SSE2-NEXT: pand %xmm4, %xmm0
1202 ; SSE2-NEXT: pandn %xmm2, %xmm4
1203 ; SSE2-NEXT: por %xmm4, %xmm0
1204 ; SSE2-NEXT: pand %xmm6, %xmm1
1205 ; SSE2-NEXT: pandn %xmm3, %xmm6
1206 ; SSE2-NEXT: por %xmm6, %xmm1
1209 ; SSE41-LABEL: min_lt_v16i16:
1211 ; SSE41-NEXT: pminuw %xmm2, %xmm0
1212 ; SSE41-NEXT: pminuw %xmm3, %xmm1
1215 ; SSE42-LABEL: min_lt_v16i16:
1217 ; SSE42-NEXT: pminuw %xmm2, %xmm0
1218 ; SSE42-NEXT: pminuw %xmm3, %xmm1
1221 ; AVX1-LABEL: min_lt_v16i16:
1223 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1224 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1225 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
1226 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1227 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1230 ; AVX2-LABEL: min_lt_v16i16:
1232 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1235 ; AVX512-LABEL: min_lt_v16i16:
1237 ; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1239 %1 = icmp ult <16 x i16> %a, %b
1240 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
1244 define <16 x i8> @min_lt_v16i8(<16 x i8> %a, <16 x i8> %b) {
1245 ; SSE-LABEL: min_lt_v16i8:
1247 ; SSE-NEXT: pminub %xmm1, %xmm0
1250 ; AVX-LABEL: min_lt_v16i8:
1252 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
1254 %1 = icmp ult <16 x i8> %a, %b
1255 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
1259 define <32 x i8> @min_lt_v32i8(<32 x i8> %a, <32 x i8> %b) {
1260 ; SSE-LABEL: min_lt_v32i8:
1262 ; SSE-NEXT: pminub %xmm2, %xmm0
1263 ; SSE-NEXT: pminub %xmm3, %xmm1
1266 ; AVX1-LABEL: min_lt_v32i8:
1268 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1269 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1270 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
1271 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
1272 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1275 ; AVX2-LABEL: min_lt_v32i8:
1277 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
1280 ; AVX512-LABEL: min_lt_v32i8:
1282 ; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0
1284 %1 = icmp ult <32 x i8> %a, %b
1285 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
1290 ; Unsigned Minimum (LE)
1293 define <2 x i64> @min_le_v2i64(<2 x i64> %a, <2 x i64> %b) {
1294 ; SSE2-LABEL: min_le_v2i64:
1296 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
1297 ; SSE2-NEXT: movdqa %xmm1, %xmm3
1298 ; SSE2-NEXT: pxor %xmm2, %xmm3
1299 ; SSE2-NEXT: pxor %xmm0, %xmm2
1300 ; SSE2-NEXT: movdqa %xmm2, %xmm4
1301 ; SSE2-NEXT: pcmpgtd %xmm3, %xmm4
1302 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1303 ; SSE2-NEXT: pcmpeqd %xmm3, %xmm2
1304 ; SSE2-NEXT: pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
1305 ; SSE2-NEXT: pand %xmm5, %xmm2
1306 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1307 ; SSE2-NEXT: por %xmm2, %xmm3
1308 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
1309 ; SSE2-NEXT: pxor %xmm3, %xmm2
1310 ; SSE2-NEXT: pandn %xmm0, %xmm3
1311 ; SSE2-NEXT: pandn %xmm1, %xmm2
1312 ; SSE2-NEXT: por %xmm3, %xmm2
1313 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1316 ; SSE41-LABEL: min_le_v2i64:
1318 ; SSE41-NEXT: movdqa %xmm0, %xmm2
1319 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
1320 ; SSE41-NEXT: movdqa %xmm1, %xmm3
1321 ; SSE41-NEXT: pxor %xmm0, %xmm3
1322 ; SSE41-NEXT: pxor %xmm2, %xmm0
1323 ; SSE41-NEXT: movdqa %xmm0, %xmm4
1324 ; SSE41-NEXT: pcmpgtd %xmm3, %xmm4
1325 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
1326 ; SSE41-NEXT: pcmpeqd %xmm3, %xmm0
1327 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
1328 ; SSE41-NEXT: pand %xmm5, %xmm0
1329 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
1330 ; SSE41-NEXT: por %xmm0, %xmm3
1331 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0
1332 ; SSE41-NEXT: pxor %xmm3, %xmm0
1333 ; SSE41-NEXT: blendvpd %xmm2, %xmm1
1334 ; SSE41-NEXT: movapd %xmm1, %xmm0
1337 ; SSE42-LABEL: min_le_v2i64:
1339 ; SSE42-NEXT: movdqa %xmm0, %xmm2
1340 ; SSE42-NEXT: movdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1341 ; SSE42-NEXT: movdqa %xmm1, %xmm0
1342 ; SSE42-NEXT: pxor %xmm3, %xmm0
1343 ; SSE42-NEXT: pxor %xmm2, %xmm3
1344 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm3
1345 ; SSE42-NEXT: pcmpeqd %xmm0, %xmm0
1346 ; SSE42-NEXT: pxor %xmm3, %xmm0
1347 ; SSE42-NEXT: blendvpd %xmm2, %xmm1
1348 ; SSE42-NEXT: movapd %xmm1, %xmm0
1351 ; AVX-LABEL: min_le_v2i64:
1353 ; AVX-NEXT: vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
1354 ; AVX-NEXT: vpxor %xmm2, %xmm1, %xmm3
1355 ; AVX-NEXT: vpxor %xmm2, %xmm0, %xmm2
1356 ; AVX-NEXT: vpcmpgtq %xmm3, %xmm2, %xmm2
1357 ; AVX-NEXT: vpcmpeqd %xmm3, %xmm3, %xmm3
1358 ; AVX-NEXT: vpxor %xmm3, %xmm2, %xmm2
1359 ; AVX-NEXT: vblendvpd %xmm2, %xmm0, %xmm1, %xmm0
1361 %1 = icmp ule <2 x i64> %a, %b
1362 %2 = select <2 x i1> %1, <2 x i64> %a, <2 x i64> %b
1366 define <4 x i64> @min_le_v4i64(<4 x i64> %a, <4 x i64> %b) {
1367 ; SSE2-LABEL: min_le_v4i64:
1369 ; SSE2-NEXT: movdqa {{.*#+}} xmm7 = [2147483648,2147483648,2147483648,2147483648]
1370 ; SSE2-NEXT: movdqa %xmm3, %xmm4
1371 ; SSE2-NEXT: pxor %xmm7, %xmm4
1372 ; SSE2-NEXT: movdqa %xmm1, %xmm5
1373 ; SSE2-NEXT: pxor %xmm7, %xmm5
1374 ; SSE2-NEXT: movdqa %xmm5, %xmm6
1375 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm6
1376 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
1377 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm5
1378 ; SSE2-NEXT: pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
1379 ; SSE2-NEXT: pand %xmm8, %xmm4
1380 ; SSE2-NEXT: pshufd {{.*#+}} xmm8 = xmm6[1,1,3,3]
1381 ; SSE2-NEXT: por %xmm4, %xmm8
1382 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
1383 ; SSE2-NEXT: movdqa %xmm8, %xmm9
1384 ; SSE2-NEXT: pxor %xmm4, %xmm9
1385 ; SSE2-NEXT: movdqa %xmm2, %xmm6
1386 ; SSE2-NEXT: pxor %xmm7, %xmm6
1387 ; SSE2-NEXT: pxor %xmm0, %xmm7
1388 ; SSE2-NEXT: movdqa %xmm7, %xmm5
1389 ; SSE2-NEXT: pcmpgtd %xmm6, %xmm5
1390 ; SSE2-NEXT: pshufd {{.*#+}} xmm10 = xmm5[0,0,2,2]
1391 ; SSE2-NEXT: pcmpeqd %xmm6, %xmm7
1392 ; SSE2-NEXT: pshufd {{.*#+}} xmm6 = xmm7[1,1,3,3]
1393 ; SSE2-NEXT: pand %xmm10, %xmm6
1394 ; SSE2-NEXT: pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
1395 ; SSE2-NEXT: por %xmm6, %xmm5
1396 ; SSE2-NEXT: pxor %xmm5, %xmm4
1397 ; SSE2-NEXT: pandn %xmm0, %xmm5
1398 ; SSE2-NEXT: pandn %xmm2, %xmm4
1399 ; SSE2-NEXT: por %xmm5, %xmm4
1400 ; SSE2-NEXT: pandn %xmm1, %xmm8
1401 ; SSE2-NEXT: pandn %xmm3, %xmm9
1402 ; SSE2-NEXT: por %xmm8, %xmm9
1403 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1404 ; SSE2-NEXT: movdqa %xmm9, %xmm1
1407 ; SSE41-LABEL: min_le_v4i64:
1409 ; SSE41-NEXT: movdqa %xmm0, %xmm8
1410 ; SSE41-NEXT: movdqa {{.*#+}} xmm0 = [2147483648,2147483648,2147483648,2147483648]
1411 ; SSE41-NEXT: movdqa %xmm3, %xmm5
1412 ; SSE41-NEXT: pxor %xmm0, %xmm5
1413 ; SSE41-NEXT: movdqa %xmm1, %xmm6
1414 ; SSE41-NEXT: pxor %xmm0, %xmm6
1415 ; SSE41-NEXT: movdqa %xmm6, %xmm7
1416 ; SSE41-NEXT: pcmpgtd %xmm5, %xmm7
1417 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
1418 ; SSE41-NEXT: pcmpeqd %xmm5, %xmm6
1419 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
1420 ; SSE41-NEXT: pand %xmm4, %xmm6
1421 ; SSE41-NEXT: pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
1422 ; SSE41-NEXT: por %xmm6, %xmm5
1423 ; SSE41-NEXT: pcmpeqd %xmm9, %xmm9
1424 ; SSE41-NEXT: pxor %xmm9, %xmm5
1425 ; SSE41-NEXT: movdqa %xmm2, %xmm6
1426 ; SSE41-NEXT: pxor %xmm0, %xmm6
1427 ; SSE41-NEXT: pxor %xmm8, %xmm0
1428 ; SSE41-NEXT: movdqa %xmm0, %xmm7
1429 ; SSE41-NEXT: pcmpgtd %xmm6, %xmm7
1430 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm7[0,0,2,2]
1431 ; SSE41-NEXT: pcmpeqd %xmm6, %xmm0
1432 ; SSE41-NEXT: pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
1433 ; SSE41-NEXT: pand %xmm4, %xmm6
1434 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm7[1,1,3,3]
1435 ; SSE41-NEXT: por %xmm6, %xmm0
1436 ; SSE41-NEXT: pxor %xmm9, %xmm0
1437 ; SSE41-NEXT: blendvpd %xmm8, %xmm2
1438 ; SSE41-NEXT: movdqa %xmm5, %xmm0
1439 ; SSE41-NEXT: blendvpd %xmm1, %xmm3
1440 ; SSE41-NEXT: movapd %xmm2, %xmm0
1441 ; SSE41-NEXT: movapd %xmm3, %xmm1
1444 ; SSE42-LABEL: min_le_v4i64:
1446 ; SSE42-NEXT: movdqa %xmm0, %xmm4
1447 ; SSE42-NEXT: movdqa {{.*#+}} xmm0 = [9223372036854775808,9223372036854775808]
1448 ; SSE42-NEXT: movdqa %xmm3, %xmm6
1449 ; SSE42-NEXT: pxor %xmm0, %xmm6
1450 ; SSE42-NEXT: movdqa %xmm1, %xmm5
1451 ; SSE42-NEXT: pxor %xmm0, %xmm5
1452 ; SSE42-NEXT: pcmpgtq %xmm6, %xmm5
1453 ; SSE42-NEXT: pcmpeqd %xmm6, %xmm6
1454 ; SSE42-NEXT: pxor %xmm6, %xmm5
1455 ; SSE42-NEXT: movdqa %xmm2, %xmm7
1456 ; SSE42-NEXT: pxor %xmm0, %xmm7
1457 ; SSE42-NEXT: pxor %xmm4, %xmm0
1458 ; SSE42-NEXT: pcmpgtq %xmm7, %xmm0
1459 ; SSE42-NEXT: pxor %xmm6, %xmm0
1460 ; SSE42-NEXT: blendvpd %xmm4, %xmm2
1461 ; SSE42-NEXT: movdqa %xmm5, %xmm0
1462 ; SSE42-NEXT: blendvpd %xmm1, %xmm3
1463 ; SSE42-NEXT: movapd %xmm2, %xmm0
1464 ; SSE42-NEXT: movapd %xmm3, %xmm1
1467 ; AVX1-LABEL: min_le_v4i64:
1469 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1470 ; AVX1-NEXT: vmovaps {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
1471 ; AVX1-NEXT: vxorps %xmm3, %xmm2, %xmm2
1472 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm4
1473 ; AVX1-NEXT: vxorps %xmm3, %xmm4, %xmm4
1474 ; AVX1-NEXT: vpcmpgtq %xmm2, %xmm4, %xmm2
1475 ; AVX1-NEXT: vpcmpeqd %xmm4, %xmm4, %xmm4
1476 ; AVX1-NEXT: vpxor %xmm4, %xmm2, %xmm2
1477 ; AVX1-NEXT: vxorps %xmm3, %xmm1, %xmm5
1478 ; AVX1-NEXT: vxorps %xmm3, %xmm0, %xmm3
1479 ; AVX1-NEXT: vpcmpgtq %xmm5, %xmm3, %xmm3
1480 ; AVX1-NEXT: vpxor %xmm4, %xmm3, %xmm3
1481 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2
1482 ; AVX1-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1485 ; AVX2-LABEL: min_le_v4i64:
1487 ; AVX2-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
1488 ; AVX2-NEXT: vpxor %ymm2, %ymm1, %ymm3
1489 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm2
1490 ; AVX2-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
1491 ; AVX2-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
1492 ; AVX2-NEXT: vpxor %ymm3, %ymm2, %ymm2
1493 ; AVX2-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1496 ; AVX512-LABEL: min_le_v4i64:
1498 ; AVX512-NEXT: vpbroadcastq {{.*}}(%rip), %ymm2
1499 ; AVX512-NEXT: vpxor %ymm2, %ymm1, %ymm3
1500 ; AVX512-NEXT: vpxor %ymm2, %ymm0, %ymm2
1501 ; AVX512-NEXT: vpcmpgtq %ymm3, %ymm2, %ymm2
1502 ; AVX512-NEXT: vpcmpeqd %ymm3, %ymm3, %ymm3
1503 ; AVX512-NEXT: vpxor %ymm3, %ymm2, %ymm2
1504 ; AVX512-NEXT: vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
1506 %1 = icmp ule <4 x i64> %a, %b
1507 %2 = select <4 x i1> %1, <4 x i64> %a, <4 x i64> %b
1511 define <4 x i32> @min_le_v4i32(<4 x i32> %a, <4 x i32> %b) {
1512 ; SSE2-LABEL: min_le_v4i32:
1514 ; SSE2-NEXT: movdqa {{.*#+}} xmm3 = [2147483648,2147483648,2147483648,2147483648]
1515 ; SSE2-NEXT: movdqa %xmm1, %xmm2
1516 ; SSE2-NEXT: pxor %xmm3, %xmm2
1517 ; SSE2-NEXT: pxor %xmm0, %xmm3
1518 ; SSE2-NEXT: pcmpgtd %xmm2, %xmm3
1519 ; SSE2-NEXT: pcmpeqd %xmm2, %xmm2
1520 ; SSE2-NEXT: pxor %xmm3, %xmm2
1521 ; SSE2-NEXT: pandn %xmm0, %xmm3
1522 ; SSE2-NEXT: pandn %xmm1, %xmm2
1523 ; SSE2-NEXT: por %xmm3, %xmm2
1524 ; SSE2-NEXT: movdqa %xmm2, %xmm0
1527 ; SSE41-LABEL: min_le_v4i32:
1529 ; SSE41-NEXT: pminud %xmm1, %xmm0
1532 ; SSE42-LABEL: min_le_v4i32:
1534 ; SSE42-NEXT: pminud %xmm1, %xmm0
1537 ; AVX-LABEL: min_le_v4i32:
1539 ; AVX-NEXT: vpminud %xmm1, %xmm0, %xmm0
1541 %1 = icmp ule <4 x i32> %a, %b
1542 %2 = select <4 x i1> %1, <4 x i32> %a, <4 x i32> %b
1546 define <8 x i32> @min_le_v8i32(<8 x i32> %a, <8 x i32> %b) {
1547 ; SSE2-LABEL: min_le_v8i32:
1549 ; SSE2-NEXT: movdqa {{.*#+}} xmm6 = [2147483648,2147483648,2147483648,2147483648]
1550 ; SSE2-NEXT: movdqa %xmm3, %xmm4
1551 ; SSE2-NEXT: pxor %xmm6, %xmm4
1552 ; SSE2-NEXT: movdqa %xmm1, %xmm7
1553 ; SSE2-NEXT: pxor %xmm6, %xmm7
1554 ; SSE2-NEXT: pcmpgtd %xmm4, %xmm7
1555 ; SSE2-NEXT: pcmpeqd %xmm4, %xmm4
1556 ; SSE2-NEXT: movdqa %xmm7, %xmm5
1557 ; SSE2-NEXT: pxor %xmm4, %xmm5
1558 ; SSE2-NEXT: movdqa %xmm2, %xmm8
1559 ; SSE2-NEXT: pxor %xmm6, %xmm8
1560 ; SSE2-NEXT: pxor %xmm0, %xmm6
1561 ; SSE2-NEXT: pcmpgtd %xmm8, %xmm6
1562 ; SSE2-NEXT: pxor %xmm6, %xmm4
1563 ; SSE2-NEXT: pandn %xmm0, %xmm6
1564 ; SSE2-NEXT: pandn %xmm2, %xmm4
1565 ; SSE2-NEXT: por %xmm6, %xmm4
1566 ; SSE2-NEXT: pandn %xmm1, %xmm7
1567 ; SSE2-NEXT: pandn %xmm3, %xmm5
1568 ; SSE2-NEXT: por %xmm7, %xmm5
1569 ; SSE2-NEXT: movdqa %xmm4, %xmm0
1570 ; SSE2-NEXT: movdqa %xmm5, %xmm1
1573 ; SSE41-LABEL: min_le_v8i32:
1575 ; SSE41-NEXT: pminud %xmm2, %xmm0
1576 ; SSE41-NEXT: pminud %xmm3, %xmm1
1579 ; SSE42-LABEL: min_le_v8i32:
1581 ; SSE42-NEXT: pminud %xmm2, %xmm0
1582 ; SSE42-NEXT: pminud %xmm3, %xmm1
1585 ; AVX1-LABEL: min_le_v8i32:
1587 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1588 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1589 ; AVX1-NEXT: vpminud %xmm2, %xmm3, %xmm2
1590 ; AVX1-NEXT: vpminud %xmm1, %xmm0, %xmm0
1591 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1594 ; AVX2-LABEL: min_le_v8i32:
1596 ; AVX2-NEXT: vpminud %ymm1, %ymm0, %ymm0
1599 ; AVX512-LABEL: min_le_v8i32:
1601 ; AVX512-NEXT: vpminud %ymm1, %ymm0, %ymm0
1603 %1 = icmp ule <8 x i32> %a, %b
1604 %2 = select <8 x i1> %1, <8 x i32> %a, <8 x i32> %b
1608 define <8 x i16> @min_le_v8i16(<8 x i16> %a, <8 x i16> %b) {
1609 ; SSE2-LABEL: min_le_v8i16:
1611 ; SSE2-NEXT: movdqa %xmm0, %xmm2
1612 ; SSE2-NEXT: psubusw %xmm1, %xmm2
1613 ; SSE2-NEXT: pxor %xmm3, %xmm3
1614 ; SSE2-NEXT: pcmpeqw %xmm2, %xmm3
1615 ; SSE2-NEXT: pand %xmm3, %xmm0
1616 ; SSE2-NEXT: pandn %xmm1, %xmm3
1617 ; SSE2-NEXT: por %xmm3, %xmm0
1620 ; SSE41-LABEL: min_le_v8i16:
1622 ; SSE41-NEXT: pminuw %xmm1, %xmm0
1625 ; SSE42-LABEL: min_le_v8i16:
1627 ; SSE42-NEXT: pminuw %xmm1, %xmm0
1630 ; AVX-LABEL: min_le_v8i16:
1632 ; AVX-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1634 %1 = icmp ule <8 x i16> %a, %b
1635 %2 = select <8 x i1> %1, <8 x i16> %a, <8 x i16> %b
1639 define <16 x i16> @min_le_v16i16(<16 x i16> %a, <16 x i16> %b) {
1640 ; SSE2-LABEL: min_le_v16i16:
1642 ; SSE2-NEXT: movdqa %xmm1, %xmm4
1643 ; SSE2-NEXT: psubusw %xmm3, %xmm4
1644 ; SSE2-NEXT: pxor %xmm6, %xmm6
1645 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm4
1646 ; SSE2-NEXT: movdqa %xmm0, %xmm5
1647 ; SSE2-NEXT: psubusw %xmm2, %xmm5
1648 ; SSE2-NEXT: pcmpeqw %xmm6, %xmm5
1649 ; SSE2-NEXT: pand %xmm5, %xmm0
1650 ; SSE2-NEXT: pandn %xmm2, %xmm5
1651 ; SSE2-NEXT: por %xmm0, %xmm5
1652 ; SSE2-NEXT: pand %xmm4, %xmm1
1653 ; SSE2-NEXT: pandn %xmm3, %xmm4
1654 ; SSE2-NEXT: por %xmm1, %xmm4
1655 ; SSE2-NEXT: movdqa %xmm5, %xmm0
1656 ; SSE2-NEXT: movdqa %xmm4, %xmm1
1659 ; SSE41-LABEL: min_le_v16i16:
1661 ; SSE41-NEXT: pminuw %xmm2, %xmm0
1662 ; SSE41-NEXT: pminuw %xmm3, %xmm1
1665 ; SSE42-LABEL: min_le_v16i16:
1667 ; SSE42-NEXT: pminuw %xmm2, %xmm0
1668 ; SSE42-NEXT: pminuw %xmm3, %xmm1
1671 ; AVX1-LABEL: min_le_v16i16:
1673 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1674 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1675 ; AVX1-NEXT: vpminuw %xmm2, %xmm3, %xmm2
1676 ; AVX1-NEXT: vpminuw %xmm1, %xmm0, %xmm0
1677 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1680 ; AVX2-LABEL: min_le_v16i16:
1682 ; AVX2-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1685 ; AVX512-LABEL: min_le_v16i16:
1687 ; AVX512-NEXT: vpminuw %ymm1, %ymm0, %ymm0
1689 %1 = icmp ule <16 x i16> %a, %b
1690 %2 = select <16 x i1> %1, <16 x i16> %a, <16 x i16> %b
1694 define <16 x i8> @min_le_v16i8(<16 x i8> %a, <16 x i8> %b) {
1695 ; SSE-LABEL: min_le_v16i8:
1697 ; SSE-NEXT: pminub %xmm1, %xmm0
1700 ; AVX-LABEL: min_le_v16i8:
1702 ; AVX-NEXT: vpminub %xmm1, %xmm0, %xmm0
1704 %1 = icmp ule <16 x i8> %a, %b
1705 %2 = select <16 x i1> %1, <16 x i8> %a, <16 x i8> %b
1709 define <32 x i8> @min_le_v32i8(<32 x i8> %a, <32 x i8> %b) {
1710 ; SSE-LABEL: min_le_v32i8:
1712 ; SSE-NEXT: pminub %xmm2, %xmm0
1713 ; SSE-NEXT: pminub %xmm3, %xmm1
1716 ; AVX1-LABEL: min_le_v32i8:
1718 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1719 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm3
1720 ; AVX1-NEXT: vpminub %xmm2, %xmm3, %xmm2
1721 ; AVX1-NEXT: vpminub %xmm1, %xmm0, %xmm0
1722 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
1725 ; AVX2-LABEL: min_le_v32i8:
1727 ; AVX2-NEXT: vpminub %ymm1, %ymm0, %ymm0
1730 ; AVX512-LABEL: min_le_v32i8:
1732 ; AVX512-NEXT: vpminub %ymm1, %ymm0, %ymm0
1734 %1 = icmp ule <32 x i8> %a, %b
1735 %2 = select <32 x i1> %1, <32 x i8> %a, <32 x i8> %b
1743 define <2 x i64> @max_gt_v2i64c() {
1744 ; SSE-LABEL: max_gt_v2i64c:
1746 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7]
1749 ; AVX-LABEL: max_gt_v2i64c:
1751 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]
1753 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
1754 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
1755 %3 = icmp ugt <2 x i64> %1, %2
1756 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
1760 define <4 x i64> @max_gt_v4i64c() {
1761 ; SSE-LABEL: max_gt_v4i64c:
1763 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7]
1764 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
1767 ; AVX-LABEL: max_gt_v4i64c:
1769 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]
1771 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
1772 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
1773 %3 = icmp ugt <4 x i64> %1, %2
1774 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
1778 define <4 x i32> @max_gt_v4i32c() {
1779 ; SSE-LABEL: max_gt_v4i32c:
1781 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1784 ; AVX-LABEL: max_gt_v4i32c:
1786 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1788 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
1789 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
1790 %3 = icmp ugt <4 x i32> %1, %2
1791 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
1795 define <8 x i32> @max_gt_v8i32c() {
1796 ; SSE-LABEL: max_gt_v8i32c:
1798 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]
1799 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7]
1802 ; AVX-LABEL: max_gt_v8i32c:
1804 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]
1806 %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
1807 %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
1808 %3 = icmp ugt <8 x i32> %1, %2
1809 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
1813 define <8 x i16> @max_gt_v8i16c() {
1814 ; SSE-LABEL: max_gt_v8i16c:
1816 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
1819 ; AVX-LABEL: max_gt_v8i16c:
1821 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
1823 %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
1824 %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
1825 %3 = icmp ugt <8 x i16> %1, %2
1826 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
1830 define <16 x i16> @max_gt_v16i16c() {
1831 ; SSE-LABEL: max_gt_v16i16c:
1833 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]
1834 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]
1837 ; AVX-LABEL: max_gt_v16i16c:
1839 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]
1841 %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
1842 %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
1843 %3 = icmp ugt <16 x i16> %1, %2
1844 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
1848 define <16 x i8> @max_gt_v16i8c() {
1849 ; SSE-LABEL: max_gt_v16i8c:
1851 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
1854 ; AVX-LABEL: max_gt_v16i8c:
1856 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
1858 %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
1859 %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
1860 %3 = icmp ugt <16 x i8> %1, %2
1861 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
1865 define <2 x i64> @max_ge_v2i64c() {
1866 ; SSE-LABEL: max_ge_v2i64c:
1868 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551615,7]
1871 ; AVX-LABEL: max_ge_v2i64c:
1873 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,7]
1875 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
1876 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
1877 %3 = icmp uge <2 x i64> %1, %2
1878 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
1882 define <4 x i64> @max_ge_v4i64c() {
1883 ; SSE-LABEL: max_ge_v4i64c:
1885 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,7]
1886 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0
1889 ; AVX-LABEL: max_ge_v4i64c:
1891 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,18446744073709551615,7,7]
1893 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
1894 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
1895 %3 = icmp uge <4 x i64> %1, %2
1896 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
1900 define <4 x i32> @max_ge_v4i32c() {
1901 ; SSE-LABEL: max_ge_v4i32c:
1903 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1906 ; AVX-LABEL: max_ge_v4i32c:
1908 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967295,4294967295,7,7]
1910 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
1911 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
1912 %3 = icmp uge <4 x i32> %1, %2
1913 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
1917 define <8 x i32> @max_ge_v8i32c() {
1918 ; SSE-LABEL: max_ge_v8i32c:
1920 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967295,4294967293,4294967293,4294967295]
1921 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,5,5,7]
1924 ; AVX-LABEL: max_ge_v8i32c:
1926 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967295,4294967293,4294967293,4294967295,7,5,5,7]
1928 %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
1929 %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
1930 %3 = icmp uge <8 x i32> %1, %2
1931 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
1935 define <8 x i16> @max_ge_v8i16c() {
1936 ; SSE-LABEL: max_ge_v8i16c:
1938 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
1941 ; AVX-LABEL: max_ge_v8i16c:
1943 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65535,65533,65533,65535,7,5,5,7]
1945 %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
1946 %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
1947 %3 = icmp uge <8 x i16> %1, %2
1948 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
1952 define <16 x i16> @max_ge_v16i16c() {
1953 ; SSE-LABEL: max_ge_v16i16c:
1955 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65535,65534,65533,65532,65533,65534,65535,0]
1956 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [7,6,5,4,5,6,7,8]
1959 ; AVX-LABEL: max_ge_v16i16c:
1961 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65535,65534,65533,65532,65533,65534,65535,0,7,6,5,4,5,6,7,8]
1963 %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
1964 %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
1965 %3 = icmp uge <16 x i16> %1, %2
1966 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
1970 define <16 x i8> @max_ge_v16i8c() {
1971 ; SSE-LABEL: max_ge_v16i8c:
1973 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
1976 ; AVX-LABEL: max_ge_v16i8c:
1978 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [255,254,253,252,253,254,255,0,7,6,5,4,5,6,7,8]
1980 %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
1981 %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
1982 %3 = icmp uge <16 x i8> %1, %2
1983 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
1987 define <2 x i64> @min_lt_v2i64c() {
1988 ; SSE-LABEL: min_lt_v2i64c:
1990 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1]
1993 ; AVX-LABEL: min_lt_v2i64c:
1995 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]
1997 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
1998 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
1999 %3 = icmp ult <2 x i64> %1, %2
2000 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
2004 define <4 x i64> @min_lt_v4i64c() {
2005 ; SSE-LABEL: min_lt_v4i64c:
2007 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]
2008 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1]
2011 ; AVX-LABEL: min_lt_v4i64c:
2013 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]
2015 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
2016 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
2017 %3 = icmp ult <4 x i64> %1, %2
2018 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
2022 define <4 x i32> @min_lt_v4i32c() {
2023 ; SSE-LABEL: min_lt_v4i32c:
2025 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2028 ; AVX-LABEL: min_lt_v4i32c:
2030 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2032 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
2033 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
2034 %3 = icmp ult <4 x i32> %1, %2
2035 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
2039 define <8 x i32> @min_lt_v8i32c() {
2040 ; SSE-LABEL: min_lt_v8i32c:
2042 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]
2043 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1]
2046 ; AVX-LABEL: min_lt_v8i32c:
2048 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]
2050 %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
2051 %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
2052 %3 = icmp ult <8 x i32> %1, %2
2053 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
2057 define <8 x i16> @min_lt_v8i16c() {
2058 ; SSE-LABEL: min_lt_v8i16c:
2060 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1]
2063 ; AVX-LABEL: min_lt_v8i16c:
2065 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [1,65531,65531,65529,1,3,3,1]
2067 %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
2068 %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
2069 %3 = icmp ult <8 x i16> %1, %2
2070 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
2074 define <16 x i16> @min_lt_v16i16c() {
2075 ; SSE-LABEL: min_lt_v16i16c:
2077 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,65530,65531,65532,65531,65530,65529,0]
2078 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]
2081 ; AVX-LABEL: min_lt_v16i16c:
2083 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [1,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]
2085 %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
2086 %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
2087 %3 = icmp ult <16 x i16> %1, %2
2088 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
2092 define <16 x i8> @min_lt_v16i8c() {
2093 ; SSE-LABEL: min_lt_v16i8c:
2095 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2098 ; AVX-LABEL: min_lt_v16i8c:
2100 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [1,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2102 %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
2103 %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
2104 %3 = icmp ult <16 x i8> %1, %2
2105 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2
2109 define <2 x i64> @min_le_v2i64c() {
2110 ; SSE-LABEL: min_le_v2i64c:
2112 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,1]
2115 ; AVX-LABEL: min_le_v2i64c:
2117 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551609,1]
2119 %1 = insertelement <2 x i64> <i64 -7, i64 7>, i64 -7, i32 0
2120 %2 = insertelement <2 x i64> <i64 -1, i64 1>, i64 -1, i32 0
2121 %3 = icmp ule <2 x i64> %1, %2
2122 %4 = select <2 x i1> %3, <2 x i64> %1, <2 x i64> %2
2126 define <4 x i64> @min_le_v4i64c() {
2127 ; SSE-LABEL: min_le_v4i64c:
2129 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [18446744073709551609,18446744073709551609]
2130 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,1]
2133 ; AVX-LABEL: min_le_v4i64c:
2135 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551609,18446744073709551609,1,1]
2137 %1 = insertelement <4 x i64> <i64 -7, i64 -1, i64 1, i64 7>, i64 -7, i32 0
2138 %2 = insertelement <4 x i64> <i64 -1, i64 -7, i64 7, i64 1>, i64 -1, i32 0
2139 %3 = icmp ule <4 x i64> %1, %2
2140 %4 = select <4 x i1> %3, <4 x i64> %1, <4 x i64> %2
2144 define <4 x i32> @min_le_v4i32c() {
2145 ; SSE-LABEL: min_le_v4i32c:
2147 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2150 ; AVX-LABEL: min_le_v4i32c:
2152 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [4294967289,4294967289,1,1]
2154 %1 = insertelement <4 x i32> <i32 -7, i32 -1, i32 1, i32 7>, i32 -7, i32 0
2155 %2 = insertelement <4 x i32> <i32 -1, i32 -7, i32 7, i32 1>, i32 -1, i32 0
2156 %3 = icmp ule <4 x i32> %1, %2
2157 %4 = select <4 x i1> %3, <4 x i32> %1, <4 x i32> %2
2161 define <8 x i32> @min_le_v8i32c() {
2162 ; SSE-LABEL: min_le_v8i32c:
2164 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [4294967289,4294967291,4294967291,4294967289]
2165 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,3,3,1]
2168 ; AVX-LABEL: min_le_v8i32c:
2170 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [4294967289,4294967291,4294967291,4294967289,1,3,3,1]
2172 %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
2173 %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
2174 %3 = icmp ule <8 x i32> %1, %2
2175 %4 = select <8 x i1> %3, <8 x i32> %1, <8 x i32> %2
2179 define <8 x i16> @min_le_v8i16c() {
2180 ; SSE-LABEL: min_le_v8i16c:
2182 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
2185 ; AVX-LABEL: min_le_v8i16c:
2187 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [65529,65531,65531,65529,1,3,3,1]
2189 %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
2190 %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
2191 %3 = icmp ule <8 x i16> %1, %2
2192 %4 = select <8 x i1> %3, <8 x i16> %1, <8 x i16> %2
2196 define <16 x i16> @min_le_v16i16c() {
2197 ; SSE-LABEL: min_le_v16i16c:
2199 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [65529,65530,65531,65532,65531,65530,65529,0]
2200 ; SSE-NEXT: movaps {{.*#+}} xmm1 = [1,2,3,4,3,2,1,0]
2203 ; AVX-LABEL: min_le_v16i16c:
2205 ; AVX-NEXT: vmovaps {{.*#+}} ymm0 = [65529,65530,65531,65532,65531,65530,65529,0,1,2,3,4,3,2,1,0]
2207 %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
2208 %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
2209 %3 = icmp ule <16 x i16> %1, %2
2210 %4 = select <16 x i1> %3, <16 x i16> %1, <16 x i16> %2
2214 define <16 x i8> @min_le_v16i8c() {
2215 ; SSE-LABEL: min_le_v16i8c:
2217 ; SSE-NEXT: movaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2220 ; AVX-LABEL: min_le_v16i8c:
2222 ; AVX-NEXT: vmovaps {{.*#+}} xmm0 = [249,250,251,252,251,250,249,0,1,2,3,4,3,2,1,0]
2224 %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
2225 %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
2226 %3 = icmp ule <16 x i8> %1, %2
2227 %4 = select <16 x i1> %3, <16 x i8> %1, <16 x i8> %2