Commit 8ce6fb5f by Richard Biener Committed by Richard Biener

vr-values.c (vr_values::extract_range_from_ssa_name): Do not put equivalences on UNDEFINED ranges.

2019-06-06  Richard Biener  <rguenther@suse.de>

	* vr-values.c (vr_values::extract_range_from_ssa_name): Do not
	put equivalences on UNDEFINED ranges.
	* gimple-ssa-evrp.c (evrp_dom_walker::before_dom_children):
	Make sure to drop defs of stmts added during simplification
	to VARYING.

From-SVN: r271990
parent ed315c04
2019-06-06 Richard Biener <rguenther@suse.de>
* vr-values.c (vr_values::extract_range_from_ssa_name): Do not
put equivalences on UNDEFINED ranges.
* gimple-ssa-evrp.c (evrp_dom_walker::before_dom_children):
Make sure to drop defs of stmts added during simplification
to VARYING.
2019-06-06 Richard Biener <rguenther@suse.de>
* tree-ssa-structalias.c: Include tree-cfg.h.
(make_heapvar): Do not make heap vars artificial.
(find_func_aliases_for_builtin_call): Handle stack allocation
......
......@@ -175,6 +175,8 @@ evrp_dom_walker::before_dom_children (basic_block bb)
/* Try folding stmts with the VR discovered. */
bool did_replace = evrp_folder.replace_uses_in (stmt);
gimple_stmt_iterator prev_gsi = gsi;
gsi_prev (&prev_gsi);
if (fold_stmt (&gsi, follow_single_use_edges)
|| did_replace)
{
......@@ -191,6 +193,21 @@ evrp_dom_walker::before_dom_children (basic_block bb)
if (did_replace)
{
/* If we wound up generating new stmts during folding
drop all their defs to VARYING. We can't easily
process them because we've already instantiated
ranges on uses on STMT that only hold after it. */
if (gsi_end_p (prev_gsi))
prev_gsi = gsi_start_bb (bb);
else
gsi_next (&prev_gsi);
while (gsi_stmt (prev_gsi) != gsi_stmt (gsi))
{
evrp_range_analyzer.get_vr_values ()
->set_defs_to_varying (gsi_stmt (prev_gsi));
gsi_next (&prev_gsi);
}
/* If we cleaned up EH information from the statement,
remove EH edges. */
if (maybe_clean_or_replace_eh_stmt (old_stmt, stmt))
......
......@@ -719,7 +719,8 @@ vr_values::extract_range_from_ssa_name (value_range *vr, tree var)
else
vr->set (var);
vr->equiv_add (var, get_value_range (var), &vrp_equiv_obstack);
if (!vr->undefined_p ())
vr->equiv_add (var, get_value_range (var), &vrp_equiv_obstack);
}
/* Extract range information from a binary expression OP0 CODE OP1 based on
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment