From 7e5e44bd1729b7a9b458d512ddf61bfba5031869 Mon Sep 17 00:00:00 2001 From: Aldy Hernandez Date: Wed, 22 Sep 2021 09:34:15 +0200 Subject: [PATCH] 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. --- gcc/gimple-range-path.cc | 33 +-------------------------------- gcc/gimple-range-path.h | 1 - 2 files changed, 1 insertion(+), 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 &); 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); -- 2.7.4