diff options
author | Richard Biener <rguenther@suse.de> | 2022-08-10 12:54:05 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-08-11 08:51:45 +0200 |
commit | 757fd34803b7ae0eb3705315060e5fbba1148c5c (patch) | |
tree | 7da42d7a63689585d8450a18b9eba425781d1228 /gcc/tree-ssa-phiopt.cc | |
parent | b22086c261f20a7576f233db3537ccf192e7160c (diff) | |
download | gcc-757fd34803b7ae0eb3705315060e5fbba1148c5c.zip gcc-757fd34803b7ae0eb3705315060e5fbba1148c5c.tar.gz gcc-757fd34803b7ae0eb3705315060e5fbba1148c5c.tar.bz2 |
Fix path query compute_imports for external path
The following fixes the use of compute_imports from the backwards
threader which ends up accessing stale m_path from a previous
threading attempt. The fix is to pass in the path explicitely
(and not the exit), and initializing it with the exit around this
call from the backwards threader. That unfortunately exposed that
we rely on this broken behavior as the new testcase shows. The
missed threading can be restored by registering all relations
from conditions on the path during solving, for the testcase the
particular important case is for relations provided by the path
entry conditional.
I've verified that the GORI query for imported ranges on edges
is not restricted this way.
This regresses the new ssa-thread-19.c testcase which is exactly
a case for the other patch re-doing how we compute imports since
this misses imports for defs that are not on the dominating path
from the exit.
That's one of the cases this regresses (it also progresses a few
due to more or the correct relations added). Overall it
reduces the number of threads from 98649 to 98620 on my set of
cc1files. I think it's a reasonable intermediate step to find
a stable, less random ground to compare stats to.
* gimple-range-path.h (path_range_query::compute_imports):
Take path as argument, not the exit block.
* gimple-range-path.cc (path_range_query::compute_imports):
Likewise, and adjust, avoiding possibly stale m_path.
(path_range_query::compute_outgoing_relations): Register
relations for all conditionals.
* tree-ssa-threadbackward.cc (back_threader::find_paths):
Adjust.
* gcc.dg/tree-ssa/ssa-thread-18.c: New testcase.
* gcc.dg/tree-ssa/ssa-thread-19.c: Likewise, but XFAILed.
Diffstat (limited to 'gcc/tree-ssa-phiopt.cc')
0 files changed, 0 insertions, 0 deletions