gimple-ssa-strength-reduction.c (analyze_increments): Distinguish replacement costs...
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>
Thu, 14 Dec 2017 20:40:21 +0000 (20:40 +0000)
committerWilliam Schmidt <wschmidt@gcc.gnu.org>
Thu, 14 Dec 2017 20:40:21 +0000 (20:40 +0000)
2017-12-14  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

* gimple-ssa-strength-reduction.c (analyze_increments):
Distinguish replacement costs for constant strides from those for
unknown strides.

From-SVN: r255664

gcc/ChangeLog
gcc/gimple-ssa-strength-reduction.c

index d20a1b4e3ef11065b077a32030af48d08588a7fd..2e079fa4b607578bcc9dab56f0945a294665f195 100644 (file)
@@ -1,3 +1,9 @@
+2017-12-14  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
+
+       * gimple-ssa-strength-reduction.c (analyze_increments):
+       Distinguish replacement costs for constant strides from those for
+       unknown strides.
+
 2017-12-14  Jakub Jelinek  <jakub@redhat.com>
 
        * var-tracking.c (variable_tracking_main_1): Formatting fix.
index b51239b94d02943e84fdc3a46272218a03f2229a..0f90232cca3105227134312000cedd38f413dfea 100644 (file)
@@ -3083,7 +3083,17 @@ analyze_increments (slsr_cand_t first_dep, machine_mode mode, bool speed)
       else if (first_dep->kind == CAND_MULT)
        {
          int cost = mult_by_coeff_cost (incr, mode, speed);
-         int repl_savings = mul_cost (speed, mode) - add_cost (speed, mode);
+         int repl_savings;
+
+         if (tree_fits_shwi_p (first_dep->stride))
+           {
+             HOST_WIDE_INT hwi_stride = tree_to_shwi (first_dep->stride);
+             repl_savings = mult_by_coeff_cost (hwi_stride, mode, speed);
+           }
+         else
+           repl_savings = mul_cost (speed, mode);
+         repl_savings -= add_cost (speed, mode);
+
          if (speed)
            cost = lowest_cost_path (cost, repl_savings, first_dep,
                                     incr_vec[i].incr, COUNT_PHIS);