tree-vrp.c (set_defs_to_varying): New helper avoiding writing to vr_const_varying.

2016-09-29  Richard Biener  <rguenther@suse.de>

	* tree-vrp.c (set_defs_to_varying): New helper avoiding
	writing to vr_const_varying.
	(vrp_initialize): Call it.
	(vrp_visit_stmt): Likewise.
	(evrp_dom_walker::before_dom_children): Likewise.

From-SVN: r240612
This commit is contained in:
Richard Biener 2016-09-29 07:20:13 +00:00 committed by Richard Biener
parent ea60dd34cd
commit 4d6484dd58
2 changed files with 29 additions and 20 deletions

View File

@ -1,3 +1,11 @@
2016-09-29 Richard Biener <rguenther@suse.de>
* tree-vrp.c (set_defs_to_varying): New helper avoiding
writing to vr_const_varying.
(vrp_initialize): Call it.
(vrp_visit_stmt): Likewise.
(evrp_dom_walker::before_dom_children): Likewise.
2016-09-29 Richard Biener <rguenther@suse.de>
* tree-vect-stmts.c (vectorizable_load): Avoid emitting vector

View File

@ -710,6 +710,23 @@ get_value_range (const_tree var)
return vr;
}
/* Set value-ranges of all SSA names defined by STMT to varying. */
static void
set_defs_to_varying (gimple *stmt)
{
ssa_op_iter i;
tree def;
FOR_EACH_SSA_TREE_OPERAND (def, stmt, i, SSA_OP_DEF)
{
value_range *vr = get_value_range (def);
/* Avoid writing to vr_const_varying get_value_range may return. */
if (vr->type != VR_VARYING)
set_value_range_to_varying (vr);
}
}
/* Return true, if VAL1 and VAL2 are equal values for VRP purposes. */
static inline bool
@ -7022,10 +7039,7 @@ vrp_initialize ()
prop_set_simulate_again (stmt, true);
else if (!stmt_interesting_for_vrp (stmt))
{
ssa_op_iter i;
tree def;
FOR_EACH_SSA_TREE_OPERAND (def, stmt, i, SSA_OP_DEF)
set_value_range_to_varying (get_value_range (def));
set_defs_to_varying (stmt);
prop_set_simulate_again (stmt, false);
}
else
@ -7901,8 +7915,6 @@ vrp_visit_stmt (gimple *stmt, edge *taken_edge_p, tree *output_p)
{
value_range vr = VR_INITIALIZER;
tree lhs = gimple_get_lhs (stmt);
tree def;
ssa_op_iter iter;
extract_range_from_stmt (stmt, taken_edge_p, output_p, &vr);
if (*output_p)
@ -7997,8 +8009,7 @@ vrp_visit_stmt (gimple *stmt, edge *taken_edge_p, tree *output_p)
/* All other statements produce nothing of interest for VRP, so mark
their outputs varying and prevent further simulation. */
FOR_EACH_SSA_TREE_OPERAND (def, stmt, iter, SSA_OP_DEF)
set_value_range_to_varying (get_value_range (def));
set_defs_to_varying (stmt);
return (*taken_edge_p) ? SSA_PROP_INTERESTING : SSA_PROP_VARYING;
}
@ -10726,12 +10737,7 @@ evrp_dom_walker::before_dom_children (basic_block bb)
&& (vr.type == VR_RANGE || vr.type == VR_ANTI_RANGE))
update_value_range (output, &vr);
else
{
tree def;
ssa_op_iter iter;
FOR_EACH_SSA_TREE_OPERAND (def, stmt, iter, SSA_OP_DEF)
set_value_range_to_varying (get_value_range (def));
}
set_defs_to_varying (stmt);
/* Try folding stmts with the VR discovered. */
bool did_replace
@ -10780,12 +10786,7 @@ evrp_dom_walker::before_dom_children (basic_block bb)
}
}
else
{
tree def;
ssa_op_iter iter;
FOR_EACH_SSA_TREE_OPERAND (def, stmt, iter, SSA_OP_DEF)
set_value_range_to_varying (get_value_range (def));
}
set_defs_to_varying (stmt);
}
bb->flags |= BB_VISITED;
return NULL;