From: ghazi Date: Fri, 2 Feb 2007 17:09:55 +0000 (+0000) Subject: * fold-const.c (negate_expr_p, fold_negate_expr): Handle X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7c4eaf725162dd0040901bb98e99cb7648e1b63e;p=thirdparty%2Fgcc.git * fold-const.c (negate_expr_p, fold_negate_expr): Handle COMPLEX_EXPR. testsuite: * gcc.dg/builtins-20.c: Add more cases. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121511 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e5f0a4db038a..5308a3c0f9cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-02-02 Kaveh R. Ghazi + + * fold-const.c (negate_expr_p, fold_negate_expr): Handle + COMPLEX_EXPR. + 2007-02-02 Maxim Kuvyrkov PR target/29682 diff --git a/gcc/fold-const.c b/gcc/fold-const.c index e587ea94034b..241e9dc5ea57 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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fd48ccd53ca4..f83213d41493 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2007-02-02 Kaveh R. Ghazi + + * gcc.dg/builtins-20.c: Add more cases. + 2007-02-02 Maxim Kuvyrkov PR target/29682 diff --git a/gcc/testsuite/gcc.dg/builtins-20.c b/gcc/testsuite/gcc.dg/builtins-20.c index 3c8ac76d5883..3f36ae4fa7e4 100644 --- a/gcc/testsuite/gcc.dg/builtins-20.c +++ b/gcc/testsuite/gcc.dg/builtins-20.c @@ -197,6 +197,24 @@ void test2(double x, double y) if (fmax (x,fmin(y,x)) != x) link_error (); + + if ((__complex__ double) x != -(__complex__ double) (-x)) + link_error (); + + if (x*1i != -(-x*1i)) + link_error (); + + if (x+(x-y)*1i != -(-x+(y-x)*1i)) + link_error (); + + if (x+(x-y)*1i != -(-x-(x-y)*1i)) + link_error (); + + if (ccos(tan(x)+sin(y)*1i) != ccos(-tan(-x)+-sin(-y)*1i)) + link_error (); + + if (ccos(tan(x)+sin(x-y)*1i) != ccos(-tan(-x)-sin(y-x)*1i)) + link_error (); } void test3(__complex__ double x, __complex__ double y, int i) @@ -389,6 +407,21 @@ void test2f(float x, float y) if (fmaxf (x,fminf(y,x)) != x) link_error (); + + if ((__complex__ float) x != -(__complex__ float) (-x)) + link_error (); + + if (x+(x-y)*1i != -(-x+(y-x)*1i)) + link_error (); + + if (x+(x-y)*1i != -(-x-(x-y)*1i)) + link_error (); + + if (ccosf(tanf(x)+sinf(y)*1i) != ccosf(-tanf(-x)+-sinf(-y)*1i)) + link_error (); + + if (ccosf(tanf(x)+sinf(x-y)*1i) != ccosf(-tanf(-x)-sinf(y-x)*1i)) + link_error (); } void test3f(__complex__ float x, __complex__ float y, int i) @@ -581,6 +614,21 @@ void test2l(long double x, long double y) if (fmaxl (x,fminl(y,x)) != x) link_error (); + + if ((__complex__ long double) x != -(__complex__ long double) (-x)) + link_error (); + + if (x+(x-y)*1i != -(-x+(y-x)*1i)) + link_error (); + + if (x+(x-y)*1i != -(-x-(x-y)*1i)) + link_error (); + + if (ccosl(tanl(x)+sinl(y)*1i) != ccosl(-tanl(-x)+-sinl(-y)*1i)) + link_error (); + + if (ccosl(tanl(x)+sinl(x-y)*1i) != ccosl(-tanl(-x)-sinl(y-x)*1i)) + link_error (); } void test3l(__complex__ long double x, __complex__ long double y, int i)