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
This commit is contained in:
parent
3dfaf1d7db
commit
4efa926130
4 changed files with 28 additions and 13 deletions
|
@ -1,3 +1,8 @@
|
|||
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>
|
||||
|
||||
* config/rs6000/vxworks.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Restore
|
||||
|
|
|
@ -10042,15 +10042,18 @@ fold_binary_loc (location_t loc,
|
|||
}
|
||||
}
|
||||
|
||||
/* Handle (A1 * C1) + (A2 * C2) with A1, A2 or C1, C2 being the
|
||||
same or one. Make sure type is not saturating.
|
||||
fold_plusminus_mult_expr will re-associate. */
|
||||
if ((TREE_CODE (op0) == MULT_EXPR
|
||||
|| TREE_CODE (op1) == MULT_EXPR)
|
||||
/* Handle (A1 * C1) + (A2 * C2) with A1, A2 or C1, C2 being the same or
|
||||
one. Make sure the type is not saturating and has the signedness of
|
||||
the stripped operands, as fold_plusminus_mult_expr will re-associate.
|
||||
??? The latter condition should use TYPE_OVERFLOW_* flags instead. */
|
||||
if ((TREE_CODE (arg0) == MULT_EXPR
|
||||
|| TREE_CODE (arg1) == MULT_EXPR)
|
||||
&& !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))
|
||||
{
|
||||
tree tem = fold_plusminus_mult_expr (loc, code, type, op0, op1);
|
||||
tree tem = fold_plusminus_mult_expr (loc, code, type, arg0, arg1);
|
||||
if (tem)
|
||||
return tem;
|
||||
}
|
||||
|
@ -10665,15 +10668,18 @@ fold_binary_loc (location_t loc,
|
|||
&& (tem = distribute_real_division (loc, code, type, arg0, arg1)))
|
||||
return tem;
|
||||
|
||||
/* Handle (A1 * C1) - (A2 * C2) with A1, A2 or C1, C2 being the
|
||||
same or one. Make sure type is not saturating.
|
||||
fold_plusminus_mult_expr will re-associate. */
|
||||
if ((TREE_CODE (op0) == MULT_EXPR
|
||||
|| TREE_CODE (op1) == MULT_EXPR)
|
||||
/* Handle (A1 * C1) - (A2 * C2) with A1, A2 or C1, C2 being the same or
|
||||
one. Make sure the type is not saturating and has the signedness of
|
||||
the stripped operands, as fold_plusminus_mult_expr will re-associate.
|
||||
??? The latter condition should use TYPE_OVERFLOW_* flags instead. */
|
||||
if ((TREE_CODE (arg0) == MULT_EXPR
|
||||
|| TREE_CODE (arg1) == MULT_EXPR)
|
||||
&& !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))
|
||||
{
|
||||
tree tem = fold_plusminus_mult_expr (loc, code, type, op0, op1);
|
||||
tree tem = fold_plusminus_mult_expr (loc, code, type, arg0, arg1);
|
||||
if (tem)
|
||||
return tem;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
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>
|
||||
|
||||
PR c++/53137
|
||||
|
|
|
@ -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. */
|
||||
|
||||
/* { 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" } } */
|
||||
|
|
Loading…
Add table
Reference in a new issue