On Tue, Aug 18, 2020 at 5:03 PM Kewen.Lin <li...@linux.ibm.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: > https://gcc.gnu.org/pipermail/gcc-patches/2020-June/547014.html. > > 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.
Thanks, bin > > BR, > Kewen > ----- > gcc/ChangeLog: > > * 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 > consider_reg_offset_for_unroll_p. > (determine_iv_cost): Increase step cost with estimate_unroll_factor if > consider_reg_offset_for_unroll_p. > (tree_ssa_iv_optimize_loop): Call estimate_unroll_factor, update > consider_reg_offset_for_unroll_p. >