]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
* fold-const.c (negate_expr_p): Handle CONJ_EXPR.
authorghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Feb 2007 02:50:39 +0000 (02:50 +0000)
committerghazi <ghazi@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Feb 2007 02:50:39 +0000 (02:50 +0000)
(fold_negate_expr): Likewise.

testsuite:
* gcc.dg/builtins-20.c: Add more cases.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121639 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/builtins-20.c

index 01aa9dc59c117731801b6d38ade51a2e320eefdf..947df6f73c3274223cb37cc05f7978625130a1a1 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * fold-const.c (negate_expr_p): Handle CONJ_EXPR.
+       (fold_negate_expr): Likewise.
+
 2007-02-05  Alexandre Oliva  <aoliva@redhat.com>
 
        PR debug/30189
index c147efafb68bbf4d19b9681944fe6384d4190d7e..0b37a0f943706c4c7df6b094f274b584d9c9df67 100644 (file)
@@ -1015,6 +1015,9 @@ negate_expr_p (tree t)
       return negate_expr_p (TREE_OPERAND (t, 0))
             && negate_expr_p (TREE_OPERAND (t, 1));
 
+    case CONJ_EXPR:
+      return negate_expr_p (TREE_OPERAND (t, 0));
+
     case PLUS_EXPR:
       if (HONOR_SIGN_DEPENDENT_ROUNDING (TYPE_MODE (type))
          || HONOR_SIGNED_ZEROS (TYPE_MODE (type)))
@@ -1145,6 +1148,12 @@ fold_negate_expr (tree t)
                            fold_negate_expr (TREE_OPERAND (t, 1)));
       break;
       
+    case CONJ_EXPR:
+      if (negate_expr_p (t))
+       return fold_build1 (CONJ_EXPR, type,
+                           fold_negate_expr (TREE_OPERAND (t, 0)));
+      break;
+
     case NEGATE_EXPR:
       return TREE_OPERAND (t, 0);
 
index abfefcc631f602db908e5f02a5ba15838be89d0e..f22064aaf6e0d10ff64e5ef70d3f10c7d0015b85 100644 (file)
@@ -1,3 +1,7 @@
+2007-02-05  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
+
+       * gcc.dg/builtins-20.c: Add more cases.
+
 2007-02-05  Alexandre Oliva  <aoliva@redhat.com>
 
        PR debug/30189
index 3f36ae4fa7e4cc16ea94957e1a7f8850db42ca82..7088075511c52718b8651b12cb4fb191f83db160 100644 (file)
@@ -260,6 +260,18 @@ void test3(__complex__ double x, __complex__ double y, int i)
 
   if (ccos(i ? x : ctan(y/x)) != ccos(i ? -x : -ctan(-y/x)))
     link_error();
+
+  if (~x != -~-x)
+    link_error();
+
+  if (ccos(~x) != ccos(-~-x))
+    link_error();
+
+  if (ctan(~(x-y)) != -ctan(~(y-x)))
+    link_error();
+
+  if (ctan(~(x/y)) != -ctan(~(x/-y)))
+    link_error();
 }
 
 void test1f(float x)
@@ -467,6 +479,18 @@ void test3f(__complex__ float x, __complex__ float y, int i)
 
   if (ccosf(i ? x : ctanf(y/x)) != ccosf(i ? -x : -ctanf(-y/x)))
     link_error();
+
+  if (~x != -~-x)
+    link_error();
+
+  if (ccosf(~x) != ccosf(-~-x))
+    link_error();
+
+  if (ctanf(~(x-y)) != -ctanf(~(y-x)))
+    link_error();
+
+  if (ctanf(~(x/y)) != -ctanf(~(x/-y)))
+    link_error();
 }
 
 void test1l(long double x)
@@ -674,6 +698,18 @@ void test3l(__complex__ long double x, __complex__ long double y, int i)
 
   if (ccosl(i ? x : ctanl(y/x)) != ccosl(i ? -x : -ctanl(-y/x)))
     link_error();
+
+  if (~x != -~-x)
+    link_error();
+
+  if (ccosl(~x) != ccosl(-~-x))
+    link_error();
+
+  if (ctanl(~(x-y)) != -ctanl(~(y-x)))
+    link_error();
+
+  if (ctanl(~(x/y)) != -ctanl(~(x/-y)))
+    link_error();
 }
 
 int main()