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:
Eric Botcazou 2014-07-28 08:55:17 +00:00 committed by Eric Botcazou
parent 2637bd27e8
commit 32b436c0b9
6 changed files with 30 additions and 3 deletions

View File

@ -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>
PR middle-end/52478

View File

@ -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. */
if (TREE_CODE (arg0) == MINUS_EXPR
&& (equality_code || TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (arg0)))
&& equality_code
&& 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)
fold_overflow_warning ("assuming signed overflow does not occur "
"when changing X - Y cmp 0 to X cmp Y",

View File

@ -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>
PR middle-end/52478

View File

@ -7,5 +7,5 @@
int
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 *-*-* } } */
}

View File

@ -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" } } */

View File

@ -7,5 +7,5 @@ foo (int x, int y)
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" } } */