diff mbox series

vect: Replace hardcoded weight factor with param

Message ID 61b73f06-cced-0365-3b16-5c18c0dfc683@linux.ibm.com
State New
Headers show
Series vect: Replace hardcoded weight factor with param | expand

Commit Message

Kewen.Lin May 19, 2021, 6:20 a.m. UTC
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?

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.

Comments

Richard Biener May 19, 2021, 8:15 a.m. UTC | #1
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.
Segher Boessenkool May 19, 2021, 1:32 p.m. UTC | #2
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 mbox series

Patch

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++)
     {