public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-1750] Do not continue propagating values which cannot be set properly.
@ 2021-06-23 14:26 Andrew Macleod
0 siblings, 0 replies; only message in thread
From: Andrew Macleod @ 2021-06-23 14:26 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:a03e944e92ee51ae583382079d4739b64bd93b35
commit r12-1750-ga03e944e92ee51ae583382079d4739b64bd93b35
Author: Andrew MacLeod <amacleod@redhat.com>
Date: Tue Jun 22 17:46:05 2021 -0400
Do not continue propagating values which cannot be set properly.
If the on-entry cache cannot properly represent a range, do not continue
trying to propagate it.
PR tree-optimization/101148
PR tree-optimization/101014
* gimple-range-cache.cc (ranger_cache::ranger_cache): Adjust.
(ranger_cache::~ranger_cache): Adjust.
(ranger_cache::block_range): Check if propagation disallowed.
(ranger_cache::propagate_cache): Disallow propagation if new value
can't be stored properly.
* gimple-range-cache.h (ranger_cache::m_propfail): New member.
Diff:
---
gcc/gimple-range-cache.cc | 11 ++++++++++-
gcc/gimple-range-cache.h | 1 +
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index bdecd212691..a377261c5c7 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -731,10 +731,12 @@ ranger_cache::ranger_cache ()
if (bb)
m_gori.exports (bb);
}
+ m_propfail = BITMAP_ALLOC (NULL);
}
ranger_cache::~ranger_cache ()
{
+ BITMAP_FREE (m_propfail);
if (m_oracle)
delete m_oracle;
delete m_temporal;
@@ -990,7 +992,9 @@ ranger_cache::block_range (irange &r, basic_block bb, tree name, bool calc)
void
ranger_cache::add_to_update (basic_block bb)
{
- if (!m_update_list.contains (bb))
+ // If propagation has failed for BB, or its already in the list, don't
+ // add it again.
+ if (!bitmap_bit_p (m_propfail, bb->index) && !m_update_list.contains (bb))
m_update_list.quick_push (bb);
}
@@ -1007,6 +1011,7 @@ ranger_cache::propagate_cache (tree name)
int_range_max current_range;
int_range_max e_range;
+ gcc_checking_assert (bitmap_empty_p (m_propfail));
// Process each block by seeing if its calculated range on entry is
// the same as its cached value. If there is a difference, update
// the cache to reflect the new value, and check to see if any
@@ -1063,6 +1068,9 @@ ranger_cache::propagate_cache (tree name)
if (new_range != current_range)
{
bool ok_p = m_on_entry.set_bb_range (name, bb, new_range);
+ // If the cache couldn't set the value, mark it as failed.
+ if (!ok_p)
+ bitmap_set_bit (m_propfail, bb->index);
if (DEBUG_RANGE_CACHE)
{
if (!ok_p)
@@ -1092,6 +1100,7 @@ ranger_cache::propagate_cache (tree name)
print_generic_expr (dump_file, name, TDF_SLIM);
fprintf (dump_file, "\n");
}
+ bitmap_clear (m_propfail);
}
// Check to see if an update to the value for NAME in BB has any effect
diff --git a/gcc/gimple-range-cache.h b/gcc/gimple-range-cache.h
index 1d2e1b99200..ecf63dc01b3 100644
--- a/gcc/gimple-range-cache.h
+++ b/gcc/gimple-range-cache.h
@@ -121,6 +121,7 @@ private:
void propagate_updated_value (tree name, basic_block bb);
+ bitmap m_propfail;
vec<basic_block> m_workback;
vec<basic_block> m_update_list;
};
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-06-23 14:26 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-23 14:26 [gcc r12-1750] Do not continue propagating values which cannot be set properly Andrew Macleod
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).