aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>2007-02-02 17:09:55 +0000
committerKaveh Ghazi <ghazi@gcc.gnu.org>2007-02-02 17:09:55 +0000
commit1aeef526793e63252dd428d926809378d5f46795 (patch)
tree121f473987a109b31958eb1bdf6d5fa7f38c2121 /gcc/fold-const.c
parentf6ec1d11632ab0a33dacb5043ac4819d5a91759e (diff)
downloadgcc-1aeef526793e63252dd428d926809378d5f46795.zip
gcc-1aeef526793e63252dd428d926809378d5f46795.tar.gz
gcc-1aeef526793e63252dd428d926809378d5f46795.tar.bz2
fold-const.c (negate_expr_p, [...]): Handle COMPLEX_EXPR.
* fold-const.c (negate_expr_p, fold_negate_expr): Handle COMPLEX_EXPR. testsuite: * gcc.dg/builtins-20.c: Add more cases. From-SVN: r121511
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index e587ea9..241e9dc 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -1011,6 +1011,10 @@ negate_expr_p (tree t)
return negate_expr_p (TREE_REALPART (t))
&& negate_expr_p (TREE_IMAGPART (t));
+ case COMPLEX_EXPR:
+ return negate_expr_p (TREE_OPERAND (t, 0))
+ && negate_expr_p (TREE_OPERAND (t, 1));
+
case PLUS_EXPR:
if (HONOR_SIGN_DEPENDENT_ROUNDING (TYPE_MODE (type))
|| HONOR_SIGNED_ZEROS (TYPE_MODE (type)))
@@ -1134,6 +1138,13 @@ fold_negate_expr (tree t)
}
break;
+ case COMPLEX_EXPR:
+ if (negate_expr_p (t))
+ return fold_build2 (COMPLEX_EXPR, type,
+ fold_negate_expr (TREE_OPERAND (t, 0)),
+ fold_negate_expr (TREE_OPERAND (t, 1)));
+ break;
+
case NEGATE_EXPR:
return TREE_OPERAND (t, 0);