------- Additional Comments From steven at gcc dot gnu dot org 2005-05-10 14:14 ------- This is IVopts producing unresolvable overlapping live ranges again: t.c.t56.cunroll: foo () { unsigned int pretmp.1; unsigned int pretmp.0; unsigned int j; unsigned int i; unsigned int D.1572; unsigned int D.1571; <bb 0>: # i_12 = PHI <i_9(3), 1(0)>; <L0>:; D.1571_7 = i_12 * 3; j_8 = D.1571_7 + 2; bar (j_8); i_9 = i_12 + 1; if (i_9 <= 29) goto <L7>; else goto <L2>; <L7>:; goto <bb 1> (<L0>); # j_3 = PHI <j_8(1)>; <L2>:; return j_3; } t.c.t57.ivopts: foo () { unsigned int ivtmp.6; unsigned int pretmp.1; unsigned int pretmp.0; unsigned int j; unsigned int i; unsigned int D.1572; unsigned int D.1571; <bb 0>: # ivtmp.6_1 = PHI <ivtmp.6_2(3), 5(0)>; <L0>:; j_8 = ivtmp.6_1; bar (j_8); ivtmp.6_2 = ivtmp.6_1 + 3; if (ivtmp.6_2 != 92) goto <L7>; else goto <L2>; <L7>:; goto <bb 1> (<L0>); # j_3 = PHI <j_8(1)>; <L2>:; return j_3; } Because j_8 escapes from the loop and ivtmp is modified after j_8, we have this problem.
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21488