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

Reply via email to