OSDN Git Service

PR tree-optimization/40238
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / vect / slp-2.c
1 /* { dg-require-effective-target vect_int } */
2
3 #include <stdarg.h>
4 #include <stdio.h>
5 #include "tree-vect.h"
6
7 #define N 128 
8
9 int
10 main1 (unsigned short a0, unsigned short a1, unsigned short a2, 
11        unsigned short a3, unsigned short a4, unsigned short a5,
12        unsigned short a6, unsigned short a7, unsigned short a8,
13        unsigned short a9, unsigned short a10, unsigned short a11,
14        unsigned short a12, unsigned short a13, unsigned short a14,
15        unsigned short a15)
16 {
17   int i;
18   unsigned short out[N*16];
19
20   for (i = 0; i < N; i++)
21     {
22       out[i*4] = a8;
23       out[i*4 + 1] = a1;
24       out[i*4 + 2] = a2;
25       out[i*4 + 3] = a3;
26     }
27
28   /* check results:  */
29   for (i = 0; i < N; i++)
30     {
31       if (out[i*4] != a8 
32          || out[i*4 + 1] != a1
33          || out[i*4 + 2] != a2
34          || out[i*4 + 3] != a3)
35         abort ();
36     }
37
38   for (i = 0; i < N; i++)
39     {
40       out[i*16] = a8;
41       out[i*16 + 1] = a7;
42       out[i*16 + 2] = a1;
43       out[i*16 + 3] = a2;
44       out[i*16 + 4] = a8;
45       out[i*16 + 5] = a5;
46       out[i*16 + 6] = a5;
47       out[i*16 + 7] = a4;
48       out[i*16 + 8] = a12;
49       out[i*16 + 9] = a13;
50       out[i*16 + 10] = a14;
51       out[i*16 + 11] = a15;
52       out[i*16 + 12] = a6;
53       out[i*16 + 13] = a9;
54       out[i*16 + 14] = a0;
55       out[i*16 + 15] = a7;
56     }
57
58   /* check results:  */
59   for (i = 0; i < N; i++)
60     {
61       if (out[i*16] != a8
62           || out[i*16 + 1] != a7
63           || out[i*16 + 2] != a1
64           || out[i*16 + 3] != a2
65           || out[i*16 + 4] != a8
66           || out[i*16 + 5] != a5
67           || out[i*16 + 6] != a5
68           || out[i*16 + 7] != a4
69           || out[i*16 + 8] != a12
70           || out[i*16 + 9] != a13
71           || out[i*16 + 10] != a14
72           || out[i*16 + 11] != a15
73           || out[i*16 + 12] != a6
74           || out[i*16 + 13] != a9
75           || out[i*16 + 14] != a0
76           || out[i*16 + 15] != a7)
77         abort ();
78     }
79
80   /* SLP with unrolling by 8.  */
81   for (i = 0; i < N; i++)
82     {
83       out[i*3] = a8;
84       out[i*3 + 1] = a1;
85       out[i*3 + 2] = a2;
86     }
87
88   /* check results:  */
89   for (i = 0; i < N; i++)
90     {
91       if (out[i*3] != a8
92          || out[i*3 + 1] != a1
93          || out[i*3 + 2] != a2)
94         abort ();
95     }
96
97   /* SLP with unrolling by 8.  */
98   for (i = 0; i < N; i++)
99     {
100       out[i*11] = a8;
101       out[i*11 + 1] = a7;
102       out[i*11 + 2] = a1;
103       out[i*11 + 3] = a2;
104       out[i*11 + 4] = a8;
105       out[i*11 + 5] = a5;
106       out[i*11 + 6] = a5;
107       out[i*11 + 7] = a4;
108       out[i*11 + 8] = a12;
109       out[i*11 + 9] = a13;
110       out[i*11 + 10] = a14;
111     }
112
113   /* check results:  */
114   for (i = 0; i < N; i++)
115     {
116       if (out[i*11] != a8
117           || out[i*11 + 1] != a7
118           || out[i*11 + 2] != a1
119           || out[i*11 + 3] != a2
120           || out[i*11 + 4] != a8
121           || out[i*11 + 5] != a5
122           || out[i*11 + 6] != a5
123           || out[i*11 + 7] != a4
124           || out[i*11 + 8] != a12
125           || out[i*11 + 9] != a13
126           || out[i*11 + 10] != a14)
127         abort ();
128     }
129
130
131   return 0;
132 }
133
134 int main (void)
135 {
136   check_vect ();
137
138   main1 (15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0);
139
140   return 0;
141 }
142
143 /* { dg-final { scan-tree-dump-times "vectorized 4 loops" 1 "vect"  } } */
144 /* { dg-final { scan-tree-dump-times "vectorizing stmts using SLP" 4 "vect"  } } */
145 /* { dg-final { cleanup-tree-dump "vect" } } */
146