From 32b436c0b9ba7050e26f4b9a858a4b186c6998ef Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Mon, 28 Jul 2014 08:55:17 +0000 Subject: 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 --- gcc/fold-const.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'gcc/fold-const.c') diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 0999625..7180662 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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", -- cgit v1.1