[Bug tree-optimization/77485] Missed dead store elimination of aggregate store followed by partial stores
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Sep 6 08:05:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77485
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-09-06
CC| |law at gcc dot gnu.org,
| |rguenth at gcc dot gnu.org
Component|c++ |tree-optimization
Summary|Missed dead store |Missed dead store
|elimination when returning |elimination of aggregate
|constexpr generated data |store followed by partial
| |stores
Ever confirmed|0 |1
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
I think we have a duplicate for this somewhere -- our DSE cannot handle the
situation where a larger store is made dead by several following smaller ones.
We have
auto foo() ()
{
<bb 2>:
<retval> = {};
<retval>.buf[0] = 48;
<retval>.buf[1] = 32;
<retval>.buf[2] = 49;
<retval>.buf[3] = 32;
...
<retval>.buf[29] = 49;
<retval>.buf[30] = 51;
return <retval>;
}
here. I believe Jeff had some patches in this area (that I didn't like too
much)
that would maybe have handled this special case.
Note that integrating (some) "DSE" into SRA could allow to handle the case of
a single byte not being written twice and thus decompose the large initializer.
Note it's even harder to catch the case of an aggregate init which also covers
struct padding vs. initializing all fields (but obviously not the padding).
More information about the Gcc-bugs
mailing list