* fold-const.c (fold) <IOR_EXPR>: Fold x | x as x.
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 7 Mar 2004 20:13:50 +0000 (20:13 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 7 Mar 2004 20:13:50 +0000 (20:13 +0000)
<XOR_EXPR>: Fold x ^ x as zero.
<AND_EXPR>: Fold x & x as x.

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

gcc/ChangeLog
gcc/fold-const.c

index 2094b29..b0c115e 100644 (file)
@@ -1,5 +1,11 @@
 2004-03-07  Roger Sayle  <roger@eyesopen.com>
 
+       * fold-const.c (fold) <IOR_EXPR>: Fold x | x as x.
+       <XOR_EXPR>: Fold x ^ x as zero.
+       <AND_EXPR>: Fold x & x as x.
+
+2004-03-07  Roger Sayle  <roger@eyesopen.com>
+
        * fold-const.c (fold) <EQ_EXPR>: Rewrite optimization to transform
        "foo++ == const" into "++foo == const+incr".
 
index 042cd9e..bbef4e6 100644 (file)
@@ -6605,6 +6605,8 @@ fold (tree expr)
        return omit_one_operand (type, arg1, arg0);
       if (integer_zerop (arg1))
        return non_lvalue (fold_convert (type, arg0));
+      if (operand_equal_p (arg0, arg1, 0))
+       return non_lvalue (fold_convert (type, arg0));
       t1 = distribute_bit_expr (code, type, arg0, arg1);
       if (t1 != NULL_TREE)
        return t1;
@@ -6633,6 +6635,8 @@ fold (tree expr)
        return non_lvalue (fold_convert (type, arg0));
       if (integer_all_onesp (arg1))
        return fold (build1 (BIT_NOT_EXPR, type, arg0));
+      if (operand_equal_p (arg0, arg1, 0))
+       return omit_one_operand (type, integer_zero_node, arg0);
 
       /* If we are XORing two BIT_AND_EXPR's, both of which are and'ing
          with a constant, and the two constants have no bits in common,
@@ -6659,6 +6663,8 @@ fold (tree expr)
        return non_lvalue (fold_convert (type, arg0));
       if (integer_zerop (arg1))
        return omit_one_operand (type, arg1, arg0);
+      if (operand_equal_p (arg0, arg1, 0))
+       return non_lvalue (fold_convert (type, arg0));
       t1 = distribute_bit_expr (code, type, arg0, arg1);
       if (t1 != NULL_TREE)
        return t1;