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)12init (int i, int j) 13 { 14 x[i][j]=1; 15 } 16 17 void __attribute__((noinline)) parloop(int N)18parloop (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)35main (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