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:
parent
b301cb43a7
commit
264f061997
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user