http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47738
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rakdver at gcc dot gnu.org --- Comment #3 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-02-16 12:32:43 UTC --- We are removing the definition of D.2738_12 in remove_stmt but the PHI use which was created by tree_transform_and_unroll_loop is not in the list of stmts to be removed. It is created by PHI copying of tree_transform_and_unroll_loop phi_rest = create_phi_node (new_init, rest); SSA_NAME_DEF_STMT (new_init) = phi_rest; add_phi_arg (phi_rest, init, precond_edge, UNKNOWN_LOCATION); add_phi_arg (phi_rest, next, new_exit, UNKNOWN_LOCATION); SET_USE (op, new_init); } remove_path (exit); >From tree_transform_and_unroll_loop we call execute_pred_commoning_cbck /* Transform the loop. */ if (transform) (*transform) (loop, data); which also does the stmt removal, then we verify SSA form in ok = gimple_duplicate_loop_to_header_edge (loop, loop_latch_edge (loop), factor - 1, wont_exit, new_exit, &to_remove, DLTHE_FLAG_UPDATE_FREQ); which fails. I wonder if the simplest fix is to kill that stmt removal code as it looks like unconditionally removing the loads isn't going to work for the peeled iterations. Zdenek?