1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i386-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X32-SSE
3 ; RUN: llc < %s -mtriple=i386-unknown -mattr=+avx | FileCheck %s --check-prefix=X32-AVX --check-prefix=X32-AVX1
4 ; RUN: llc < %s -mtriple=i386-unknown -mattr=+avx2 | FileCheck %s --check-prefix=X32-AVX --check-prefix=X32-AVX256 --check-prefix=X32-AVX2
5 ; RUN: llc < %s -mtriple=i386-unknown -mcpu=knl | FileCheck %s --check-prefix=X32-AVX --check-prefix=X32-AVX256 --check-prefix=X32-AVX512 --check-prefix=X32-KNL
6 ; RUN: llc < %s -mtriple=i386-unknown -mcpu=skx | FileCheck %s --check-prefix=X32-AVX --check-prefix=X32-AVX256 --check-prefix=X32-AVX512 --check-prefix=X32-SKX
7 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+sse2 | FileCheck %s --check-prefix=X64-SSE
8 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx | FileCheck %s --check-prefix=X64-AVX --check-prefix=X64-AVX1
9 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx2 | FileCheck %s --check-prefix=X64-AVX --check-prefix=X64-AVX256 --check-prefix=X64-AVX2
10 ; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=knl | FileCheck %s --check-prefix=X64-AVX --check-prefix=X64-AVX256 --check-prefix=X64-AVX512 --check-prefix=X64-KNL
11 ; RUN: llc < %s -mtriple=x86_64-unknown -mcpu=skx | FileCheck %s --check-prefix=X64-AVX --check-prefix=X64-AVX256 --check-prefix=X64-AVX512 --check-prefix=X64-SKX
13 define <16 x i8> @allones_v16i8() nounwind {
14 ; X32-SSE-LABEL: allones_v16i8:
16 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
19 ; X32-AVX-LABEL: allones_v16i8:
21 ; X32-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
24 ; X64-SSE-LABEL: allones_v16i8:
26 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
29 ; X64-AVX-LABEL: allones_v16i8:
31 ; X64-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
33 ret <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
36 define <8 x i16> @allones_v8i16() nounwind {
37 ; X32-SSE-LABEL: allones_v8i16:
39 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
42 ; X32-AVX-LABEL: allones_v8i16:
44 ; X32-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
47 ; X64-SSE-LABEL: allones_v8i16:
49 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
52 ; X64-AVX-LABEL: allones_v8i16:
54 ; X64-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
56 ret <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
59 define <4 x i32> @allones_v4i32() nounwind {
60 ; X32-SSE-LABEL: allones_v4i32:
62 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
65 ; X32-AVX-LABEL: allones_v4i32:
67 ; X32-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
70 ; X64-SSE-LABEL: allones_v4i32:
72 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
75 ; X64-AVX-LABEL: allones_v4i32:
77 ; X64-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
79 ret <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
82 define <2 x i64> @allones_v2i64() nounwind {
83 ; X32-SSE-LABEL: allones_v2i64:
85 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
88 ; X32-AVX-LABEL: allones_v2i64:
90 ; X32-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
93 ; X64-SSE-LABEL: allones_v2i64:
95 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
98 ; X64-AVX-LABEL: allones_v2i64:
100 ; X64-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
102 ret <2 x i64> <i64 -1, i64 -1>
105 define <2 x double> @allones_v2f64() nounwind {
106 ; X32-SSE-LABEL: allones_v2f64:
108 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
111 ; X32-AVX-LABEL: allones_v2f64:
113 ; X32-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
116 ; X64-SSE-LABEL: allones_v2f64:
118 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
121 ; X64-AVX-LABEL: allones_v2f64:
123 ; X64-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
125 ret <2 x double> <double 0xffffffffffffffff, double 0xffffffffffffffff>
128 define <4 x float> @allones_v4f32() nounwind {
129 ; X32-SSE-LABEL: allones_v4f32:
131 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
134 ; X32-AVX-LABEL: allones_v4f32:
136 ; X32-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
139 ; X64-SSE-LABEL: allones_v4f32:
141 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
144 ; X64-AVX-LABEL: allones_v4f32:
146 ; X64-AVX-NEXT: vpcmpeqd %xmm0, %xmm0, %xmm0
148 ret <4 x float> <float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000>
151 define <32 x i8> @allones_v32i8() nounwind {
152 ; X32-SSE-LABEL: allones_v32i8:
154 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
155 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
158 ; X32-AVX1-LABEL: allones_v32i8:
160 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
161 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
162 ; X32-AVX1-NEXT: retl
164 ; X32-AVX256-LABEL: allones_v32i8:
165 ; X32-AVX256: # %bb.0:
166 ; X32-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
167 ; X32-AVX256-NEXT: retl
169 ; X64-SSE-LABEL: allones_v32i8:
171 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
172 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
175 ; X64-AVX1-LABEL: allones_v32i8:
177 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
178 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
179 ; X64-AVX1-NEXT: retq
181 ; X64-AVX256-LABEL: allones_v32i8:
182 ; X64-AVX256: # %bb.0:
183 ; X64-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
184 ; X64-AVX256-NEXT: retq
185 ret <32 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
188 define <16 x i16> @allones_v16i16() nounwind {
189 ; X32-SSE-LABEL: allones_v16i16:
191 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
192 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
195 ; X32-AVX1-LABEL: allones_v16i16:
197 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
198 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
199 ; X32-AVX1-NEXT: retl
201 ; X32-AVX256-LABEL: allones_v16i16:
202 ; X32-AVX256: # %bb.0:
203 ; X32-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
204 ; X32-AVX256-NEXT: retl
206 ; X64-SSE-LABEL: allones_v16i16:
208 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
209 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
212 ; X64-AVX1-LABEL: allones_v16i16:
214 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
215 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
216 ; X64-AVX1-NEXT: retq
218 ; X64-AVX256-LABEL: allones_v16i16:
219 ; X64-AVX256: # %bb.0:
220 ; X64-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
221 ; X64-AVX256-NEXT: retq
222 ret <16 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
225 define <8 x i32> @allones_v8i32() nounwind {
226 ; X32-SSE-LABEL: allones_v8i32:
228 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
229 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
232 ; X32-AVX1-LABEL: allones_v8i32:
234 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
235 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
236 ; X32-AVX1-NEXT: retl
238 ; X32-AVX256-LABEL: allones_v8i32:
239 ; X32-AVX256: # %bb.0:
240 ; X32-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
241 ; X32-AVX256-NEXT: retl
243 ; X64-SSE-LABEL: allones_v8i32:
245 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
246 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
249 ; X64-AVX1-LABEL: allones_v8i32:
251 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
252 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
253 ; X64-AVX1-NEXT: retq
255 ; X64-AVX256-LABEL: allones_v8i32:
256 ; X64-AVX256: # %bb.0:
257 ; X64-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
258 ; X64-AVX256-NEXT: retq
259 ret <8 x i32> <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
262 define <4 x i64> @allones_v4i64() nounwind {
263 ; X32-SSE-LABEL: allones_v4i64:
265 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
266 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
269 ; X32-AVX1-LABEL: allones_v4i64:
271 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
272 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
273 ; X32-AVX1-NEXT: retl
275 ; X32-AVX256-LABEL: allones_v4i64:
276 ; X32-AVX256: # %bb.0:
277 ; X32-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
278 ; X32-AVX256-NEXT: retl
280 ; X64-SSE-LABEL: allones_v4i64:
282 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
283 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
286 ; X64-AVX1-LABEL: allones_v4i64:
288 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
289 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
290 ; X64-AVX1-NEXT: retq
292 ; X64-AVX256-LABEL: allones_v4i64:
293 ; X64-AVX256: # %bb.0:
294 ; X64-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
295 ; X64-AVX256-NEXT: retq
296 ret <4 x i64> <i64 -1, i64 -1, i64 -1, i64 -1>
299 define <4 x double> @allones_v4f64() nounwind {
300 ; X32-SSE-LABEL: allones_v4f64:
302 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
303 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
306 ; X32-AVX1-LABEL: allones_v4f64:
308 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
309 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
310 ; X32-AVX1-NEXT: retl
312 ; X32-AVX256-LABEL: allones_v4f64:
313 ; X32-AVX256: # %bb.0:
314 ; X32-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
315 ; X32-AVX256-NEXT: retl
317 ; X64-SSE-LABEL: allones_v4f64:
319 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
320 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
323 ; X64-AVX1-LABEL: allones_v4f64:
325 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
326 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
327 ; X64-AVX1-NEXT: retq
329 ; X64-AVX256-LABEL: allones_v4f64:
330 ; X64-AVX256: # %bb.0:
331 ; X64-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
332 ; X64-AVX256-NEXT: retq
333 ret <4 x double> <double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff>
336 define <4 x double> @allones_v4f64_optsize() nounwind optsize {
337 ; X32-SSE-LABEL: allones_v4f64_optsize:
339 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
340 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
343 ; X32-AVX1-LABEL: allones_v4f64_optsize:
345 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
346 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
347 ; X32-AVX1-NEXT: retl
349 ; X32-AVX256-LABEL: allones_v4f64_optsize:
350 ; X32-AVX256: # %bb.0:
351 ; X32-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
352 ; X32-AVX256-NEXT: retl
354 ; X64-SSE-LABEL: allones_v4f64_optsize:
356 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
357 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
360 ; X64-AVX1-LABEL: allones_v4f64_optsize:
362 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
363 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
364 ; X64-AVX1-NEXT: retq
366 ; X64-AVX256-LABEL: allones_v4f64_optsize:
367 ; X64-AVX256: # %bb.0:
368 ; X64-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
369 ; X64-AVX256-NEXT: retq
370 ret <4 x double> <double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff>
373 define <8 x float> @allones_v8f32() nounwind {
374 ; X32-SSE-LABEL: allones_v8f32:
376 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
377 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
380 ; X32-AVX1-LABEL: allones_v8f32:
382 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
383 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
384 ; X32-AVX1-NEXT: retl
386 ; X32-AVX256-LABEL: allones_v8f32:
387 ; X32-AVX256: # %bb.0:
388 ; X32-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
389 ; X32-AVX256-NEXT: retl
391 ; X64-SSE-LABEL: allones_v8f32:
393 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
394 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
397 ; X64-AVX1-LABEL: allones_v8f32:
399 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
400 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
401 ; X64-AVX1-NEXT: retq
403 ; X64-AVX256-LABEL: allones_v8f32:
404 ; X64-AVX256: # %bb.0:
405 ; X64-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
406 ; X64-AVX256-NEXT: retq
407 ret <8 x float> <float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000>
410 define <8 x float> @allones_v8f32_optsize() nounwind optsize {
411 ; X32-SSE-LABEL: allones_v8f32_optsize:
413 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
414 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
417 ; X32-AVX1-LABEL: allones_v8f32_optsize:
419 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
420 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
421 ; X32-AVX1-NEXT: retl
423 ; X32-AVX256-LABEL: allones_v8f32_optsize:
424 ; X32-AVX256: # %bb.0:
425 ; X32-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
426 ; X32-AVX256-NEXT: retl
428 ; X64-SSE-LABEL: allones_v8f32_optsize:
430 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
431 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
434 ; X64-AVX1-LABEL: allones_v8f32_optsize:
436 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
437 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
438 ; X64-AVX1-NEXT: retq
440 ; X64-AVX256-LABEL: allones_v8f32_optsize:
441 ; X64-AVX256: # %bb.0:
442 ; X64-AVX256-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
443 ; X64-AVX256-NEXT: retq
444 ret <8 x float> <float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000>
447 define <64 x i8> @allones_v64i8() nounwind {
448 ; X32-SSE-LABEL: allones_v64i8:
450 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
451 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
452 ; X32-SSE-NEXT: pcmpeqd %xmm2, %xmm2
453 ; X32-SSE-NEXT: pcmpeqd %xmm3, %xmm3
456 ; X32-AVX1-LABEL: allones_v64i8:
458 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
459 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
460 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1
461 ; X32-AVX1-NEXT: retl
463 ; X32-AVX2-LABEL: allones_v64i8:
465 ; X32-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
466 ; X32-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
467 ; X32-AVX2-NEXT: retl
469 ; X32-AVX512-LABEL: allones_v64i8:
470 ; X32-AVX512: # %bb.0:
471 ; X32-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
472 ; X32-AVX512-NEXT: retl
474 ; X64-SSE-LABEL: allones_v64i8:
476 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
477 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
478 ; X64-SSE-NEXT: pcmpeqd %xmm2, %xmm2
479 ; X64-SSE-NEXT: pcmpeqd %xmm3, %xmm3
482 ; X64-AVX1-LABEL: allones_v64i8:
484 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
485 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
486 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1
487 ; X64-AVX1-NEXT: retq
489 ; X64-AVX2-LABEL: allones_v64i8:
491 ; X64-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
492 ; X64-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
493 ; X64-AVX2-NEXT: retq
495 ; X64-AVX512-LABEL: allones_v64i8:
496 ; X64-AVX512: # %bb.0:
497 ; X64-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
498 ; X64-AVX512-NEXT: retq
499 ret <64 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
502 define <32 x i16> @allones_v32i16() nounwind {
503 ; X32-SSE-LABEL: allones_v32i16:
505 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
506 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
507 ; X32-SSE-NEXT: pcmpeqd %xmm2, %xmm2
508 ; X32-SSE-NEXT: pcmpeqd %xmm3, %xmm3
511 ; X32-AVX1-LABEL: allones_v32i16:
513 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
514 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
515 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1
516 ; X32-AVX1-NEXT: retl
518 ; X32-AVX2-LABEL: allones_v32i16:
520 ; X32-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
521 ; X32-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
522 ; X32-AVX2-NEXT: retl
524 ; X32-AVX512-LABEL: allones_v32i16:
525 ; X32-AVX512: # %bb.0:
526 ; X32-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
527 ; X32-AVX512-NEXT: retl
529 ; X64-SSE-LABEL: allones_v32i16:
531 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
532 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
533 ; X64-SSE-NEXT: pcmpeqd %xmm2, %xmm2
534 ; X64-SSE-NEXT: pcmpeqd %xmm3, %xmm3
537 ; X64-AVX1-LABEL: allones_v32i16:
539 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
540 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
541 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1
542 ; X64-AVX1-NEXT: retq
544 ; X64-AVX2-LABEL: allones_v32i16:
546 ; X64-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
547 ; X64-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
548 ; X64-AVX2-NEXT: retq
550 ; X64-AVX512-LABEL: allones_v32i16:
551 ; X64-AVX512: # %bb.0:
552 ; X64-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
553 ; X64-AVX512-NEXT: retq
554 ret <32 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
557 define <16 x i32> @allones_v16i32() nounwind {
558 ; X32-SSE-LABEL: allones_v16i32:
560 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
561 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
562 ; X32-SSE-NEXT: pcmpeqd %xmm2, %xmm2
563 ; X32-SSE-NEXT: pcmpeqd %xmm3, %xmm3
566 ; X32-AVX1-LABEL: allones_v16i32:
568 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
569 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
570 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1
571 ; X32-AVX1-NEXT: retl
573 ; X32-AVX2-LABEL: allones_v16i32:
575 ; X32-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
576 ; X32-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
577 ; X32-AVX2-NEXT: retl
579 ; X32-AVX512-LABEL: allones_v16i32:
580 ; X32-AVX512: # %bb.0:
581 ; X32-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
582 ; X32-AVX512-NEXT: retl
584 ; X64-SSE-LABEL: allones_v16i32:
586 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
587 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
588 ; X64-SSE-NEXT: pcmpeqd %xmm2, %xmm2
589 ; X64-SSE-NEXT: pcmpeqd %xmm3, %xmm3
592 ; X64-AVX1-LABEL: allones_v16i32:
594 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
595 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
596 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1
597 ; X64-AVX1-NEXT: retq
599 ; X64-AVX2-LABEL: allones_v16i32:
601 ; X64-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
602 ; X64-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
603 ; X64-AVX2-NEXT: retq
605 ; X64-AVX512-LABEL: allones_v16i32:
606 ; X64-AVX512: # %bb.0:
607 ; X64-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
608 ; X64-AVX512-NEXT: retq
609 ret <16 x i32> <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
612 define <8 x i64> @allones_v8i64() nounwind {
613 ; X32-SSE-LABEL: allones_v8i64:
615 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
616 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
617 ; X32-SSE-NEXT: pcmpeqd %xmm2, %xmm2
618 ; X32-SSE-NEXT: pcmpeqd %xmm3, %xmm3
621 ; X32-AVX1-LABEL: allones_v8i64:
623 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
624 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
625 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1
626 ; X32-AVX1-NEXT: retl
628 ; X32-AVX2-LABEL: allones_v8i64:
630 ; X32-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
631 ; X32-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
632 ; X32-AVX2-NEXT: retl
634 ; X32-AVX512-LABEL: allones_v8i64:
635 ; X32-AVX512: # %bb.0:
636 ; X32-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
637 ; X32-AVX512-NEXT: retl
639 ; X64-SSE-LABEL: allones_v8i64:
641 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
642 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
643 ; X64-SSE-NEXT: pcmpeqd %xmm2, %xmm2
644 ; X64-SSE-NEXT: pcmpeqd %xmm3, %xmm3
647 ; X64-AVX1-LABEL: allones_v8i64:
649 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
650 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
651 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1
652 ; X64-AVX1-NEXT: retq
654 ; X64-AVX2-LABEL: allones_v8i64:
656 ; X64-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
657 ; X64-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
658 ; X64-AVX2-NEXT: retq
660 ; X64-AVX512-LABEL: allones_v8i64:
661 ; X64-AVX512: # %bb.0:
662 ; X64-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
663 ; X64-AVX512-NEXT: retq
664 ret <8 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
667 define <8 x double> @allones_v8f64() nounwind {
668 ; X32-SSE-LABEL: allones_v8f64:
670 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
671 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
672 ; X32-SSE-NEXT: pcmpeqd %xmm2, %xmm2
673 ; X32-SSE-NEXT: pcmpeqd %xmm3, %xmm3
676 ; X32-AVX1-LABEL: allones_v8f64:
678 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
679 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
680 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1
681 ; X32-AVX1-NEXT: retl
683 ; X32-AVX2-LABEL: allones_v8f64:
685 ; X32-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
686 ; X32-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
687 ; X32-AVX2-NEXT: retl
689 ; X32-AVX512-LABEL: allones_v8f64:
690 ; X32-AVX512: # %bb.0:
691 ; X32-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
692 ; X32-AVX512-NEXT: retl
694 ; X64-SSE-LABEL: allones_v8f64:
696 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
697 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
698 ; X64-SSE-NEXT: pcmpeqd %xmm2, %xmm2
699 ; X64-SSE-NEXT: pcmpeqd %xmm3, %xmm3
702 ; X64-AVX1-LABEL: allones_v8f64:
704 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
705 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
706 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1
707 ; X64-AVX1-NEXT: retq
709 ; X64-AVX2-LABEL: allones_v8f64:
711 ; X64-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
712 ; X64-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
713 ; X64-AVX2-NEXT: retq
715 ; X64-AVX512-LABEL: allones_v8f64:
716 ; X64-AVX512: # %bb.0:
717 ; X64-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
718 ; X64-AVX512-NEXT: retq
719 ret <8 x double> <double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff>
722 define <16 x float> @allones_v16f32() nounwind {
723 ; X32-SSE-LABEL: allones_v16f32:
725 ; X32-SSE-NEXT: pcmpeqd %xmm0, %xmm0
726 ; X32-SSE-NEXT: pcmpeqd %xmm1, %xmm1
727 ; X32-SSE-NEXT: pcmpeqd %xmm2, %xmm2
728 ; X32-SSE-NEXT: pcmpeqd %xmm3, %xmm3
731 ; X32-AVX1-LABEL: allones_v16f32:
733 ; X32-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
734 ; X32-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
735 ; X32-AVX1-NEXT: vmovaps %ymm0, %ymm1
736 ; X32-AVX1-NEXT: retl
738 ; X32-AVX2-LABEL: allones_v16f32:
740 ; X32-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
741 ; X32-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
742 ; X32-AVX2-NEXT: retl
744 ; X32-AVX512-LABEL: allones_v16f32:
745 ; X32-AVX512: # %bb.0:
746 ; X32-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
747 ; X32-AVX512-NEXT: retl
749 ; X64-SSE-LABEL: allones_v16f32:
751 ; X64-SSE-NEXT: pcmpeqd %xmm0, %xmm0
752 ; X64-SSE-NEXT: pcmpeqd %xmm1, %xmm1
753 ; X64-SSE-NEXT: pcmpeqd %xmm2, %xmm2
754 ; X64-SSE-NEXT: pcmpeqd %xmm3, %xmm3
757 ; X64-AVX1-LABEL: allones_v16f32:
759 ; X64-AVX1-NEXT: vxorps %xmm0, %xmm0, %xmm0
760 ; X64-AVX1-NEXT: vcmptrueps %ymm0, %ymm0, %ymm0
761 ; X64-AVX1-NEXT: vmovaps %ymm0, %ymm1
762 ; X64-AVX1-NEXT: retq
764 ; X64-AVX2-LABEL: allones_v16f32:
766 ; X64-AVX2-NEXT: vpcmpeqd %ymm0, %ymm0, %ymm0
767 ; X64-AVX2-NEXT: vpcmpeqd %ymm1, %ymm1, %ymm1
768 ; X64-AVX2-NEXT: retq
770 ; X64-AVX512-LABEL: allones_v16f32:
771 ; X64-AVX512: # %bb.0:
772 ; X64-AVX512-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0
773 ; X64-AVX512-NEXT: retq
774 ret <16 x float> <float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000>