From: Richard Kenner Date: Wed, 9 Mar 1994 21:50:25 +0000 (-0500) Subject: (fold, case MULT_EXPR): Simplify MULT_EXPR of an EXACT_DIV_EXPR with X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b9b5c1b3764818c3446edc4668c60bf7bed59c87;p=gcc.git (fold, case MULT_EXPR): Simplify MULT_EXPR of an EXACT_DIV_EXPR with the same divisor as our multiplicand. From-SVN: r6734 --- diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 600bbfa728e..304eac88f7e 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3820,6 +3820,14 @@ fold (expr) if (integer_onep (arg1)) return non_lvalue (convert (type, arg0)); + /* ((A / C) * C) is A if the division is an + EXACT_DIV_EXPR. Since C is normally a constant, + just check for one of the four possibilities. */ + + if (TREE_CODE (arg0) == EXACT_DIV_EXPR + && operand_equal_p (TREE_OPERAND (arg0, 1), arg1, 0)) + return TREE_OPERAND (arg0, 0); + /* (a * (1 << b)) is (a << b) */ if (TREE_CODE (arg1) == LSHIFT_EXPR && integer_onep (TREE_OPERAND (arg1, 0)))