diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2022-08-17 17:47:21 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2022-08-17 20:14:02 +0200 |
commit | 5adfb6540db95da5faf1f77fbe9ec38b4cf8eb1f (patch) | |
tree | 0548abb2f313400f6b67235d22559949b4ae6b76 /gcc/gimple-range-path.cc | |
parent | 6c136d53e89e32fe9d22e41e5df89c08d3470049 (diff) | |
download | gcc-5adfb6540db95da5faf1f77fbe9ec38b4cf8eb1f.zip gcc-5adfb6540db95da5faf1f77fbe9ec38b4cf8eb1f.tar.gz gcc-5adfb6540db95da5faf1f77fbe9ec38b4cf8eb1f.tar.bz2 |
Reset root oracle from path_oracle::reset_path.
When we cross a backedge in the path solver, we reset the path
relations and nuke the root oracle. However, we forget to reset it
for the next path. This is causing us to miss threads because
subsequent paths will have no root oracle to use.
With this patch we get 201 more threads in the threadfull passes in my
.ii files and 118 more overall (DOM gets less because threadfull runs
before).
Normally, I'd recommend this for the GCC 12 branch, but considering
how sensitive other passes are to jump threading, and that there is no
PR associated with this, perhaps we should leave this out. Up to the
release maintainers of course.
gcc/ChangeLog:
* gimple-range-path.cc
(path_range_query::compute_ranges_in_block): Remove
set_root_oracle call.
(path_range_query::compute_ranges): Pass ranger oracle to
reset_path.
* value-relation.cc (path_oracle::reset_path): Set root oracle.
* value-relation.h (path_oracle::reset_path): Add root oracle
argument.
Diffstat (limited to 'gcc/gimple-range-path.cc')
-rw-r--r-- | gcc/gimple-range-path.cc | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc index c99d77d..73e248b 100644 --- a/gcc/gimple-range-path.cc +++ b/gcc/gimple-range-path.cc @@ -435,11 +435,10 @@ path_range_query::compute_ranges_in_block (basic_block bb) e->src->index, e->dest->index); path_oracle *p = get_path_oracle (); - p->reset_path (); // ?? Instead of nuking the root oracle altogether, we could // reset the path oracle to search for relations from the top of // the loop with the root oracle. Something for future development. - p->set_root_oracle (nullptr); + p->reset_path (); } gori_compute &g = m_ranger->gori (); @@ -615,7 +614,10 @@ path_range_query::compute_ranges (const vec<basic_block> &path, compute_exit_dependencies (m_exit_dependencies, m_path); if (m_resolve) - get_path_oracle ()->reset_path (); + { + path_oracle *p = get_path_oracle (); + p->reset_path (m_ranger->oracle ()); + } if (DEBUG_SOLVER) { |