From: Aldy Hernandez Date: Wed, 22 Sep 2021 07:34:15 +0000 (+0200) Subject: path solver: Use range_on_path_entry instead of looking at equivalences. X-Git-Tag: basepoints/gcc-13~4524 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e5e44bd1729b7a9b458d512ddf61bfba5031869;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc index e65c7996bb76..d052ebd81fcd 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 6f81f21d42f6..f7d9832ac8c8 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 &); 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);