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

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Before store-merging we have:
  MEM[(int *)&arr] = { 5, 4, 3, 2 };
  t_2 = arr[0];
  _65 = arr[1];
  _69 = arr[2];
  _73 = arr[3];
  arr[0] = _69;
  arr[1] = _73;
  arr[2] = 1;
  arr[3] = t_2;
  vect__2.5_38 = MEM[(int *)&arr];
and all store-merging can do with this is what it does:
  MEM[(int *)&arr] = { 5, 4, 3, 2 };
  t_2 = arr[0];
  _65 = arr[1];
  _69 = arr[2];
  _73 = arr[3];
  _46 = MEM[(int *)&arr + 8B];
  MEM[(int *)&arr] = _46;
  arr[2] = 1;
  arr[3] = t_2;
  vect__2.5_38 = MEM[(int *)&arr];
where the _69 and _73 sets can be DCEd later.  store-merging has no framework
like FRE to do analysis what memory location contains at which point.
So we'd need another late FRE pass to handle this?

Reply via email to