------- Comment #9 from rguenth at gcc dot gnu dot org 2006-10-14 10:40 ------- Much simpler testcase:
void foo(int); void solver(int cr) { int x, y, n; for (y = 0; y < cr; y++) for (x = 0; x < cr; x++) { for (n = 0; n < cr; n++) ; foo(cr*cr); } } t35.copyprop1: ;; Function solver (solver) solver (cr) { int n; int y; int x; int D.1293; <bb 0>: goto <bb 6> (<L7>); <L2>:; n_11 = n_3 + 1; # n_3 = PHI <0(4), n_11(1)>; <L3>:; if (n_3 < cr_5) goto <L2>; else goto <L4>; <L4>:; D.1293_9 = cr_5 * cr_5; foo (D.1293_9); x_10 = x_1 + 1; # x_1 = PHI <0(6), x_10(3)>; <L5>:; if (x_1 < cr_5) goto <L3>; else goto <L6>; <L6>:; y_7 = y_2 + 1; # y_2 = PHI <0(0), y_7(5)>; <L7>:; if (y_2 < cr_5) goto <L5>; else goto <L8>; <L8>:; return; } t36.vrp1: solver (cr) { int n; int y; int x; int D.1293; <bb 0>: goto <bb 6> (<L7>); <L2>:; n_11 = n_3 + 1; # n_3 = PHI <0(4), n_11(1)>; <L3>:; if (n_3 < cr_5) goto <L2>; else goto <L4>; <L4>:; D.1293_9 = cr_5 * cr_13; foo (D.1293_9); x_10 = x_1 + 1; # x_1 = PHI <0(6), x_10(3)>; <L5>:; if (x_1 < cr_5) goto <L3>; else goto <L6>; <L6>:; y_7 = y_2 + 1; # y_2 = PHI <0(0), y_7(5)>; <L7>:; if (y_2 < cr_5) goto <L5>; else goto <L8>; <L8>:; return; } (this smells like a tree sharing issue). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28545