https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83041

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2017-11-20
           Assignee|unassigned at gcc dot gnu.org      |rguenth at gcc dot 
gnu.org
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Both references get alias-set zero.  Given we do not know the dynamic type of
'a'
there can be very well a struct A live at that point which means p might point
to a.  For g there cannot be a B at a because it won't fit.

We do not figure the "redundant" assignments because we're not able to
CSE p->a[0] to the previous a[0] store.  This "trick" is not implemented.

I think we have a duplicate bug for this looking like

void foo (int *p, int *q)
{
  *p = 1;
  *q = 1;
  return *p;
}

which we should be able to optimize to return 1.

Reply via email to