aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2024-08-08 16:34:15 -0400
committerAndrew MacLeod <amacleod@redhat.com>2024-08-09 14:49:46 -0400
commit5ce3874b3c2fdd76f506005cb1171a732af7c807 (patch)
treeb6d733d6664e97decf5a4943c1a8764c637db625
parentd0bc1cbf6a8938220f42d8102031fd6f6644e171 (diff)
downloadgcc-5ce3874b3c2fdd76f506005cb1171a732af7c807.zip
gcc-5ce3874b3c2fdd76f506005cb1171a732af7c807.tar.gz
gcc-5ce3874b3c2fdd76f506005cb1171a732af7c807.tar.bz2
Limit equivalency processing in rangers cache.
When the number of block exceed VRP's sparse threshold, do not query all equivalencies during cache filling. This can be expensive for unknown benefit. PR tree-optimization/114855 * gimple-range-cache.cc (ranger_cache::fill_block_cache): Do not process equivalencies if the number of blocks is too high.
-rw-r--r--gcc/gimple-range-cache.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 0fffd7c..4394989 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -1486,6 +1486,14 @@ ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb)
tree equiv_name;
relation_kind rel;
int prec = TYPE_PRECISION (type);
+ // If there are too many basic blocks, do not attempt to process
+ // equivalencies.
+ if (last_basic_block_for_fn (cfun) > param_vrp_sparse_threshold)
+ {
+ m_on_entry.set_bb_range (name, bb, block_result);
+ gcc_checking_assert (m_workback.length () == start_length);
+ return;
+ }
FOR_EACH_PARTIAL_AND_FULL_EQUIV (m_relation, bb, name, equiv_name, rel)
{
basic_block equiv_bb = gimple_bb (SSA_NAME_DEF_STMT (equiv_name));