aboutsummaryrefslogtreecommitdiff
path: root/gcc/gimple-range-cache.cc
diff options
context:
space:
mode:
authorAndrew MacLeod <amacleod@redhat.com>2023-05-23 15:41:03 -0400
committerAndrew MacLeod <amacleod@redhat.com>2023-05-24 08:39:58 -0400
commit257c2be7ff8dfdc610202a1e1f5a8a668b939bdb (patch)
treec69a7f0a8973a3993185cccc8d27ef28b85f9a7d /gcc/gimple-range-cache.cc
parentcfd6569e9c41181231a8427235d0c0a7ad9262e4 (diff)
downloadgcc-257c2be7ff8dfdc610202a1e1f5a8a668b939bdb.zip
gcc-257c2be7ff8dfdc610202a1e1f5a8a668b939bdb.tar.gz
gcc-257c2be7ff8dfdc610202a1e1f5a8a668b939bdb.tar.bz2
Only update global value if it changes.
Do not update and propagate a global value if it hasn't changed. PR tree-optimization/109695 * gimple-range-cache.cc (ranger_cache::get_global_range): Add changed param. * gimple-range-cache.h (ranger_cache::get_global_range): Ditto. * gimple-range.cc (gimple_ranger::range_of_stmt): Pass changed flag to set_global_range. (gimple_ranger::prefill_stmt_dependencies): Ditto.
Diffstat (limited to 'gcc/gimple-range-cache.cc')
-rw-r--r--gcc/gimple-range-cache.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index db7ee8e..e069241 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -992,10 +992,18 @@ ranger_cache::get_global_range (vrange &r, tree name, bool &current_p)
// Set the global range of NAME to R and give it a timestamp.
void
-ranger_cache::set_global_range (tree name, const vrange &r)
+ranger_cache::set_global_range (tree name, const vrange &r, bool changed)
{
// Setting a range always clears the always_current flag.
m_temporal->set_always_current (name, false);
+ if (!changed)
+ {
+ // If there are dependencies, make sure this is not out of date.
+ if (!m_temporal->current_p (name, m_gori.depend1 (name),
+ m_gori.depend2 (name)))
+ m_temporal->set_timestamp (name);
+ return;
+ }
if (m_globals.set_range (name, r))
{
// If there was already a range set, propagate the new value.