1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
3 /* { dg-require-effective-target powerpc_p8vector_ok } */
4 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
5 /* { dg-options "-mcpu=power8 -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */
6 
7 #ifndef SIZE
8 #define SIZE 1024
9 #endif
10 
11 #ifndef ALIGN
12 #define ALIGN 32
13 #endif
14 
15 #ifndef ATTR_ALIGN
16 #define ATTR_ALIGN __attribute__((__aligned__(ALIGN)))
17 #endif
18 
19 #ifndef TYPE
20 #define TYPE unsigned int
21 #endif
22 
23 TYPE in1  [SIZE] ATTR_ALIGN;
24 TYPE in2  [SIZE] ATTR_ALIGN;
25 TYPE eqv  [SIZE] ATTR_ALIGN;
26 TYPE nand1[SIZE] ATTR_ALIGN;
27 TYPE nand2[SIZE] ATTR_ALIGN;
28 TYPE orc1 [SIZE] ATTR_ALIGN;
29 TYPE orc2 [SIZE] ATTR_ALIGN;
30 
31 void
do_eqv(void)32 do_eqv (void)
33 {
34   unsigned long i;
35 
36   for (i = 0; i < SIZE; i++)
37     {
38       eqv[i] = ~(in1[i] ^ in2[i]);
39     }
40 }
41 
42 void
do_nand1(void)43 do_nand1 (void)
44 {
45   unsigned long i;
46 
47   for (i = 0; i < SIZE; i++)
48     {
49       nand1[i] = ~(in1[i] & in2[i]);
50     }
51 }
52 
53 void
do_nand2(void)54 do_nand2 (void)
55 {
56   unsigned long i;
57 
58   for (i = 0; i < SIZE; i++)
59     {
60       nand2[i] = (~in1[i]) | (~in2[i]);
61     }
62 }
63 
64 void
do_orc1(void)65 do_orc1 (void)
66 {
67   unsigned long i;
68 
69   for (i = 0; i < SIZE; i++)
70     {
71       orc1[i] = (~in1[i]) | in2[i];
72     }
73 }
74 
75 void
do_orc2(void)76 do_orc2 (void)
77 {
78   unsigned long i;
79 
80   for (i = 0; i < SIZE; i++)
81     {
82       orc1[i] = in1[i] | (~in2[i]);
83     }
84 }
85 
86 /* { dg-final { scan-assembler-times "xxleqv"  1 } } */
87 /* { dg-final { scan-assembler-times "xxlnand" 2 } } */
88 /* { dg-final { scan-assembler-times "xxlorc"  2 } } */
89