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

--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
On the original testcase, the reason why dse3 doesn't help is we have:
  a[4] = 1;
  _4 = *c.0_1;
  a[5] = _4;
  a[3] = 1;
  e = 0;
  a[8] = 0;
  MEM <vector(4) int> [(int *)&a + 16B] = { 0, 0, 0, 0 };
and c.0_1 might alias the a array, so dse3 removes a[5] store as redundant, but
only later cddce removes the _4 = *c.0_1 load and only then the a[4] = 1; store
could be also removed (i.e. it would require iteration, or performing some kind
of (cheap) dce in the dse pass after removing each store).

Reply via email to