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.
This commit is contained in:
Aldy Hernandez 2021-11-29 14:49:59 +01:00
parent 056551414a
commit 54ebec35ab
2 changed files with 11 additions and 14 deletions

View File

@ -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

View File

@ -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;