diff options
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; |