public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-5694] path solver: Use only one ssa_global_cache.
@ 2021-12-01 16:12 Aldy Hernandez
  0 siblings, 0 replies; only message in thread
From: Aldy Hernandez @ 2021-12-01 16:12 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:54ebec35abec09a24b47b997172622ca0d8e2318

commit r12-5694-g54ebec35abec09a24b47b997172622ca0d8e2318
Author: Aldy Hernandez <aldyh@redhat.com>
Date:   Mon Nov 29 14:49:59 2021 +0100

    path solver: Use only one ssa_global_cache.
    
    We're using a temporary range cache while computing ranges for PHIs to
    make sure the real cache doesn't get set until all PHIs are computed.
    With the ltrans beast in LTO mode this causes undue overhead.
    
    Since we already have a bitmap to indicate whether there's a cache
    entry, we can avoid the extra cache object by clearing it while PHIs
    are being calculated.
    
    gcc/ChangeLog:
    
            PR tree-optimization/103409
            * gimple-range-path.cc (path_range_query::compute_ranges_in_phis):
            Do all the work with just one ssa_global_cache.
            * gimple-range-path.h: Remove m_tmp_phi_cache.

Diff:
---
 gcc/gimple-range-path.cc | 23 +++++++++++------------
 gcc/gimple-range-path.h  |  2 --
 2 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc
index b9c71226c1c..15ef72fd492 100644
--- a/gcc/gimple-range-path.cc
+++ b/gcc/gimple-range-path.cc
@@ -375,30 +375,29 @@ void
 path_range_query::compute_ranges_in_phis (basic_block bb)
 {
   int_range_max r;
-  gphi_iterator iter;
+  auto_bitmap phi_set;
 
   // PHIs must be resolved simultaneously on entry to the block
   // because any dependencies must be satistifed with values on entry.
   // Thus, we calculate all PHIs first, and then update the cache at
   // the end.
 
-  m_tmp_phi_cache.clear ();
-  for (iter = gsi_start_phis (bb); !gsi_end_p (iter); gsi_next (&iter))
+  for (auto iter = gsi_start_phis (bb); !gsi_end_p (iter); gsi_next (&iter))
     {
       gphi *phi = iter.phi ();
       tree name = gimple_phi_result (phi);
 
       if (import_p (name) && range_defined_in_block (r, name, bb))
-	m_tmp_phi_cache.set_global_range (name, r);
-    }
-  for (iter = gsi_start_phis (bb); !gsi_end_p (iter); gsi_next (&iter))
-    {
-      gphi *phi = iter.phi ();
-      tree name = gimple_phi_result (phi);
-
-      if (m_tmp_phi_cache.get_global_range (r, name))
-	set_cache (r, name);
+	{
+	  unsigned v = SSA_NAME_VERSION (name);
+	  set_cache (r, name);
+	  bitmap_set_bit (phi_set, v);
+	  // Pretend we don't have a cache entry for this name until
+	  // we're done with all PHIs.
+	  bitmap_clear_bit (m_has_cache_entry, v);
+	}
     }
+  bitmap_ior_into (m_has_cache_entry, phi_set);
 }
 
 // Compute ranges defined in the current block, or exported to the
diff --git a/gcc/gimple-range-path.h b/gcc/gimple-range-path.h
index 57a9ae9bdcd..77c92c07bc1 100644
--- a/gcc/gimple-range-path.h
+++ b/gcc/gimple-range-path.h
@@ -82,8 +82,6 @@ private:
   // Range cache for SSA names.
   ssa_global_cache *m_cache;
 
-  ssa_global_cache m_tmp_phi_cache;
-
   // Set for each SSA that has an active entry in the cache.
   bitmap m_has_cache_entry;


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-12-01 16:12 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-01 16:12 [gcc r12-5694] path solver: Use only one ssa_global_cache Aldy Hernandez

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).