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