aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-cache.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2021-06-17 14:09:48 -0400
committerAndrew MacLeod <amacleod@redhat.com>2021-06-22 08:11:45 -0400
commita2c9173331914eff3d728c07afaeee71892689ba (patch)
tree8912aa396388e124d9f9f769da0ae9e91f0d5d51 /gcc/gimple-range-cache.cc
parent80dd13f5c3bdc7899ee6e863e05b254815ec0cef (diff)
downloadgcc-a2c9173331914eff3d728c07afaeee71892689ba.zip
gcc-a2c9173331914eff3d728c07afaeee71892689ba.tar.gz
gcc-a2c9173331914eff3d728c07afaeee71892689ba.tar.bz2
Add relational support to fold_using_range
Enable a relation oracle in ranger, and add full range-op relation support to fold_using_range. * gimple-range-cache.cc (ranger_cache::ranger_cache): Create a relation_oracle if dominators exist. (ranger_cache::~ranger_cache): Dispose of oracle. (ranger_cache::dump_bb): Dump oracle. * gimple-range.cc (fur_source::fur_source): New. (fur_source::get_operand): Use mmeber query. (fur_source::get_phi_operand): Use member_query. (fur_source::query_relation): New. (fur_source::register_dependency): Delete. (fur_source::register_relation): New. (fur_edge::fur_edge): Adjust. (fur_edge::get_phi_operand): Fix comment. (fur_edge::query): Delete. (fur_stmt::fur_stmt): Adjust. (fur_stmt::query): Delete. (fur_depend::fur_depend): Adjust. (fur_depend::register_relation): New. (fur_depend::register_relation): New. (fur_list::fur_list): Adjust. (fur_list::get_operand): Use member query. (fold_using_range::range_of_range_op): Process and query relations. (fold_using_range::range_of_address): Adjust dependency call. (fold_using_range::range_of_phi): Ditto. (gimple_ranger::gimple_ranger): New. Use ranger_ache oracle. (fold_using_range::relation_fold_and_or): New. (fold_using_range::postfold_gcond_edges): New. * gimple-range.h (class gimple_ranger): Adjust. (class fur_source): Adjust members. (class fur_stmt): Ditto. (class fold_using_range): Ditto.
Diffstat (limited to 'gcc/gimple-range-cache.cc')
-rw-r--r--gcc/gimple-range-cache.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index def604dc..4347485 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -714,6 +714,12 @@ ranger_cache::ranger_cache ()
m_update_list.safe_grow_cleared (last_basic_block_for_fn (cfun));
m_update_list.truncate (0);
m_temporal = new temporal_cache;
+ // If DOM info is available, spawn an oracle as well.
+ if (dom_info_available_p (CDI_DOMINATORS))
+ m_oracle = new relation_oracle ();
+ else
+ m_oracle = NULL;
+
unsigned x, lim = last_basic_block_for_fn (cfun);
// Calculate outgoing range info upfront. This will fully populate the
// m_maybe_variant bitmap which will help eliminate processing of names
@@ -728,6 +734,8 @@ ranger_cache::ranger_cache ()
ranger_cache::~ranger_cache ()
{
+ if (m_oracle)
+ delete m_oracle;
delete m_temporal;
m_workback.release ();
m_update_list.release ();
@@ -750,6 +758,8 @@ ranger_cache::dump_bb (FILE *f, basic_block bb)
{
m_gori.gori_map::dump (f, bb, false);
m_on_entry.dump (f, bb);
+ if (m_oracle)
+ m_oracle->dump (f, bb);
}
// Get the global range for NAME, and return in R. Return false if the