| /* APPLE LOCAL file lno */ |
| /* { dg-do compile } */ |
| /* { dg-options "-O1 -floop-test -fdump-tree-lptest-details" } */ |
| |
| |
| int main () |
| { |
| int a = 1; |
| int b = 2; |
| int c = 0; |
| int d = 5; |
| int e; |
| |
| while (a) |
| { |
| /* The following statement produces the evolution function: |
| (add_to_evolution |
| loop_num = 1 |
| chrec_before = 1 |
| to_add = {{2, +, 0}_1, +, 10}_1 |
| res = {{{1, +, 2}_1, +, 0}_1, +, 10}_1 |
| ) |
| Note that the evolution of B in the inner loop_2 is not |
| relevant to the evolution of A in the loop_1. */ |
| a += b; |
| |
| /* And finally the following statement produces the expected scev: |
| (add_to_evolution |
| loop_num = 1 |
| chrec_before = {{{1, +, 2}_1, +, 0}_1, +, 10}_1 |
| to_add = {5, +, 9}_1 |
| res = {{{1, +, 7}_1, +, 9}_1, +, 10}_1 |
| ) |
| That ends this not so formal proof ("CQFD" in french ;-). */ |
| a += d; |
| |
| for (e = 0; e < 10; e++) |
| b += c; |
| /* After having analyzed this loop, the overall effect is added to the evolution of b. |
| This corresponds to the following operation: |
| (add_to_evolution |
| loop_num = 1 |
| chrec_before = {2, +, {0, +, 1}_1}_2 |
| to_add = {0, +, 10}_1 |
| res = {{{2, +, 0}_1, +, 10}_1, +, {0, +, 1}_1}_2 |
| ). |
| Note that the variable c has not yet been updated in the loop, and thus its value |
| at this version is "{0, +, 1}_1". Since the loop_2 runs exactly 10 times, the overall |
| effect of the loop is "10 * {0, +, 1}_1": that is the TO_ADD argument. |
| */ |
| |
| c += 1; |
| d += 9; |
| } |
| } |
| |
| /* |
| c -> {0, +, 1}_1 |
| e -> {0, +, 1}_2 |
| b -> {{2, +, 0, +, 10}_1, +, {0, +, 1}_1}_2 |
| d -> {5, +, 9}_1 |
| a -> {1, +, 7, +, 9, +, 10}_1 |
| */ |
| |
| /* FIXME. */ |