Update concepts branch to revision 131834
[official-gcc.git] / gcc / testsuite / gcc.dg / tree-ssa / ldist-6.c
blob7a38c86832b0f90f933e8ca6dd57ef9af89ff0a3
1 /* { dg-do compile } */
2 /* { dg-options "-O2 -ftree-loop-distribution -fdump-tree-ldist-all" } */
4 int loop1 (int k)
6 unsigned int i;
7 int a[1000], b[1000], c[1000], d[1000];
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 */
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)
21 There are two partitions: {S1, S2, S3} and {S4}.
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],
28 {S4} is the consumer partition: it consumes the values from array "c" produced in S3.
30 The cost model should fuse all the tasks together as the cost of
31 fetching data from caches is too high.
34 return a[1000-2] + b[1000-1] + c[1000-2] + d[1000-2];
37 /* { dg-final { scan-tree-dump-times "distributed: split to 2 loops" 0 "ldist" } } */
38 /* { dg-final { cleanup-tree-dump "ldist" } } */