path solver: Solve PHI imports first for ranges.

PHIs must be resolved first while solving ranges in a block,
regardless of where they appear in the import bitmap.  We went through
a similar exercise for the relational code, but missed these.

Tested on x86-64 & ppc64le Linux.

gcc/ChangeLog:

	PR tree-optimization/103202
	* gimple-range-path.cc
	(path_range_query::compute_ranges_in_block): Solve PHI imports first.
This commit is contained in:
Aldy Hernandez 2021-11-12 16:08:01 +01:00
parent b301cb43a7
commit 264f061997

View File

@ -365,12 +365,23 @@ path_range_query::compute_ranges_in_block (basic_block bb)
clear_cache (name); clear_cache (name);
} }
// Solve imports defined in this block. // Solve imports defined in this block, starting with the PHIs...
for (gphi_iterator 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))
set_cache (r, name);
}
// ...and then the rest of the imports.
EXECUTE_IF_SET_IN_BITMAP (m_imports, 0, i, bi) EXECUTE_IF_SET_IN_BITMAP (m_imports, 0, i, bi)
{ {
tree name = ssa_name (i); tree name = ssa_name (i);
if (range_defined_in_block (r, name, bb)) if (gimple_code (SSA_NAME_DEF_STMT (name)) != GIMPLE_PHI
&& range_defined_in_block (r, name, bb))
set_cache (r, name); set_cache (r, name);
} }