From: Richard Biener Date: Mon, 28 Nov 2016 15:04:45 +0000 (+0000) Subject: tree-vrp.c (vrp_visit_assignment_or_call): Handle simplifications to SSA names via... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1c3099cca56c3639e29463f70de24323e7be96d6;p=gcc.git 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 * tree-vrp.c (vrp_visit_assignment_or_call): Handle simplifications to SSA names via extract_range_from_ssa_name if allowed. From-SVN: r242921 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 15129d98b53..9baf4bd8d46 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-28 Richard Biener + + * 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 PR tree-optimization/78542 diff --git a/gcc/tree-vrp.c b/gcc/tree-vrp.c index 8bea4dbc3fb..f3d571d98b2 100644 --- a/gcc/tree-vrp.c +++ b/gcc/tree-vrp.c @@ -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 (stmt)); - *output_p = lhs; } }