https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102982
--- Comment #4 from hubicka at kam dot mff.cuni.cz --- > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102982 > > Richard Biener <rguenth at gcc dot gnu.org> changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > Status|UNCONFIRMED |NEW > Keywords| |missed-optimization > Target Milestone|--- |12.0 > Ever confirmed|0 |1 > CC| |hubicka at gcc dot gnu.org, > | |jamborm at gcc dot gnu.org, > | |marxin at gcc dot gnu.org > Last reconfirmed| |2021-10-28 > Component|tree-optimization |ipa > > --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- > I'd say that's indeed "unfortunate". The main missing optimization though is > treating > > c[0][0][0] = 0; > > as a "store" when trying to make 'c' constant, not realizing it stores the > same value as the static initializer (after making it readonly we'd have to > elide all such stores though). That would fix the testcase as to what > is likely the desired trigger of the foo() call removal. > > Honza/Martin? That is probably not too hard to pattern match. One needs a flag in ipa-ref marking a fact that the store is constant 0 and at IPA time ignore it for read/write analysis. One catch is that once it becomes readonly we should optimize out all stores and if we want to play well with -disable-tree-XYZ we will want specific transform pass for that. Also if ipa-prop was extended to handle stores/loads to static variables as "fake arguments" of functions, perhaps we could get this more systematic. Honza