| /* { dg-do run } */ |
| /* { dg-options "-O2 -ftree-loop-distribution" } */ |
| |
| /* Checks if loop distribution works correctly if the subscript used |
| is assigned to a loop invariant value. */ |
| |
| extern void abort (void); |
| struct S { int a; int b; int c; }; |
| |
| int get_rr_node_index (int i) |
| { |
| return i; |
| } |
| |
| struct S nodes[8]; |
| struct S *rr_node = nodes; |
| volatile int io_rat = 2; |
| void |
| doit (int i, int j) |
| { |
| int s_node, p_node, inode, ipad, iloop; |
| |
| for (ipad = 0; ipad < io_rat; ipad++) |
| { |
| p_node = get_rr_node_index (ipad+2); |
| inode = get_rr_node_index (ipad); |
| |
| for (iloop = 1; iloop <= 2; iloop++) |
| { |
| rr_node[inode].a = i; |
| rr_node[inode].b = j; |
| rr_node[inode].c = ipad; |
| inode = p_node; |
| } |
| } |
| } |
| |
| int |
| main () |
| { |
| int i; |
| |
| doit (1, 2); |
| |
| if (rr_node[0].a != rr_node[1].a |
| || rr_node[2].a != rr_node[3].a |
| || rr_node[1].a != 1 |
| || rr_node[0].b != rr_node[1].b |
| || rr_node[2].b != rr_node[3].b |
| || rr_node[1].b != 2 |
| || rr_node[0].c != 0 |
| || rr_node[1].c != 1 |
| || rr_node[2].c != 0 |
| || rr_node[3].c != 1) |
| abort (); |
| |
| return 0; |
| } |