re PR middle-end/61734 (Regression in ABS_EXPR recognition)
PR middle-end/61734 * fold-const.c (fold_comparison): Disable X - Y CMP 0 to X CMP Y for operators other than the equality operators. From-SVN: r213118
This commit is contained in:
parent
2637bd27e8
commit
32b436c0b9
|
@ -1,3 +1,9 @@
|
||||||
|
2014-07-28 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
PR middle-end/61734
|
||||||
|
* fold-const.c (fold_comparison): Disable X - Y CMP 0 to X CMP Y for
|
||||||
|
operators other than the equality operators.
|
||||||
|
|
||||||
2014-07-28 Richard Biener <rguenther@suse.de>
|
2014-07-28 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR middle-end/52478
|
PR middle-end/52478
|
||||||
|
|
|
@ -9026,9 +9026,13 @@ fold_comparison (location_t loc, enum tree_code code, tree type,
|
||||||
|
|
||||||
/* Transform comparisons of the form X - Y CMP 0 to X CMP Y. */
|
/* Transform comparisons of the form X - Y CMP 0 to X CMP Y. */
|
||||||
if (TREE_CODE (arg0) == MINUS_EXPR
|
if (TREE_CODE (arg0) == MINUS_EXPR
|
||||||
&& (equality_code || TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (arg0)))
|
&& equality_code
|
||||||
&& integer_zerop (arg1))
|
&& integer_zerop (arg1))
|
||||||
{
|
{
|
||||||
|
/* ??? The transformation is valid for the other operators if overflow
|
||||||
|
is undefined for the type, but performing it here badly interacts
|
||||||
|
with the transformation in fold_cond_expr_with_comparison which
|
||||||
|
attempts to synthetize ABS_EXPR. */
|
||||||
if (!equality_code)
|
if (!equality_code)
|
||||||
fold_overflow_warning ("assuming signed overflow does not occur "
|
fold_overflow_warning ("assuming signed overflow does not occur "
|
||||||
"when changing X - Y cmp 0 to X cmp Y",
|
"when changing X - Y cmp 0 to X cmp Y",
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2014-07-28 Eric Botcazou <ebotcazou@adacore.com>
|
||||||
|
|
||||||
|
* gcc.dg/fold-abs-5.c: New test.
|
||||||
|
* gcc.dg/Wstrict-overflow-25.c: XFAIL everywhere.
|
||||||
|
* gcc.dg/fold-compare-8.c: Likewise.
|
||||||
|
|
||||||
2014-07-28 Richard Biener <rguenther@suse.de>
|
2014-07-28 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
PR middle-end/52478
|
PR middle-end/52478
|
||||||
|
|
|
@ -7,5 +7,5 @@
|
||||||
int
|
int
|
||||||
foo (int x, int y)
|
foo (int x, int y)
|
||||||
{
|
{
|
||||||
return x - y < 0; /* { dg-warning "assuming signed overflow does not occur" "correct warning" } */
|
return x - y < 0; /* { dg-warning "assuming signed overflow does not occur" "correct warning" { xfail *-*-* } } */
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2 -fdump-tree-original" } */
|
||||||
|
|
||||||
|
int test (int a, int b, int sum)
|
||||||
|
{
|
||||||
|
sum += ((a - b) > 0 ? (a - b) : -(a - b));
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* { dg-final { scan-tree-dump "ABS" "original" } } */
|
||||||
|
/* { dg-final { cleanup-tree-dump "original" } } */
|
|
@ -7,5 +7,5 @@ foo (int x, int y)
|
||||||
return x - y < 0;
|
return x - y < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* { dg-final { scan-tree-dump "x < y" "original" } } */
|
/* { dg-final { scan-tree-dump "x < y" "original" { xfail *-*-* } } } */
|
||||||
/* { dg-final { cleanup-tree-dump "original" } } */
|
/* { dg-final { cleanup-tree-dump "original" } } */
|
||||||
|
|
Loading…
Reference in New Issue