aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2003-06-16 12:45:13 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2003-06-16 12:45:13 +0000
commitc6547c920bd81449caa301b2256b85409d6d69fa (patch)
tree91128e51e2ee70c6de304c65a21cfae0c68c35f8 /gcc
parent21c43754a62409319cb9b16d11aadab4f17cff26 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/expr.c19
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"
diff --git a/gcc/expr.c b/gcc/expr.c
index 3131a33..83240c6 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: