From 189d4130c01540a44347272a18fb3868dc0016f1 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Tue, 29 Nov 2005 15:26:21 +0000 Subject: [PATCH] fold-const.c (negate_expr_p): Return true for BIT_NOT_EXPR. 2005-11-29 Andrew Pinski * fold-const.c (negate_expr_p): Return true for BIT_NOT_EXPR. (fold_unary) : Move -(~a) transformation to ... (negate_expr): Here. From-SVN: r107671 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 12 ++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 081455fe63b..8a736655b6f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-11-29 Andrew Pinski + + * fold-const.c (negate_expr_p): Return true for BIT_NOT_EXPR. + (fold_unary) : Move -(~a) transformation to ... + (negate_expr): Here. + 2005-11-29 Ben Elliston * config/i386/i386.h (FORCE_PREFERRED_STACK_BOUNDARY_IN_MAIN): diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 2d80e66eb05..2718af1490f 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: -- 2.30.2