aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-relation.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/value-relation.h')
-rw-r--r--gcc/value-relation.h32
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;