re PR tree-optimization/88301 (Optimization regression with undefined unsigned overflow)

2018-12-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/88301
	* tree-vrp.c (register_edge_assert_for_2): Fix sign-conversion
	issues in last commit.

From-SVN: r266773
This commit is contained in:
Richard Biener 2018-12-04 11:26:14 +00:00 committed by Richard Biener
parent 580b8d9b54
commit f0e98f1bb4
2 changed files with 21 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2018-12-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/88301
* tree-vrp.c (register_edge_assert_for_2): Fix sign-conversion
issues in last commit.
2018-12-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/88315

View file

@ -2973,6 +2973,21 @@ register_edge_assert_for_2 (tree name, edge e,
wide_int rmin, rmax;
tree rhs1 = gimple_assign_rhs1 (def_stmt);
if (INTEGRAL_TYPE_P (TREE_TYPE (rhs1))
/* Make sure the relation preserves the upper/lower boundary of
the range conservatively. */
&& (comp_code == NE_EXPR
|| comp_code == EQ_EXPR
|| (TYPE_SIGN (TREE_TYPE (name))
== TYPE_SIGN (TREE_TYPE (rhs1)))
|| ((comp_code == LE_EXPR
|| comp_code == LT_EXPR)
&& !TYPE_UNSIGNED (TREE_TYPE (rhs1)))
|| ((comp_code == GE_EXPR
|| comp_code == GT_EXPR)
&& TYPE_UNSIGNED (TREE_TYPE (rhs1))))
/* And the conversion does not alter the value we compare
against and all values in rhs1 can be represented in
the converted to type. */
&& int_fits_type_p (val, TREE_TYPE (rhs1))
&& ((TYPE_PRECISION (TREE_TYPE (name))
> TYPE_PRECISION (TREE_TYPE (rhs1)))