OSDN Git Service

Add comment to expand_mult max_cost change.
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Sep 2005 23:08:03 +0000 (23:08 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 17 Sep 2005 23:08:03 +0000 (23:08 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104379 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/expmed.c

index 292957c..8f71b8b 100644 (file)
@@ -3022,7 +3022,7 @@ expand_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target,
       && (unsignedp || !flag_trapv))
     {
       HOST_WIDE_INT coeff = 0;
-      rtx reg = gen_raw_REG (mode, LAST_VIRTUAL_REGISTER + 1);
+      rtx fake_reg = gen_raw_REG (mode, LAST_VIRTUAL_REGISTER + 1);
 
       /* synth_mult does an `unsigned int' multiply.  As long as the mode is
         less than or equal in size to `unsigned int' this doesn't matter.
@@ -3040,8 +3040,10 @@ expand_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target,
              && GET_MODE_BITSIZE (mode) > HOST_BITS_PER_WIDE_INT)
            {
              /* Its safe to use -INTVAL (op1) even for INT_MIN, as the
-                result is interpreted as an unsigned coefficient.  */
-             max_cost = rtx_cost (gen_rtx_MULT (mode, reg, op1), SET)
+                result is interpreted as an unsigned coefficient.
+                Exclude cost of op0 from max_cost to match the cost
+                calculation of the synth_mult.  */
+             max_cost = rtx_cost (gen_rtx_MULT (mode, fake_reg, op1), SET)
                         - neg_cost[mode];
              if (max_cost > 0
                  && choose_mult_variant (mode, -INTVAL (op1), &algorithm,
@@ -3084,7 +3086,9 @@ expand_mult (enum machine_mode mode, rtx op0, rtx op1, rtx target,
                                 build_int_cst (NULL_TREE, floor_log2 (coeff)),
                                 target, unsignedp);
 
-         max_cost = rtx_cost (gen_rtx_MULT (mode, reg, op1), SET);
+         /* Exclude cost of op0 from max_cost to match the cost
+            calculation of the synth_mult.  */
+         max_cost = rtx_cost (gen_rtx_MULT (mode, fake_reg, op1), SET);
          if (choose_mult_variant (mode, coeff, &algorithm, &variant,
                                   max_cost))
            return expand_mult_const (mode, op0, coeff, target,