xref: /llvm-project/llvm/test/CodeGen/X86/vector-reduce-and-cmp.ll (revision 44f316811016e677ca3e6c6237619e71bae28986)
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-prefixes=SSE,SSE2
3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefixes=SSE,SSE41
4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX1
5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX1OR2,AVX2
6; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefixes=AVX,AVX512,AVX512F
7; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BW
8; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw,+avx512vl | FileCheck %s --check-prefixes=AVX,AVX512,AVX512BWVL
9
10;
11; vXi64
12;
13
14define i1 @test_v2i64(<2 x i64> %a0) {
15; SSE2-LABEL: test_v2i64:
16; SSE2:       # %bb.0:
17; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
18; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
19; SSE2-NEXT:    movmskps %xmm1, %eax
20; SSE2-NEXT:    xorl $15, %eax
21; SSE2-NEXT:    sete %al
22; SSE2-NEXT:    retq
23;
24; SSE41-LABEL: test_v2i64:
25; SSE41:       # %bb.0:
26; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
27; SSE41-NEXT:    ptest %xmm1, %xmm0
28; SSE41-NEXT:    setb %al
29; SSE41-NEXT:    retq
30;
31; AVX-LABEL: test_v2i64:
32; AVX:       # %bb.0:
33; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
34; AVX-NEXT:    vptest %xmm1, %xmm0
35; AVX-NEXT:    setb %al
36; AVX-NEXT:    retq
37  %1 = call i64 @llvm.vector.reduce.and.v2i64(<2 x i64> %a0)
38  %2 = icmp eq i64 %1, -1
39  ret i1 %2
40}
41
42define i1 @test_v4i64(<4 x i64> %a0) {
43; SSE2-LABEL: test_v4i64:
44; SSE2:       # %bb.0:
45; SSE2-NEXT:    pand %xmm1, %xmm0
46; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
47; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
48; SSE2-NEXT:    movmskps %xmm1, %eax
49; SSE2-NEXT:    xorl $15, %eax
50; SSE2-NEXT:    setne %al
51; SSE2-NEXT:    retq
52;
53; SSE41-LABEL: test_v4i64:
54; SSE41:       # %bb.0:
55; SSE41-NEXT:    pand %xmm1, %xmm0
56; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
57; SSE41-NEXT:    ptest %xmm1, %xmm0
58; SSE41-NEXT:    setae %al
59; SSE41-NEXT:    retq
60;
61; AVX1-LABEL: test_v4i64:
62; AVX1:       # %bb.0:
63; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
64; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
65; AVX1-NEXT:    vptest %ymm1, %ymm0
66; AVX1-NEXT:    setae %al
67; AVX1-NEXT:    vzeroupper
68; AVX1-NEXT:    retq
69;
70; AVX2-LABEL: test_v4i64:
71; AVX2:       # %bb.0:
72; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
73; AVX2-NEXT:    vptest %ymm1, %ymm0
74; AVX2-NEXT:    setae %al
75; AVX2-NEXT:    vzeroupper
76; AVX2-NEXT:    retq
77;
78; AVX512-LABEL: test_v4i64:
79; AVX512:       # %bb.0:
80; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
81; AVX512-NEXT:    vptest %ymm1, %ymm0
82; AVX512-NEXT:    setae %al
83; AVX512-NEXT:    vzeroupper
84; AVX512-NEXT:    retq
85  %1 = call i64 @llvm.vector.reduce.and.v4i64(<4 x i64> %a0)
86  %2 = icmp ne i64 %1, -1
87  ret i1 %2
88}
89
90define i1 @test_v8i64(<8 x i64> %a0) {
91; SSE2-LABEL: test_v8i64:
92; SSE2:       # %bb.0:
93; SSE2-NEXT:    pand %xmm3, %xmm1
94; SSE2-NEXT:    pand %xmm2, %xmm0
95; SSE2-NEXT:    pand %xmm1, %xmm0
96; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
97; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
98; SSE2-NEXT:    movmskps %xmm1, %eax
99; SSE2-NEXT:    xorl $15, %eax
100; SSE2-NEXT:    sete %al
101; SSE2-NEXT:    retq
102;
103; SSE41-LABEL: test_v8i64:
104; SSE41:       # %bb.0:
105; SSE41-NEXT:    pand %xmm3, %xmm1
106; SSE41-NEXT:    pand %xmm2, %xmm0
107; SSE41-NEXT:    pand %xmm1, %xmm0
108; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
109; SSE41-NEXT:    ptest %xmm1, %xmm0
110; SSE41-NEXT:    setb %al
111; SSE41-NEXT:    retq
112;
113; AVX1-LABEL: test_v8i64:
114; AVX1:       # %bb.0:
115; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
116; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
117; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
118; AVX1-NEXT:    vptest %ymm1, %ymm0
119; AVX1-NEXT:    setb %al
120; AVX1-NEXT:    vzeroupper
121; AVX1-NEXT:    retq
122;
123; AVX2-LABEL: test_v8i64:
124; AVX2:       # %bb.0:
125; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
126; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
127; AVX2-NEXT:    vptest %ymm1, %ymm0
128; AVX2-NEXT:    setb %al
129; AVX2-NEXT:    vzeroupper
130; AVX2-NEXT:    retq
131;
132; AVX512-LABEL: test_v8i64:
133; AVX512:       # %bb.0:
134; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -1
135; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0
136; AVX512-NEXT:    kortestw %k0, %k0
137; AVX512-NEXT:    sete %al
138; AVX512-NEXT:    vzeroupper
139; AVX512-NEXT:    retq
140  %1 = call i64 @llvm.vector.reduce.and.v8i64(<8 x i64> %a0)
141  %2 = icmp eq i64 %1, -1
142  ret i1 %2
143}
144
145define i1 @test_v16i64(<16 x i64> %a0) {
146; SSE2-LABEL: test_v16i64:
147; SSE2:       # %bb.0:
148; SSE2-NEXT:    pand %xmm7, %xmm3
149; SSE2-NEXT:    pand %xmm5, %xmm1
150; SSE2-NEXT:    pand %xmm3, %xmm1
151; SSE2-NEXT:    pand %xmm6, %xmm2
152; SSE2-NEXT:    pand %xmm4, %xmm0
153; SSE2-NEXT:    pand %xmm2, %xmm0
154; SSE2-NEXT:    pand %xmm1, %xmm0
155; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
156; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
157; SSE2-NEXT:    movmskps %xmm1, %eax
158; SSE2-NEXT:    xorl $15, %eax
159; SSE2-NEXT:    setne %al
160; SSE2-NEXT:    retq
161;
162; SSE41-LABEL: test_v16i64:
163; SSE41:       # %bb.0:
164; SSE41-NEXT:    pand %xmm7, %xmm3
165; SSE41-NEXT:    pand %xmm5, %xmm1
166; SSE41-NEXT:    pand %xmm3, %xmm1
167; SSE41-NEXT:    pand %xmm6, %xmm2
168; SSE41-NEXT:    pand %xmm4, %xmm0
169; SSE41-NEXT:    pand %xmm2, %xmm0
170; SSE41-NEXT:    pand %xmm1, %xmm0
171; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
172; SSE41-NEXT:    ptest %xmm1, %xmm0
173; SSE41-NEXT:    setae %al
174; SSE41-NEXT:    retq
175;
176; AVX1-LABEL: test_v16i64:
177; AVX1:       # %bb.0:
178; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
179; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0
180; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
181; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
182; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
183; AVX1-NEXT:    vptest %ymm1, %ymm0
184; AVX1-NEXT:    setae %al
185; AVX1-NEXT:    vzeroupper
186; AVX1-NEXT:    retq
187;
188; AVX2-LABEL: test_v16i64:
189; AVX2:       # %bb.0:
190; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
191; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
192; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
193; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
194; AVX2-NEXT:    vptest %ymm1, %ymm0
195; AVX2-NEXT:    setae %al
196; AVX2-NEXT:    vzeroupper
197; AVX2-NEXT:    retq
198;
199; AVX512-LABEL: test_v16i64:
200; AVX512:       # %bb.0:
201; AVX512-NEXT:    vpandq %zmm1, %zmm0, %zmm0
202; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -1
203; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0
204; AVX512-NEXT:    kortestw %k0, %k0
205; AVX512-NEXT:    setne %al
206; AVX512-NEXT:    vzeroupper
207; AVX512-NEXT:    retq
208  %1 = call i64 @llvm.vector.reduce.and.v16i64(<16 x i64> %a0)
209  %2 = icmp ne i64 %1, -1
210  ret i1 %2
211}
212
213;
214; vXi32
215;
216
217define i1 @test_v2i32(<2 x i32> %a0) {
218; SSE-LABEL: test_v2i32:
219; SSE:       # %bb.0:
220; SSE-NEXT:    movq %xmm0, %rax
221; SSE-NEXT:    cmpq $-1, %rax
222; SSE-NEXT:    sete %al
223; SSE-NEXT:    retq
224;
225; AVX-LABEL: test_v2i32:
226; AVX:       # %bb.0:
227; AVX-NEXT:    vmovq %xmm0, %rax
228; AVX-NEXT:    cmpq $-1, %rax
229; AVX-NEXT:    sete %al
230; AVX-NEXT:    retq
231  %1 = call i32 @llvm.vector.reduce.and.v2i32(<2 x i32> %a0)
232  %2 = icmp eq i32 %1, -1
233  ret i1 %2
234}
235
236define i1 @test_v4i32(<4 x i32> %a0) {
237; SSE2-LABEL: test_v4i32:
238; SSE2:       # %bb.0:
239; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
240; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
241; SSE2-NEXT:    movmskps %xmm1, %eax
242; SSE2-NEXT:    xorl $15, %eax
243; SSE2-NEXT:    setne %al
244; SSE2-NEXT:    retq
245;
246; SSE41-LABEL: test_v4i32:
247; SSE41:       # %bb.0:
248; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
249; SSE41-NEXT:    ptest %xmm1, %xmm0
250; SSE41-NEXT:    setae %al
251; SSE41-NEXT:    retq
252;
253; AVX-LABEL: test_v4i32:
254; AVX:       # %bb.0:
255; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
256; AVX-NEXT:    vptest %xmm1, %xmm0
257; AVX-NEXT:    setae %al
258; AVX-NEXT:    retq
259  %1 = call i32 @llvm.vector.reduce.and.v4i32(<4 x i32> %a0)
260  %2 = icmp ne i32 %1, -1
261  ret i1 %2
262}
263
264define i1 @test_v8i32(<8 x i32> %a0) {
265; SSE2-LABEL: test_v8i32:
266; SSE2:       # %bb.0:
267; SSE2-NEXT:    pand %xmm1, %xmm0
268; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
269; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
270; SSE2-NEXT:    movmskps %xmm1, %eax
271; SSE2-NEXT:    xorl $15, %eax
272; SSE2-NEXT:    sete %al
273; SSE2-NEXT:    retq
274;
275; SSE41-LABEL: test_v8i32:
276; SSE41:       # %bb.0:
277; SSE41-NEXT:    pand %xmm1, %xmm0
278; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
279; SSE41-NEXT:    ptest %xmm1, %xmm0
280; SSE41-NEXT:    setb %al
281; SSE41-NEXT:    retq
282;
283; AVX1-LABEL: test_v8i32:
284; AVX1:       # %bb.0:
285; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
286; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
287; AVX1-NEXT:    vptest %ymm1, %ymm0
288; AVX1-NEXT:    setb %al
289; AVX1-NEXT:    vzeroupper
290; AVX1-NEXT:    retq
291;
292; AVX2-LABEL: test_v8i32:
293; AVX2:       # %bb.0:
294; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
295; AVX2-NEXT:    vptest %ymm1, %ymm0
296; AVX2-NEXT:    setb %al
297; AVX2-NEXT:    vzeroupper
298; AVX2-NEXT:    retq
299;
300; AVX512-LABEL: test_v8i32:
301; AVX512:       # %bb.0:
302; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
303; AVX512-NEXT:    vptest %ymm1, %ymm0
304; AVX512-NEXT:    setb %al
305; AVX512-NEXT:    vzeroupper
306; AVX512-NEXT:    retq
307  %1 = call i32 @llvm.vector.reduce.and.v8i32(<8 x i32> %a0)
308  %2 = icmp eq i32 %1, -1
309  ret i1 %2
310}
311
312define i1 @test_v16i32(<16 x i32> %a0) {
313; SSE2-LABEL: test_v16i32:
314; SSE2:       # %bb.0:
315; SSE2-NEXT:    pand %xmm3, %xmm1
316; SSE2-NEXT:    pand %xmm2, %xmm0
317; SSE2-NEXT:    pand %xmm1, %xmm0
318; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
319; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
320; SSE2-NEXT:    movmskps %xmm1, %eax
321; SSE2-NEXT:    xorl $15, %eax
322; SSE2-NEXT:    setne %al
323; SSE2-NEXT:    retq
324;
325; SSE41-LABEL: test_v16i32:
326; SSE41:       # %bb.0:
327; SSE41-NEXT:    pand %xmm3, %xmm1
328; SSE41-NEXT:    pand %xmm2, %xmm0
329; SSE41-NEXT:    pand %xmm1, %xmm0
330; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
331; SSE41-NEXT:    ptest %xmm1, %xmm0
332; SSE41-NEXT:    setae %al
333; SSE41-NEXT:    retq
334;
335; AVX1-LABEL: test_v16i32:
336; AVX1:       # %bb.0:
337; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
338; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
339; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
340; AVX1-NEXT:    vptest %ymm1, %ymm0
341; AVX1-NEXT:    setae %al
342; AVX1-NEXT:    vzeroupper
343; AVX1-NEXT:    retq
344;
345; AVX2-LABEL: test_v16i32:
346; AVX2:       # %bb.0:
347; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
348; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
349; AVX2-NEXT:    vptest %ymm1, %ymm0
350; AVX2-NEXT:    setae %al
351; AVX2-NEXT:    vzeroupper
352; AVX2-NEXT:    retq
353;
354; AVX512-LABEL: test_v16i32:
355; AVX512:       # %bb.0:
356; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -1
357; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0
358; AVX512-NEXT:    kortestw %k0, %k0
359; AVX512-NEXT:    setne %al
360; AVX512-NEXT:    vzeroupper
361; AVX512-NEXT:    retq
362  %1 = call i32 @llvm.vector.reduce.and.v16i32(<16 x i32> %a0)
363  %2 = icmp ne i32 %1, -1
364  ret i1 %2
365}
366
367define i1 @test_v32i32(<32 x i32> %a0) {
368; SSE2-LABEL: test_v32i32:
369; SSE2:       # %bb.0:
370; SSE2-NEXT:    pand %xmm7, %xmm3
371; SSE2-NEXT:    pand %xmm5, %xmm1
372; SSE2-NEXT:    pand %xmm3, %xmm1
373; SSE2-NEXT:    pand %xmm6, %xmm2
374; SSE2-NEXT:    pand %xmm4, %xmm0
375; SSE2-NEXT:    pand %xmm2, %xmm0
376; SSE2-NEXT:    pand %xmm1, %xmm0
377; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
378; SSE2-NEXT:    pcmpeqd %xmm0, %xmm1
379; SSE2-NEXT:    movmskps %xmm1, %eax
380; SSE2-NEXT:    xorl $15, %eax
381; SSE2-NEXT:    sete %al
382; SSE2-NEXT:    retq
383;
384; SSE41-LABEL: test_v32i32:
385; SSE41:       # %bb.0:
386; SSE41-NEXT:    pand %xmm7, %xmm3
387; SSE41-NEXT:    pand %xmm5, %xmm1
388; SSE41-NEXT:    pand %xmm3, %xmm1
389; SSE41-NEXT:    pand %xmm6, %xmm2
390; SSE41-NEXT:    pand %xmm4, %xmm0
391; SSE41-NEXT:    pand %xmm2, %xmm0
392; SSE41-NEXT:    pand %xmm1, %xmm0
393; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
394; SSE41-NEXT:    ptest %xmm1, %xmm0
395; SSE41-NEXT:    setb %al
396; SSE41-NEXT:    retq
397;
398; AVX1-LABEL: test_v32i32:
399; AVX1:       # %bb.0:
400; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
401; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0
402; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
403; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
404; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
405; AVX1-NEXT:    vptest %ymm1, %ymm0
406; AVX1-NEXT:    setb %al
407; AVX1-NEXT:    vzeroupper
408; AVX1-NEXT:    retq
409;
410; AVX2-LABEL: test_v32i32:
411; AVX2:       # %bb.0:
412; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
413; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
414; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
415; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
416; AVX2-NEXT:    vptest %ymm1, %ymm0
417; AVX2-NEXT:    setb %al
418; AVX2-NEXT:    vzeroupper
419; AVX2-NEXT:    retq
420;
421; AVX512-LABEL: test_v32i32:
422; AVX512:       # %bb.0:
423; AVX512-NEXT:    vpandd %zmm1, %zmm0, %zmm0
424; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -1
425; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0
426; AVX512-NEXT:    kortestw %k0, %k0
427; AVX512-NEXT:    sete %al
428; AVX512-NEXT:    vzeroupper
429; AVX512-NEXT:    retq
430  %1 = call i32 @llvm.vector.reduce.and.v32i32(<32 x i32> %a0)
431  %2 = icmp eq i32 %1, -1
432  ret i1 %2
433}
434
435;
436; vXi16
437;
438
439define i1 @test_v2i16(<2 x i16> %a0) {
440; SSE-LABEL: test_v2i16:
441; SSE:       # %bb.0:
442; SSE-NEXT:    movd %xmm0, %eax
443; SSE-NEXT:    cmpl $-1, %eax
444; SSE-NEXT:    sete %al
445; SSE-NEXT:    retq
446;
447; AVX-LABEL: test_v2i16:
448; AVX:       # %bb.0:
449; AVX-NEXT:    vmovd %xmm0, %eax
450; AVX-NEXT:    cmpl $-1, %eax
451; AVX-NEXT:    sete %al
452; AVX-NEXT:    retq
453  %1 = call i16 @llvm.vector.reduce.and.v2i16(<2 x i16> %a0)
454  %2 = icmp eq i16 %1, -1
455  ret i1 %2
456}
457
458define i1 @test_v4i16(<4 x i16> %a0) {
459; SSE-LABEL: test_v4i16:
460; SSE:       # %bb.0:
461; SSE-NEXT:    movq %xmm0, %rax
462; SSE-NEXT:    cmpq $-1, %rax
463; SSE-NEXT:    setne %al
464; SSE-NEXT:    retq
465;
466; AVX-LABEL: test_v4i16:
467; AVX:       # %bb.0:
468; AVX-NEXT:    vmovq %xmm0, %rax
469; AVX-NEXT:    cmpq $-1, %rax
470; AVX-NEXT:    setne %al
471; AVX-NEXT:    retq
472  %1 = call i16 @llvm.vector.reduce.and.v4i16(<4 x i16> %a0)
473  %2 = icmp ne i16 %1, -1
474  ret i1 %2
475}
476
477define i1 @test_v8i16(<8 x i16> %a0) {
478; SSE2-LABEL: test_v8i16:
479; SSE2:       # %bb.0:
480; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
481; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
482; SSE2-NEXT:    pmovmskb %xmm1, %eax
483; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
484; SSE2-NEXT:    sete %al
485; SSE2-NEXT:    retq
486;
487; SSE41-LABEL: test_v8i16:
488; SSE41:       # %bb.0:
489; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
490; SSE41-NEXT:    ptest %xmm1, %xmm0
491; SSE41-NEXT:    setb %al
492; SSE41-NEXT:    retq
493;
494; AVX-LABEL: test_v8i16:
495; AVX:       # %bb.0:
496; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
497; AVX-NEXT:    vptest %xmm1, %xmm0
498; AVX-NEXT:    setb %al
499; AVX-NEXT:    retq
500  %1 = call i16 @llvm.vector.reduce.and.v8i16(<8 x i16> %a0)
501  %2 = icmp eq i16 %1, -1
502  ret i1 %2
503}
504
505define i1 @test_v16i16(<16 x i16> %a0) {
506; SSE2-LABEL: test_v16i16:
507; SSE2:       # %bb.0:
508; SSE2-NEXT:    pand %xmm1, %xmm0
509; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
510; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
511; SSE2-NEXT:    pmovmskb %xmm1, %eax
512; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
513; SSE2-NEXT:    setne %al
514; SSE2-NEXT:    retq
515;
516; SSE41-LABEL: test_v16i16:
517; SSE41:       # %bb.0:
518; SSE41-NEXT:    pand %xmm1, %xmm0
519; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
520; SSE41-NEXT:    ptest %xmm1, %xmm0
521; SSE41-NEXT:    setae %al
522; SSE41-NEXT:    retq
523;
524; AVX1-LABEL: test_v16i16:
525; AVX1:       # %bb.0:
526; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
527; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
528; AVX1-NEXT:    vptest %ymm1, %ymm0
529; AVX1-NEXT:    setae %al
530; AVX1-NEXT:    vzeroupper
531; AVX1-NEXT:    retq
532;
533; AVX2-LABEL: test_v16i16:
534; AVX2:       # %bb.0:
535; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
536; AVX2-NEXT:    vptest %ymm1, %ymm0
537; AVX2-NEXT:    setae %al
538; AVX2-NEXT:    vzeroupper
539; AVX2-NEXT:    retq
540;
541; AVX512-LABEL: test_v16i16:
542; AVX512:       # %bb.0:
543; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
544; AVX512-NEXT:    vptest %ymm1, %ymm0
545; AVX512-NEXT:    setae %al
546; AVX512-NEXT:    vzeroupper
547; AVX512-NEXT:    retq
548  %1 = call i16 @llvm.vector.reduce.and.v16i16(<16 x i16> %a0)
549  %2 = icmp ne i16 %1, -1
550  ret i1 %2
551}
552
553define i1 @test_v32i16(<32 x i16> %a0) {
554; SSE2-LABEL: test_v32i16:
555; SSE2:       # %bb.0:
556; SSE2-NEXT:    pand %xmm3, %xmm1
557; SSE2-NEXT:    pand %xmm2, %xmm0
558; SSE2-NEXT:    pand %xmm1, %xmm0
559; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
560; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
561; SSE2-NEXT:    pmovmskb %xmm1, %eax
562; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
563; SSE2-NEXT:    sete %al
564; SSE2-NEXT:    retq
565;
566; SSE41-LABEL: test_v32i16:
567; SSE41:       # %bb.0:
568; SSE41-NEXT:    pand %xmm3, %xmm1
569; SSE41-NEXT:    pand %xmm2, %xmm0
570; SSE41-NEXT:    pand %xmm1, %xmm0
571; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
572; SSE41-NEXT:    ptest %xmm1, %xmm0
573; SSE41-NEXT:    setb %al
574; SSE41-NEXT:    retq
575;
576; AVX1-LABEL: test_v32i16:
577; AVX1:       # %bb.0:
578; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
579; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
580; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
581; AVX1-NEXT:    vptest %ymm1, %ymm0
582; AVX1-NEXT:    setb %al
583; AVX1-NEXT:    vzeroupper
584; AVX1-NEXT:    retq
585;
586; AVX2-LABEL: test_v32i16:
587; AVX2:       # %bb.0:
588; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
589; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
590; AVX2-NEXT:    vptest %ymm1, %ymm0
591; AVX2-NEXT:    setb %al
592; AVX2-NEXT:    vzeroupper
593; AVX2-NEXT:    retq
594;
595; AVX512-LABEL: test_v32i16:
596; AVX512:       # %bb.0:
597; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -1
598; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0
599; AVX512-NEXT:    kortestw %k0, %k0
600; AVX512-NEXT:    sete %al
601; AVX512-NEXT:    vzeroupper
602; AVX512-NEXT:    retq
603  %1 = call i16 @llvm.vector.reduce.and.v32i16(<32 x i16> %a0)
604  %2 = icmp eq i16 %1, -1
605  ret i1 %2
606}
607
608define i1 @test_v64i16(<64 x i16> %a0) {
609; SSE2-LABEL: test_v64i16:
610; SSE2:       # %bb.0:
611; SSE2-NEXT:    pand %xmm7, %xmm3
612; SSE2-NEXT:    pand %xmm5, %xmm1
613; SSE2-NEXT:    pand %xmm3, %xmm1
614; SSE2-NEXT:    pand %xmm6, %xmm2
615; SSE2-NEXT:    pand %xmm4, %xmm0
616; SSE2-NEXT:    pand %xmm2, %xmm0
617; SSE2-NEXT:    pand %xmm1, %xmm0
618; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
619; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
620; SSE2-NEXT:    pmovmskb %xmm1, %eax
621; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
622; SSE2-NEXT:    setne %al
623; SSE2-NEXT:    retq
624;
625; SSE41-LABEL: test_v64i16:
626; SSE41:       # %bb.0:
627; SSE41-NEXT:    pand %xmm7, %xmm3
628; SSE41-NEXT:    pand %xmm5, %xmm1
629; SSE41-NEXT:    pand %xmm3, %xmm1
630; SSE41-NEXT:    pand %xmm6, %xmm2
631; SSE41-NEXT:    pand %xmm4, %xmm0
632; SSE41-NEXT:    pand %xmm2, %xmm0
633; SSE41-NEXT:    pand %xmm1, %xmm0
634; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
635; SSE41-NEXT:    ptest %xmm1, %xmm0
636; SSE41-NEXT:    setae %al
637; SSE41-NEXT:    retq
638;
639; AVX1-LABEL: test_v64i16:
640; AVX1:       # %bb.0:
641; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
642; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0
643; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
644; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
645; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
646; AVX1-NEXT:    vptest %ymm1, %ymm0
647; AVX1-NEXT:    setae %al
648; AVX1-NEXT:    vzeroupper
649; AVX1-NEXT:    retq
650;
651; AVX2-LABEL: test_v64i16:
652; AVX2:       # %bb.0:
653; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
654; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
655; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
656; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
657; AVX2-NEXT:    vptest %ymm1, %ymm0
658; AVX2-NEXT:    setae %al
659; AVX2-NEXT:    vzeroupper
660; AVX2-NEXT:    retq
661;
662; AVX512-LABEL: test_v64i16:
663; AVX512:       # %bb.0:
664; AVX512-NEXT:    vpandq %zmm1, %zmm0, %zmm0
665; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -1
666; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0
667; AVX512-NEXT:    kortestw %k0, %k0
668; AVX512-NEXT:    setne %al
669; AVX512-NEXT:    vzeroupper
670; AVX512-NEXT:    retq
671  %1 = call i16 @llvm.vector.reduce.and.v64i16(<64 x i16> %a0)
672  %2 = icmp ne i16 %1, -1
673  ret i1 %2
674}
675
676;
677; vXi8
678;
679
680define i1 @test_v2i8(<2 x i8> %a0) {
681; SSE-LABEL: test_v2i8:
682; SSE:       # %bb.0:
683; SSE-NEXT:    movd %xmm0, %eax
684; SSE-NEXT:    cmpw $-1, %ax
685; SSE-NEXT:    sete %al
686; SSE-NEXT:    retq
687;
688; AVX-LABEL: test_v2i8:
689; AVX:       # %bb.0:
690; AVX-NEXT:    vmovd %xmm0, %eax
691; AVX-NEXT:    cmpw $-1, %ax
692; AVX-NEXT:    sete %al
693; AVX-NEXT:    retq
694  %1 = call i8 @llvm.vector.reduce.and.v2i8(<2 x i8> %a0)
695  %2 = icmp eq i8 %1, -1
696  ret i1 %2
697}
698
699define i1 @test_v4i8(<4 x i8> %a0) {
700; SSE-LABEL: test_v4i8:
701; SSE:       # %bb.0:
702; SSE-NEXT:    movd %xmm0, %eax
703; SSE-NEXT:    cmpl $-1, %eax
704; SSE-NEXT:    setne %al
705; SSE-NEXT:    retq
706;
707; AVX-LABEL: test_v4i8:
708; AVX:       # %bb.0:
709; AVX-NEXT:    vmovd %xmm0, %eax
710; AVX-NEXT:    cmpl $-1, %eax
711; AVX-NEXT:    setne %al
712; AVX-NEXT:    retq
713  %1 = call i8 @llvm.vector.reduce.and.v4i8(<4 x i8> %a0)
714  %2 = icmp ne i8 %1, -1
715  ret i1 %2
716}
717
718define i1 @test_v8i8(<8 x i8> %a0) {
719; SSE-LABEL: test_v8i8:
720; SSE:       # %bb.0:
721; SSE-NEXT:    movq %xmm0, %rax
722; SSE-NEXT:    cmpq $-1, %rax
723; SSE-NEXT:    sete %al
724; SSE-NEXT:    retq
725;
726; AVX-LABEL: test_v8i8:
727; AVX:       # %bb.0:
728; AVX-NEXT:    vmovq %xmm0, %rax
729; AVX-NEXT:    cmpq $-1, %rax
730; AVX-NEXT:    sete %al
731; AVX-NEXT:    retq
732  %1 = call i8 @llvm.vector.reduce.and.v8i8(<8 x i8> %a0)
733  %2 = icmp eq i8 %1, -1
734  ret i1 %2
735}
736
737define i1 @test_v16i8(<16 x i8> %a0) {
738; SSE2-LABEL: test_v16i8:
739; SSE2:       # %bb.0:
740; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
741; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
742; SSE2-NEXT:    pmovmskb %xmm1, %eax
743; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
744; SSE2-NEXT:    setne %al
745; SSE2-NEXT:    retq
746;
747; SSE41-LABEL: test_v16i8:
748; SSE41:       # %bb.0:
749; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
750; SSE41-NEXT:    ptest %xmm1, %xmm0
751; SSE41-NEXT:    setae %al
752; SSE41-NEXT:    retq
753;
754; AVX-LABEL: test_v16i8:
755; AVX:       # %bb.0:
756; AVX-NEXT:    vpcmpeqd %xmm1, %xmm1, %xmm1
757; AVX-NEXT:    vptest %xmm1, %xmm0
758; AVX-NEXT:    setae %al
759; AVX-NEXT:    retq
760  %1 = call i8 @llvm.vector.reduce.and.v16i8(<16 x i8> %a0)
761  %2 = icmp ne i8 %1, -1
762  ret i1 %2
763}
764
765define i1 @test_v32i8(<32 x i8> %a0) {
766; SSE2-LABEL: test_v32i8:
767; SSE2:       # %bb.0:
768; SSE2-NEXT:    pand %xmm1, %xmm0
769; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
770; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
771; SSE2-NEXT:    pmovmskb %xmm1, %eax
772; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
773; SSE2-NEXT:    sete %al
774; SSE2-NEXT:    retq
775;
776; SSE41-LABEL: test_v32i8:
777; SSE41:       # %bb.0:
778; SSE41-NEXT:    pand %xmm1, %xmm0
779; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
780; SSE41-NEXT:    ptest %xmm1, %xmm0
781; SSE41-NEXT:    setb %al
782; SSE41-NEXT:    retq
783;
784; AVX1-LABEL: test_v32i8:
785; AVX1:       # %bb.0:
786; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
787; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
788; AVX1-NEXT:    vptest %ymm1, %ymm0
789; AVX1-NEXT:    setb %al
790; AVX1-NEXT:    vzeroupper
791; AVX1-NEXT:    retq
792;
793; AVX2-LABEL: test_v32i8:
794; AVX2:       # %bb.0:
795; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
796; AVX2-NEXT:    vptest %ymm1, %ymm0
797; AVX2-NEXT:    setb %al
798; AVX2-NEXT:    vzeroupper
799; AVX2-NEXT:    retq
800;
801; AVX512-LABEL: test_v32i8:
802; AVX512:       # %bb.0:
803; AVX512-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
804; AVX512-NEXT:    vptest %ymm1, %ymm0
805; AVX512-NEXT:    setb %al
806; AVX512-NEXT:    vzeroupper
807; AVX512-NEXT:    retq
808  %1 = call i8 @llvm.vector.reduce.and.v32i8(<32 x i8> %a0)
809  %2 = icmp eq i8 %1, -1
810  ret i1 %2
811}
812
813define i1 @test_v64i8(<64 x i8> %a0) {
814; SSE2-LABEL: test_v64i8:
815; SSE2:       # %bb.0:
816; SSE2-NEXT:    pand %xmm3, %xmm1
817; SSE2-NEXT:    pand %xmm2, %xmm0
818; SSE2-NEXT:    pand %xmm1, %xmm0
819; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
820; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
821; SSE2-NEXT:    pmovmskb %xmm1, %eax
822; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
823; SSE2-NEXT:    setne %al
824; SSE2-NEXT:    retq
825;
826; SSE41-LABEL: test_v64i8:
827; SSE41:       # %bb.0:
828; SSE41-NEXT:    pand %xmm3, %xmm1
829; SSE41-NEXT:    pand %xmm2, %xmm0
830; SSE41-NEXT:    pand %xmm1, %xmm0
831; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
832; SSE41-NEXT:    ptest %xmm1, %xmm0
833; SSE41-NEXT:    setae %al
834; SSE41-NEXT:    retq
835;
836; AVX1-LABEL: test_v64i8:
837; AVX1:       # %bb.0:
838; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
839; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
840; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
841; AVX1-NEXT:    vptest %ymm1, %ymm0
842; AVX1-NEXT:    setae %al
843; AVX1-NEXT:    vzeroupper
844; AVX1-NEXT:    retq
845;
846; AVX2-LABEL: test_v64i8:
847; AVX2:       # %bb.0:
848; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
849; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
850; AVX2-NEXT:    vptest %ymm1, %ymm0
851; AVX2-NEXT:    setae %al
852; AVX2-NEXT:    vzeroupper
853; AVX2-NEXT:    retq
854;
855; AVX512-LABEL: test_v64i8:
856; AVX512:       # %bb.0:
857; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -1
858; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0
859; AVX512-NEXT:    kortestw %k0, %k0
860; AVX512-NEXT:    setne %al
861; AVX512-NEXT:    vzeroupper
862; AVX512-NEXT:    retq
863  %1 = call i8 @llvm.vector.reduce.and.v64i8(<64 x i8> %a0)
864  %2 = icmp ne i8 %1, -1
865  ret i1 %2
866}
867
868define i1 @test_v128i8(<128 x i8> %a0) {
869; SSE2-LABEL: test_v128i8:
870; SSE2:       # %bb.0:
871; SSE2-NEXT:    pand %xmm7, %xmm3
872; SSE2-NEXT:    pand %xmm5, %xmm1
873; SSE2-NEXT:    pand %xmm3, %xmm1
874; SSE2-NEXT:    pand %xmm6, %xmm2
875; SSE2-NEXT:    pand %xmm4, %xmm0
876; SSE2-NEXT:    pand %xmm2, %xmm0
877; SSE2-NEXT:    pand %xmm1, %xmm0
878; SSE2-NEXT:    pcmpeqd %xmm1, %xmm1
879; SSE2-NEXT:    pcmpeqb %xmm0, %xmm1
880; SSE2-NEXT:    pmovmskb %xmm1, %eax
881; SSE2-NEXT:    xorl $65535, %eax # imm = 0xFFFF
882; SSE2-NEXT:    sete %al
883; SSE2-NEXT:    retq
884;
885; SSE41-LABEL: test_v128i8:
886; SSE41:       # %bb.0:
887; SSE41-NEXT:    pand %xmm7, %xmm3
888; SSE41-NEXT:    pand %xmm5, %xmm1
889; SSE41-NEXT:    pand %xmm3, %xmm1
890; SSE41-NEXT:    pand %xmm6, %xmm2
891; SSE41-NEXT:    pand %xmm4, %xmm0
892; SSE41-NEXT:    pand %xmm2, %xmm0
893; SSE41-NEXT:    pand %xmm1, %xmm0
894; SSE41-NEXT:    pcmpeqd %xmm1, %xmm1
895; SSE41-NEXT:    ptest %xmm1, %xmm0
896; SSE41-NEXT:    setb %al
897; SSE41-NEXT:    retq
898;
899; AVX1-LABEL: test_v128i8:
900; AVX1:       # %bb.0:
901; AVX1-NEXT:    vandps %ymm3, %ymm1, %ymm1
902; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0
903; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
904; AVX1-NEXT:    vxorps %xmm1, %xmm1, %xmm1
905; AVX1-NEXT:    vcmptrueps %ymm1, %ymm1, %ymm1
906; AVX1-NEXT:    vptest %ymm1, %ymm0
907; AVX1-NEXT:    setb %al
908; AVX1-NEXT:    vzeroupper
909; AVX1-NEXT:    retq
910;
911; AVX2-LABEL: test_v128i8:
912; AVX2:       # %bb.0:
913; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
914; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
915; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
916; AVX2-NEXT:    vpcmpeqd %ymm1, %ymm1, %ymm1
917; AVX2-NEXT:    vptest %ymm1, %ymm0
918; AVX2-NEXT:    setb %al
919; AVX2-NEXT:    vzeroupper
920; AVX2-NEXT:    retq
921;
922; AVX512-LABEL: test_v128i8:
923; AVX512:       # %bb.0:
924; AVX512-NEXT:    vpandq %zmm1, %zmm0, %zmm0
925; AVX512-NEXT:    vpternlogd {{.*#+}} zmm1 = -1
926; AVX512-NEXT:    vpcmpneqd %zmm1, %zmm0, %k0
927; AVX512-NEXT:    kortestw %k0, %k0
928; AVX512-NEXT:    sete %al
929; AVX512-NEXT:    vzeroupper
930; AVX512-NEXT:    retq
931  %1 = call i8 @llvm.vector.reduce.and.v128i8(<128 x i8> %a0)
932  %2 = icmp eq i8 %1, -1
933  ret i1 %2
934}
935
936declare i64 @llvm.vector.reduce.and.v2i64(<2 x i64>)
937declare i64 @llvm.vector.reduce.and.v4i64(<4 x i64>)
938declare i64 @llvm.vector.reduce.and.v8i64(<8 x i64>)
939declare i64 @llvm.vector.reduce.and.v16i64(<16 x i64>)
940
941declare i32 @llvm.vector.reduce.and.v2i32(<2 x i32>)
942declare i32 @llvm.vector.reduce.and.v4i32(<4 x i32>)
943declare i32 @llvm.vector.reduce.and.v8i32(<8 x i32>)
944declare i32 @llvm.vector.reduce.and.v16i32(<16 x i32>)
945declare i32 @llvm.vector.reduce.and.v32i32(<32 x i32>)
946
947declare i16 @llvm.vector.reduce.and.v2i16(<2 x i16>)
948declare i16 @llvm.vector.reduce.and.v4i16(<4 x i16>)
949declare i16 @llvm.vector.reduce.and.v8i16(<8 x i16>)
950declare i16 @llvm.vector.reduce.and.v16i16(<16 x i16>)
951declare i16 @llvm.vector.reduce.and.v32i16(<32 x i16>)
952declare i16 @llvm.vector.reduce.and.v64i16(<64 x i16>)
953
954declare i8 @llvm.vector.reduce.and.v2i8(<2 x i8>)
955declare i8 @llvm.vector.reduce.and.v4i8(<4 x i8>)
956declare i8 @llvm.vector.reduce.and.v8i8(<8 x i8>)
957declare i8 @llvm.vector.reduce.and.v16i8(<16 x i8>)
958declare i8 @llvm.vector.reduce.and.v32i8(<32 x i8>)
959declare i8 @llvm.vector.reduce.and.v64i8(<64 x i8>)
960declare i8 @llvm.vector.reduce.and.v128i8(<128 x i8>)
961;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
962; AVX1OR2: {{.*}}
963; AVX512BW: {{.*}}
964; AVX512BWVL: {{.*}}
965; AVX512F: {{.*}}
966