OSDN Git Service

* tree-loop-linear.c (try_interchange_loops): Compare memory access
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / tree-ssa / ldist-6.c
1 /* { dg-do compile } */ 
2 /* { dg-options "-O2 -ftree-loop-distribution -fdump-tree-ldist-all" } */
3
4 int loop1 (int k)
5 {
6   unsigned int i;
7   int a[1000], b[1000], c[1000], d[1000];
8
9   for (i = 2; i < (1000-1); i ++) {
10     a[i] = k * i; /* S1 */
11     b[i] = a[i-2] + k; /* S2 */
12     c[i] = b[i-1] + a[i+1]; /* S3 */
13     d[i] = c[i-1] + k + i; /* S4 */
14   }
15   /* Dependences:
16      S1->S2 (flow, level 1)
17      S2->S3 (flow, level 1)
18      S3->S1 (anti, level 1)
19      S3->S4 (flow, level 1)
20
21     There are two partitions: {S1, S2, S3} and {S4}.
22
23     {S1, S2, S3} have to be in the same partition because:
24     - S1 (i) has to be executed before S2 (i+2), as S1 produces a[i] that is then consumed 2 iterations later by S2.
25     - S2 (i) has to be executed before S3 (i+1), as S2 produces b[i] that is then consumed one iteration later by S3,
26     - S3 (i) has to be executed before S1 (i+1), as a[i+1] has to execute before the update to a[i],
27
28     {S4} is the consumer partition: it consumes the values from array "c" produced in S3.
29
30     The cost model should fuse all the tasks together as the cost of
31     fetching data from caches is too high.
32   */
33
34   return a[1000-2] + b[1000-1] + c[1000-2] + d[1000-2];
35 }
36
37 /* { dg-final { scan-tree-dump-times "distributed: split to 2 loops" 0 "ldist" } } */
38 /* { dg-final { cleanup-tree-dump "ldist" } } */