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
12
13define <16 x i8> @coo() nounwind {
14; X32-SSE-LABEL: coo:
15; X32-SSE:       # BB#0:
16; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
17; X32-SSE-NEXT:    retl
18;
19; X32-AVX-LABEL: coo:
20; X32-AVX:       # BB#0:
21; X32-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
22; X32-AVX-NEXT:    retl
23;
24; X64-SSE-LABEL: coo:
25; X64-SSE:       # BB#0:
26; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
27; X64-SSE-NEXT:    retq
28;
29; X64-AVX-LABEL: coo:
30; X64-AVX:       # BB#0:
31; X64-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
32; X64-AVX-NEXT:    retq
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>
34}
35
36define <8 x i16> @soo() nounwind {
37; X32-SSE-LABEL: soo:
38; X32-SSE:       # BB#0:
39; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
40; X32-SSE-NEXT:    retl
41;
42; X32-AVX-LABEL: soo:
43; X32-AVX:       # BB#0:
44; X32-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
45; X32-AVX-NEXT:    retl
46;
47; X64-SSE-LABEL: soo:
48; X64-SSE:       # BB#0:
49; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
50; X64-SSE-NEXT:    retq
51;
52; X64-AVX-LABEL: soo:
53; X64-AVX:       # BB#0:
54; X64-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
55; X64-AVX-NEXT:    retq
56  ret <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
57}
58
59define <4 x i32> @ioo() nounwind {
60; X32-SSE-LABEL: ioo:
61; X32-SSE:       # BB#0:
62; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
63; X32-SSE-NEXT:    retl
64;
65; X32-AVX-LABEL: ioo:
66; X32-AVX:       # BB#0:
67; X32-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
68; X32-AVX-NEXT:    retl
69;
70; X64-SSE-LABEL: ioo:
71; X64-SSE:       # BB#0:
72; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
73; X64-SSE-NEXT:    retq
74;
75; X64-AVX-LABEL: ioo:
76; X64-AVX:       # BB#0:
77; X64-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
78; X64-AVX-NEXT:    retq
79  ret <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
80}
81
82define <2 x i64> @loo() nounwind {
83; X32-SSE-LABEL: loo:
84; X32-SSE:       # BB#0:
85; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
86; X32-SSE-NEXT:    retl
87;
88; X32-AVX-LABEL: loo:
89; X32-AVX:       # BB#0:
90; X32-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
91; X32-AVX-NEXT:    retl
92;
93; X64-SSE-LABEL: loo:
94; X64-SSE:       # BB#0:
95; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
96; X64-SSE-NEXT:    retq
97;
98; X64-AVX-LABEL: loo:
99; X64-AVX:       # BB#0:
100; X64-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
101; X64-AVX-NEXT:    retq
102  ret <2 x i64> <i64 -1, i64 -1>
103}
104
105define <2 x double> @doo() nounwind {
106; X32-SSE-LABEL: doo:
107; X32-SSE:       # BB#0:
108; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
109; X32-SSE-NEXT:    retl
110;
111; X32-AVX-LABEL: doo:
112; X32-AVX:       # BB#0:
113; X32-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
114; X32-AVX-NEXT:    retl
115;
116; X64-SSE-LABEL: doo:
117; X64-SSE:       # BB#0:
118; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
119; X64-SSE-NEXT:    retq
120;
121; X64-AVX-LABEL: doo:
122; X64-AVX:       # BB#0:
123; X64-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
124; X64-AVX-NEXT:    retq
125  ret <2 x double> <double 0xffffffffffffffff, double 0xffffffffffffffff>
126}
127
128define <4 x float> @foo() nounwind {
129; X32-SSE-LABEL: foo:
130; X32-SSE:       # BB#0:
131; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
132; X32-SSE-NEXT:    retl
133;
134; X32-AVX-LABEL: foo:
135; X32-AVX:       # BB#0:
136; X32-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
137; X32-AVX-NEXT:    retl
138;
139; X64-SSE-LABEL: foo:
140; X64-SSE:       # BB#0:
141; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
142; X64-SSE-NEXT:    retq
143;
144; X64-AVX-LABEL: foo:
145; X64-AVX:       # BB#0:
146; X64-AVX-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
147; X64-AVX-NEXT:    retq
148  ret <4 x float> <float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000>
149}
150
151define <32 x i8> @coo256() nounwind {
152; X32-SSE-LABEL: coo256:
153; X32-SSE:       # BB#0:
154; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
155; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
156; X32-SSE-NEXT:    retl
157;
158; X32-AVX1-LABEL: coo256:
159; X32-AVX1:       # BB#0:
160; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
161; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
162; X32-AVX1-NEXT:    retl
163;
164; X32-AVX256-LABEL: coo256:
165; X32-AVX256:       # BB#0:
166; X32-AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
167; X32-AVX256-NEXT:    retl
168;
169; X64-SSE-LABEL: coo256:
170; X64-SSE:       # BB#0:
171; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
172; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
173; X64-SSE-NEXT:    retq
174;
175; X64-AVX1-LABEL: coo256:
176; X64-AVX1:       # BB#0:
177; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
178; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
179; X64-AVX1-NEXT:    retq
180;
181; X64-AVX256-LABEL: coo256:
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>
186}
187
188define <16 x i16> @soo256() nounwind {
189; X32-SSE-LABEL: soo256:
190; X32-SSE:       # BB#0:
191; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
192; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
193; X32-SSE-NEXT:    retl
194;
195; X32-AVX1-LABEL: soo256:
196; X32-AVX1:       # BB#0:
197; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
198; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
199; X32-AVX1-NEXT:    retl
200;
201; X32-AVX256-LABEL: soo256:
202; X32-AVX256:       # BB#0:
203; X32-AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
204; X32-AVX256-NEXT:    retl
205;
206; X64-SSE-LABEL: soo256:
207; X64-SSE:       # BB#0:
208; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
209; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
210; X64-SSE-NEXT:    retq
211;
212; X64-AVX1-LABEL: soo256:
213; X64-AVX1:       # BB#0:
214; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
215; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
216; X64-AVX1-NEXT:    retq
217;
218; X64-AVX256-LABEL: soo256:
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>
223}
224
225define <8 x i32> @ioo256() nounwind {
226; X32-SSE-LABEL: ioo256:
227; X32-SSE:       # BB#0:
228; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
229; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
230; X32-SSE-NEXT:    retl
231;
232; X32-AVX1-LABEL: ioo256:
233; X32-AVX1:       # BB#0:
234; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
235; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
236; X32-AVX1-NEXT:    retl
237;
238; X32-AVX256-LABEL: ioo256:
239; X32-AVX256:       # BB#0:
240; X32-AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
241; X32-AVX256-NEXT:    retl
242;
243; X64-SSE-LABEL: ioo256:
244; X64-SSE:       # BB#0:
245; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
246; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
247; X64-SSE-NEXT:    retq
248;
249; X64-AVX1-LABEL: ioo256:
250; X64-AVX1:       # BB#0:
251; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
252; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
253; X64-AVX1-NEXT:    retq
254;
255; X64-AVX256-LABEL: ioo256:
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>
260}
261
262define <4 x i64> @loo256() nounwind {
263; X32-SSE-LABEL: loo256:
264; X32-SSE:       # BB#0:
265; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
266; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
267; X32-SSE-NEXT:    retl
268;
269; X32-AVX1-LABEL: loo256:
270; X32-AVX1:       # BB#0:
271; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
272; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
273; X32-AVX1-NEXT:    retl
274;
275; X32-AVX256-LABEL: loo256:
276; X32-AVX256:       # BB#0:
277; X32-AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
278; X32-AVX256-NEXT:    retl
279;
280; X64-SSE-LABEL: loo256:
281; X64-SSE:       # BB#0:
282; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
283; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
284; X64-SSE-NEXT:    retq
285;
286; X64-AVX1-LABEL: loo256:
287; X64-AVX1:       # BB#0:
288; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
289; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
290; X64-AVX1-NEXT:    retq
291;
292; X64-AVX256-LABEL: loo256:
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>
297}
298
299define <4 x double> @doo256() nounwind {
300; X32-SSE-LABEL: doo256:
301; X32-SSE:       # BB#0:
302; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
303; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
304; X32-SSE-NEXT:    retl
305;
306; X32-AVX1-LABEL: doo256:
307; X32-AVX1:       # BB#0:
308; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
309; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
310; X32-AVX1-NEXT:    retl
311;
312; X32-AVX256-LABEL: doo256:
313; X32-AVX256:       # BB#0:
314; X32-AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
315; X32-AVX256-NEXT:    retl
316;
317; X64-SSE-LABEL: doo256:
318; X64-SSE:       # BB#0:
319; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
320; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
321; X64-SSE-NEXT:    retq
322;
323; X64-AVX1-LABEL: doo256:
324; X64-AVX1:       # BB#0:
325; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
326; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
327; X64-AVX1-NEXT:    retq
328;
329; X64-AVX256-LABEL: doo256:
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>
334}
335
336define <8 x float> @foo256() nounwind {
337; X32-SSE-LABEL: foo256:
338; X32-SSE:       # BB#0:
339; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
340; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
341; X32-SSE-NEXT:    retl
342;
343; X32-AVX1-LABEL: foo256:
344; X32-AVX1:       # BB#0:
345; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
346; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
347; X32-AVX1-NEXT:    retl
348;
349; X32-AVX256-LABEL: foo256:
350; X32-AVX256:       # BB#0:
351; X32-AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
352; X32-AVX256-NEXT:    retl
353;
354; X64-SSE-LABEL: foo256:
355; X64-SSE:       # BB#0:
356; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
357; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
358; X64-SSE-NEXT:    retq
359;
360; X64-AVX1-LABEL: foo256:
361; X64-AVX1:       # BB#0:
362; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
363; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
364; X64-AVX1-NEXT:    retq
365;
366; X64-AVX256-LABEL: foo256:
367; X64-AVX256:       # BB#0:
368; X64-AVX256-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
369; X64-AVX256-NEXT:    retq
370  ret <8 x float> <float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000, float 0xffffffffe0000000>
371}
372
373define <64 x i8> @coo512() nounwind {
374; X32-SSE-LABEL: coo512:
375; X32-SSE:       # BB#0:
376; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
377; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
378; X32-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
379; X32-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
380; X32-SSE-NEXT:    retl
381;
382; X32-AVX1-LABEL: coo512:
383; X32-AVX1:       # BB#0:
384; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
385; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
386; X32-AVX1-NEXT:    vmovaps %ymm0, %ymm1
387; X32-AVX1-NEXT:    retl
388;
389; X32-AVX2-LABEL: coo512:
390; X32-AVX2:       # BB#0:
391; X32-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
392; X32-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
393; X32-AVX2-NEXT:    retl
394;
395; X32-KNL-LABEL: coo512:
396; X32-KNL:       # BB#0:
397; X32-KNL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
398; X32-KNL-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
399; X32-KNL-NEXT:    retl
400;
401; X32-SKX-LABEL: coo512:
402; X32-SKX:       # BB#0:
403; X32-SKX-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
404; X32-SKX-NEXT:    retl
405;
406; X64-SSE-LABEL: coo512:
407; X64-SSE:       # BB#0:
408; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
409; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
410; X64-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
411; X64-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
412; X64-SSE-NEXT:    retq
413;
414; X64-AVX1-LABEL: coo512:
415; X64-AVX1:       # BB#0:
416; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
417; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
418; X64-AVX1-NEXT:    vmovaps %ymm0, %ymm1
419; X64-AVX1-NEXT:    retq
420;
421; X64-AVX2-LABEL: coo512:
422; X64-AVX2:       # BB#0:
423; X64-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
424; X64-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
425; X64-AVX2-NEXT:    retq
426;
427; X64-KNL-LABEL: coo512:
428; X64-KNL:       # BB#0:
429; X64-KNL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
430; X64-KNL-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
431; X64-KNL-NEXT:    retq
432;
433; X64-SKX-LABEL: coo512:
434; X64-SKX:       # BB#0:
435; X64-SKX-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
436; X64-SKX-NEXT:    retq
437  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>
438}
439
440define <32 x i16> @soo512() nounwind {
441; X32-SSE-LABEL: soo512:
442; X32-SSE:       # BB#0:
443; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
444; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
445; X32-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
446; X32-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
447; X32-SSE-NEXT:    retl
448;
449; X32-AVX1-LABEL: soo512:
450; X32-AVX1:       # BB#0:
451; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
452; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
453; X32-AVX1-NEXT:    vmovaps %ymm0, %ymm1
454; X32-AVX1-NEXT:    retl
455;
456; X32-AVX2-LABEL: soo512:
457; X32-AVX2:       # BB#0:
458; X32-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
459; X32-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
460; X32-AVX2-NEXT:    retl
461;
462; X32-KNL-LABEL: soo512:
463; X32-KNL:       # BB#0:
464; X32-KNL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
465; X32-KNL-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
466; X32-KNL-NEXT:    retl
467;
468; X32-SKX-LABEL: soo512:
469; X32-SKX:       # BB#0:
470; X32-SKX-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
471; X32-SKX-NEXT:    retl
472;
473; X64-SSE-LABEL: soo512:
474; X64-SSE:       # BB#0:
475; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
476; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
477; X64-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
478; X64-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
479; X64-SSE-NEXT:    retq
480;
481; X64-AVX1-LABEL: soo512:
482; X64-AVX1:       # BB#0:
483; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
484; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
485; X64-AVX1-NEXT:    vmovaps %ymm0, %ymm1
486; X64-AVX1-NEXT:    retq
487;
488; X64-AVX2-LABEL: soo512:
489; X64-AVX2:       # BB#0:
490; X64-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
491; X64-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
492; X64-AVX2-NEXT:    retq
493;
494; X64-KNL-LABEL: soo512:
495; X64-KNL:       # BB#0:
496; X64-KNL-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
497; X64-KNL-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
498; X64-KNL-NEXT:    retq
499;
500; X64-SKX-LABEL: soo512:
501; X64-SKX:       # BB#0:
502; X64-SKX-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
503; X64-SKX-NEXT:    retq
504  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>
505}
506
507define <16 x i32> @ioo512() nounwind {
508; X32-SSE-LABEL: ioo512:
509; X32-SSE:       # BB#0:
510; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
511; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
512; X32-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
513; X32-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
514; X32-SSE-NEXT:    retl
515;
516; X32-AVX1-LABEL: ioo512:
517; X32-AVX1:       # BB#0:
518; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
519; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
520; X32-AVX1-NEXT:    vmovaps %ymm0, %ymm1
521; X32-AVX1-NEXT:    retl
522;
523; X32-AVX2-LABEL: ioo512:
524; X32-AVX2:       # BB#0:
525; X32-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
526; X32-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
527; X32-AVX2-NEXT:    retl
528;
529; X32-AVX512-LABEL: ioo512:
530; X32-AVX512:       # BB#0:
531; X32-AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
532; X32-AVX512-NEXT:    retl
533;
534; X64-SSE-LABEL: ioo512:
535; X64-SSE:       # BB#0:
536; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
537; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
538; X64-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
539; X64-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
540; X64-SSE-NEXT:    retq
541;
542; X64-AVX1-LABEL: ioo512:
543; X64-AVX1:       # BB#0:
544; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
545; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
546; X64-AVX1-NEXT:    vmovaps %ymm0, %ymm1
547; X64-AVX1-NEXT:    retq
548;
549; X64-AVX2-LABEL: ioo512:
550; X64-AVX2:       # BB#0:
551; X64-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
552; X64-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
553; X64-AVX2-NEXT:    retq
554;
555; X64-AVX512-LABEL: ioo512:
556; X64-AVX512:       # BB#0:
557; X64-AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
558; X64-AVX512-NEXT:    retq
559  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>
560}
561
562define <8 x i64> @loo512() nounwind {
563; X32-SSE-LABEL: loo512:
564; X32-SSE:       # BB#0:
565; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
566; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
567; X32-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
568; X32-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
569; X32-SSE-NEXT:    retl
570;
571; X32-AVX1-LABEL: loo512:
572; X32-AVX1:       # BB#0:
573; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
574; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
575; X32-AVX1-NEXT:    vmovaps %ymm0, %ymm1
576; X32-AVX1-NEXT:    retl
577;
578; X32-AVX2-LABEL: loo512:
579; X32-AVX2:       # BB#0:
580; X32-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
581; X32-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
582; X32-AVX2-NEXT:    retl
583;
584; X32-AVX512-LABEL: loo512:
585; X32-AVX512:       # BB#0:
586; X32-AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
587; X32-AVX512-NEXT:    retl
588;
589; X64-SSE-LABEL: loo512:
590; X64-SSE:       # BB#0:
591; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
592; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
593; X64-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
594; X64-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
595; X64-SSE-NEXT:    retq
596;
597; X64-AVX1-LABEL: loo512:
598; X64-AVX1:       # BB#0:
599; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
600; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
601; X64-AVX1-NEXT:    vmovaps %ymm0, %ymm1
602; X64-AVX1-NEXT:    retq
603;
604; X64-AVX2-LABEL: loo512:
605; X64-AVX2:       # BB#0:
606; X64-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
607; X64-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
608; X64-AVX2-NEXT:    retq
609;
610; X64-AVX512-LABEL: loo512:
611; X64-AVX512:       # BB#0:
612; X64-AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
613; X64-AVX512-NEXT:    retq
614  ret <8 x i64> <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
615}
616
617define <8 x double> @doo512() nounwind {
618; X32-SSE-LABEL: doo512:
619; X32-SSE:       # BB#0:
620; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
621; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
622; X32-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
623; X32-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
624; X32-SSE-NEXT:    retl
625;
626; X32-AVX1-LABEL: doo512:
627; X32-AVX1:       # BB#0:
628; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
629; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
630; X32-AVX1-NEXT:    vmovaps %ymm0, %ymm1
631; X32-AVX1-NEXT:    retl
632;
633; X32-AVX2-LABEL: doo512:
634; X32-AVX2:       # BB#0:
635; X32-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
636; X32-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
637; X32-AVX2-NEXT:    retl
638;
639; X32-AVX512-LABEL: doo512:
640; X32-AVX512:       # BB#0:
641; X32-AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
642; X32-AVX512-NEXT:    retl
643;
644; X64-SSE-LABEL: doo512:
645; X64-SSE:       # BB#0:
646; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
647; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
648; X64-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
649; X64-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
650; X64-SSE-NEXT:    retq
651;
652; X64-AVX1-LABEL: doo512:
653; X64-AVX1:       # BB#0:
654; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
655; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
656; X64-AVX1-NEXT:    vmovaps %ymm0, %ymm1
657; X64-AVX1-NEXT:    retq
658;
659; X64-AVX2-LABEL: doo512:
660; X64-AVX2:       # BB#0:
661; X64-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
662; X64-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
663; X64-AVX2-NEXT:    retq
664;
665; X64-AVX512-LABEL: doo512:
666; X64-AVX512:       # BB#0:
667; X64-AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
668; X64-AVX512-NEXT:    retq
669  ret <8 x double> <double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff, double 0xffffffffffffffff>
670}
671
672define <16 x float> @foo512() nounwind {
673; X32-SSE-LABEL: foo512:
674; X32-SSE:       # BB#0:
675; X32-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
676; X32-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
677; X32-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
678; X32-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
679; X32-SSE-NEXT:    retl
680;
681; X32-AVX1-LABEL: foo512:
682; X32-AVX1:       # BB#0:
683; X32-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
684; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
685; X32-AVX1-NEXT:    vmovaps %ymm0, %ymm1
686; X32-AVX1-NEXT:    retl
687;
688; X32-AVX2-LABEL: foo512:
689; X32-AVX2:       # BB#0:
690; X32-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
691; X32-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
692; X32-AVX2-NEXT:    retl
693;
694; X32-AVX512-LABEL: foo512:
695; X32-AVX512:       # BB#0:
696; X32-AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
697; X32-AVX512-NEXT:    retl
698;
699; X64-SSE-LABEL: foo512:
700; X64-SSE:       # BB#0:
701; X64-SSE-NEXT:    pcmpeqd %xmm0, %xmm0
702; X64-SSE-NEXT:    pcmpeqd %xmm1, %xmm1
703; X64-SSE-NEXT:    pcmpeqd %xmm2, %xmm2
704; X64-SSE-NEXT:    pcmpeqd %xmm3, %xmm3
705; X64-SSE-NEXT:    retq
706;
707; X64-AVX1-LABEL: foo512:
708; X64-AVX1:       # BB#0:
709; X64-AVX1-NEXT:    vpcmpeqd %xmm0, %xmm0, %xmm0
710; X64-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm0, %ymm0
711; X64-AVX1-NEXT:    vmovaps %ymm0, %ymm1
712; X64-AVX1-NEXT:    retq
713;
714; X64-AVX2-LABEL: foo512:
715; X64-AVX2:       # BB#0:
716; X64-AVX2-NEXT:    vpcmpeqd %ymm0, %ymm0, %ymm0
717; X64-AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
718; X64-AVX2-NEXT:    retq
719;
720; X64-AVX512-LABEL: foo512:
721; X64-AVX512:       # BB#0:
722; X64-AVX512-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0
723; X64-AVX512-NEXT:    retq
724  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>
725}
726