tree-vrp.c (vrp_visit_assignment_or_call): Handle simplifications to SSA names via extract_range_from_ssa_name if allowed.

2016-11-28  Richard Biener  <rguenther@suse.de>

	* tree-vrp.c (vrp_visit_assignment_or_call): Handle
	simplifications to SSA names via extract_range_from_ssa_name
	if allowed.

From-SVN: r242921
This commit is contained in:
Richard Biener 2016-11-28 15:04:45 +00:00 committed by Richard Biener
parent 6522add29b
commit 1c3099cca5
2 changed files with 24 additions and 4 deletions

View file

@ -1,3 +1,9 @@
2016-11-28 Richard Biener <rguenther@suse.de>
* tree-vrp.c (vrp_visit_assignment_or_call): Handle
simplifications to SSA names via extract_range_from_ssa_name
if allowed.
2016-11-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/78542

View file

@ -7132,17 +7132,31 @@ vrp_visit_assignment_or_call (gimple *stmt, tree *output_p, value_range *vr)
&& TYPE_MAX_VALUE (TREE_TYPE (lhs)))
|| POINTER_TYPE_P (TREE_TYPE (lhs))))
{
*output_p = lhs;
/* Try folding the statement to a constant first. */
tree tem = gimple_fold_stmt_to_constant_1 (stmt, vrp_valueize,
vrp_valueize_1);
if (tem && is_gimple_min_invariant (tem))
set_value_range_to_value (vr, tem, NULL);
if (tem)
{
if (TREE_CODE (tem) == SSA_NAME
&& (SSA_NAME_IS_DEFAULT_DEF (tem)
|| ! prop_simulate_again_p (SSA_NAME_DEF_STMT (tem))))
{
extract_range_from_ssa_name (vr, tem);
return;
}
else if (is_gimple_min_invariant (tem))
{
set_value_range_to_value (vr, tem, NULL);
return;
}
}
/* Then dispatch to value-range extracting functions. */
else if (code == GIMPLE_CALL)
if (code == GIMPLE_CALL)
extract_range_basic (vr, stmt);
else
extract_range_from_assignment (vr, as_a <gassign *> (stmt));
*output_p = lhs;
}
}