diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2024-08-08 16:34:15 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2024-08-09 14:49:46 -0400 |
commit | 5ce3874b3c2fdd76f506005cb1171a732af7c807 (patch) | |
tree | b6d733d6664e97decf5a4943c1a8764c637db625 | |
parent | d0bc1cbf6a8938220f42d8102031fd6f6644e171 (diff) | |
download | gcc-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.cc | 8 |
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)); |