http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57361

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-05-22
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Assignment expansion makes this optimization:

  /* Optimize away no-op moves without side-effects.  */
  if (operand_equal_p (to, from, 0))
    return;

The operand_equal_p implementation looks safe at the moment (even in terms
of type-based aliasing rules).

I'd have done a more aggressive optimization in DSE, doing

  if (stmt_kills_ref_p (stmt, gimple_assign_rhs1 (stmt)))
    ... must be a self-assignment ...

which would definitely need extra care for self-assignments that change
the effective type of a memory location.  Though I have a hard time
creating a testcase that would exhibit sth like

  MEM[(struct X *)q_1] = MEM[(struct Y *)q_1];

which would change the dynamic type of *q_1 to X from Y.

Reply via email to