diff options
author | James A. Morrison <phython@gcc.gnu.org> | 2005-04-20 02:31:26 +0000 |
---|---|---|
committer | James A. Morrison <phython@gcc.gnu.org> | 2005-04-20 02:31:26 +0000 |
commit | 33ab6245545612b87af5868b4f6e6373cc733791 (patch) | |
tree | 16946e0d737d4e878583432cead2d91d65f93a7a /gcc | |
parent | 72a3b9d27900c00d2b560dfbec36058759ed4f27 (diff) | |
download | gcc-33ab6245545612b87af5868b4f6e6373cc733791.zip gcc-33ab6245545612b87af5868b4f6e6373cc733791.tar.gz gcc-33ab6245545612b87af5868b4f6e6373cc733791.tar.bz2 |
fold-const (fold_binary): Fold ~X ^ ~ Y to X ^ Y.
2005-04-19 James A. Morrison <phython@gcc.gnu.org>
* fold-const (fold_binary): Fold ~X ^ ~ Y to X ^ Y.
From-SVN: r98434
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/fold-const.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/fold-xor-1.c | 12 |
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6b1c040..237ebcd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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> diff --git a/gcc/fold-const.c b/gcc/fold-const.c index bbd14c0..2c90d0c 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b281f7d..1782fed 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..c8334e1 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fold-xor-1.c @@ -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" } } */ |