diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2024-04-30 09:35:23 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2024-05-23 16:45:53 -0400 |
commit | 3be530f6d77ec24c94589341b069b199cfe6c2eb (patch) | |
tree | d1c1561e97272858cd32304998b5da993208ce58 /gcc/gimple-range-cache.cc | |
parent | 67afcf28570ff62210e1998f35def2be5cb8cb08 (diff) | |
download | gcc-3be530f6d77ec24c94589341b069b199cfe6c2eb.zip gcc-3be530f6d77ec24c94589341b069b199cfe6c2eb.tar.gz gcc-3be530f6d77ec24c94589341b069b199cfe6c2eb.tar.bz2 |
Move to an always available relation oracle.
This eliminates the need to check if the relation oracle pointer is NULL
before every call by providing a default oracle which does nothing.
REmove unused routines, and Unify register_relation method names.
* gimple-range-cache.cc (ranger_cache::dump_bb): Remove check for
NULL oracle pointer.
(ranger_cache::fill_block_cache): Likewise.
* gimple-range-fold.cc (fur_stmt::get_phi_operand): Likewise.
(fur_depend::fur_depend): Likewise.
(fur_depend::register_relation): Likewise, use qury_relation.
(fold_using_range::range_of_phi): Likewise.
(fold_using_range::relation_fold_and_or): Likewise.
* gimple-range-fold.h (fur_source::m_oracle): Delete. Oracle
can be accessed dirctly via m_query now.
* gimple-range-path.cc (path_range_query::path_range_query):
Adjust for oracle reference pointer.
(path_range_query::compute_ranges): Likewise.
(jt_fur_source::jt_fur_source): Adjust for no m_oracle member.
(jt_fur_source::register_relation): Do not check for NULL
pointer.
(jt_fur_source::query_relation): Likewise.
* gimple-range.cc (gimple_ranger::gimple_ranger): Adjust for
reference pointer.
* value-query.cc (default_relation_oracle): New.
(range_query::create_relation_oracle): Relocate from header.
Ensure not being added to global query.
(range_query::destroy_relation_oracle): Relocate from header.
(range_query::range_query): Initailize to default oracle.
(ange_query::~range_query): Call destroy_relation_oracle.
* value-query.h (class range_query): Adjust prototypes.
(range_query::create_relation_oracle): Move to source file.
(range_query::destroy_relation_oracle): Move to source file.
* value-relation.cc (relation_oracle::validate_relation): Delete.
(relation_oracle::register_stmt): Rename to register_relation.
(relation_oracle::register_edge): Likewise.
* value-relation.h (register_stmt): Rename to register_relation and
provide default function in base class.
(register_edge): Likewise.
(relation_oracle::validate_relation): Delete.
(relation_oracle::query_relation): Provide default in base class.
(relation_oracle::dump): Likewise.
(relation_oracle::equiv_set): Likewise.
(default_relation_oracle): New extenal reference.
(partial_equiv_set, add_partial_equiv): Move to protected.
Diffstat (limited to 'gcc/gimple-range-cache.cc')
-rw-r--r-- | gcc/gimple-range-cache.cc | 98 |
1 files changed, 47 insertions, 51 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc index cf17a6a..020069f 100644 --- a/gcc/gimple-range-cache.cc +++ b/gcc/gimple-range-cache.cc @@ -1001,8 +1001,7 @@ ranger_cache::dump_bb (FILE *f, basic_block bb) { m_gori.gori_map::dump (f, bb, false); m_on_entry.dump (f, bb); - if (m_oracle) - m_oracle->dump (f, bb); + m_oracle->dump (f, bb); } // Get the global range for NAME, and return in R. Return false if the @@ -1437,62 +1436,59 @@ ranger_cache::fill_block_cache (tree name, basic_block bb, basic_block def_bb) // See if any equivalences can refine it. // PR 109462, like 108139 below, a one way equivalence introduced // by a PHI node can also be through the definition side. Disallow it. - if (m_oracle) + tree equiv_name; + relation_kind rel; + int prec = TYPE_PRECISION (type); + FOR_EACH_PARTIAL_AND_FULL_EQUIV (m_oracle, bb, name, equiv_name, rel) { - tree equiv_name; - relation_kind rel; - int prec = TYPE_PRECISION (type); - FOR_EACH_PARTIAL_AND_FULL_EQUIV (m_oracle, bb, name, equiv_name, rel) - { - basic_block equiv_bb = gimple_bb (SSA_NAME_DEF_STMT (equiv_name)); + basic_block equiv_bb = gimple_bb (SSA_NAME_DEF_STMT (equiv_name)); - // Ignore partial equivs that are smaller than this object. - if (rel != VREL_EQ && prec > pe_to_bits (rel)) - continue; + // Ignore partial equivs that are smaller than this object. + if (rel != VREL_EQ && prec > pe_to_bits (rel)) + continue; - // Check if the equiv has any ranges calculated. - if (!m_gori.has_edge_range_p (equiv_name)) - continue; + // Check if the equiv has any ranges calculated. + if (!m_gori.has_edge_range_p (equiv_name)) + continue; - // Check if the equiv definition dominates this block - if (equiv_bb == bb || - (equiv_bb && !dominated_by_p (CDI_DOMINATORS, bb, equiv_bb))) - continue; + // Check if the equiv definition dominates this block + if (equiv_bb == bb || + (equiv_bb && !dominated_by_p (CDI_DOMINATORS, bb, equiv_bb))) + continue; - if (DEBUG_RANGE_CACHE) - { - if (rel == VREL_EQ) - fprintf (dump_file, "Checking Equivalence ("); - else - fprintf (dump_file, "Checking Partial equiv ("); - print_relation (dump_file, rel); - fprintf (dump_file, ") "); - print_generic_expr (dump_file, equiv_name, TDF_SLIM); - fprintf (dump_file, "\n"); - } - Value_Range equiv_range (TREE_TYPE (equiv_name)); - if (range_from_dom (equiv_range, equiv_name, bb, RFD_READ_ONLY)) - { - if (rel != VREL_EQ) - range_cast (equiv_range, type); - else - adjust_equivalence_range (equiv_range); + if (DEBUG_RANGE_CACHE) + { + if (rel == VREL_EQ) + fprintf (dump_file, "Checking Equivalence ("); + else + fprintf (dump_file, "Checking Partial equiv ("); + print_relation (dump_file, rel); + fprintf (dump_file, ") "); + print_generic_expr (dump_file, equiv_name, TDF_SLIM); + fprintf (dump_file, "\n"); + } + Value_Range equiv_range (TREE_TYPE (equiv_name)); + if (range_from_dom (equiv_range, equiv_name, bb, RFD_READ_ONLY)) + { + if (rel != VREL_EQ) + range_cast (equiv_range, type); + else + adjust_equivalence_range (equiv_range); - if (block_result.intersect (equiv_range)) + if (block_result.intersect (equiv_range)) + { + if (DEBUG_RANGE_CACHE) { - if (DEBUG_RANGE_CACHE) - { - if (rel == VREL_EQ) - fprintf (dump_file, "Equivalence update! : "); - else - fprintf (dump_file, "Partial equiv update! : "); - print_generic_expr (dump_file, equiv_name, TDF_SLIM); - fprintf (dump_file, " has range : "); - equiv_range.dump (dump_file); - fprintf (dump_file, " refining range to :"); - block_result.dump (dump_file); - fprintf (dump_file, "\n"); - } + if (rel == VREL_EQ) + fprintf (dump_file, "Equivalence update! : "); + else + fprintf (dump_file, "Partial equiv update! : "); + print_generic_expr (dump_file, equiv_name, TDF_SLIM); + fprintf (dump_file, " has range : "); + equiv_range.dump (dump_file); + fprintf (dump_file, " refining range to :"); + block_result.dump (dump_file); + fprintf (dump_file, "\n"); } } } |