https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113964
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jamborm at gcc dot gnu.org
Priority|P3 |P2
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
No, I think the issue is that ESRA leaves e.f0 alone:
e$f3_7 = e.f3;
e$f0$f4_8 = e.f0.f4;
_1 = e$f0$f4_8;
_2 = (unsigned char) _1;
e$f3_9 = _2;
e.f0 = g_50;
e$f3_10 = MEM <uint8_t> [(struct S1 *)&g_50];
e$f0$f4_11 = MEM <int32_t> [(struct S1 *)&g_50 + 24B];
MEM <uint8_t> [(union U8 *)&e] = e$f3_10;
MEM <int32_t> [(union U8 *)&e + 24B] = e$f0$f4_11;
g_16 = e.f0;
it looks like it materializes the e.f0 = g_15 copy but fails to elide that
(maybe assuming sth else will?)? And then for some reason the final
g_16 = e.f90 copy isn't replaced?!
So somehow SRAs heuristics go off.
Martin?