From f39832623990495b1a695801fa25aabe28c2ce00 Mon Sep 17 00:00:00 2001 From: sayle Date: Sun, 7 Mar 2004 20:13:50 +0000 Subject: [PATCH] * fold-const.c (fold) : Fold x | x as x. : Fold x ^ x as zero. : Fold x & x as x. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@79065 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/fold-const.c | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2094b29..b0c115e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 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 "foo++ == const" into "++foo == const+incr". diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 042cd9e..bbef4e6 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.7.4