Commit 4efa9261 by Eric Botcazou Committed by Eric Botcazou

re PR tree-optimization/53501 (scev introduces signed overflow)

	PR middle-end/53501
	* fold-const.c (fold_binary_loc): Refine previous change.
testsuite/
	* c-c++-common/restrict-2.c: Revert previous change.

From-SVN: r188118
parent 3dfaf1d7
2012-06-01 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/53501
* fold-const.c (fold_binary_loc): Refine previous change.
2012-06-01 Olivier Hainque <hainque@adacore.com> 2012-06-01 Olivier Hainque <hainque@adacore.com>
* config/rs6000/vxworks.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Restore * config/rs6000/vxworks.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Restore
......
...@@ -10042,15 +10042,18 @@ fold_binary_loc (location_t loc, ...@@ -10042,15 +10042,18 @@ fold_binary_loc (location_t loc,
} }
} }
/* Handle (A1 * C1) + (A2 * C2) with A1, A2 or C1, C2 being the /* Handle (A1 * C1) + (A2 * C2) with A1, A2 or C1, C2 being the same or
same or one. Make sure type is not saturating. one. Make sure the type is not saturating and has the signedness of
fold_plusminus_mult_expr will re-associate. */ the stripped operands, as fold_plusminus_mult_expr will re-associate.
if ((TREE_CODE (op0) == MULT_EXPR ??? The latter condition should use TYPE_OVERFLOW_* flags instead. */
|| TREE_CODE (op1) == MULT_EXPR) if ((TREE_CODE (arg0) == MULT_EXPR
|| TREE_CODE (arg1) == MULT_EXPR)
&& !TYPE_SATURATING (type) && !TYPE_SATURATING (type)
&& TYPE_UNSIGNED (type) == TYPE_UNSIGNED (TREE_TYPE (arg0))
&& TYPE_UNSIGNED (type) == TYPE_UNSIGNED (TREE_TYPE (arg1))
&& (!FLOAT_TYPE_P (type) || flag_associative_math)) && (!FLOAT_TYPE_P (type) || flag_associative_math))
{ {
tree tem = fold_plusminus_mult_expr (loc, code, type, op0, op1); tree tem = fold_plusminus_mult_expr (loc, code, type, arg0, arg1);
if (tem) if (tem)
return tem; return tem;
} }
...@@ -10665,15 +10668,18 @@ fold_binary_loc (location_t loc, ...@@ -10665,15 +10668,18 @@ fold_binary_loc (location_t loc,
&& (tem = distribute_real_division (loc, code, type, arg0, arg1))) && (tem = distribute_real_division (loc, code, type, arg0, arg1)))
return tem; return tem;
/* Handle (A1 * C1) - (A2 * C2) with A1, A2 or C1, C2 being the /* Handle (A1 * C1) - (A2 * C2) with A1, A2 or C1, C2 being the same or
same or one. Make sure type is not saturating. one. Make sure the type is not saturating and has the signedness of
fold_plusminus_mult_expr will re-associate. */ the stripped operands, as fold_plusminus_mult_expr will re-associate.
if ((TREE_CODE (op0) == MULT_EXPR ??? The latter condition should use TYPE_OVERFLOW_* flags instead. */
|| TREE_CODE (op1) == MULT_EXPR) if ((TREE_CODE (arg0) == MULT_EXPR
|| TREE_CODE (arg1) == MULT_EXPR)
&& !TYPE_SATURATING (type) && !TYPE_SATURATING (type)
&& TYPE_UNSIGNED (type) == TYPE_UNSIGNED (TREE_TYPE (arg0))
&& TYPE_UNSIGNED (type) == TYPE_UNSIGNED (TREE_TYPE (arg1))
&& (!FLOAT_TYPE_P (type) || flag_associative_math)) && (!FLOAT_TYPE_P (type) || flag_associative_math))
{ {
tree tem = fold_plusminus_mult_expr (loc, code, type, op0, op1); tree tem = fold_plusminus_mult_expr (loc, code, type, arg0, arg1);
if (tem) if (tem)
return tem; return tem;
} }
......
2012-06-01 Eric Botcazou <ebotcazou@adacore.com>
* c-c++-common/restrict-2.c: Revert previous change.
2012-06-01 Jason Merrill <jason@redhat.com> 2012-06-01 Jason Merrill <jason@redhat.com>
PR c++/53137 PR c++/53137
......
...@@ -10,5 +10,5 @@ void foo (float * __restrict__ a, float * __restrict__ b, int n, int j) ...@@ -10,5 +10,5 @@ void foo (float * __restrict__ a, float * __restrict__ b, int n, int j)
/* We should move the RHS of the store out of the loop. */ /* We should move the RHS of the store out of the loop. */
/* { dg-final { scan-tree-dump-times "Moving statement" 10 "lim1" } } */ /* { dg-final { scan-tree-dump-times "Moving statement" 11 "lim1" } } */
/* { dg-final { cleanup-tree-dump "lim1" } } */ /* { dg-final { cleanup-tree-dump "lim1" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment