diff options
author | Richard Biener <rguenther@suse.de> | 2022-09-21 13:52:56 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-09-22 13:10:15 +0200 |
commit | 9baee6181b4e427e0b5ba417e51424c15858dce7 (patch) | |
tree | 182ea662a6fff98f9b8cf60ef8479fe4cd43eefb /libjava/java/io/NotActiveException.h | |
parent | 66d20d881647e7dd177355a851d7839394ab8341 (diff) | |
download | gcc-9baee6181b4e427e0b5ba417e51424c15858dce7.zip gcc-9baee6181b4e427e0b5ba417e51424c15858dce7.tar.gz gcc-9baee6181b4e427e0b5ba417e51424c15858dce7.tar.bz2 |
tree-optimization/106922 - missed FRE/PRE
The following enhances the store-with-same-value trick in
vn_reference_lookup_3 by not only looking for
a = val;
*ptr = val;
.. = a;
but also
*ptr = val;
other = x;
.. = a;
where the earlier store is more than one hop away. It does this
by queueing the actual value to compare until after the walk but
as disadvantage only allows a single such skipped store from a
constant value.
Unfortunately we cannot handle defs from non-constants this way
since we're prone to pick up values from the past loop iteration
this way and we have no good way to identify values that are
invariant in the currently iterated cycle. That's why we keep
the single-hop lookup for those cases. gcc.dg/tree-ssa/pr87126.c
would be a testcase that's un-XFAILed when we'd handle those
as well.
PR tree-optimization/106922
* tree-ssa-sccvn.cc (vn_walk_cb_data::same_val): New member.
(vn_walk_cb_data::finish): Perform delayed verification of
a skipped may-alias.
(vn_reference_lookup_pieces): Likewise.
(vn_reference_lookup): Likewise.
(vn_reference_lookup_3): When skipping stores of the same
value also handle constant stores that are more than a
single VDEF away by delaying the verification.
* gcc.dg/tree-ssa/ssa-fre-100.c: New testcase.
* g++.dg/tree-ssa/pr106922.C: Adjust.
Diffstat (limited to 'libjava/java/io/NotActiveException.h')
0 files changed, 0 insertions, 0 deletions