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:
parent
ea60dd34cd
commit
4d6484dd58
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue