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.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/gcc/value-relation.h b/gcc/value-relation.h
index 64884a8..f3b18ac 100644
--- a/gcc/value-relation.h
+++ b/gcc/value-relation.h
@@ -256,4 +256,61 @@ private:
bitmap_obstack m_bitmaps;
struct obstack m_chain_obstack;
};
+
+// The value-relation class is used to encapsulate the represention of an
+// individual relation between 2 ssa-names, and to facilitate operating on
+// the relation.
+
+class value_relation
+{
+public:
+ value_relation ();
+ value_relation (relation_kind kind, tree n1, tree n2);
+ void set_relation (relation_kind kind, tree n1, tree n2);
+
+ inline relation_kind kind () const { return related; }
+ inline tree op1 () const { return name1; }
+ inline tree op2 () const { return name2; }
+
+ bool union_ (value_relation &p);
+ bool intersect (value_relation &p);
+ void negate ();
+ bool apply_transitive (const value_relation &rel);
+
+ void dump (FILE *f) const;
+private:
+ relation_kind related;
+ tree name1, name2;
+};
+
+// Set relation R between ssa_name N1 and N2.
+
+inline void
+value_relation::set_relation (relation_kind r, tree n1, tree n2)
+{
+ gcc_checking_assert (TREE_CODE (n1) == SSA_NAME
+ && TREE_CODE (n2) == SSA_NAME);
+ related = r;
+ name1 = n1;
+ name2 = n2;
+}
+
+// Default constructor.
+
+inline
+value_relation::value_relation ()
+{
+ related = VREL_VARYING;
+ name1 = NULL_TREE;
+ name2 = NULL_TREE;
+}
+
+// Constructor for relation R between SSA version N1 nd N2.
+
+inline
+value_relation::value_relation (relation_kind kind, tree n1, tree n2)
+{
+ set_relation (kind, n1, n2);
+}
+
#endif /* GCC_VALUE_RELATION_H */