From cd2f1c7a623809b0b7e2b224e1240fb74f5f0767 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Sun, 7 Mar 2004 20:13:50 +0000 Subject: [PATCH] fold-const.c (fold): Fold x | x as x. * fold-const.c (fold) : Fold x | x as x. : Fold x ^ x as zero. : Fold x & x as x. From-SVN: r79065 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2094b29bc14..b0c115eb8a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-03-07 Roger Sayle + + * fold-const.c (fold) : Fold x | x as x. + : Fold x ^ x as zero. + : Fold x & x as x. + 2004-03-07 Roger Sayle * fold-const.c (fold) : Rewrite optimization to transform diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 042cd9ebc14..bbef4e6bc77 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -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; -- 2.30.2