From: Roger Sayle Date: Sun, 7 Sep 2003 20:32:16 +0000 (+0000) Subject: combine.c (combine_simplify_rtx): Don't convert -(A*B) into (-A)*B if we care about... X-Git-Tag: releases/gcc-3.4.0~3842 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4f61b3b722d34b8cd37376bc1e21879c01296c1b;p=thirdparty%2Fgcc.git combine.c (combine_simplify_rtx): Don't convert -(A*B) into (-A)*B if we care about sign-dependent rounding. * combine.c (combine_simplify_rtx): Don't convert -(A*B) into (-A)*B if we care about sign-dependent rounding. From-SVN: r71178 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d907564ec684..5b10868d6476 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-09-07 Roger Sayle + + * combine.c (combine_simplify_rtx): Don't convert -(A*B) into + (-A)*B if we care about sign-dependent rounding. + 2003-09-07 Gabriel Dos Reis * c-pretty-print.h (pp_c_left_brace): Declare. diff --git a/gcc/combine.c b/gcc/combine.c index 26cdf49dc784..0853a2cc5f96 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -3970,14 +3970,16 @@ combine_simplify_rtx (rtx x, enum machine_mode op0_mode, int last, /* (neg (mult A B)) becomes (mult (neg A) B). This works even for floating-point values. */ - if (GET_CODE (XEXP (x, 0)) == MULT) + if (GET_CODE (XEXP (x, 0)) == MULT + && !HONOR_SIGN_DEPENDENT_ROUNDING (mode)) { temp = simplify_gen_unary (NEG, mode, XEXP (XEXP (x, 0), 0), mode); return gen_binary (MULT, mode, temp, XEXP (XEXP (x, 0), 1)); } /* (neg (xor A 1)) is (plus A -1) if A is known to be either 0 or 1. */ - if (GET_CODE (XEXP (x, 0)) == XOR && XEXP (XEXP (x, 0), 1) == const1_rtx + if (GET_CODE (XEXP (x, 0)) == XOR + && XEXP (XEXP (x, 0), 1) == const1_rtx && nonzero_bits (XEXP (XEXP (x, 0), 0), mode) == 1) return gen_binary (PLUS, mode, XEXP (XEXP (x, 0), 0), constm1_rtx);