https://gcc.gnu.org/g:5ce3874b3c2fdd76f506005cb1171a732af7c807

commit r15-2857-g5ce3874b3c2fdd76f506005cb1171a732af7c807
Author: Andrew MacLeod <amacl...@redhat.com>
Date:   Thu Aug 8 16:34:15 2024 -0400

    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.

Diff:
---
 gcc/gimple-range-cache.cc | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 0fffd7c16a1c..43949894cbed 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));

Reply via email to