https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100314
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Version|unknown |12.0 Last reconfirmed|2021-09-25 00:00:00 |2022-1-11 CC| |hubicka at gcc dot gnu.org, | |jamborm at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- the key is to notice that 'a' is not modified and thus zero and propagate that to 'd'. With -O3 IPA figures out 'a' is not modified but that isn't taken into account by IPA CP which sees a.0_1 = a; d (a.0_1); with -O1 we happen to inline everything during IPA and nothing early while with -O3 'e' is early inlined into 'd' (but not d into main) and IPA refuses to inline d into main: t.c:18:3: missed: not inlinable: main/7 -> d/6, --param large-stack-frame-growth limit reached sth is off with the stack limit I guess, maybe it's not cummulated correctly at -O1.