aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-relation.h
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2022-07-05 10:54:26 -0400
committerAndrew MacLeod <amacleod@redhat.com>2022-07-05 13:16:47 -0400
commit1d2aa262482fc9b23201200ca82aa3b8659b072e (patch)
treeaed4d0661260354ea1124c1f6b66127502afa8cc /gcc/value-relation.h
parentc73e8d45ca0111f51d7187641963df97f5c9c63f (diff)
downloadgcc-1d2aa262482fc9b23201200ca82aa3b8659b072e.zip
gcc-1d2aa262482fc9b23201200ca82aa3b8659b072e.tar.gz
gcc-1d2aa262482fc9b23201200ca82aa3b8659b072e.tar.bz2
Provide a relation verification mechanism.
Provide a relation oracle API which validates a relation between 2 ranges. This allows relation queries that are symbolicly true to be overridden by range specific information. ie. x == x is true symbolically, but for floating point a NaN may invalidate this assumption. * value-relation.cc (relation_to_code): New vector. (relation_oracle::validate_relation): New. (set_relation): Allow ssa1 == ssa2 to be registered. * value-relation.h (validate_relation): New prototype. (query_relation): Make internal variant protected.
Diffstat (limited to 'gcc/value-relation.h')
-rw-r--r--gcc/value-relation.h10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/value-relation.h b/gcc/value-relation.h
index 478729b..77e1208 100644
--- a/gcc/value-relation.h
+++ b/gcc/value-relation.h
@@ -95,15 +95,19 @@ public:
virtual void register_relation (basic_block, relation_kind, tree, tree) = 0;
// Query for a relation between two ssa names in a basic block.
virtual relation_kind query_relation (basic_block, tree, tree) = 0;
- // Query for a relation between two equivalency stes in a basic block.
- virtual relation_kind query_relation (basic_block, const_bitmap,
- const_bitmap) = 0;
+
+ 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;
void debug () const;
protected:
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;
+ friend class path_oracle;
};
// This class represents an equivalency set, and contains a link to the next