OSDN Git Service

2005-04-19 James A. Morrison <phython@gcc.gnu.org>
authorphython <phython@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Apr 2005 02:31:26 +0000 (02:31 +0000)
committerphython <phython@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 20 Apr 2005 02:31:26 +0000 (02:31 +0000)
* fold-const (fold_binary):  Fold ~X ^ ~ Y to X ^ Y.

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

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/fold-xor-1.c [new file with mode: 0644]

index 6b1c040..237ebcd 100644 (file)
@@ -1,3 +1,7 @@
+2005-04-19  James A. Morrison  <phython@gcc.gnu.org>
+
+       * fold-const (fold_binary):  Fold ~X ^ ~ Y to X ^ Y.
+
 2005-04-20  Michael Pogue  <michael.pogue@sun.com>
             Joseph S. Myers  <joseph@codesourcery.com>
 
index bbd14c0..2c90d0c 100644 (file)
@@ -8174,6 +8174,13 @@ fold_binary (enum tree_code code, tree type, tree op0, tree op1)
          goto bit_ior;
        }
 
+      /* Convert ~X ^ ~Y to X ^ Y.  */
+      if (TREE_CODE (arg0) == BIT_NOT_EXPR
+         && TREE_CODE (arg1) == BIT_NOT_EXPR)
+       return fold_build2 (code, type,
+                           fold_convert (type, TREE_OPERAND (arg0, 0)),
+                           fold_convert (type, TREE_OPERAND (arg1, 0)));
+
       /* See if this can be simplified into a rotate first.  If that
         is unsuccessful continue in the association code.  */
       goto bit_rotate;
index b281f7d..1782fed 100644 (file)
@@ -1,3 +1,7 @@
+2005-04-19  James A. Morrison  <phython@gcc.gnu.org>
+
+       * gcc.dg/fold-xor-1.c: New test.
+
 2005-04-19  James E. Wilson  <wilson@specifixinc.com>
 
        PR target/20670
diff --git a/gcc/testsuite/gcc.dg/fold-xor-1.c b/gcc/testsuite/gcc.dg/fold-xor-1.c
new file mode 100644 (file)
index 0000000..c8334e1
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-fdump-tree-generic" } */
+
+int f (int a, int b) {
+  return ~a ^ ~b;
+}
+
+unsigned int g (unsigned int a, unsigned int b) {
+  return ~a ^ ~b;
+}
+/* { dg-final { scan-tree-dump-times "a \\^ b" 2 "generic" } } */
+/* { dg-final { cleanup-tree-dump "generic" } } */