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?

Reply via email to