+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
&& 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;
}
}