[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / vec_cmp_sint-128.ll
blob22e6074af0637dd3205d81ee2bf058631cef2719
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
13 ; Equal
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
24 ; SSE41-LABEL: eq_v2i64:
25 ; SSE41:       # %bb.0:
26 ; SSE41-NEXT:    pcmpeqq %xmm1, %xmm0
27 ; SSE41-NEXT:    retq
29 ; SSE42-LABEL: eq_v2i64:
30 ; SSE42:       # %bb.0:
31 ; SSE42-NEXT:    pcmpeqq %xmm1, %xmm0
32 ; SSE42-NEXT:    retq
34 ; AVX-LABEL: eq_v2i64:
35 ; AVX:       # %bb.0:
36 ; AVX-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
37 ; AVX-NEXT:    retq
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
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
54 ; AVX-LABEL: eq_v4i32:
55 ; AVX:       # %bb.0:
56 ; AVX-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
57 ; AVX-NEXT:    retq
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
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
74 ; AVX-LABEL: eq_v8i16:
75 ; AVX:       # %bb.0:
76 ; AVX-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
77 ; AVX-NEXT:    retq
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
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
94 ; AVX-LABEL: eq_v16i8:
95 ; AVX:       # %bb.0:
96 ; AVX-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
97 ; AVX-NEXT:    retq
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
109 ; Not Equal
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
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
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
136 ; AVX1-LABEL: ne_v2i64:
137 ; AVX1:       # %bb.0:
138 ; AVX1-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
139 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
140 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
141 ; AVX1-NEXT:    retq
143 ; AVX2-LABEL: ne_v2i64:
144 ; AVX2:       # %bb.0:
145 ; AVX2-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
146 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
147 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
148 ; AVX2-NEXT:    retq
150 ; XOP-LABEL: ne_v2i64:
151 ; XOP:       # %bb.0:
152 ; XOP-NEXT:    vpcomneqq %xmm1, %xmm0, %xmm0
153 ; XOP-NEXT:    retq
155 ; AVX512-LABEL: ne_v2i64:
156 ; AVX512:       # %bb.0:
157 ; AVX512-NEXT:    vpcmpeqq %xmm1, %xmm0, %xmm0
158 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
159 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
160 ; AVX512-NEXT:    vzeroupper
161 ; AVX512-NEXT:    retq
162   %1 = icmp ne <2 x i64> %a, %b
163   %2 = sext <2 x i1> %1 to <2 x i64>
164   ret <2 x i64> %2
167 define <4 x i32> @ne_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
168 ; SSE-LABEL: ne_v4i32:
169 ; SSE:       # %bb.0:
170 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm0
171 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
172 ; SSE-NEXT:    pxor %xmm1, %xmm0
173 ; SSE-NEXT:    retq
175 ; AVX1-LABEL: ne_v4i32:
176 ; AVX1:       # %bb.0:
177 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
178 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
179 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
180 ; AVX1-NEXT:    retq
182 ; AVX2-LABEL: ne_v4i32:
183 ; AVX2:       # %bb.0:
184 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
185 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
186 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
187 ; AVX2-NEXT:    retq
189 ; XOP-LABEL: ne_v4i32:
190 ; XOP:       # %bb.0:
191 ; XOP-NEXT:    vpcomneqd %xmm1, %xmm0, %xmm0
192 ; XOP-NEXT:    retq
194 ; AVX512-LABEL: ne_v4i32:
195 ; AVX512:       # %bb.0:
196 ; AVX512-NEXT:    vpcmpeqd %xmm1, %xmm0, %xmm0
197 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
198 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
199 ; AVX512-NEXT:    vzeroupper
200 ; AVX512-NEXT:    retq
201   %1 = icmp ne <4 x i32> %a, %b
202   %2 = sext <4 x i1> %1 to <4 x i32>
203   ret <4 x i32> %2
206 define <8 x i16> @ne_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
207 ; SSE-LABEL: ne_v8i16:
208 ; SSE:       # %bb.0:
209 ; SSE-NEXT:    pcmpeqw %xmm1, %xmm0
210 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
211 ; SSE-NEXT:    pxor %xmm1, %xmm0
212 ; SSE-NEXT:    retq
214 ; AVX1-LABEL: ne_v8i16:
215 ; AVX1:       # %bb.0:
216 ; AVX1-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
217 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
218 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
219 ; AVX1-NEXT:    retq
221 ; AVX2-LABEL: ne_v8i16:
222 ; AVX2:       # %bb.0:
223 ; AVX2-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
224 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
225 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
226 ; AVX2-NEXT:    retq
228 ; XOP-LABEL: ne_v8i16:
229 ; XOP:       # %bb.0:
230 ; XOP-NEXT:    vpcomneqw %xmm1, %xmm0, %xmm0
231 ; XOP-NEXT:    retq
233 ; AVX512-LABEL: ne_v8i16:
234 ; AVX512:       # %bb.0:
235 ; AVX512-NEXT:    vpcmpeqw %xmm1, %xmm0, %xmm0
236 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
237 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
238 ; AVX512-NEXT:    vzeroupper
239 ; AVX512-NEXT:    retq
240   %1 = icmp ne <8 x i16> %a, %b
241   %2 = sext <8 x i1> %1 to <8 x i16>
242   ret <8 x i16> %2
245 define <16 x i8> @ne_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
246 ; SSE-LABEL: ne_v16i8:
247 ; SSE:       # %bb.0:
248 ; SSE-NEXT:    pcmpeqb %xmm1, %xmm0
249 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
250 ; SSE-NEXT:    pxor %xmm1, %xmm0
251 ; SSE-NEXT:    retq
253 ; AVX1-LABEL: ne_v16i8:
254 ; AVX1:       # %bb.0:
255 ; AVX1-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
256 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
257 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
258 ; AVX1-NEXT:    retq
260 ; AVX2-LABEL: ne_v16i8:
261 ; AVX2:       # %bb.0:
262 ; AVX2-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
263 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
264 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
265 ; AVX2-NEXT:    retq
267 ; XOP-LABEL: ne_v16i8:
268 ; XOP:       # %bb.0:
269 ; XOP-NEXT:    vpcomneqb %xmm1, %xmm0, %xmm0
270 ; XOP-NEXT:    retq
272 ; AVX512-LABEL: ne_v16i8:
273 ; AVX512:       # %bb.0:
274 ; AVX512-NEXT:    vpcmpeqb %xmm1, %xmm0, %xmm0
275 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
276 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
277 ; AVX512-NEXT:    vzeroupper
278 ; AVX512-NEXT:    retq
279   %1 = icmp ne <16 x i8> %a, %b
280   %2 = sext <16 x i1> %1 to <16 x i8>
281   ret <16 x i8> %2
285 ; Greater Than Or Equal
288 define <2 x i64> @ge_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
289 ; SSE2-LABEL: ge_v2i64:
290 ; SSE2:       # %bb.0:
291 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
292 ; SSE2-NEXT:    pxor %xmm2, %xmm0
293 ; SSE2-NEXT:    pxor %xmm2, %xmm1
294 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
295 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
296 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
297 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
298 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
299 ; SSE2-NEXT:    pand %xmm3, %xmm0
300 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
301 ; SSE2-NEXT:    por %xmm0, %xmm1
302 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
303 ; SSE2-NEXT:    pxor %xmm1, %xmm0
304 ; SSE2-NEXT:    retq
306 ; SSE41-LABEL: ge_v2i64:
307 ; SSE41:       # %bb.0:
308 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
309 ; SSE41-NEXT:    pxor %xmm2, %xmm0
310 ; SSE41-NEXT:    pxor %xmm2, %xmm1
311 ; SSE41-NEXT:    movdqa %xmm1, %xmm2
312 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
313 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
314 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
315 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
316 ; SSE41-NEXT:    pand %xmm3, %xmm0
317 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
318 ; SSE41-NEXT:    por %xmm0, %xmm1
319 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
320 ; SSE41-NEXT:    pxor %xmm1, %xmm0
321 ; SSE41-NEXT:    retq
323 ; SSE42-LABEL: ge_v2i64:
324 ; SSE42:       # %bb.0:
325 ; SSE42-NEXT:    pcmpgtq %xmm0, %xmm1
326 ; SSE42-NEXT:    pcmpeqd %xmm0, %xmm0
327 ; SSE42-NEXT:    pxor %xmm1, %xmm0
328 ; SSE42-NEXT:    retq
330 ; AVX1-LABEL: ge_v2i64:
331 ; AVX1:       # %bb.0:
332 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
333 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
334 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
335 ; AVX1-NEXT:    retq
337 ; AVX2-LABEL: ge_v2i64:
338 ; AVX2:       # %bb.0:
339 ; AVX2-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
340 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
341 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
342 ; AVX2-NEXT:    retq
344 ; XOP-LABEL: ge_v2i64:
345 ; XOP:       # %bb.0:
346 ; XOP-NEXT:    vpcomgeq %xmm1, %xmm0, %xmm0
347 ; XOP-NEXT:    retq
349 ; AVX512-LABEL: ge_v2i64:
350 ; AVX512:       # %bb.0:
351 ; AVX512-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
352 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
353 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
354 ; AVX512-NEXT:    vzeroupper
355 ; AVX512-NEXT:    retq
356   %1 = icmp sge <2 x i64> %a, %b
357   %2 = sext <2 x i1> %1 to <2 x i64>
358   ret <2 x i64> %2
361 define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
362 ; SSE-LABEL: ge_v4i32:
363 ; SSE:       # %bb.0:
364 ; SSE-NEXT:    pcmpgtd %xmm0, %xmm1
365 ; SSE-NEXT:    pcmpeqd %xmm0, %xmm0
366 ; SSE-NEXT:    pxor %xmm1, %xmm0
367 ; SSE-NEXT:    retq
369 ; AVX1-LABEL: ge_v4i32:
370 ; AVX1:       # %bb.0:
371 ; AVX1-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
372 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
373 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
374 ; AVX1-NEXT:    retq
376 ; AVX2-LABEL: ge_v4i32:
377 ; AVX2:       # %bb.0:
378 ; AVX2-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
379 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
380 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
381 ; AVX2-NEXT:    retq
383 ; XOP-LABEL: ge_v4i32:
384 ; XOP:       # %bb.0:
385 ; XOP-NEXT:    vpcomged %xmm1, %xmm0, %xmm0
386 ; XOP-NEXT:    retq
388 ; AVX512-LABEL: ge_v4i32:
389 ; AVX512:       # %bb.0:
390 ; AVX512-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
391 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
392 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
393 ; AVX512-NEXT:    vzeroupper
394 ; AVX512-NEXT:    retq
395   %1 = icmp sge <4 x i32> %a, %b
396   %2 = sext <4 x i1> %1 to <4 x i32>
397   ret <4 x i32> %2
400 define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
401 ; SSE-LABEL: ge_v8i16:
402 ; SSE:       # %bb.0:
403 ; SSE-NEXT:    pcmpgtw %xmm0, %xmm1
404 ; SSE-NEXT:    pcmpeqd %xmm0, %xmm0
405 ; SSE-NEXT:    pxor %xmm1, %xmm0
406 ; SSE-NEXT:    retq
408 ; AVX1-LABEL: ge_v8i16:
409 ; AVX1:       # %bb.0:
410 ; AVX1-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
411 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
412 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
413 ; AVX1-NEXT:    retq
415 ; AVX2-LABEL: ge_v8i16:
416 ; AVX2:       # %bb.0:
417 ; AVX2-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
418 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
419 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
420 ; AVX2-NEXT:    retq
422 ; XOP-LABEL: ge_v8i16:
423 ; XOP:       # %bb.0:
424 ; XOP-NEXT:    vpcomgew %xmm1, %xmm0, %xmm0
425 ; XOP-NEXT:    retq
427 ; AVX512-LABEL: ge_v8i16:
428 ; AVX512:       # %bb.0:
429 ; AVX512-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
430 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
431 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
432 ; AVX512-NEXT:    vzeroupper
433 ; AVX512-NEXT:    retq
434   %1 = icmp sge <8 x i16> %a, %b
435   %2 = sext <8 x i1> %1 to <8 x i16>
436   ret <8 x i16> %2
439 define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
440 ; SSE-LABEL: ge_v16i8:
441 ; SSE:       # %bb.0:
442 ; SSE-NEXT:    pcmpgtb %xmm0, %xmm1
443 ; SSE-NEXT:    pcmpeqd %xmm0, %xmm0
444 ; SSE-NEXT:    pxor %xmm1, %xmm0
445 ; SSE-NEXT:    retq
447 ; AVX1-LABEL: ge_v16i8:
448 ; AVX1:       # %bb.0:
449 ; AVX1-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
450 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
451 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
452 ; AVX1-NEXT:    retq
454 ; AVX2-LABEL: ge_v16i8:
455 ; AVX2:       # %bb.0:
456 ; AVX2-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
457 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
458 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
459 ; AVX2-NEXT:    retq
461 ; XOP-LABEL: ge_v16i8:
462 ; XOP:       # %bb.0:
463 ; XOP-NEXT:    vpcomgeb %xmm1, %xmm0, %xmm0
464 ; XOP-NEXT:    retq
466 ; AVX512-LABEL: ge_v16i8:
467 ; AVX512:       # %bb.0:
468 ; AVX512-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
469 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
470 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
471 ; AVX512-NEXT:    vzeroupper
472 ; AVX512-NEXT:    retq
473   %1 = icmp sge <16 x i8> %a, %b
474   %2 = sext <16 x i1> %1 to <16 x i8>
475   ret <16 x i8> %2
479 ; Greater Than
482 define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
483 ; SSE2-LABEL: gt_v2i64:
484 ; SSE2:       # %bb.0:
485 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
486 ; SSE2-NEXT:    pxor %xmm2, %xmm1
487 ; SSE2-NEXT:    pxor %xmm2, %xmm0
488 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
489 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
490 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
491 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
492 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
493 ; SSE2-NEXT:    pand %xmm3, %xmm1
494 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
495 ; SSE2-NEXT:    por %xmm1, %xmm0
496 ; SSE2-NEXT:    retq
498 ; SSE41-LABEL: gt_v2i64:
499 ; SSE41:       # %bb.0:
500 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
501 ; SSE41-NEXT:    pxor %xmm2, %xmm1
502 ; SSE41-NEXT:    pxor %xmm2, %xmm0
503 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
504 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2
505 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
506 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
507 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3]
508 ; SSE41-NEXT:    pand %xmm3, %xmm1
509 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
510 ; SSE41-NEXT:    por %xmm1, %xmm0
511 ; SSE41-NEXT:    retq
513 ; SSE42-LABEL: gt_v2i64:
514 ; SSE42:       # %bb.0:
515 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
516 ; SSE42-NEXT:    retq
518 ; AVX-LABEL: gt_v2i64:
519 ; AVX:       # %bb.0:
520 ; AVX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
521 ; AVX-NEXT:    retq
523 ; XOP-LABEL: gt_v2i64:
524 ; XOP:       # %bb.0:
525 ; XOP-NEXT:    vpcomgtq %xmm1, %xmm0, %xmm0
526 ; XOP-NEXT:    retq
527   %1 = icmp sgt <2 x i64> %a, %b
528   %2 = sext <2 x i1> %1 to <2 x i64>
529   ret <2 x i64> %2
532 define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
533 ; SSE-LABEL: gt_v4i32:
534 ; SSE:       # %bb.0:
535 ; SSE-NEXT:    pcmpgtd %xmm1, %xmm0
536 ; SSE-NEXT:    retq
538 ; AVX-LABEL: gt_v4i32:
539 ; AVX:       # %bb.0:
540 ; AVX-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
541 ; AVX-NEXT:    retq
543 ; XOP-LABEL: gt_v4i32:
544 ; XOP:       # %bb.0:
545 ; XOP-NEXT:    vpcomgtd %xmm1, %xmm0, %xmm0
546 ; XOP-NEXT:    retq
547   %1 = icmp sgt <4 x i32> %a, %b
548   %2 = sext <4 x i1> %1 to <4 x i32>
549   ret <4 x i32> %2
552 define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
553 ; SSE-LABEL: gt_v8i16:
554 ; SSE:       # %bb.0:
555 ; SSE-NEXT:    pcmpgtw %xmm1, %xmm0
556 ; SSE-NEXT:    retq
558 ; AVX-LABEL: gt_v8i16:
559 ; AVX:       # %bb.0:
560 ; AVX-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
561 ; AVX-NEXT:    retq
563 ; XOP-LABEL: gt_v8i16:
564 ; XOP:       # %bb.0:
565 ; XOP-NEXT:    vpcomgtw %xmm1, %xmm0, %xmm0
566 ; XOP-NEXT:    retq
567   %1 = icmp sgt <8 x i16> %a, %b
568   %2 = sext <8 x i1> %1 to <8 x i16>
569   ret <8 x i16> %2
572 define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
573 ; SSE-LABEL: gt_v16i8:
574 ; SSE:       # %bb.0:
575 ; SSE-NEXT:    pcmpgtb %xmm1, %xmm0
576 ; SSE-NEXT:    retq
578 ; AVX-LABEL: gt_v16i8:
579 ; AVX:       # %bb.0:
580 ; AVX-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
581 ; AVX-NEXT:    retq
583 ; XOP-LABEL: gt_v16i8:
584 ; XOP:       # %bb.0:
585 ; XOP-NEXT:    vpcomgtb %xmm1, %xmm0, %xmm0
586 ; XOP-NEXT:    retq
587   %1 = icmp sgt <16 x i8> %a, %b
588   %2 = sext <16 x i1> %1 to <16 x i8>
589   ret <16 x i8> %2
593 ; Less Than Or Equal
596 define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
597 ; SSE2-LABEL: le_v2i64:
598 ; SSE2:       # %bb.0:
599 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
600 ; SSE2-NEXT:    pxor %xmm2, %xmm1
601 ; SSE2-NEXT:    pxor %xmm2, %xmm0
602 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
603 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
604 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
605 ; SSE2-NEXT:    pcmpeqd %xmm1, %xmm0
606 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
607 ; SSE2-NEXT:    pand %xmm3, %xmm0
608 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
609 ; SSE2-NEXT:    por %xmm0, %xmm1
610 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm0
611 ; SSE2-NEXT:    pxor %xmm1, %xmm0
612 ; SSE2-NEXT:    retq
614 ; SSE41-LABEL: le_v2i64:
615 ; SSE41:       # %bb.0:
616 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
617 ; SSE41-NEXT:    pxor %xmm2, %xmm1
618 ; SSE41-NEXT:    pxor %xmm2, %xmm0
619 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
620 ; SSE41-NEXT:    pcmpgtd %xmm1, %xmm2
621 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
622 ; SSE41-NEXT:    pcmpeqd %xmm1, %xmm0
623 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
624 ; SSE41-NEXT:    pand %xmm3, %xmm0
625 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
626 ; SSE41-NEXT:    por %xmm0, %xmm1
627 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm0
628 ; SSE41-NEXT:    pxor %xmm1, %xmm0
629 ; SSE41-NEXT:    retq
631 ; SSE42-LABEL: le_v2i64:
632 ; SSE42:       # %bb.0:
633 ; SSE42-NEXT:    pcmpgtq %xmm1, %xmm0
634 ; SSE42-NEXT:    pcmpeqd %xmm1, %xmm1
635 ; SSE42-NEXT:    pxor %xmm1, %xmm0
636 ; SSE42-NEXT:    retq
638 ; AVX1-LABEL: le_v2i64:
639 ; AVX1:       # %bb.0:
640 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
641 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
642 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
643 ; AVX1-NEXT:    retq
645 ; AVX2-LABEL: le_v2i64:
646 ; AVX2:       # %bb.0:
647 ; AVX2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
648 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
649 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
650 ; AVX2-NEXT:    retq
652 ; XOP-LABEL: le_v2i64:
653 ; XOP:       # %bb.0:
654 ; XOP-NEXT:    vpcomleq %xmm1, %xmm0, %xmm0
655 ; XOP-NEXT:    retq
657 ; AVX512-LABEL: le_v2i64:
658 ; AVX512:       # %bb.0:
659 ; AVX512-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0
660 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
661 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
662 ; AVX512-NEXT:    vzeroupper
663 ; AVX512-NEXT:    retq
664   %1 = icmp sle <2 x i64> %a, %b
665   %2 = sext <2 x i1> %1 to <2 x i64>
666   ret <2 x i64> %2
669 define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
670 ; SSE-LABEL: le_v4i32:
671 ; SSE:       # %bb.0:
672 ; SSE-NEXT:    pcmpgtd %xmm1, %xmm0
673 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
674 ; SSE-NEXT:    pxor %xmm1, %xmm0
675 ; SSE-NEXT:    retq
677 ; AVX1-LABEL: le_v4i32:
678 ; AVX1:       # %bb.0:
679 ; AVX1-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
680 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
681 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
682 ; AVX1-NEXT:    retq
684 ; AVX2-LABEL: le_v4i32:
685 ; AVX2:       # %bb.0:
686 ; AVX2-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
687 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
688 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
689 ; AVX2-NEXT:    retq
691 ; XOP-LABEL: le_v4i32:
692 ; XOP:       # %bb.0:
693 ; XOP-NEXT:    vpcomled %xmm1, %xmm0, %xmm0
694 ; XOP-NEXT:    retq
696 ; AVX512-LABEL: le_v4i32:
697 ; AVX512:       # %bb.0:
698 ; AVX512-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
699 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
700 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
701 ; AVX512-NEXT:    vzeroupper
702 ; AVX512-NEXT:    retq
703   %1 = icmp sle <4 x i32> %a, %b
704   %2 = sext <4 x i1> %1 to <4 x i32>
705   ret <4 x i32> %2
708 define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
709 ; SSE-LABEL: le_v8i16:
710 ; SSE:       # %bb.0:
711 ; SSE-NEXT:    pcmpgtw %xmm1, %xmm0
712 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
713 ; SSE-NEXT:    pxor %xmm1, %xmm0
714 ; SSE-NEXT:    retq
716 ; AVX1-LABEL: le_v8i16:
717 ; AVX1:       # %bb.0:
718 ; AVX1-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
719 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
720 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
721 ; AVX1-NEXT:    retq
723 ; AVX2-LABEL: le_v8i16:
724 ; AVX2:       # %bb.0:
725 ; AVX2-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
726 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
727 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
728 ; AVX2-NEXT:    retq
730 ; XOP-LABEL: le_v8i16:
731 ; XOP:       # %bb.0:
732 ; XOP-NEXT:    vpcomlew %xmm1, %xmm0, %xmm0
733 ; XOP-NEXT:    retq
735 ; AVX512-LABEL: le_v8i16:
736 ; AVX512:       # %bb.0:
737 ; AVX512-NEXT:    vpcmpgtw %xmm1, %xmm0, %xmm0
738 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
739 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
740 ; AVX512-NEXT:    vzeroupper
741 ; AVX512-NEXT:    retq
742   %1 = icmp sle <8 x i16> %a, %b
743   %2 = sext <8 x i1> %1 to <8 x i16>
744   ret <8 x i16> %2
747 define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
748 ; SSE-LABEL: le_v16i8:
749 ; SSE:       # %bb.0:
750 ; SSE-NEXT:    pcmpgtb %xmm1, %xmm0
751 ; SSE-NEXT:    pcmpeqd %xmm1, %xmm1
752 ; SSE-NEXT:    pxor %xmm1, %xmm0
753 ; SSE-NEXT:    retq
755 ; AVX1-LABEL: le_v16i8:
756 ; AVX1:       # %bb.0:
757 ; AVX1-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
758 ; AVX1-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
759 ; AVX1-NEXT:    vpxor %xmm1, %xmm0, %xmm0
760 ; AVX1-NEXT:    retq
762 ; AVX2-LABEL: le_v16i8:
763 ; AVX2:       # %bb.0:
764 ; AVX2-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
765 ; AVX2-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
766 ; AVX2-NEXT:    vpxor %xmm1, %xmm0, %xmm0
767 ; AVX2-NEXT:    retq
769 ; XOP-LABEL: le_v16i8:
770 ; XOP:       # %bb.0:
771 ; XOP-NEXT:    vpcomleb %xmm1, %xmm0, %xmm0
772 ; XOP-NEXT:    retq
774 ; AVX512-LABEL: le_v16i8:
775 ; AVX512:       # %bb.0:
776 ; AVX512-NEXT:    vpcmpgtb %xmm1, %xmm0, %xmm0
777 ; AVX512-NEXT:    vpternlogq $15, %zmm0, %zmm0, %zmm0
778 ; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
779 ; AVX512-NEXT:    vzeroupper
780 ; AVX512-NEXT:    retq
781   %1 = icmp sle <16 x i8> %a, %b
782   %2 = sext <16 x i1> %1 to <16 x i8>
783   ret <16 x i8> %2
787 ; Less Than
790 define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind {
791 ; SSE2-LABEL: lt_v2i64:
792 ; SSE2:       # %bb.0:
793 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
794 ; SSE2-NEXT:    pxor %xmm2, %xmm0
795 ; SSE2-NEXT:    pxor %xmm2, %xmm1
796 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
797 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm2
798 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
799 ; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
800 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
801 ; SSE2-NEXT:    pand %xmm3, %xmm1
802 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
803 ; SSE2-NEXT:    por %xmm1, %xmm0
804 ; SSE2-NEXT:    retq
806 ; SSE41-LABEL: lt_v2i64:
807 ; SSE41:       # %bb.0:
808 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,2147483648]
809 ; SSE41-NEXT:    pxor %xmm2, %xmm0
810 ; SSE41-NEXT:    pxor %xmm2, %xmm1
811 ; SSE41-NEXT:    movdqa %xmm1, %xmm2
812 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
813 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
814 ; SSE41-NEXT:    pcmpeqd %xmm0, %xmm1
815 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
816 ; SSE41-NEXT:    pand %xmm3, %xmm1
817 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
818 ; SSE41-NEXT:    por %xmm1, %xmm0
819 ; SSE41-NEXT:    retq
821 ; SSE42-LABEL: lt_v2i64:
822 ; SSE42:       # %bb.0:
823 ; SSE42-NEXT:    pcmpgtq %xmm0, %xmm1
824 ; SSE42-NEXT:    movdqa %xmm1, %xmm0
825 ; SSE42-NEXT:    retq
827 ; AVX-LABEL: lt_v2i64:
828 ; AVX:       # %bb.0:
829 ; AVX-NEXT:    vpcmpgtq %xmm0, %xmm1, %xmm0
830 ; AVX-NEXT:    retq
832 ; XOP-LABEL: lt_v2i64:
833 ; XOP:       # %bb.0:
834 ; XOP-NEXT:    vpcomltq %xmm1, %xmm0, %xmm0
835 ; XOP-NEXT:    retq
836   %1 = icmp slt <2 x i64> %a, %b
837   %2 = sext <2 x i1> %1 to <2 x i64>
838   ret <2 x i64> %2
841 define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind {
842 ; SSE-LABEL: lt_v4i32:
843 ; SSE:       # %bb.0:
844 ; SSE-NEXT:    pcmpgtd %xmm0, %xmm1
845 ; SSE-NEXT:    movdqa %xmm1, %xmm0
846 ; SSE-NEXT:    retq
848 ; AVX-LABEL: lt_v4i32:
849 ; AVX:       # %bb.0:
850 ; AVX-NEXT:    vpcmpgtd %xmm0, %xmm1, %xmm0
851 ; AVX-NEXT:    retq
853 ; XOP-LABEL: lt_v4i32:
854 ; XOP:       # %bb.0:
855 ; XOP-NEXT:    vpcomltd %xmm1, %xmm0, %xmm0
856 ; XOP-NEXT:    retq
857   %1 = icmp slt <4 x i32> %a, %b
858   %2 = sext <4 x i1> %1 to <4 x i32>
859   ret <4 x i32> %2
862 define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind {
863 ; SSE-LABEL: lt_v8i16:
864 ; SSE:       # %bb.0:
865 ; SSE-NEXT:    pcmpgtw %xmm0, %xmm1
866 ; SSE-NEXT:    movdqa %xmm1, %xmm0
867 ; SSE-NEXT:    retq
869 ; AVX-LABEL: lt_v8i16:
870 ; AVX:       # %bb.0:
871 ; AVX-NEXT:    vpcmpgtw %xmm0, %xmm1, %xmm0
872 ; AVX-NEXT:    retq
874 ; XOP-LABEL: lt_v8i16:
875 ; XOP:       # %bb.0:
876 ; XOP-NEXT:    vpcomltw %xmm1, %xmm0, %xmm0
877 ; XOP-NEXT:    retq
878   %1 = icmp slt <8 x i16> %a, %b
879   %2 = sext <8 x i1> %1 to <8 x i16>
880   ret <8 x i16> %2
883 define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind {
884 ; SSE-LABEL: lt_v16i8:
885 ; SSE:       # %bb.0:
886 ; SSE-NEXT:    pcmpgtb %xmm0, %xmm1
887 ; SSE-NEXT:    movdqa %xmm1, %xmm0
888 ; SSE-NEXT:    retq
890 ; AVX-LABEL: lt_v16i8:
891 ; AVX:       # %bb.0:
892 ; AVX-NEXT:    vpcmpgtb %xmm0, %xmm1, %xmm0
893 ; AVX-NEXT:    retq
895 ; XOP-LABEL: lt_v16i8:
896 ; XOP:       # %bb.0:
897 ; XOP-NEXT:    vpcomltb %xmm1, %xmm0, %xmm0
898 ; XOP-NEXT:    retq
899   %1 = icmp slt <16 x i8> %a, %b
900   %2 = sext <16 x i1> %1 to <16 x i8>
901   ret <16 x i8> %2