diff options
author | Roger Sayle <roger@eyesopen.com> | 2003-06-16 12:45:13 +0000 |
---|---|---|
committer | Roger Sayle <sayle@gcc.gnu.org> | 2003-06-16 12:45:13 +0000 |
commit | c6547c920bd81449caa301b2256b85409d6d69fa (patch) | |
tree | 91128e51e2ee70c6de304c65a21cfae0c68c35f8 /gcc | |
parent | 21c43754a62409319cb9b16d11aadab4f17cff26 (diff) | |
download | gcc-c6547c920bd81449caa301b2256b85409d6d69fa.zip gcc-c6547c920bd81449caa301b2256b85409d6d69fa.tar.gz gcc-c6547c920bd81449caa301b2256b85409d6d69fa.tar.bz2 |
expr.c (expand_expr <PLUS_EXPR>): If operand_equal_p considers both operands of the addition equal...
* expr.c (expand_expr <PLUS_EXPR>): If operand_equal_p considers
both operands of the addition equal, reuse the expanded RTL.
(expand_expr <MULT_EXPR>): Likewise for multiplication.
From-SVN: r68012
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/expr.c | 19 |
2 files changed, 22 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2501744..85934ff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,10 @@ 2003-06-16 Roger Sayle <roger@eyesopen.com> + + * expr.c (expand_expr <PLUS_EXPR>): If operand_equal_p considers + both operands of the addition equal, reuse the expanded RTL. + (expand_expr <MULT_EXPR>): Likewise for multiplication. + +2003-06-16 Roger Sayle <roger@eyesopen.com> Jeff Law <law@redhat.com> * fold-const.c (operand_equal_p): Consider two calls to "const" @@ -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: |