Commit 1aeef526 by Kaveh R. Ghazi Committed by Kaveh Ghazi

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
parent f6ec1d11
2007-02-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* fold-const.c (negate_expr_p, fold_negate_expr): Handle
COMPLEX_EXPR.
2007-02-02 Maxim Kuvyrkov <mkuvyrkov@ispras.ru> 2007-02-02 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
PR target/29682 PR target/29682
......
...@@ -1011,6 +1011,10 @@ negate_expr_p (tree t) ...@@ -1011,6 +1011,10 @@ negate_expr_p (tree t)
return negate_expr_p (TREE_REALPART (t)) return negate_expr_p (TREE_REALPART (t))
&& negate_expr_p (TREE_IMAGPART (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: case PLUS_EXPR:
if (HONOR_SIGN_DEPENDENT_ROUNDING (TYPE_MODE (type)) if (HONOR_SIGN_DEPENDENT_ROUNDING (TYPE_MODE (type))
|| HONOR_SIGNED_ZEROS (TYPE_MODE (type))) || HONOR_SIGNED_ZEROS (TYPE_MODE (type)))
...@@ -1134,6 +1138,13 @@ fold_negate_expr (tree t) ...@@ -1134,6 +1138,13 @@ fold_negate_expr (tree t)
} }
break; 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: case NEGATE_EXPR:
return TREE_OPERAND (t, 0); return TREE_OPERAND (t, 0);
......
2007-02-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* gcc.dg/builtins-20.c: Add more cases.
2007-02-02 Maxim Kuvyrkov <mkuvyrkov@ispras.ru> 2007-02-02 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
PR target/29682 PR target/29682
...@@ -197,6 +197,24 @@ void test2(double x, double y) ...@@ -197,6 +197,24 @@ void test2(double x, double y)
if (fmax (x,fmin(y,x)) != x) if (fmax (x,fmin(y,x)) != x)
link_error (); 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) void test3(__complex__ double x, __complex__ double y, int i)
...@@ -389,6 +407,21 @@ void test2f(float x, float y) ...@@ -389,6 +407,21 @@ void test2f(float x, float y)
if (fmaxf (x,fminf(y,x)) != x) if (fmaxf (x,fminf(y,x)) != x)
link_error (); 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) void test3f(__complex__ float x, __complex__ float y, int i)
...@@ -581,6 +614,21 @@ void test2l(long double x, long double y) ...@@ -581,6 +614,21 @@ void test2l(long double x, long double y)
if (fmaxl (x,fminl(y,x)) != x) if (fmaxl (x,fminl(y,x)) != x)
link_error (); 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) void test3l(__complex__ long double x, __complex__ long double y, int i)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment