]> git.ipfire.org Git - thirdparty/gcc.git/commit
Feed results of IPA-CP into tree value numbering
authorMartin Jambor <mjambor@suse.cz>
Tue, 15 Aug 2023 15:26:13 +0000 (17:26 +0200)
committerMartin Jambor <mjambor@suse.cz>
Tue, 15 Aug 2023 15:40:42 +0000 (17:40 +0200)
commitd073e2d75d9ed492de9a8dc6970e5b69fae20e5a
treed871cd9e238186daa63488ced159dbd0991c1ce6
parent4acce4c4e53ae93ab8e7dad2ca9099e45559a541
Feed results of IPA-CP into tree value numbering

PRs 68930 and 92497 show that when IPA-CP figures out constants in
aggregate parameters or when passed by reference but the loads happen
in an inlined function the information is lost.  This happens even
when the inlined function itself was known to have - or even cloned to
have - such constants in incoming parameters because the transform
phase of IPA passes is not run on them.  See discussion in the bugs
for reasons why.

Honza suggested that we can plug the results of IPA-CP analysis into
value numbering, so that FRE can figure out that some loads fetch
known constants.  This is what this patch attempts to do.  The patch
does not attempt to populate partial_defs with information from
IPA-CP, this can be hopefully added as a follow-up.

gcc/ChangeLog:

2023-08-11  Martin Jambor  <mjambor@suse.cz>

PR ipa/68930
PR ipa/92497
* ipa-prop.h (ipcp_get_aggregate_const): Declare.
* ipa-prop.cc (ipcp_get_aggregate_const): New function.
(ipcp_transform_function): Do not deallocate transformation info.
* tree-ssa-sccvn.cc: Include alloc-pool.h, symbol-summary.h and
ipa-prop.h.
(vn_reference_lookup_2): When hitting default-def vuse, query
IPA-CP transformation info for any known constants.

gcc/testsuite/ChangeLog:

2023-06-07  Martin Jambor  <mjambor@suse.cz>

PR ipa/68930
PR ipa/92497
* gcc.dg/ipa/pr92497-1.c: New test.
* gcc.dg/ipa/pr92497-2.c: Likewise.
gcc/ipa-prop.cc
gcc/ipa-prop.h
gcc/testsuite/gcc.dg/ipa/pr92497-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/ipa/pr92497-2.c [new file with mode: 0644]
gcc/tree-ssa-sccvn.cc