https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114774
Jan Hubicka <hubicka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Missed DSE in simple code |Missed DSE in simple code
|due to other stores being |due to interleaving sotres
|conditional |
--- Comment #1 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
the other store being conditional is not the core issue. Here we miss DSE too:
#include <stdio.h>
int a;
short p,q;
void
test (int b)
{
a=1;
if (b)
p++;
else
q++;
a=2;
}
The problem in DSE seems to be that instead of recursively walking the
memory-SSA graph it insist the graph to form a chain. Now SRA leaves stores to
scalarized variables and even removes the corresponding clobbers, so this is
relatively common scenario in non-trivial C++ code.