Kill known equivalences before a new assignment in the path solver.

Every time we have a killing statement, we must also kill the relations
seen so far.  This is similar to what we did for the equivs inherent in
PHIs along a path.

Tested on x86-64 and ppc64le Linux.

gcc/ChangeLog:

	* gimple-range-path.cc
	(path_range_query::range_defined_in_block): Call killing_def.
This commit is contained in:
Aldy Hernandez 2021-10-27 18:22:16 +02:00
parent 2f0b6a971a
commit aeb10f8d2a

View file

@ -288,8 +288,14 @@ path_range_query::range_defined_in_block (irange &r, tree name, basic_block bb)
if (gimple_code (def_stmt) == GIMPLE_PHI)
ssa_range_in_phi (r, as_a<gphi *> (def_stmt));
else if (!range_of_stmt (r, def_stmt, name))
r.set_varying (TREE_TYPE (name));
else
{
if (name)
get_path_oracle ()->killing_def (name);
if (!range_of_stmt (r, def_stmt, name))
r.set_varying (TREE_TYPE (name));
}
if (bb)
m_non_null.adjust_range (r, name, bb);