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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hubicka at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Well, the issue is that we end up with (for the simplest case):

  <bb 2> [local count: 357878152]:
  _15 = MEM <const double[2]> [(const value_type &)arg_3(D)][0];
  _16 = MEM <const double[2]> [(value_type &)out_2(D)][0];
  _17 = _15 + _16;
  MEM <const double[2]> [(value_type &)out_2(D)][0] = _17;
  _22 = MEM <const double[2]> [(const value_type &)arg_3(D)][1];
  _23 = MEM <const double[2]> [(value_type &)out_2(D)][1];
  _24 = _22 + _23;
  MEM <const double[2]> [(value_type &)out_2(D)][1] = _24;
  return;

and the first store into out[0] can end up writing to arg[1].  I don't see
what we can easily do here.  Path based disambiguation could maybe argue
that partial overlaps of value_type are not allowed.

Reply via email to