]> git.ipfire.org Git - thirdparty/gcc.git/commit
sra: Fix bug in grp_write propagation (PR 97009)
authorMartin Jambor <mjambor@suse.cz>
Thu, 1 Apr 2021 08:12:23 +0000 (10:12 +0200)
committerMartin Jambor <mjambor@suse.cz>
Thu, 1 Apr 2021 08:12:23 +0000 (10:12 +0200)
commit19d71674616e6494a60432a2a28adcd762a6c877
tree6d6e09f90303c5a2b4815625429e2eb59232d494
parentd7cef070bf43bfb3f3d77bac42eadea06c4b0281
sra: Fix bug in grp_write propagation (PR 97009)

SRA represents parts of aggregates which are arrays accessed with
unknown index as "unscalarizable regions."  When there are two such
regions one within another and the outer is only read whereas the
inner is written to, SRA fails to propagate that write information
across assignments.  This means that a second aggregate can contain
data while SRA thinks it does not and the pass can wrongly eliminate
big chunks of assignment from that second aggregate into a third
aggregate, which is what happens in PR 97009.

Fixed by checking all children of unscalariable accesses for the
grp_write flag.

gcc/ChangeLog:

2021-03-31  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/97009
* tree-sra.c (access_or_its_child_written): New function.
(propagate_subaccesses_from_rhs): Use it instead of a simple grp_write
test.

gcc/testsuite/ChangeLog:

2021-03-31  Martin Jambor  <mjambor@suse.cz>

PR tree-optimization/97009
* gcc.dg/tree-ssa/pr97009.c: New test.
gcc/testsuite/gcc.dg/tree-ssa/pr97009.c [new file with mode: 0644]
gcc/tree-sra.c