Commit 32b436c0 by Eric Botcazou Committed by Eric Botcazou

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
parent 2637bd27
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
......
......@@ -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",
......
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
......
......@@ -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 *-*-* } } */
}
/* { 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;
}
/* { dg-final { scan-tree-dump "x < y" "original" } } */
/* { dg-final { scan-tree-dump "x < y" "original" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "original" } } */
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