Fix availability compute during VN DOM elimination
authorRichard Biener <rguenther@suse.de>
Fri, 8 May 2020 08:24:37 +0000 (10:24 +0200)
committerRichard Biener <rguenther@suse.de>
Fri, 8 May 2020 11:34:03 +0000 (13:34 +0200)
commit2b42509f8b7bdf0a27a6687a941663380b485416
treea4fe62b429dae15a1ff1c0725b1af8a28d48ac40
parent1595a1cb7bfac8d5a6026d5d6f3a495be0391506
Fix availability compute during VN DOM elimination

This fixes an issue with redundant store elimination in FRE/PRE
which, when invoked by the DOM elimination walk, ends up using
possibly stale availability data from the RPO walk.  It also
fixes a missed optimization during valueization of addresses
by making sure to use get_addr_base_and_unit_offset_1 which can
valueize and adjusting that to also valueize ARRAY_REFs low-bound.

2020-05-08  Richard Biener  <rguenther@suse.de>

* tree-ssa-sccvn.c (rpo_avail): Change type to
eliminate_dom_walker *.
(eliminate_with_rpo_vn): Adjust rpo_avail to make vn_valueize
use the DOM walker availability.
(vn_reference_fold_indirect): Use get_addr_base_and_unit_offset_1
with vn_valueize as valueization callback.
(vn_reference_maybe_forwprop_address): Likewise.
* tree-dfa.c (get_addr_base_and_unit_offset_1): Also valueize
array_ref_low_bound.

* gnat.dg/opt83.adb: New testcase.
gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/opt83.adb [new file with mode: 0644]
gcc/tree-dfa.c
gcc/tree-ssa-sccvn.c