diff options
author | Andrew Pinski <pinskia@physics.uc.edu> | 2005-11-29 15:26:21 +0000 |
---|---|---|
committer | Andrew Pinski <pinskia@gcc.gnu.org> | 2005-11-29 07:26:21 -0800 |
commit | 189d4130c01540a44347272a18fb3868dc0016f1 (patch) | |
tree | 3b55a7b43a244d368bcd5d085f6112314da17de9 | |
parent | 719fbd99329e0824124b1afd0b62751355c65721 (diff) | |
download | gcc-189d4130c01540a44347272a18fb3868dc0016f1.zip gcc-189d4130c01540a44347272a18fb3868dc0016f1.tar.gz gcc-189d4130c01540a44347272a18fb3868dc0016f1.tar.bz2 |
fold-const.c (negate_expr_p): Return true for BIT_NOT_EXPR.
2005-11-29 Andrew Pinski <pinskia@physics.uc.edu>
* fold-const.c (negate_expr_p): Return true for BIT_NOT_EXPR.
(fold_unary) <case NEGATE_EXPR>: Move -(~a) transformation to ...
(negate_expr): Here.
From-SVN: r107671
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fold-const.c | 12 |
2 files changed, 14 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 081455f..8a73665 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-11-29 Andrew Pinski <pinskia@physics.uc.edu> + + * fold-const.c (negate_expr_p): Return true for BIT_NOT_EXPR. + (fold_unary) <case NEGATE_EXPR>: Move -(~a) transformation to ... + (negate_expr): Here. + 2005-11-29 Ben Elliston <bje@au.ibm.com> * config/i386/i386.h (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN): diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 2d80e66..2718af1 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -953,6 +953,8 @@ negate_expr_p (tree t) /* Check that -CST will not overflow type. */ return may_negate_without_overflow_p (t); + case BIT_NOT_EXPR: + return INTEGRAL_TYPE_P (type); case REAL_CST: case NEGATE_EXPR: @@ -1052,6 +1054,12 @@ negate_expr (tree t) switch (TREE_CODE (t)) { + /* Convert - (~A) to A + 1. */ + case BIT_NOT_EXPR: + if (INTEGRAL_TYPE_P (type)) + return fold_build2 (PLUS_EXPR, type, TREE_OPERAND (t, 0), + build_int_cst (type, 1)); + case INTEGER_CST: tem = fold_negate_const (t, type); if (! TREE_OVERFLOW (tem) @@ -7030,10 +7038,6 @@ fold_unary (enum tree_code code, tree type, tree op0) case NEGATE_EXPR: if (negate_expr_p (arg0)) return fold_convert (type, negate_expr (arg0)); - /* Convert - (~A) to A + 1. */ - if (INTEGRAL_TYPE_P (type) && TREE_CODE (arg0) == BIT_NOT_EXPR) - return fold_build2 (PLUS_EXPR, type, TREE_OPERAND (arg0, 0), - build_int_cst (type, 1)); return NULL_TREE; case ABS_EXPR: |