diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2024-04-29 13:32:00 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2024-05-23 16:40:34 -0400 |
commit | 67afcf28570ff62210e1998f35def2be5cb8cb08 (patch) | |
tree | 8af751b79580773d72775179b5bd161447a59eb0 /gcc/value-query.h | |
parent | ed63cd2aa5b114565fe5499c3a6bf8da5e8e48ba (diff) | |
download | gcc-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.h | 32 |
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 |