OSDN Git Service

* expr.c (expand_expr <PLUS_EXPR>): If operand_equal_p considers
authorsayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Jun 2003 12:45:13 +0000 (12:45 +0000)
committersayle <sayle@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 16 Jun 2003 12:45:13 +0000 (12:45 +0000)
both operands of the addition equal, reuse the expanded RTL.
(expand_expr <MULT_EXPR>): Likewise for multiplication.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68012 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/expr.c

index 2501744..85934ff 100644 (file)
@@ -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"
index 3131a33..83240c6 100644 (file)
@@ -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: