diff options
author | Aldy Hernandez <aldyh@redhat.com> | 2021-09-22 09:34:15 +0200 |
---|---|---|
committer | Aldy Hernandez <aldyh@redhat.com> | 2021-09-22 13:28:08 +0200 |
commit | 7e5e44bd1729b7a9b458d512ddf61bfba5031869 (patch) | |
tree | 467be1ab1d3f12fbf1f32a2018a2e186ddf6ff92 /gcc | |
parent | 6b0e0b29c639451dd8e2234907b68806e51019c7 (diff) | |
download | gcc-7e5e44bd1729b7a9b458d512ddf61bfba5031869.zip gcc-7e5e44bd1729b7a9b458d512ddf61bfba5031869.tar.gz gcc-7e5e44bd1729b7a9b458d512ddf61bfba5031869.tar.bz2 |
path solver: Use range_on_path_entry instead of looking at equivalences.
Cycling through equivalences to improve a range is nowhere near as
efficient as asking the ranger what the range on entry is.
Testing on a hybrid VRP threader, shows that this improves our VRP
threading benefit from 14.5% to 18.5% and our overall jump threads from
0.85% to 1.28%.
Tested on x86-64 Linux.
gcc/ChangeLog:
* gimple-range-path.cc (path_range_query::internal_range_of_expr):
Remove call to improve_range_with_equivs.
(path_range_query::improve_range_with_equivs): Remove
* gimple-range-path.h: Remove improve_range_with_equivs.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-range-path.cc | 33 | ||||
-rw-r--r-- | gcc/gimple-range-path.h | 1 |
2 files changed, 1 insertions, 33 deletions
diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc index e65c799..d052ebd 100644 --- a/gcc/gimple-range-path.cc +++ b/gcc/gimple-range-path.cc @@ -163,10 +163,6 @@ path_range_query::internal_range_of_expr (irange &r, tree name, gimple *stmt) if (m_resolve && defined_outside_path (name)) { range_on_path_entry (r, name); - - if (r.varying_p ()) - improve_range_with_equivs (r, name); - set_cache (r, name); return true; } @@ -178,7 +174,7 @@ path_range_query::internal_range_of_expr (irange &r, tree name, gimple *stmt) r.intersect (gimple_range_global (name)); if (m_resolve && r.varying_p ()) - improve_range_with_equivs (r, name); + range_on_path_entry (r, name); set_cache (r, name); return true; @@ -201,33 +197,6 @@ path_range_query::range_of_expr (irange &r, tree name, gimple *stmt) return false; } -// Improve the range of NAME with the range of any of its equivalences. - -void -path_range_query::improve_range_with_equivs (irange &r, tree name) -{ - if (TREE_CODE (name) != SSA_NAME) - return; - - basic_block entry = entry_bb (); - relation_oracle *oracle = m_ranger.oracle (); - - if (const bitmap_head *equivs = oracle->equiv_set (name, entry)) - { - int_range_max t; - bitmap_iterator bi; - unsigned i; - - EXECUTE_IF_SET_IN_BITMAP (equivs, 0, i, bi) - if (i != SSA_NAME_VERSION (name) && r.varying_p ()) - { - tree equiv = ssa_name (i); - range_on_path_entry (t, equiv); - r.intersect (t); - } - } -} - bool path_range_query::unreachable_path_p () { diff --git a/gcc/gimple-range-path.h b/gcc/gimple-range-path.h index 6f81f21..f7d9832 100644 --- a/gcc/gimple-range-path.h +++ b/gcc/gimple-range-path.h @@ -63,7 +63,6 @@ private: void ssa_range_in_phi (irange &r, gphi *phi); void precompute_relations (const vec<basic_block> &); void precompute_phi_relations (basic_block bb, basic_block prev); - void improve_range_with_equivs (irange &r, tree name); void add_copies_to_imports (); bool add_to_imports (tree name, bitmap imports); |