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.cc | |
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.cc')
-rw-r--r-- | gcc/value-query.cc | 52 |
1 files changed, 2 insertions, 50 deletions
diff --git a/gcc/value-query.cc b/gcc/value-query.cc index c2ab745..b275a43 100644 --- a/gcc/value-query.cc +++ b/gcc/value-query.cc @@ -185,6 +185,8 @@ range_query::range_query () range_query::~range_query () { + if (m_oracle) + destroy_relation_oracle (); } // This routine will invoke the equivalent of range_of_expr on @@ -437,53 +439,3 @@ global_range_query::range_of_expr (vrange &r, tree expr, gimple *stmt) return true; } - -// Return any known relation between SSA1 and SSA2 before stmt S is executed. -// If GET_RANGE is true, query the range of both operands first to ensure -// the definitions have been processed and any relations have be created. - -relation_kind -range_query::query_relation (gimple *s, tree ssa1, tree ssa2, bool get_range) -{ - if (!m_oracle || TREE_CODE (ssa1) != SSA_NAME || TREE_CODE (ssa2) != SSA_NAME) - return VREL_VARYING; - - // Ensure ssa1 and ssa2 have both been evaluated. - if (get_range) - { - Value_Range tmp1 (TREE_TYPE (ssa1)); - Value_Range tmp2 (TREE_TYPE (ssa2)); - range_of_expr (tmp1, ssa1, s); - range_of_expr (tmp2, ssa2, s); - } - return m_oracle->query_relation (gimple_bb (s), ssa1, ssa2); -} - -// Return any known relation between SSA1 and SSA2 on edge E. -// If GET_RANGE is true, query the range of both operands first to ensure -// the definitions have been processed and any relations have be created. - -relation_kind -range_query::query_relation (edge e, tree ssa1, tree ssa2, bool get_range) -{ - basic_block bb; - if (!m_oracle || TREE_CODE (ssa1) != SSA_NAME || TREE_CODE (ssa2) != SSA_NAME) - return VREL_VARYING; - - // Use destination block if it has a single predecessor, and this picks - // up any relation on the edge. - // Otherwise choose the src edge and the result is the same as on-exit. - if (!single_pred_p (e->dest)) - bb = e->src; - else - bb = e->dest; - - // Ensure ssa1 and ssa2 have both been evaluated. - if (get_range) - { - Value_Range tmp (TREE_TYPE (ssa1)); - range_on_edge (tmp, e, ssa1); - range_on_edge (tmp, e, ssa2); - } - return m_oracle->query_relation (bb, ssa1, ssa2); -} |