9ffdc1c5f4f5b6fe44a2ea85359bb583d5cb7490
[oota-llvm.git] / test / CodeGen / X86 / vec_cmp_uint-128.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.2 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE42
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx,+xop | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1
7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+xop | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2
8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
10
11 ;
12 ; Equal
13 ;
14
15 define <2 x i64> @eq_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
16 ; SSE2-LABEL: eq_v2i64:
17 ; SSE2:       # BB#0:
18 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
19 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
20 ; SSE2-NEXT:    pand %xmm1, %xmm0
21 ; SSE2-NEXT:    retq
22 ;
23 ; SSE41-LABEL: eq_v2i64:
24 ; SSE41:       # BB#0:
25 ; SSE41-NEXT:    pcmpeqq %xmm1, %xmm0
26 ; SSE41-NEXT:    retq
27 ;
28 ; SSE42-LABEL: eq_v2i64:
29 ; SSE42:       # BB#0:
30 ; SSE42-NEXT:    pcmpeqq %xmm1, %xmm0
31 ; SSE42-NEXT:    retq
32 ;
33 ; AVX-LABEL: eq_v2i64:
34 ; AVX:       # BB#0:
35 ; AVX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
36 ; AVX-NEXT:    retq
37 ;
38 ; XOP-LABEL: eq_v2i64:
39 ; XOP:       # BB#0:
40 ; XOP-NEXT:    vpcomeqq %xmm1, %xmm0, %xmm0
41 ; XOP-NEXT:    retq
42   %1 = icmp eq <2 x i64> %a, %b
43   %2 = sext <2 x i1> %1 to <2 x i64>
44   ret <2 x i64> %2
45 }
46
47 define <4 x i32> @eq_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
48 ; SSE-LABEL: eq_v4i32:
49 ; SSE:       # BB#0:
50 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm0
51 ; SSE-NEXT:    retq
52 ;
53 ; AVX-LABEL: eq_v4i32:
54 ; AVX:       # BB#0:
55 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
56 ; AVX-NEXT:    retq
57 ;
58 ; XOP-LABEL: eq_v4i32:
59 ; XOP:       # BB#0:
60 ; XOP-NEXT:    vpcomeqd %xmm1, %xmm0, %xmm0
61 ; XOP-NEXT:    retq
62   %1 = icmp eq <4 x i32> %a, %b
63   %2 = sext <4 x i1> %1 to <4 x i32>
64   ret <4 x i32> %2
65 }
66
67 define <8 x i16> @eq_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
68 ; SSE-LABEL: eq_v8i16:
69 ; SSE:       # BB#0:
70 ; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
71 ; SSE-NEXT:    retq
72 ;
73 ; AVX-LABEL: eq_v8i16:
74 ; AVX:       # BB#0:
75 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
76 ; AVX-NEXT:    retq
77 ;
78 ; XOP-LABEL: eq_v8i16:
79 ; XOP:       # BB#0:
80 ; XOP-NEXT:    vpcomeqw %xmm1, %xmm0, %xmm0
81 ; XOP-NEXT:    retq
82   %1 = icmp eq <8 x i16> %a, %b
83   %2 = sext <8 x i1> %1 to <8 x i16>
84   ret <8 x i16> %2
85 }
86
87 define <16 x i8> @eq_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
88 ; SSE-LABEL: eq_v16i8:
89 ; SSE:       # BB#0:
90 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
91 ; SSE-NEXT:    retq
92 ;
93 ; AVX-LABEL: eq_v16i8:
94 ; AVX:       # BB#0:
95 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
96 ; AVX-NEXT:    retq
97 ;
98 ; XOP-LABEL: eq_v16i8:
99 ; XOP:       # BB#0:
100 ; XOP-NEXT:    vpcomeqb %xmm1, %xmm0, %xmm0
101 ; XOP-NEXT:    retq
102   %1 = icmp eq <16 x i8> %a, %b
103   %2 = sext <16 x i1> %1 to <16 x i8>
104   ret <16 x i8> %2
105 }
106
107 ;
108 ; Not Equal
109 ;
110
111 define <2 x i64> @ne_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
112 ; SSE2-LABEL: ne_v2i64:
113 ; SSE2:       # BB#0:
114 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
115 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,0,3,2]
116 ; SSE2-NEXT:    pand %xmm1, %xmm0
117 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
118 ; SSE2-NEXT:    pxor %xmm1, %xmm0
119 ; SSE2-NEXT:    retq
120 ;
121 ; SSE41-LABEL: ne_v2i64:
122 ; SSE41:       # BB#0:
123 ; SSE41-NEXT:    pcmpeqq %xmm1, %xmm0
124 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
125 ; SSE41-NEXT:    pxor %xmm1, %xmm0
126 ; SSE41-NEXT:    retq
127 ;
128 ; SSE42-LABEL: ne_v2i64:
129 ; SSE42:       # BB#0:
130 ; SSE42-NEXT:    pcmpeqq %xmm1, %xmm0
131 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
132 ; SSE42-NEXT:    pxor %xmm1, %xmm0
133 ; SSE42-NEXT:    retq
134 ;
135 ; AVX-LABEL: ne_v2i64:
136 ; AVX:       # BB#0:
137 ; AVX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
138 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
139 ; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
140 ; AVX-NEXT:    retq
141 ;
142 ; XOP-LABEL: ne_v2i64:
143 ; XOP:       # BB#0:
144 ; XOP-NEXT:    vpcomneqq %xmm1, %xmm0, %xmm0
145 ; XOP-NEXT:    retq
146   %1 = icmp ne <2 x i64> %a, %b
147   %2 = sext <2 x i1> %1 to <2 x i64>
148   ret <2 x i64> %2
149 }
150
151 define <4 x i32> @ne_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
152 ; SSE-LABEL: ne_v4i32:
153 ; SSE:       # BB#0:
154 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm0
155 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
156 ; SSE-NEXT:    pxor %xmm1, %xmm0
157 ; SSE-NEXT:    retq
158 ;
159 ; AVX-LABEL: ne_v4i32:
160 ; AVX:       # BB#0:
161 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
162 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
163 ; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
164 ; AVX-NEXT:    retq
165 ;
166 ; XOP-LABEL: ne_v4i32:
167 ; XOP:       # BB#0:
168 ; XOP-NEXT:    vpcomneqd %xmm1, %xmm0, %xmm0
169 ; XOP-NEXT:    retq
170   %1 = icmp ne <4 x i32> %a, %b
171   %2 = sext <4 x i1> %1 to <4 x i32>
172   ret <4 x i32> %2
173 }
174
175 define <8 x i16> @ne_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
176 ; SSE-LABEL: ne_v8i16:
177 ; SSE:       # BB#0:
178 ; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
179 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
180 ; SSE-NEXT:    pxor %xmm1, %xmm0
181 ; SSE-NEXT:    retq
182 ;
183 ; AVX-LABEL: ne_v8i16:
184 ; AVX:       # BB#0:
185 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
186 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
187 ; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
188 ; AVX-NEXT:    retq
189 ;
190 ; XOP-LABEL: ne_v8i16:
191 ; XOP:       # BB#0:
192 ; XOP-NEXT:    vpcomneqw %xmm1, %xmm0, %xmm0
193 ; XOP-NEXT:    retq
194   %1 = icmp ne <8 x i16> %a, %b
195   %2 = sext <8 x i1> %1 to <8 x i16>
196   ret <8 x i16> %2
197 }
198
199 define <16 x i8> @ne_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
200 ; SSE-LABEL: ne_v16i8:
201 ; SSE:       # BB#0:
202 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
203 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
204 ; SSE-NEXT:    pxor %xmm1, %xmm0
205 ; SSE-NEXT:    retq
206 ;
207 ; AVX-LABEL: ne_v16i8:
208 ; AVX:       # BB#0:
209 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
210 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
211 ; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
212 ; AVX-NEXT:    retq
213 ;
214 ; XOP-LABEL: ne_v16i8:
215 ; XOP:       # BB#0:
216 ; XOP-NEXT:    vpcomneqb %xmm1, %xmm0, %xmm0
217 ; XOP-NEXT:    retq
218   %1 = icmp ne <16 x i8> %a, %b
219   %2 = sext <16 x i1> %1 to <16 x i8>
220   ret <16 x i8> %2
221 }
222
223 ;
224 ; Greater Than Or Equal
225 ;
226
227 define <2 x i64> @ge_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
228 ; SSE2-LABEL: ge_v2i64:
229 ; SSE2:       # BB#0:
230 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
231 ; SSE2-NEXT:    pxor %xmm2, %xmm0
232 ; SSE2-NEXT:    pxor %xmm2, %xmm1
233 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
234 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
235 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
236 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
237 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
238 ; SSE2-NEXT:    pand %xmm3, %xmm0
239 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
240 ; SSE2-NEXT:    por %xmm0, %xmm1
241 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
242 ; SSE2-NEXT:    pxor %xmm1, %xmm0
243 ; SSE2-NEXT:    retq
244 ;
245 ; SSE41-LABEL: ge_v2i64:
246 ; SSE41:       # BB#0:
247 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
248 ; SSE41-NEXT:    pxor %xmm2, %xmm0
249 ; SSE41-NEXT:    pxor %xmm2, %xmm1
250 ; SSE41-NEXT:    movdqa %xmm1, %xmm2
251 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
252 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
253 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
254 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
255 ; SSE41-NEXT:    pand %xmm3, %xmm0
256 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
257 ; SSE41-NEXT:    por %xmm0, %xmm1
258 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
259 ; SSE41-NEXT:    pxor %xmm1, %xmm0
260 ; SSE41-NEXT:    retq
261 ;
262 ; SSE42-LABEL: ge_v2i64:
263 ; SSE42:       # BB#0:
264 ; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
265 ; SSE42-NEXT:    pxor %xmm2, %xmm0
266 ; SSE42-NEXT:    pxor %xmm1, %xmm2
267 ; SSE42-NEXT:    pcmpgtq %xmm0, %xmm2
268 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0
269 ; SSE42-NEXT:    pxor %xmm2, %xmm0
270 ; SSE42-NEXT:    retq
271 ;
272 ; AVX-LABEL: ge_v2i64:
273 ; AVX:       # BB#0:
274 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
275 ; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
276 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
277 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
278 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
279 ; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
280 ; AVX-NEXT:    retq
281 ;
282 ; XOP-LABEL: ge_v2i64:
283 ; XOP:       # BB#0:
284 ; XOP-NEXT:    vpcomgeuq %xmm1, %xmm0, %xmm0
285 ; XOP-NEXT:    retq
286   %1 = icmp uge <2 x i64> %a, %b
287   %2 = sext <2 x i1> %1 to <2 x i64>
288   ret <2 x i64> %2
289 }
290
291 define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
292 ; SSE2-LABEL: ge_v4i32:
293 ; SSE2:       # BB#0:
294 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
295 ; SSE2-NEXT:    pxor %xmm2, %xmm0
296 ; SSE2-NEXT:    pxor %xmm1, %xmm2
297 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
298 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
299 ; SSE2-NEXT:    pxor %xmm2, %xmm0
300 ; SSE2-NEXT:    retq
301 ;
302 ; SSE41-LABEL: ge_v4i32:
303 ; SSE41:       # BB#0:
304 ; SSE41-NEXT:    pmaxud %xmm0, %xmm1
305 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
306 ; SSE41-NEXT:    retq
307 ;
308 ; SSE42-LABEL: ge_v4i32:
309 ; SSE42:       # BB#0:
310 ; SSE42-NEXT:    pmaxud %xmm0, %xmm1
311 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0
312 ; SSE42-NEXT:    retq
313 ;
314 ; AVX-LABEL: ge_v4i32:
315 ; AVX:       # BB#0:
316 ; AVX-NEXT:    vpmaxud %xmm1, %xmm0, %xmm1
317 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
318 ; AVX-NEXT:    retq
319 ;
320 ; XOP-LABEL: ge_v4i32:
321 ; XOP:       # BB#0:
322 ; XOP-NEXT:    vpcomgeud %xmm1, %xmm0, %xmm0
323 ; XOP-NEXT:    retq
324   %1 = icmp uge <4 x i32> %a, %b
325   %2 = sext <4 x i1> %1 to <4 x i32>
326   ret <4 x i32> %2
327 }
328
329 define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
330 ; SSE2-LABEL: ge_v8i16:
331 ; SSE2:       # BB#0:
332 ; SSE2-NEXT:    psubusw %xmm0, %xmm1
333 ; SSE2-NEXT:    pxor %xmm0, %xmm0
334 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm0
335 ; SSE2-NEXT:    retq
336 ;
337 ; SSE41-LABEL: ge_v8i16:
338 ; SSE41:       # BB#0:
339 ; SSE41-NEXT:    pmaxuw %xmm0, %xmm1
340 ; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0
341 ; SSE41-NEXT:    retq
342 ;
343 ; SSE42-LABEL: ge_v8i16:
344 ; SSE42:       # BB#0:
345 ; SSE42-NEXT:    pmaxuw %xmm0, %xmm1
346 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0
347 ; SSE42-NEXT:    retq
348 ;
349 ; AVX-LABEL: ge_v8i16:
350 ; AVX:       # BB#0:
351 ; AVX-NEXT:    vpmaxuw %xmm1, %xmm0, %xmm1
352 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
353 ; AVX-NEXT:    retq
354 ;
355 ; XOP-LABEL: ge_v8i16:
356 ; XOP:       # BB#0:
357 ; XOP-NEXT:    vpcomgeuw %xmm1, %xmm0, %xmm0
358 ; XOP-NEXT:    retq
359   %1 = icmp uge <8 x i16> %a, %b
360   %2 = sext <8 x i1> %1 to <8 x i16>
361   ret <8 x i16> %2
362 }
363
364 define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
365 ; SSE-LABEL: ge_v16i8:
366 ; SSE:       # BB#0:
367 ; SSE-NEXT:    pmaxub %xmm0, %xmm1
368 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
369 ; SSE-NEXT:    retq
370 ;
371 ; AVX-LABEL: ge_v16i8:
372 ; AVX:       # BB#0:
373 ; AVX-NEXT:    vpmaxub %xmm1, %xmm0, %xmm1
374 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
375 ; AVX-NEXT:    retq
376 ;
377 ; XOP-LABEL: ge_v16i8:
378 ; XOP:       # BB#0:
379 ; XOP-NEXT:    vpcomgeub %xmm1, %xmm0, %xmm0
380 ; XOP-NEXT:    retq
381   %1 = icmp uge <16 x i8> %a, %b
382   %2 = sext <16 x i1> %1 to <16 x i8>
383   ret <16 x i8> %2
384 }
385
386 ;
387 ; Greater Than
388 ;
389
390 define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
391 ; SSE2-LABEL: gt_v2i64:
392 ; SSE2:       # BB#0:
393 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
394 ; SSE2-NEXT:    pxor %xmm2, %xmm1
395 ; SSE2-NEXT:    pxor %xmm2, %xmm0
396 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
397 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
398 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
399 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
400 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
401 ; SSE2-NEXT:    pand %xmm3, %xmm1
402 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
403 ; SSE2-NEXT:    por %xmm1, %xmm0
404 ; SSE2-NEXT:    retq
405 ;
406 ; SSE41-LABEL: gt_v2i64:
407 ; SSE41:       # BB#0:
408 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
409 ; SSE41-NEXT:    pxor %xmm2, %xmm1
410 ; SSE41-NEXT:    pxor %xmm2, %xmm0
411 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
412 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2
413 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
414 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
415 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
416 ; SSE41-NEXT:    pand %xmm3, %xmm1
417 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
418 ; SSE41-NEXT:    por %xmm1, %xmm0
419 ; SSE41-NEXT:    retq
420 ;
421 ; SSE42-LABEL: gt_v2i64:
422 ; SSE42:       # BB#0:
423 ; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
424 ; SSE42-NEXT:    pxor %xmm2, %xmm1
425 ; SSE42-NEXT:    pxor %xmm2, %xmm0
426 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
427 ; SSE42-NEXT:    retq
428 ;
429 ; AVX-LABEL: gt_v2i64:
430 ; AVX:       # BB#0:
431 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
432 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
433 ; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
434 ; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
435 ; AVX-NEXT:    retq
436 ;
437 ; XOP-LABEL: gt_v2i64:
438 ; XOP:       # BB#0:
439 ; XOP-NEXT:    vpcomgtuq %xmm1, %xmm0, %xmm0
440 ; XOP-NEXT:    retq
441   %1 = icmp ugt <2 x i64> %a, %b
442   %2 = sext <2 x i1> %1 to <2 x i64>
443   ret <2 x i64> %2
444 }
445
446 define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
447 ; SSE-LABEL: gt_v4i32:
448 ; SSE:       # BB#0:
449 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
450 ; SSE-NEXT:    pxor %xmm2, %xmm1
451 ; SSE-NEXT:    pxor %xmm2, %xmm0
452 ; SSE-NEXT:    pcmpgtd %xmm1, %xmm0
453 ; SSE-NEXT:    retq
454 ;
455 ; AVX1-LABEL: gt_v4i32:
456 ; AVX1:       # BB#0:
457 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
458 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
459 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
460 ; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
461 ; AVX1-NEXT:    retq
462 ;
463 ; AVX2-LABEL: gt_v4i32:
464 ; AVX2:       # BB#0:
465 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm2
466 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
467 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0
468 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
469 ; AVX2-NEXT:    retq
470 ;
471 ; XOP-LABEL: gt_v4i32:
472 ; XOP:       # BB#0:
473 ; XOP-NEXT:    vpcomgtud %xmm1, %xmm0, %xmm0
474 ; XOP-NEXT:    retq
475 ;
476 ; AVX512-LABEL: gt_v4i32:
477 ; AVX512:       # BB#0:
478 ; AVX512-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm2
479 ; AVX512-NEXT:    vpxor %xmm2, %xmm1, %xmm1
480 ; AVX512-NEXT:    vpxor %xmm2, %xmm0, %xmm0
481 ; AVX512-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
482 ; AVX512-NEXT:    retq
483   %1 = icmp ugt <4 x i32> %a, %b
484   %2 = sext <4 x i1> %1 to <4 x i32>
485   ret <4 x i32> %2
486 }
487
488 define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
489 ; SSE-LABEL: gt_v8i16:
490 ; SSE:       # BB#0:
491 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
492 ; SSE-NEXT:    pxor %xmm2, %xmm1
493 ; SSE-NEXT:    pxor %xmm2, %xmm0
494 ; SSE-NEXT:    pcmpgtw %xmm1, %xmm0
495 ; SSE-NEXT:    retq
496 ;
497 ; AVX-LABEL: gt_v8i16:
498 ; AVX:       # BB#0:
499 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
500 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
501 ; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
502 ; AVX-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
503 ; AVX-NEXT:    retq
504 ;
505 ; XOP-LABEL: gt_v8i16:
506 ; XOP:       # BB#0:
507 ; XOP-NEXT:    vpcomgtuw %xmm1, %xmm0, %xmm0
508 ; XOP-NEXT:    retq
509   %1 = icmp ugt <8 x i16> %a, %b
510   %2 = sext <8 x i1> %1 to <8 x i16>
511   ret <8 x i16> %2
512 }
513
514 define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
515 ; SSE-LABEL: gt_v16i8:
516 ; SSE:       # BB#0:
517 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
518 ; SSE-NEXT:    pxor %xmm2, %xmm1
519 ; SSE-NEXT:    pxor %xmm2, %xmm0
520 ; SSE-NEXT:    pcmpgtb %xmm1, %xmm0
521 ; SSE-NEXT:    retq
522 ;
523 ; AVX-LABEL: gt_v16i8:
524 ; AVX:       # BB#0:
525 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
526 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
527 ; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
528 ; AVX-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
529 ; AVX-NEXT:    retq
530 ;
531 ; XOP-LABEL: gt_v16i8:
532 ; XOP:       # BB#0:
533 ; XOP-NEXT:    vpcomgtub %xmm1, %xmm0, %xmm0
534 ; XOP-NEXT:    retq
535   %1 = icmp ugt <16 x i8> %a, %b
536   %2 = sext <16 x i1> %1 to <16 x i8>
537   ret <16 x i8> %2
538 }
539
540 ;
541 ; Less Than Or Equal
542 ;
543
544 define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
545 ; SSE2-LABEL: le_v2i64:
546 ; SSE2:       # BB#0:
547 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
548 ; SSE2-NEXT:    pxor %xmm2, %xmm1
549 ; SSE2-NEXT:    pxor %xmm2, %xmm0
550 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
551 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
552 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
553 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
554 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
555 ; SSE2-NEXT:    pand %xmm3, %xmm0
556 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
557 ; SSE2-NEXT:    por %xmm0, %xmm1
558 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
559 ; SSE2-NEXT:    pxor %xmm1, %xmm0
560 ; SSE2-NEXT:    retq
561 ;
562 ; SSE41-LABEL: le_v2i64:
563 ; SSE41:       # BB#0:
564 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
565 ; SSE41-NEXT:    pxor %xmm2, %xmm1
566 ; SSE41-NEXT:    pxor %xmm2, %xmm0
567 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
568 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2
569 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
570 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
571 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
572 ; SSE41-NEXT:    pand %xmm3, %xmm0
573 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
574 ; SSE41-NEXT:    por %xmm0, %xmm1
575 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
576 ; SSE41-NEXT:    pxor %xmm1, %xmm0
577 ; SSE41-NEXT:    retq
578 ;
579 ; SSE42-LABEL: le_v2i64:
580 ; SSE42:       # BB#0:
581 ; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
582 ; SSE42-NEXT:    pxor %xmm2, %xmm1
583 ; SSE42-NEXT:    pxor %xmm2, %xmm0
584 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
585 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
586 ; SSE42-NEXT:    pxor %xmm1, %xmm0
587 ; SSE42-NEXT:    retq
588 ;
589 ; AVX-LABEL: le_v2i64:
590 ; AVX:       # BB#0:
591 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
592 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
593 ; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
594 ; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
595 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
596 ; AVX-NEXT:    vpxor %xmm1, %xmm0, %xmm0
597 ; AVX-NEXT:    retq
598 ;
599 ; XOP-LABEL: le_v2i64:
600 ; XOP:       # BB#0:
601 ; XOP-NEXT:    vpcomleuq %xmm1, %xmm0, %xmm0
602 ; XOP-NEXT:    retq
603   %1 = icmp ule <2 x i64> %a, %b
604   %2 = sext <2 x i1> %1 to <2 x i64>
605   ret <2 x i64> %2
606 }
607
608 define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
609 ; SSE2-LABEL: le_v4i32:
610 ; SSE2:       # BB#0:
611 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
612 ; SSE2-NEXT:    pxor %xmm2, %xmm1
613 ; SSE2-NEXT:    pxor %xmm2, %xmm0
614 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
615 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
616 ; SSE2-NEXT:    pxor %xmm1, %xmm0
617 ; SSE2-NEXT:    retq
618 ;
619 ; SSE41-LABEL: le_v4i32:
620 ; SSE41:       # BB#0:
621 ; SSE41-NEXT:    pminud %xmm0, %xmm1
622 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
623 ; SSE41-NEXT:    retq
624 ;
625 ; SSE42-LABEL: le_v4i32:
626 ; SSE42:       # BB#0:
627 ; SSE42-NEXT:    pminud %xmm0, %xmm1
628 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm0
629 ; SSE42-NEXT:    retq
630 ;
631 ; AVX-LABEL: le_v4i32:
632 ; AVX:       # BB#0:
633 ; AVX-NEXT:    vpminud %xmm1, %xmm0, %xmm1
634 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
635 ; AVX-NEXT:    retq
636 ;
637 ; XOP-LABEL: le_v4i32:
638 ; XOP:       # BB#0:
639 ; XOP-NEXT:    vpcomleud %xmm1, %xmm0, %xmm0
640 ; XOP-NEXT:    retq
641   %1 = icmp ule <4 x i32> %a, %b
642   %2 = sext <4 x i1> %1 to <4 x i32>
643   ret <4 x i32> %2
644 }
645
646 define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
647 ; SSE2-LABEL: le_v8i16:
648 ; SSE2:       # BB#0:
649 ; SSE2-NEXT:    psubusw %xmm1, %xmm0
650 ; SSE2-NEXT:    pxor %xmm1, %xmm1
651 ; SSE2-NEXT:    pcmpeqw %xmm1, %xmm0
652 ; SSE2-NEXT:    retq
653 ;
654 ; SSE41-LABEL: le_v8i16:
655 ; SSE41:       # BB#0:
656 ; SSE41-NEXT:    pminuw %xmm0, %xmm1
657 ; SSE41-NEXT:    pcmpeqw %xmm1, %xmm0
658 ; SSE41-NEXT:    retq
659 ;
660 ; SSE42-LABEL: le_v8i16:
661 ; SSE42:       # BB#0:
662 ; SSE42-NEXT:    pminuw %xmm0, %xmm1
663 ; SSE42-NEXT:    pcmpeqw %xmm1, %xmm0
664 ; SSE42-NEXT:    retq
665 ;
666 ; AVX-LABEL: le_v8i16:
667 ; AVX:       # BB#0:
668 ; AVX-NEXT:    vpminuw %xmm1, %xmm0, %xmm1
669 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
670 ; AVX-NEXT:    retq
671 ;
672 ; XOP-LABEL: le_v8i16:
673 ; XOP:       # BB#0:
674 ; XOP-NEXT:    vpcomleuw %xmm1, %xmm0, %xmm0
675 ; XOP-NEXT:    retq
676   %1 = icmp ule <8 x i16> %a, %b
677   %2 = sext <8 x i1> %1 to <8 x i16>
678   ret <8 x i16> %2
679 }
680
681 define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
682 ; SSE-LABEL: le_v16i8:
683 ; SSE:       # BB#0:
684 ; SSE-NEXT:    pminub %xmm0, %xmm1
685 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
686 ; SSE-NEXT:    retq
687 ;
688 ; AVX-LABEL: le_v16i8:
689 ; AVX:       # BB#0:
690 ; AVX-NEXT:    vpminub %xmm1, %xmm0, %xmm1
691 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
692 ; AVX-NEXT:    retq
693 ;
694 ; XOP-LABEL: le_v16i8:
695 ; XOP:       # BB#0:
696 ; XOP-NEXT:    vpcomleub %xmm1, %xmm0, %xmm0
697 ; XOP-NEXT:    retq
698   %1 = icmp ule <16 x i8> %a, %b
699   %2 = sext <16 x i1> %1 to <16 x i8>
700   ret <16 x i8> %2
701 }
702
703 ;
704 ; Less Than
705 ;
706
707 define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
708 ; SSE2-LABEL: lt_v2i64:
709 ; SSE2:       # BB#0:
710 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
711 ; SSE2-NEXT:    pxor %xmm2, %xmm0
712 ; SSE2-NEXT:    pxor %xmm2, %xmm1
713 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
714 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
715 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
716 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
717 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
718 ; SSE2-NEXT:    pand %xmm3, %xmm1
719 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
720 ; SSE2-NEXT:    por %xmm1, %xmm0
721 ; SSE2-NEXT:    retq
722 ;
723 ; SSE41-LABEL: lt_v2i64:
724 ; SSE41:       # BB#0:
725 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
726 ; SSE41-NEXT:    pxor %xmm2, %xmm0
727 ; SSE41-NEXT:    pxor %xmm2, %xmm1
728 ; SSE41-NEXT:    movdqa %xmm1, %xmm2
729 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
730 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
731 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
732 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
733 ; SSE41-NEXT:    pand %xmm3, %xmm1
734 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
735 ; SSE41-NEXT:    por %xmm1, %xmm0
736 ; SSE41-NEXT:    retq
737 ;
738 ; SSE42-LABEL: lt_v2i64:
739 ; SSE42:       # BB#0:
740 ; SSE42-NEXT:    movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
741 ; SSE42-NEXT:    pxor %xmm2, %xmm0
742 ; SSE42-NEXT:    pxor %xmm1, %xmm2
743 ; SSE42-NEXT:    pcmpgtq %xmm0, %xmm2
744 ; SSE42-NEXT:    movdqa %xmm2, %xmm0
745 ; SSE42-NEXT:    retq
746 ;
747 ; AVX-LABEL: lt_v2i64:
748 ; AVX:       # BB#0:
749 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
750 ; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
751 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
752 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
753 ; AVX-NEXT:    retq
754 ;
755 ; XOP-LABEL: lt_v2i64:
756 ; XOP:       # BB#0:
757 ; XOP-NEXT:    vpcomltuq %xmm1, %xmm0, %xmm0
758 ; XOP-NEXT:    retq
759   %1 = icmp ult <2 x i64> %a, %b
760   %2 = sext <2 x i1> %1 to <2 x i64>
761   ret <2 x i64> %2
762 }
763
764 define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
765 ; SSE-LABEL: lt_v4i32:
766 ; SSE:       # BB#0:
767 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
768 ; SSE-NEXT:    pxor %xmm2, %xmm0
769 ; SSE-NEXT:    pxor %xmm1, %xmm2
770 ; SSE-NEXT:    pcmpgtd %xmm0, %xmm2
771 ; SSE-NEXT:    movdqa %xmm2, %xmm0
772 ; SSE-NEXT:    retq
773 ;
774 ; AVX1-LABEL: lt_v4i32:
775 ; AVX1:       # BB#0:
776 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [2147483648,2147483648,2147483648,2147483648]
777 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
778 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
779 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
780 ; AVX1-NEXT:    retq
781 ;
782 ; AVX2-LABEL: lt_v4i32:
783 ; AVX2:       # BB#0:
784 ; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm2
785 ; AVX2-NEXT:    vpxor %xmm2, %xmm0, %xmm0
786 ; AVX2-NEXT:    vpxor %xmm2, %xmm1, %xmm1
787 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
788 ; AVX2-NEXT:    retq
789 ;
790 ; XOP-LABEL: lt_v4i32:
791 ; XOP:       # BB#0:
792 ; XOP-NEXT:    vpcomltud %xmm1, %xmm0, %xmm0
793 ; XOP-NEXT:    retq
794 ;
795 ; AVX512-LABEL: lt_v4i32:
796 ; AVX512:       # BB#0:
797 ; AVX512-NEXT:    vpbroadcastd {{.*}}(%rip), %xmm2
798 ; AVX512-NEXT:    vpxor %xmm2, %xmm0, %xmm0
799 ; AVX512-NEXT:    vpxor %xmm2, %xmm1, %xmm1
800 ; AVX512-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
801 ; AVX512-NEXT:    retq
802   %1 = icmp ult <4 x i32> %a, %b
803   %2 = sext <4 x i1> %1 to <4 x i32>
804   ret <4 x i32> %2
805 }
806
807 define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
808 ; SSE-LABEL: lt_v8i16:
809 ; SSE:       # BB#0:
810 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
811 ; SSE-NEXT:    pxor %xmm2, %xmm0
812 ; SSE-NEXT:    pxor %xmm1, %xmm2
813 ; SSE-NEXT:    pcmpgtw %xmm0, %xmm2
814 ; SSE-NEXT:    movdqa %xmm2, %xmm0
815 ; SSE-NEXT:    retq
816 ;
817 ; AVX-LABEL: lt_v8i16:
818 ; AVX:       # BB#0:
819 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [32768,32768,32768,32768,32768,32768,32768,32768]
820 ; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
821 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
822 ; AVX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
823 ; AVX-NEXT:    retq
824 ;
825 ; XOP-LABEL: lt_v8i16:
826 ; XOP:       # BB#0:
827 ; XOP-NEXT:    vpcomltuw %xmm1, %xmm0, %xmm0
828 ; XOP-NEXT:    retq
829   %1 = icmp ult <8 x i16> %a, %b
830   %2 = sext <8 x i1> %1 to <8 x i16>
831   ret <8 x i16> %2
832 }
833
834 define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
835 ; SSE-LABEL: lt_v16i8:
836 ; SSE:       # BB#0:
837 ; SSE-NEXT:    movdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
838 ; SSE-NEXT:    pxor %xmm2, %xmm0
839 ; SSE-NEXT:    pxor %xmm1, %xmm2
840 ; SSE-NEXT:    pcmpgtb %xmm0, %xmm2
841 ; SSE-NEXT:    movdqa %xmm2, %xmm0
842 ; SSE-NEXT:    retq
843 ;
844 ; AVX-LABEL: lt_v16i8:
845 ; AVX:       # BB#0:
846 ; AVX-NEXT:    vmovdqa {{.*#+}} xmm2 = [128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128]
847 ; AVX-NEXT:    vpxor %xmm2, %xmm0, %xmm0
848 ; AVX-NEXT:    vpxor %xmm2, %xmm1, %xmm1
849 ; AVX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
850 ; AVX-NEXT:    retq
851 ;
852 ; XOP-LABEL: lt_v16i8:
853 ; XOP:       # BB#0:
854 ; XOP-NEXT:    vpcomltub %xmm1, %xmm0, %xmm0
855 ; XOP-NEXT:    retq
856   %1 = icmp ult <16 x i8> %a, %b
857   %2 = sext <16 x i1> %1 to <16 x i8>
858   ret <16 x i8> %2
859 }