aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-query.h
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2024-04-29 13:32:00 -0400
committerAndrew MacLeod <amacleod@redhat.com>2024-05-23 16:40:34 -0400
commit67afcf28570ff62210e1998f35def2be5cb8cb08 (patch)
tree8af751b79580773d72775179b5bd161447a59eb0 /gcc/value-query.h
parented63cd2aa5b114565fe5499c3a6bf8da5e8e48ba (diff)
downloadgcc-67afcf28570ff62210e1998f35def2be5cb8cb08.zip
gcc-67afcf28570ff62210e1998f35def2be5cb8cb08.tar.gz
gcc-67afcf28570ff62210e1998f35def2be5cb8cb08.tar.bz2
Move all relation queries into relation_oracle.
Move relation queries from range_query object into the relation oracle. * gimple-range-cache.cc (ranger_cache::ranger_cache): Call create_relation_oracle. (ranger_cache::~ranger_cache): Call destroy_relation_oracle. * gimple-range-fold.cc (fur_stmt::get_phi_operand): Check for relation oracle bnefore calling query_relation. (fold_using_range::range_of_phi): Likewise. * gimple-range-path.cc (path_range_query::~path_range_query): Set relation oracle pointer to NULL when done. * gimple-range.cc (gimple_ranger::~gimple_ranger): Likewise. * value-query.cc (range_query::~range_query): Ensure any relation oracle is destroyed. (range_query::query_relation): relocate to relation_oracle object. * value-query.h (class range_query): Adjust method proototypes. (range_query::create_relation_oracle): New. (range_query::destroy_relation_oracle): New. * value-relation.cc (relation_oracle::query_relation): Relocate from range query class. * value-relation.h (Call relation_oracle): New prototypes.
Diffstat (limited to 'gcc/value-query.h')
-rw-r--r--gcc/value-query.h32
1 files changed, 26 insertions, 6 deletions
diff --git a/gcc/value-query.h b/gcc/value-query.h
index 4d2a7bc..9df8990 100644
--- a/gcc/value-query.h
+++ b/gcc/value-query.h
@@ -75,16 +75,12 @@ public:
virtual bool range_on_entry (vrange &r, basic_block bb, tree expr);
virtual bool range_on_exit (vrange &r, basic_block bb, tree expr);
- // Query if there is any relation between SSA1 and SSA2.
- relation_kind query_relation (gimple *s, tree ssa1, tree ssa2,
- bool get_range = true);
- relation_kind query_relation (edge e, tree ssa1, tree ssa2,
- bool get_range = true);
- // If present, Access relation oracle for more advanced uses.
inline relation_oracle *oracle () const { return m_oracle; }
virtual void dump (FILE *);
+ void create_relation_oracle ();
+ void destroy_relation_oracle ();
protected:
bool get_tree_range (vrange &v, tree expr, gimple *stmt,
basic_block bbentry = NULL, basic_block bbexit = NULL);
@@ -123,4 +119,28 @@ get_range_query (const struct function *fun)
extern void gimple_range_global (vrange &v, tree name,
struct function *f = cfun);
+// Create dominance based range oracle for the current query if dom info is
+// available.
+
+inline void
+range_query::create_relation_oracle ()
+{
+ if (!dom_info_available_p (CDI_DOMINATORS))
+ return;
+ gcc_checking_assert (m_oracle == NULL);
+ m_oracle = new dom_oracle ();
+}
+
+// Destroy any relation oracle that was created.
+
+inline void
+range_query::destroy_relation_oracle ()
+{
+ if (m_oracle != NULL)
+ {
+ delete m_oracle;
+ m_oracle = NULL;
+ }
+}
+
#endif // GCC_QUERY_H