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