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/value-relation.h | |
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/value-relation.h')
-rw-r--r-- | gcc/value-relation.h | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/gcc/value-relation.h b/gcc/value-relation.h index 5adf736..528f00a 100644 --- a/gcc/value-relation.h +++ b/gcc/value-relation.h @@ -98,37 +98,37 @@ class relation_oracle { public: virtual ~relation_oracle () { } - // register a relation between 2 ssa names at a stmt. - void register_stmt (gimple *, relation_kind, tree, tree); - // register a relation between 2 ssa names on an edge. - void register_edge (edge, relation_kind, tree, tree); - // register a relation between 2 ssa names in a basic block. - virtual void register_relation (basic_block, relation_kind, tree, tree) = 0; + // register a relation between 2 ssa names. + void register_relation (gimple *, relation_kind, tree, tree); + void register_relation (edge, relation_kind, tree, tree); + virtual void register_relation (basic_block, relation_kind, tree, tree) { } + // Query if there is any relation between SSA1 and SSA2. - virtual relation_kind query_relation (basic_block, tree, tree) = 0; relation_kind query_relation (gimple *s, tree ssa1, tree ssa2); relation_kind query_relation (edge e, tree ssa1, tree ssa2); + virtual relation_kind query_relation (basic_block, tree, tree) + { return VREL_VARYING; } - relation_kind validate_relation (relation_kind, tree, tree); - relation_kind validate_relation (relation_kind, vrange &, vrange &); - - virtual void dump (FILE *, basic_block) const = 0; - virtual void dump (FILE *) const = 0; + virtual void dump (FILE *, basic_block) const { } + virtual void dump (FILE *) const { } void debug () const; protected: friend class equiv_relation_iterator; // Return equivalency set for an SSA name in a basic block. - virtual const_bitmap equiv_set (tree, basic_block) = 0; + virtual const_bitmap equiv_set (tree, basic_block) { return NULL; } // Return partial equivalency record for an SSA name. virtual const class pe_slice *partial_equiv_set (tree) { return NULL; } void valid_equivs (bitmap b, const_bitmap equivs, basic_block bb); // Query for a relation between two equivalency sets in a basic block. virtual relation_kind query_relation (basic_block, const_bitmap, - const_bitmap) = 0; + const_bitmap) { return VREL_VARYING; } friend class path_oracle; }; +// Instance with no storage used for default queries with no active oracle. +extern relation_oracle default_relation_oracle; + // This class represents an equivalency set, and contains a link to the next // one in the list to be searched. @@ -162,11 +162,9 @@ public: ~equiv_oracle (); const_bitmap equiv_set (tree ssa, basic_block bb) final override; - const pe_slice *partial_equiv_set (tree name) final override; void register_relation (basic_block bb, relation_kind k, tree ssa1, tree ssa2) override; - void add_partial_equiv (relation_kind, tree, tree); relation_kind partial_equiv (tree ssa1, tree ssa2, tree *base = NULL) const; relation_kind query_relation (basic_block, tree, tree) override; relation_kind query_relation (basic_block, const_bitmap, const_bitmap) @@ -175,6 +173,8 @@ public: void dump (FILE *f) const override; protected: + void add_partial_equiv (relation_kind, tree, tree); + const pe_slice *partial_equiv_set (tree name) final override; inline bool has_equiv_p (unsigned v) { return bitmap_bit_p (m_equiv_set, v); } bitmap_obstack m_bitmaps; struct obstack m_chain_obstack; |