fold-const.c (tree_expr_nonnegative_p): Handle BIT_XOR_EXPR like BIT_IOR_EXPR...
authorRoger Sayle <roger@eyesopen.com>
Fri, 26 Mar 2004 01:20:46 +0000 (01:20 +0000)
committerRoger Sayle <sayle@gcc.gnu.org>
Fri, 26 Mar 2004 01:20:46 +0000 (01:20 +0000)
* fold-const.c (tree_expr_nonnegative_p): Handle BIT_XOR_EXPR like
BIT_IOR_EXPR; A^B is nonnegative when A and B are nonnegative.

* gcc.dg/compare8.c: Add an additional test for XOR.

From-SVN: r79979

gcc/ChangeLog
gcc/fold-const.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/compare8.c

index c06551f69f9e5d0cf8174fd8e3efd559154f0845..c56fb86c02bc7f81287cea0e0dde397e73556de5 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-25  Roger Sayle  <roger@eyesopen.com>
+
+       * fold-const.c (tree_expr_nonnegative_p): Handle BIT_XOR_EXPR like
+       BIT_IOR_EXPR; A^B is nonnegative when A and B are nonnegative.
+
 2004-03-25  Richard Henderson  <rth@redhat.com>
 
        PR 11527
index e8c36f029ee740eb598f598f3127a2a75709c29a..7fbbc8ec8b5b98606315fdc84a7c0041d5de8190 100644 (file)
@@ -8722,6 +8722,7 @@ tree_expr_nonnegative_p (tree t)
       return tree_expr_nonnegative_p (TREE_OPERAND (t, 1))
             || tree_expr_nonnegative_p (TREE_OPERAND (t, 0));
     case BIT_IOR_EXPR:
+    case BIT_XOR_EXPR:
       return tree_expr_nonnegative_p (TREE_OPERAND (t, 0))
             && tree_expr_nonnegative_p (TREE_OPERAND (t, 1));
 
index f16de2bd5a2e1cd75d482ba94a414155b40ff88d..208a55f277005a57ea14fc40a81726f420e3be7a 100644 (file)
@@ -1,3 +1,7 @@
+2004-03-25  Roger Sayle  <roger@eyesopen.com>
+
+       * gcc.dg/compare8.c: Add an additional test for XOR.
+
 2004-03-25  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * gcc.dg/torture/builtin-ctype-1.c: New test.
index 6d0408564d8ca07f70e578a8597334441bf37459..d723c45a0956ce641ade9a27961ede16d3813de2 100644 (file)
@@ -13,3 +13,9 @@ g(unsigned short a1, unsigned short a2, unsigned int b)
   return ((a1+a2)&5) > b ? 2 : 3;  /* { dg-bogus "signed and unsigned" } */
 }
 
+int
+h(unsigned short a1, unsigned short a2, unsigned int b)
+{
+  return ((a1+a2)^5) > b ? 2 : 3;  /* { dg-bogus "signed and unsigned" } */
+}
+