diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-06-16 12:44:33 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-06-16 14:16:19 -0400 |
commit | 6c849e2fab3f682b715a81cb4ccc792f20c00eeb (patch) | |
tree | 380e12d8d882a331c72e8962d1c04732d5247cc8 | |
parent | 5b1594dc2d053803ae98ae39f76fbd71f35cb657 (diff) | |
download | gcc-6c849e2fab3f682b715a81cb4ccc792f20c00eeb.zip gcc-6c849e2fab3f682b715a81cb4ccc792f20c00eeb.tar.gz gcc-6c849e2fab3f682b715a81cb4ccc792f20c00eeb.tar.bz2 |
Clear invariant bit for inferred ranges.
The range of an invariant SSA (no outgoing edge range anywhere) is not tracked.
If an inferred range is registered, remove the invariant flag.
* gimple-range-cache.cc (ranger_cache::apply_inferred_ranges): If name
was invaraint before, clear the invariant bit.
* gimple-range-gori.cc (gori_map::set_range_invariant): Add a flag.
* gimple-range-gori.h (gori_map::set_range_invariant): Adjust prototype.
-rw-r--r-- | gcc/gimple-range-cache.cc | 7 | ||||
-rw-r--r-- | gcc/gimple-range-gori.cc | 10 | ||||
-rw-r--r-- | gcc/gimple-range-gori.h | 2 |
3 files changed, 14 insertions, 5 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc index f349436..5df7441 100644 --- a/gcc/gimple-range-cache.cc +++ b/gcc/gimple-range-cache.cc @@ -1474,7 +1474,12 @@ ranger_cache::apply_inferred_ranges (gimple *s) if (!m_on_entry.get_bb_range (r, name, bb)) exit_range (r, name, bb, RFD_READ_ONLY); if (r.intersect (infer.range (x))) - m_on_entry.set_bb_range (name, bb, r); + { + m_on_entry.set_bb_range (name, bb, r); + // If this range was invariant before, remove invariance. + if (!m_gori.has_edge_range_p (name)) + m_gori.set_range_invariant (name, false); + } } } } diff --git a/gcc/gimple-range-gori.cc b/gcc/gimple-range-gori.cc index 0a3e54e..a43e44c 100644 --- a/gcc/gimple-range-gori.cc +++ b/gcc/gimple-range-gori.cc @@ -499,12 +499,16 @@ gori_map::is_export_p (tree name, basic_block bb) return bitmap_bit_p (exports (bb), SSA_NAME_VERSION (name)); } -// Clear the m_maybe_variant bit so ranges will not be tracked for NAME. +// Set or clear the m_maybe_variant bit to determine if ranges will be tracked +// for NAME. A clear bit means they will NOT be tracked. void -gori_map::set_range_invariant (tree name) +gori_map::set_range_invariant (tree name, bool invariant) { - bitmap_clear_bit (m_maybe_variant, SSA_NAME_VERSION (name)); + if (invariant) + bitmap_clear_bit (m_maybe_variant, SSA_NAME_VERSION (name)); + else + bitmap_set_bit (m_maybe_variant, SSA_NAME_VERSION (name)); } // Return true if NAME is an import to block BB. diff --git a/gcc/gimple-range-gori.h b/gcc/gimple-range-gori.h index f5f691f..3d57ab9 100644 --- a/gcc/gimple-range-gori.h +++ b/gcc/gimple-range-gori.h @@ -94,7 +94,7 @@ public: bool is_import_p (tree name, basic_block bb); bitmap exports (basic_block bb); bitmap imports (basic_block bb); - void set_range_invariant (tree name); + void set_range_invariant (tree name, bool invariant = true); void dump (FILE *f); void dump (FILE *f, basic_block bb, bool verbose = true); |