Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/X86/vec_cmp_sint-128.ll @ 95:afa8332a0e37 LLVM3.8
LLVM 3.8
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 13 Oct 2015 17:48:58 +0900 |
parents | |
children | 7d135dc70f03 |
comparison
equal
deleted
inserted
replaced
84:f3e34b893a5f | 95:afa8332a0e37 |
---|---|
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,0,2147483648,0] | |
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,0,2147483648,0] | |
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: pcmpgtq %xmm0, %xmm1 | |
265 ; SSE42-NEXT: pcmpeqd %xmm0, %xmm0 | |
266 ; SSE42-NEXT: pxor %xmm1, %xmm0 | |
267 ; SSE42-NEXT: retq | |
268 ; | |
269 ; AVX-LABEL: ge_v2i64: | |
270 ; AVX: # BB#0: | |
271 ; AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 | |
272 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 | |
273 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 | |
274 ; AVX-NEXT: retq | |
275 ; | |
276 ; XOP-LABEL: ge_v2i64: | |
277 ; XOP: # BB#0: | |
278 ; XOP-NEXT: vpcomgeq %xmm1, %xmm0, %xmm0 | |
279 ; XOP-NEXT: retq | |
280 %1 = icmp sge <2 x i64> %a, %b | |
281 %2 = sext <2 x i1> %1 to <2 x i64> | |
282 ret <2 x i64> %2 | |
283 } | |
284 | |
285 define <4 x i32> @ge_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind { | |
286 ; SSE-LABEL: ge_v4i32: | |
287 ; SSE: # BB#0: | |
288 ; SSE-NEXT: pcmpgtd %xmm0, %xmm1 | |
289 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0 | |
290 ; SSE-NEXT: pxor %xmm1, %xmm0 | |
291 ; SSE-NEXT: retq | |
292 ; | |
293 ; AVX-LABEL: ge_v4i32: | |
294 ; AVX: # BB#0: | |
295 ; AVX-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 | |
296 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 | |
297 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 | |
298 ; AVX-NEXT: retq | |
299 ; | |
300 ; XOP-LABEL: ge_v4i32: | |
301 ; XOP: # BB#0: | |
302 ; XOP-NEXT: vpcomged %xmm1, %xmm0, %xmm0 | |
303 ; XOP-NEXT: retq | |
304 %1 = icmp sge <4 x i32> %a, %b | |
305 %2 = sext <4 x i1> %1 to <4 x i32> | |
306 ret <4 x i32> %2 | |
307 } | |
308 | |
309 define <8 x i16> @ge_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind { | |
310 ; SSE-LABEL: ge_v8i16: | |
311 ; SSE: # BB#0: | |
312 ; SSE-NEXT: pcmpgtw %xmm0, %xmm1 | |
313 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0 | |
314 ; SSE-NEXT: pxor %xmm1, %xmm0 | |
315 ; SSE-NEXT: retq | |
316 ; | |
317 ; AVX-LABEL: ge_v8i16: | |
318 ; AVX: # BB#0: | |
319 ; AVX-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 | |
320 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 | |
321 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 | |
322 ; AVX-NEXT: retq | |
323 ; | |
324 ; XOP-LABEL: ge_v8i16: | |
325 ; XOP: # BB#0: | |
326 ; XOP-NEXT: vpcomgew %xmm1, %xmm0, %xmm0 | |
327 ; XOP-NEXT: retq | |
328 %1 = icmp sge <8 x i16> %a, %b | |
329 %2 = sext <8 x i1> %1 to <8 x i16> | |
330 ret <8 x i16> %2 | |
331 } | |
332 | |
333 define <16 x i8> @ge_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind { | |
334 ; SSE-LABEL: ge_v16i8: | |
335 ; SSE: # BB#0: | |
336 ; SSE-NEXT: pcmpgtb %xmm0, %xmm1 | |
337 ; SSE-NEXT: pcmpeqd %xmm0, %xmm0 | |
338 ; SSE-NEXT: pxor %xmm1, %xmm0 | |
339 ; SSE-NEXT: retq | |
340 ; | |
341 ; AVX-LABEL: ge_v16i8: | |
342 ; AVX: # BB#0: | |
343 ; AVX-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0 | |
344 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 | |
345 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 | |
346 ; AVX-NEXT: retq | |
347 ; | |
348 ; XOP-LABEL: ge_v16i8: | |
349 ; XOP: # BB#0: | |
350 ; XOP-NEXT: vpcomgeb %xmm1, %xmm0, %xmm0 | |
351 ; XOP-NEXT: retq | |
352 %1 = icmp sge <16 x i8> %a, %b | |
353 %2 = sext <16 x i1> %1 to <16 x i8> | |
354 ret <16 x i8> %2 | |
355 } | |
356 | |
357 ; | |
358 ; Greater Than | |
359 ; | |
360 | |
361 define <2 x i64> @gt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind { | |
362 ; SSE2-LABEL: gt_v2i64: | |
363 ; SSE2: # BB#0: | |
364 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] | |
365 ; SSE2-NEXT: pxor %xmm2, %xmm1 | |
366 ; SSE2-NEXT: pxor %xmm2, %xmm0 | |
367 ; SSE2-NEXT: movdqa %xmm0, %xmm2 | |
368 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 | |
369 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] | |
370 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0 | |
371 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3] | |
372 ; SSE2-NEXT: pand %xmm3, %xmm1 | |
373 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] | |
374 ; SSE2-NEXT: por %xmm1, %xmm0 | |
375 ; SSE2-NEXT: retq | |
376 ; | |
377 ; SSE41-LABEL: gt_v2i64: | |
378 ; SSE41: # BB#0: | |
379 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] | |
380 ; SSE41-NEXT: pxor %xmm2, %xmm1 | |
381 ; SSE41-NEXT: pxor %xmm2, %xmm0 | |
382 ; SSE41-NEXT: movdqa %xmm0, %xmm2 | |
383 ; SSE41-NEXT: pcmpgtd %xmm1, %xmm2 | |
384 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] | |
385 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0 | |
386 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm0[1,1,3,3] | |
387 ; SSE41-NEXT: pand %xmm3, %xmm1 | |
388 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] | |
389 ; SSE41-NEXT: por %xmm1, %xmm0 | |
390 ; SSE41-NEXT: retq | |
391 ; | |
392 ; SSE42-LABEL: gt_v2i64: | |
393 ; SSE42: # BB#0: | |
394 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0 | |
395 ; SSE42-NEXT: retq | |
396 ; | |
397 ; AVX-LABEL: gt_v2i64: | |
398 ; AVX: # BB#0: | |
399 ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 | |
400 ; AVX-NEXT: retq | |
401 ; | |
402 ; XOP-LABEL: gt_v2i64: | |
403 ; XOP: # BB#0: | |
404 ; XOP-NEXT: vpcomgtq %xmm1, %xmm0, %xmm0 | |
405 ; XOP-NEXT: retq | |
406 %1 = icmp sgt <2 x i64> %a, %b | |
407 %2 = sext <2 x i1> %1 to <2 x i64> | |
408 ret <2 x i64> %2 | |
409 } | |
410 | |
411 define <4 x i32> @gt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind { | |
412 ; SSE-LABEL: gt_v4i32: | |
413 ; SSE: # BB#0: | |
414 ; SSE-NEXT: pcmpgtd %xmm1, %xmm0 | |
415 ; SSE-NEXT: retq | |
416 ; | |
417 ; AVX-LABEL: gt_v4i32: | |
418 ; AVX: # BB#0: | |
419 ; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 | |
420 ; AVX-NEXT: retq | |
421 ; | |
422 ; XOP-LABEL: gt_v4i32: | |
423 ; XOP: # BB#0: | |
424 ; XOP-NEXT: vpcomgtd %xmm1, %xmm0, %xmm0 | |
425 ; XOP-NEXT: retq | |
426 %1 = icmp sgt <4 x i32> %a, %b | |
427 %2 = sext <4 x i1> %1 to <4 x i32> | |
428 ret <4 x i32> %2 | |
429 } | |
430 | |
431 define <8 x i16> @gt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind { | |
432 ; SSE-LABEL: gt_v8i16: | |
433 ; SSE: # BB#0: | |
434 ; SSE-NEXT: pcmpgtw %xmm1, %xmm0 | |
435 ; SSE-NEXT: retq | |
436 ; | |
437 ; AVX-LABEL: gt_v8i16: | |
438 ; AVX: # BB#0: | |
439 ; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 | |
440 ; AVX-NEXT: retq | |
441 ; | |
442 ; XOP-LABEL: gt_v8i16: | |
443 ; XOP: # BB#0: | |
444 ; XOP-NEXT: vpcomgtw %xmm1, %xmm0, %xmm0 | |
445 ; XOP-NEXT: retq | |
446 %1 = icmp sgt <8 x i16> %a, %b | |
447 %2 = sext <8 x i1> %1 to <8 x i16> | |
448 ret <8 x i16> %2 | |
449 } | |
450 | |
451 define <16 x i8> @gt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind { | |
452 ; SSE-LABEL: gt_v16i8: | |
453 ; SSE: # BB#0: | |
454 ; SSE-NEXT: pcmpgtb %xmm1, %xmm0 | |
455 ; SSE-NEXT: retq | |
456 ; | |
457 ; AVX-LABEL: gt_v16i8: | |
458 ; AVX: # BB#0: | |
459 ; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0 | |
460 ; AVX-NEXT: retq | |
461 ; | |
462 ; XOP-LABEL: gt_v16i8: | |
463 ; XOP: # BB#0: | |
464 ; XOP-NEXT: vpcomgtb %xmm1, %xmm0, %xmm0 | |
465 ; XOP-NEXT: retq | |
466 %1 = icmp sgt <16 x i8> %a, %b | |
467 %2 = sext <16 x i1> %1 to <16 x i8> | |
468 ret <16 x i8> %2 | |
469 } | |
470 | |
471 ; | |
472 ; Less Than Or Equal | |
473 ; | |
474 | |
475 define <2 x i64> @le_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind { | |
476 ; SSE2-LABEL: le_v2i64: | |
477 ; SSE2: # BB#0: | |
478 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] | |
479 ; SSE2-NEXT: pxor %xmm2, %xmm1 | |
480 ; SSE2-NEXT: pxor %xmm2, %xmm0 | |
481 ; SSE2-NEXT: movdqa %xmm0, %xmm2 | |
482 ; SSE2-NEXT: pcmpgtd %xmm1, %xmm2 | |
483 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] | |
484 ; SSE2-NEXT: pcmpeqd %xmm1, %xmm0 | |
485 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] | |
486 ; SSE2-NEXT: pand %xmm3, %xmm0 | |
487 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3] | |
488 ; SSE2-NEXT: por %xmm0, %xmm1 | |
489 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm0 | |
490 ; SSE2-NEXT: pxor %xmm1, %xmm0 | |
491 ; SSE2-NEXT: retq | |
492 ; | |
493 ; SSE41-LABEL: le_v2i64: | |
494 ; SSE41: # BB#0: | |
495 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] | |
496 ; SSE41-NEXT: pxor %xmm2, %xmm1 | |
497 ; SSE41-NEXT: pxor %xmm2, %xmm0 | |
498 ; SSE41-NEXT: movdqa %xmm0, %xmm2 | |
499 ; SSE41-NEXT: pcmpgtd %xmm1, %xmm2 | |
500 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] | |
501 ; SSE41-NEXT: pcmpeqd %xmm1, %xmm0 | |
502 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] | |
503 ; SSE41-NEXT: pand %xmm3, %xmm0 | |
504 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3] | |
505 ; SSE41-NEXT: por %xmm0, %xmm1 | |
506 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm0 | |
507 ; SSE41-NEXT: pxor %xmm1, %xmm0 | |
508 ; SSE41-NEXT: retq | |
509 ; | |
510 ; SSE42-LABEL: le_v2i64: | |
511 ; SSE42: # BB#0: | |
512 ; SSE42-NEXT: pcmpgtq %xmm1, %xmm0 | |
513 ; SSE42-NEXT: pcmpeqd %xmm1, %xmm1 | |
514 ; SSE42-NEXT: pxor %xmm1, %xmm0 | |
515 ; SSE42-NEXT: retq | |
516 ; | |
517 ; AVX-LABEL: le_v2i64: | |
518 ; AVX: # BB#0: | |
519 ; AVX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 | |
520 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 | |
521 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 | |
522 ; AVX-NEXT: retq | |
523 ; | |
524 ; XOP-LABEL: le_v2i64: | |
525 ; XOP: # BB#0: | |
526 ; XOP-NEXT: vpcomleq %xmm1, %xmm0, %xmm0 | |
527 ; XOP-NEXT: retq | |
528 %1 = icmp sle <2 x i64> %a, %b | |
529 %2 = sext <2 x i1> %1 to <2 x i64> | |
530 ret <2 x i64> %2 | |
531 } | |
532 | |
533 define <4 x i32> @le_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind { | |
534 ; SSE-LABEL: le_v4i32: | |
535 ; SSE: # BB#0: | |
536 ; SSE-NEXT: pcmpgtd %xmm1, %xmm0 | |
537 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1 | |
538 ; SSE-NEXT: pxor %xmm1, %xmm0 | |
539 ; SSE-NEXT: retq | |
540 ; | |
541 ; AVX-LABEL: le_v4i32: | |
542 ; AVX: # BB#0: | |
543 ; AVX-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0 | |
544 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 | |
545 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 | |
546 ; AVX-NEXT: retq | |
547 ; | |
548 ; XOP-LABEL: le_v4i32: | |
549 ; XOP: # BB#0: | |
550 ; XOP-NEXT: vpcomled %xmm1, %xmm0, %xmm0 | |
551 ; XOP-NEXT: retq | |
552 %1 = icmp sle <4 x i32> %a, %b | |
553 %2 = sext <4 x i1> %1 to <4 x i32> | |
554 ret <4 x i32> %2 | |
555 } | |
556 | |
557 define <8 x i16> @le_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind { | |
558 ; SSE-LABEL: le_v8i16: | |
559 ; SSE: # BB#0: | |
560 ; SSE-NEXT: pcmpgtw %xmm1, %xmm0 | |
561 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1 | |
562 ; SSE-NEXT: pxor %xmm1, %xmm0 | |
563 ; SSE-NEXT: retq | |
564 ; | |
565 ; AVX-LABEL: le_v8i16: | |
566 ; AVX: # BB#0: | |
567 ; AVX-NEXT: vpcmpgtw %xmm1, %xmm0, %xmm0 | |
568 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 | |
569 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 | |
570 ; AVX-NEXT: retq | |
571 ; | |
572 ; XOP-LABEL: le_v8i16: | |
573 ; XOP: # BB#0: | |
574 ; XOP-NEXT: vpcomlew %xmm1, %xmm0, %xmm0 | |
575 ; XOP-NEXT: retq | |
576 %1 = icmp sle <8 x i16> %a, %b | |
577 %2 = sext <8 x i1> %1 to <8 x i16> | |
578 ret <8 x i16> %2 | |
579 } | |
580 | |
581 define <16 x i8> @le_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind { | |
582 ; SSE-LABEL: le_v16i8: | |
583 ; SSE: # BB#0: | |
584 ; SSE-NEXT: pcmpgtb %xmm1, %xmm0 | |
585 ; SSE-NEXT: pcmpeqd %xmm1, %xmm1 | |
586 ; SSE-NEXT: pxor %xmm1, %xmm0 | |
587 ; SSE-NEXT: retq | |
588 ; | |
589 ; AVX-LABEL: le_v16i8: | |
590 ; AVX: # BB#0: | |
591 ; AVX-NEXT: vpcmpgtb %xmm1, %xmm0, %xmm0 | |
592 ; AVX-NEXT: vpcmpeqd %xmm1, %xmm1, %xmm1 | |
593 ; AVX-NEXT: vpxor %xmm1, %xmm0, %xmm0 | |
594 ; AVX-NEXT: retq | |
595 ; | |
596 ; XOP-LABEL: le_v16i8: | |
597 ; XOP: # BB#0: | |
598 ; XOP-NEXT: vpcomleb %xmm1, %xmm0, %xmm0 | |
599 ; XOP-NEXT: retq | |
600 %1 = icmp sle <16 x i8> %a, %b | |
601 %2 = sext <16 x i1> %1 to <16 x i8> | |
602 ret <16 x i8> %2 | |
603 } | |
604 | |
605 ; | |
606 ; Less Than | |
607 ; | |
608 | |
609 define <2 x i64> @lt_v2i64(<2 x i64> %a, <2 x i64> %b) nounwind { | |
610 ; SSE2-LABEL: lt_v2i64: | |
611 ; SSE2: # BB#0: | |
612 ; SSE2-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] | |
613 ; SSE2-NEXT: pxor %xmm2, %xmm0 | |
614 ; SSE2-NEXT: pxor %xmm2, %xmm1 | |
615 ; SSE2-NEXT: movdqa %xmm1, %xmm2 | |
616 ; SSE2-NEXT: pcmpgtd %xmm0, %xmm2 | |
617 ; SSE2-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] | |
618 ; SSE2-NEXT: pcmpeqd %xmm0, %xmm1 | |
619 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] | |
620 ; SSE2-NEXT: pand %xmm3, %xmm1 | |
621 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] | |
622 ; SSE2-NEXT: por %xmm1, %xmm0 | |
623 ; SSE2-NEXT: retq | |
624 ; | |
625 ; SSE41-LABEL: lt_v2i64: | |
626 ; SSE41: # BB#0: | |
627 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0] | |
628 ; SSE41-NEXT: pxor %xmm2, %xmm0 | |
629 ; SSE41-NEXT: pxor %xmm2, %xmm1 | |
630 ; SSE41-NEXT: movdqa %xmm1, %xmm2 | |
631 ; SSE41-NEXT: pcmpgtd %xmm0, %xmm2 | |
632 ; SSE41-NEXT: pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2] | |
633 ; SSE41-NEXT: pcmpeqd %xmm0, %xmm1 | |
634 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] | |
635 ; SSE41-NEXT: pand %xmm3, %xmm1 | |
636 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3] | |
637 ; SSE41-NEXT: por %xmm1, %xmm0 | |
638 ; SSE41-NEXT: retq | |
639 ; | |
640 ; SSE42-LABEL: lt_v2i64: | |
641 ; SSE42: # BB#0: | |
642 ; SSE42-NEXT: pcmpgtq %xmm0, %xmm1 | |
643 ; SSE42-NEXT: movdqa %xmm1, %xmm0 | |
644 ; SSE42-NEXT: retq | |
645 ; | |
646 ; AVX-LABEL: lt_v2i64: | |
647 ; AVX: # BB#0: | |
648 ; AVX-NEXT: vpcmpgtq %xmm0, %xmm1, %xmm0 | |
649 ; AVX-NEXT: retq | |
650 ; | |
651 ; XOP-LABEL: lt_v2i64: | |
652 ; XOP: # BB#0: | |
653 ; XOP-NEXT: vpcomltq %xmm1, %xmm0, %xmm0 | |
654 ; XOP-NEXT: retq | |
655 %1 = icmp slt <2 x i64> %a, %b | |
656 %2 = sext <2 x i1> %1 to <2 x i64> | |
657 ret <2 x i64> %2 | |
658 } | |
659 | |
660 define <4 x i32> @lt_v4i32(<4 x i32> %a, <4 x i32> %b) nounwind { | |
661 ; SSE-LABEL: lt_v4i32: | |
662 ; SSE: # BB#0: | |
663 ; SSE-NEXT: pcmpgtd %xmm0, %xmm1 | |
664 ; SSE-NEXT: movdqa %xmm1, %xmm0 | |
665 ; SSE-NEXT: retq | |
666 ; | |
667 ; AVX-LABEL: lt_v4i32: | |
668 ; AVX: # BB#0: | |
669 ; AVX-NEXT: vpcmpgtd %xmm0, %xmm1, %xmm0 | |
670 ; AVX-NEXT: retq | |
671 ; | |
672 ; XOP-LABEL: lt_v4i32: | |
673 ; XOP: # BB#0: | |
674 ; XOP-NEXT: vpcomltd %xmm1, %xmm0, %xmm0 | |
675 ; XOP-NEXT: retq | |
676 %1 = icmp slt <4 x i32> %a, %b | |
677 %2 = sext <4 x i1> %1 to <4 x i32> | |
678 ret <4 x i32> %2 | |
679 } | |
680 | |
681 define <8 x i16> @lt_v8i16(<8 x i16> %a, <8 x i16> %b) nounwind { | |
682 ; SSE-LABEL: lt_v8i16: | |
683 ; SSE: # BB#0: | |
684 ; SSE-NEXT: pcmpgtw %xmm0, %xmm1 | |
685 ; SSE-NEXT: movdqa %xmm1, %xmm0 | |
686 ; SSE-NEXT: retq | |
687 ; | |
688 ; AVX-LABEL: lt_v8i16: | |
689 ; AVX: # BB#0: | |
690 ; AVX-NEXT: vpcmpgtw %xmm0, %xmm1, %xmm0 | |
691 ; AVX-NEXT: retq | |
692 ; | |
693 ; XOP-LABEL: lt_v8i16: | |
694 ; XOP: # BB#0: | |
695 ; XOP-NEXT: vpcomltw %xmm1, %xmm0, %xmm0 | |
696 ; XOP-NEXT: retq | |
697 %1 = icmp slt <8 x i16> %a, %b | |
698 %2 = sext <8 x i1> %1 to <8 x i16> | |
699 ret <8 x i16> %2 | |
700 } | |
701 | |
702 define <16 x i8> @lt_v16i8(<16 x i8> %a, <16 x i8> %b) nounwind { | |
703 ; SSE-LABEL: lt_v16i8: | |
704 ; SSE: # BB#0: | |
705 ; SSE-NEXT: pcmpgtb %xmm0, %xmm1 | |
706 ; SSE-NEXT: movdqa %xmm1, %xmm0 | |
707 ; SSE-NEXT: retq | |
708 ; | |
709 ; AVX-LABEL: lt_v16i8: | |
710 ; AVX: # BB#0: | |
711 ; AVX-NEXT: vpcmpgtb %xmm0, %xmm1, %xmm0 | |
712 ; AVX-NEXT: retq | |
713 ; | |
714 ; XOP-LABEL: lt_v16i8: | |
715 ; XOP: # BB#0: | |
716 ; XOP-NEXT: vpcomltb %xmm1, %xmm0, %xmm0 | |
717 ; XOP-NEXT: retq | |
718 %1 = icmp slt <16 x i8> %a, %b | |
719 %2 = sext <16 x i1> %1 to <16 x i8> | |
720 ret <16 x i8> %2 | |
721 } |