https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93354
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |wrong-code Priority|P3 |P1 Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2020-01-21 Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Target Milestone|--- |10.0 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Mine. The ultimate reason is the new partial def support and it's "conservative" use of alias-set zero. But in the end the way we validate redundant store removal is very fragile. With VN what we can easily prove is that for a store MEM = ...; the memory contents before the store are the same as after the store. The way we do this is that we could replace the above with MEM = MEM-using-alias-set-zero; now to be able to elide the store we have to prove the store does not change the dynamic type in a way affecting dependence analysis against earlier and later loads and stores. For the particular testcase the piecewise stores can be disambiguated against the later load which now picks up the earlier store to l.