[PATCH 3/4 v2] ivopts: Consider cost_step on different forms during unrolling
Sat Aug 22 05:11:28 GMT 2020
On Tue, Aug 18, 2020 at 5:03 PM Kewen.Lin <email@example.com> wrote:
> Hi Bin,
> > I see, it's similar to the auto-increment case where cost should be
> > recorded only once. So this is okay given 1) fine predicting
> > rtl-unroll is likely impossible here; 2) the patch has very limited
> > impact.
> Really appreciate your time and patience!
> I extended the previous version to address Richard S.'s comments on
> candidates with the same base/step but different offsets here:
> The previous version only allows the candidate derived from the group
> of interest, this updated patch extends it to those ones which have the
> same bases/steps and same/different offsets but in the acceptable range
> by considering unrolling.
> For one particular case like:
> for (i = 0; i < SIZE; i++)
> y[i] = a * x[i] + z[i];
> we will mark reg_offset_p for IV candidates on x as below:
> - (unsigned long) (x_18(D) + 8) // only mark this before.
> - x_18(D) + 8
> - (unsigned long) (x_18(D) + 24)
> - (unsigned long) ((vector(2) double *) (x_18(D) + 8) + 18446744073709551600)
> Do you mind to have a review again? Thanks in advance!
I trust you with the change.
> Bootstrapped/regtested on powerpc64le-linux-gnu P8 and P9.
> SPEC2017 P9 performance run has no remarkable degradations/improvements.
Is this run with unroll-loops?
Could you exercise the code with unroll-loops enabled when
bootstrap/regtest please? It doesn't matter if cases fail with
unroll-loops, just making sure there is no fallout. Otherwise it's
fine with me.
> * tree-ssa-loop-ivopts.c (struct iv_cand): New field reg_offset_p.
> (struct ivopts_data): New field consider_reg_offset_for_unroll_p.
> (mark_reg_offset_candidates): New function.
> (add_candidate_1): Set reg_offset_p to false for new candidate.
> (set_group_iv_cost): Scale up group cost with estimate_unroll_factor if
> (determine_iv_cost): Increase step cost with estimate_unroll_factor if
> (tree_ssa_iv_optimize_loop): Call estimate_unroll_factor, update
More information about the Gcc-patches