Message ID | 61b73f06-cced-0365-3b16-5c18c0dfc683@linux.ibm.com |
---|---|
State | New |
Headers | show |
Series | vect: Replace hardcoded weight factor with param | expand |
On Wed, May 19, 2021 at 8:20 AM Kewen.Lin <linkw@linux.ibm.com> wrote: > > Hi, > > This patch is to replace the current hardcoded weight factor 50 > for those statements in an inner loop relative to the loop being > vectorized with a specific parameter vect-inner-loop-weight-factor. > > The motivation behind this change is: if targets want to have one > unique function to gather some information in each add_stmt_cost > call, no matter that it's put before or after the cost tweaking > part for inner loop, it may have the need to adjust (expand or > shrink) the gathered data as the factor. Now the factor is > hardcoded, it's not easily maintained. Since it's possible that > targets have their own decisions on this costing like the others, > I used parameter instead of one unique macro here. > > Testing is ongoing, is it ok for trunk if everything goes well? Certainly an improvement. I suppose we might want to put the factor into vinfo->inner_loop_cost_factor. That way we could adjust it easily in common code in the vectorizer when we for example have (non-guessed) profile data. "weight_factor" is kind-of double-speak and I'm missing 'cost' ... so, bike-shedding to vect_inner_loop_cost_factor? Just suggestions - as said, the patch is an improvement already. Thanks, Richard. > BR, > Kewen > ------- > gcc/ChangeLog: > > * doc/invoke.texi (vect-inner-loop-weight-factor): Document new > parameter. > * params.opt (vect-inner-loop-weight-factor): New. > * config/aarch64/aarch64.c (aarch64_add_stmt_cost): Replace hardcoded > weight factor 50 with param_vect_inner_loop_weight_factor. > * config/arm/arm.c (arm_add_stmt_cost): Likewise. > * config/i386/i386.c (ix86_add_stmt_cost): Likewise. > * config/rs6000/rs6000.c (rs6000_add_stmt_cost): Likewise. > * targhooks.c (default_add_stmt_cost): Likewise. > * tree-vect-loop.c (vect_compute_single_scalar_iteration_cost): > Likewise.
On Wed, May 19, 2021 at 10:15:49AM +0200, Richard Biener wrote: > On Wed, May 19, 2021 at 8:20 AM Kewen.Lin <linkw@linux.ibm.com> wrote: > "weight_factor" is kind-of double-speak "Weighting factor" (with -ing) is a standard term actually. (But cost_factor of course is better and avoids all that :-) ) Segher
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 12625a4bee3..a7e765df3f9 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -15437,7 +15437,7 @@ aarch64_add_stmt_cost (class vec_info *vinfo, void *data, int count, arbitrary and could potentially be improved with analysis. */ if (where == vect_body && stmt_info && stmt_in_inner_loop_p (vinfo, stmt_info)) - count *= 50; /* FIXME */ + count *= param_vect_inner_loop_weight_factor; /* FIXME */ retval = (unsigned) (count * stmt_cost); costs->region[where] += retval; diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 340f7c95d76..4fdaac607d6 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -12201,7 +12201,7 @@ arm_add_stmt_cost (vec_info *vinfo, void *data, int count, arbitrary and could potentially be improved with analysis. */ if (where == vect_body && stmt_info && stmt_in_inner_loop_p (vinfo, stmt_info)) - count *= 50; /* FIXME. */ + count *= param_vect_inner_loop_weight_factor; /* FIXME. */ retval = (unsigned) (count * stmt_cost); cost[where] += retval; diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7c41302c75b..5203fda94c1 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -22396,7 +22396,7 @@ ix86_add_stmt_cost (class vec_info *vinfo, void *data, int count, arbitrary and could potentially be improved with analysis. */ if (where == vect_body && stmt_info && stmt_in_inner_loop_p (vinfo, stmt_info)) - count *= 50; /* FIXME. */ + count *= param_vect_inner_loop_weight_factor; /* FIXME. */ retval = (unsigned) (count * stmt_cost); diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 48b8efd732b..8ffbe0a2229 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -5348,7 +5348,7 @@ rs6000_add_stmt_cost (class vec_info *vinfo, void *data, int count, arbitrary and could potentially be improved with analysis. */ if (where == vect_body && stmt_info && stmt_in_inner_loop_p (vinfo, stmt_info)) - count *= 50; /* FIXME. */ + count *= param_vect_inner_loop_weight_factor; /* FIXME. */ retval = (unsigned) (count * stmt_cost); cost_data->cost[where] += retval; diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 8b70fdf580d..6e45e08ba3e 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -14221,6 +14221,10 @@ code to iterate. 2 allows partial vector loads and stores in all loops. The parameter only has an effect on targets that support partial vector loads and stores. +@item vect-inner-loop-weight-factor +The factor which loop vectorizer uses to over weight those statements in +an inner loop relative to the loop being vectorized. + @item avoid-fma-max-bits Maximum number of bits for which we avoid creating FMAs. diff --git a/gcc/params.opt b/gcc/params.opt index 7c7aa78992a..fb09353ec8c 100644 --- a/gcc/params.opt +++ b/gcc/params.opt @@ -1089,4 +1089,8 @@ Bound on number of runtime checks inserted by the vectorizer's loop versioning f Common Joined UInteger Var(param_vect_partial_vector_usage) Init(2) IntegerRange(0, 2) Param Optimization Controls how loop vectorizer uses partial vectors. 0 means never, 1 means only for loops whose need to iterate can be removed, 2 means for all loops. The default value is 2. +-param=vect-inner-loop-weight-factor= +Common Joined UInteger Var(param_vect_inner_loop_weight_factor) Init(50) IntegerRange(1, 999999) Param Optimization +Indicates the factor which loop vectorizer uses to over weight those statements in an inner loop relative to the loop being vectorized. The default value is 50. + ; This comment is to ensure we retain the blank line above. diff --git a/gcc/targhooks.c b/gcc/targhooks.c index 952fad422eb..6292cbd9bc5 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -1400,7 +1400,7 @@ default_add_stmt_cost (class vec_info *vinfo, void *data, int count, arbitrary and could potentially be improved with analysis. */ if (where == vect_body && stmt_info && stmt_in_inner_loop_p (vinfo, stmt_info)) - count *= 50; /* FIXME. */ + count *= param_vect_inner_loop_weight_factor; retval = (unsigned) (count * stmt_cost); cost[where] += retval; diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 2aba503fef7..3bbd8ac569e 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -1237,7 +1237,7 @@ vect_compute_single_scalar_iteration_cost (loop_vec_info loop_vinfo) /* FORNOW. */ innerloop_iters = 1; if (loop->inner) - innerloop_iters = 50; /* FIXME */ + innerloop_iters = param_vect_inner_loop_weight_factor; for (i = 0; i < nbbs; i++) {