From: Roger Sayle Date: Mon, 16 Jun 2003 12:45:13 +0000 (+0000) Subject: expr.c (expand_expr ): If operand_equal_p considers both operands of the... X-Git-Tag: releases/gcc-3.4.0~5787 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c6547c920bd81449caa301b2256b85409d6d69fa;p=thirdparty%2Fgcc.git expr.c (expand_expr ): If operand_equal_p considers both operands of the addition equal... * expr.c (expand_expr ): If operand_equal_p considers both operands of the addition equal, reuse the expanded RTL. (expand_expr ): Likewise for multiplication. From-SVN: r68012 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2501744a7380..85934ffc5a01 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2003-06-16 Roger Sayle + + * expr.c (expand_expr ): If operand_equal_p considers + both operands of the addition equal, reuse the expanded RTL. + (expand_expr ): Likewise for multiplication. + 2003-06-16 Roger Sayle Jeff Law diff --git a/gcc/expr.c b/gcc/expr.c index 3131a33e50d4..83240c682da7 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -8226,7 +8226,11 @@ expand_expr (exp, target, tmode, modifier) || mode != ptr_mode) { op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); - op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); + if (! operand_equal_p (TREE_OPERAND (exp, 0), + TREE_OPERAND (exp, 1), 0)) + op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); + else + op1 = op0; if (op0 == const0_rtx) return op1; if (op1 == const0_rtx) @@ -8235,7 +8239,12 @@ expand_expr (exp, target, tmode, modifier) } op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, modifier); - op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, modifier); + if (! operand_equal_p (TREE_OPERAND (exp, 0), + TREE_OPERAND (exp, 1), 0)) + op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, + VOIDmode, modifier); + else + op1 = op0; /* We come here from MINUS_EXPR when the second operand is a constant. */ @@ -8457,7 +8466,11 @@ expand_expr (exp, target, tmode, modifier) } } op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); - op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); + if (! operand_equal_p (TREE_OPERAND (exp, 0), + TREE_OPERAND (exp, 1), 0)) + op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); + else + op1 = op0; return expand_mult (mode, op0, op1, target, unsignedp); case TRUNC_DIV_EXPR: