aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2005-11-29 15:26:21 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2005-11-29 07:26:21 -0800
commit189d4130c01540a44347272a18fb3868dc0016f1 (patch)
tree3b55a7b43a244d368bcd5d085f6112314da17de9 /gcc
parent719fbd99329e0824124b1afd0b62751355c65721 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/fold-const.c12
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: