SRA: Limit replacement creation for accesses propagated from LHSs
authorMartin Jambor <mjambor@suse.cz>
Wed, 19 Oct 2022 12:43:04 +0000 (14:43 +0200)
committerMartin Jambor <mjambor@suse.cz>
Wed, 19 Oct 2022 12:58:30 +0000 (14:58 +0200)
commitf6c168f8c06047bfaa3005e570126831b8855dcc
tree461a834966c21517f33794719bfc4d438cbe15d3
parentcb994acc08b67f26a54e7c5dc1f4995a2ce24d98
SRA: Limit replacement creation for accesses propagated from LHSs

PR 107206 is fallout from the fix to PR 92706 where we started
propagating accesses across assignments also from LHS to RHS of
assignments so that we would not do harmful total scalarization of the
aggregates on the RHS.

But this can lead to new scalarization of these aggregates and in the
testcase of PR 107206 these can appear in superfluous uses of
un-initialized values and spurious warnings.

Fixed by making sure the the accesses created by propagation in this
direction are only used as a basis for replacements when the structure
would be totally scalarized anyway.

gcc/ChangeLog:

2022-10-18  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/107206
* tree-sra.cc (struct access): New field grp_result_of_prop_from_lhs.
(analyze_access_subtree): Do not create replacements for accesses with
this flag when not toally scalarizing.
(propagate_subaccesses_from_lhs): Set the new flag.

gcc/testsuite/ChangeLog:

2022-10-18  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/107206
* g++.dg/tree-ssa/pr107206.C: New test.
gcc/testsuite/g++.dg/tree-ssa/pr107206.C [new file with mode: 0644]
gcc/tree-sra.cc