re PR tree-optimization/53501 (scev introduces signed overflow)
2012-05-30 Richard Guenther <rguenther@suse.de> PR middle-end/53501 * fold-const.c (fold_binary_loc): Make sure to call fold_plusminus_mult_expr with the original sign of operands. * gcc.dg/torture/pr53501.c: New testcase. * c-c++-common/restrict-2.c: Adjust. From-SVN: r188009
This commit is contained in:
parent
08cad606cd
commit
e40a96803c
|
@ -1,3 +1,9 @@
|
|||
2012-05-30 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/53501
|
||||
* fold-const.c (fold_binary_loc): Make sure to call
|
||||
fold_plusminus_mult_expr with the original sign of operands.
|
||||
|
||||
2012-05-30 Steven Bosscher <steven@gcc.gnu.org>
|
||||
|
||||
* Makefile.in: Fix many dependencies.
|
||||
|
|
|
@ -10045,12 +10045,12 @@ 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 (arg0) == MULT_EXPR
|
||||
|| TREE_CODE (arg1) == MULT_EXPR)
|
||||
if ((TREE_CODE (op0) == MULT_EXPR
|
||||
|| TREE_CODE (op1) == MULT_EXPR)
|
||||
&& !TYPE_SATURATING (type)
|
||||
&& (!FLOAT_TYPE_P (type) || flag_associative_math))
|
||||
{
|
||||
tree tem = fold_plusminus_mult_expr (loc, code, type, arg0, arg1);
|
||||
tree tem = fold_plusminus_mult_expr (loc, code, type, op0, op1);
|
||||
if (tem)
|
||||
return tem;
|
||||
}
|
||||
|
@ -10668,12 +10668,12 @@ 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 (arg0) == MULT_EXPR
|
||||
|| TREE_CODE (arg1) == MULT_EXPR)
|
||||
if ((TREE_CODE (op0) == MULT_EXPR
|
||||
|| TREE_CODE (op1) == MULT_EXPR)
|
||||
&& !TYPE_SATURATING (type)
|
||||
&& (!FLOAT_TYPE_P (type) || flag_associative_math))
|
||||
{
|
||||
tree tem = fold_plusminus_mult_expr (loc, code, type, arg0, arg1);
|
||||
tree tem = fold_plusminus_mult_expr (loc, code, type, op0, op1);
|
||||
if (tem)
|
||||
return tem;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2012-05-30 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR middle-end/53501
|
||||
* gcc.dg/torture/pr53501.c: New testcase.
|
||||
* c-c++-common/restrict-2.c: Adjust.
|
||||
|
||||
2012-05-30 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* gcc.target/powerpc/powerpc.exp: Load torture-options.exp, call
|
||||
|
|
|
@ -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" 11 "lim1" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Moving statement" 10 "lim1" } } */
|
||||
/* { dg-final { cleanup-tree-dump "lim1" } } */
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
/* { dg-do run } */
|
||||
|
||||
extern void abort (void);
|
||||
|
||||
int e[100], n, here;
|
||||
|
||||
void __attribute__((noinline))
|
||||
foo(void)
|
||||
{
|
||||
int i, k = 0;
|
||||
for (i = 0; i < n; ++i) { e[k] = 10; ++k; e[k] = 10; ++k; }
|
||||
for (i = 0; i < k; ++i) here = 1;
|
||||
if (here != 1)
|
||||
abort ();
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
n = 10;
|
||||
foo();
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue