https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83253
--- Comment #5 from Bill Schmidt <wschmidt at gcc dot gnu.org> --- Here's an untested patch (bootstraps successfully but regtest is still ongoing): Index: gcc/gimple-ssa-strength-reduction.c =================================================================== --- gcc/gimple-ssa-strength-reduction.c (revision 255588) +++ gcc/gimple-ssa-strength-reduction.c (working copy) @@ -3083,7 +3083,17 @@ analyze_increments (slsr_cand_t first_dep, machine 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_CODE (first_dep->stride) == INTEGER_CST) + { + HOST_WIDE_INT hwi_stride = tree_to_shwi (first_dep->stride); + repl_savings = (mult_by_coeff_cost (hwi_stride, mode, speed) + - add_cost (speed, mode)); + } + else + repl_savings = mul_cost (speed, mode) - add_cost (speed, mode); + if (speed) cost = lowest_cost_path (cost, repl_savings, first_dep, incr_vec[i].incr, COUNT_PHIS); OP, since you have confirmed the problem on a number of targets, would you be willing to try this patch on a couple of them and see whether it solves it? Otherwise I can build some crosses later this week. Thanks!