diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-07-05 10:54:26 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-07-05 13:16:47 -0400 |
commit | 1d2aa262482fc9b23201200ca82aa3b8659b072e (patch) | |
tree | aed4d0661260354ea1124c1f6b66127502afa8cc /gcc/value-relation.h | |
parent | c73e8d45ca0111f51d7187641963df97f5c9c63f (diff) | |
download | gcc-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.h | 10 |
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 |