------- Comment #20 from rakdver at gcc dot gnu dot org 2005-12-06 15:43 ------- This patch should fix the problem:
Index: tree-scalar-evolution.c =================================================================== *** tree-scalar-evolution.c (revision 108078) --- tree-scalar-evolution.c (working copy) *************** follow_ssa_edge_in_rhs (struct loop *loo *** 1042,1047 **** --- 1042,1048 ---- t_bool res = t_false; tree rhs0, rhs1; tree type_rhs = TREE_TYPE (rhs); + tree evol; /* The RHS is one of the following cases: - an SSA_NAME, *************** follow_ssa_edge_in_rhs (struct loop *loo *** 1084,1097 **** { /* Match an assignment under the form: "a = b + c". */ res = follow_ssa_edge (loop, SSA_NAME_DEF_STMT (rhs0), halting_phi, ! evolution_of_loop, limit); if (res == t_true) *evolution_of_loop = add_to_evolution (loop->num, ! chrec_convert (type_rhs, *evolution_of_loop, at_stmt), PLUS_EXPR, rhs1); else if (res == t_false) --- 1085,1099 ---- { /* Match an assignment under the form: "a = b + c". */ + evol = *evolution_of_loop; res = follow_ssa_edge (loop, SSA_NAME_DEF_STMT (rhs0), halting_phi, ! &evol, limit); if (res == t_true) *evolution_of_loop = add_to_evolution (loop->num, ! chrec_convert (type_rhs, evol, at_stmt), PLUS_EXPR, rhs1); else if (res == t_false) -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25248