1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-parallelize-loops=4 -fdump-tree-parloops2-details -fdump-tree-optimized" } */
3 
4 void abort (void);
5 
6 unsigned int x[500][500];
7 unsigned int y[500];
8 unsigned int g_sum=0;
9 
10 
11 void __attribute__((noinline))
init(int i,int j)12 init (int i, int j)
13 {
14   x[i][j]=1;
15 }
16 
17 void __attribute__((noinline))
parloop(int N)18 parloop (int N)
19 {
20   int i, j;
21   unsigned int sum;
22 
23   /* Outer loop reduction, outerloop is parallelized.  */
24   sum=0;
25   for (i = 0; i < N; i++)
26     {
27       for (j = 0; j < N; j++)
28 	y[i] += x[i][j];
29       sum += y[i];
30     }
31   g_sum = sum;
32 }
33 
34 int
main(void)35 main (void)
36 {
37   int i, j;
38   for (i = 0; i < 500; i++)
39     for (j = 0; j < 500; j++)
40       init (i, j);
41 
42   parloop (500);
43 
44   return 0;
45 }
46 
47 
48 /* Check that outer loop is parallelized.  */
49 /* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops2" } } */
50 /* { dg-final { scan-tree-dump-times "parallelizing inner loop" 0 "parloops2" } } */
51 /* { dg-final { scan-tree-dump-times "loopfn" 4 "optimized" } } */
52