fold-const.c (negate_expr_p): MULT_EXPRs and RDIV_EXPRs are easy to negate if either...
authorRoger Sayle <roger@eyesopen.com>
Thu, 14 Aug 2003 20:53:26 +0000 (20:53 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Thu, 14 Aug 2003 20:53:26 +0000 (20:53 +0000)
commit8ab49fef1f21ff68d39a28b1ddc98d4822603516
tree9a1c805b0d9f0abdd6f5f935e7f53f0fb1091c08
parent74bed51bf60b6c4a51a05b6fa54cde5be2194b40
fold-const.c (negate_expr_p): MULT_EXPRs and RDIV_EXPRs are easy to negate if either operand is easy to negate...

* fold-const.c (negate_expr_p): MULT_EXPRs and RDIV_EXPRs are easy
to negate if either operand is easy to negate, if we don't care
about sign-dependent rounding.
(negate_expr): Make the logic to negate a REAL_CST explicit.
Attempt to negate a MULT_EXPR or RDIV_EXPR by negating an operand
that's easy to negate, if we don't honor sign-dependent rounding.
(fold <MULT_EXPR>): Optimize -A * B as A * -B if B is easy to
negate, and the symmetric A * -B as -A * B if A is easy to negate.
(fold <RDIV_EXPR>): Likewise, optimize -A/B and C/-D as A/-B and
-C/D if B and C are cheap to negate.  Add an explicit rule to
optimize X/-1.0 as -X when we don't care about signaling NaNs.

From-SVN: r70455
gcc/ChangeLog
gcc/fold-const.c