diff options
author | Kewen Lin <linkw@linux.ibm.com> | 2021-05-10 23:01:15 -0500 |
---|---|---|
committer | Kewen Lin <linkw@linux.ibm.com> | 2021-05-11 00:09:37 -0500 |
commit | 1866182f6cf338880c68225d9de571b787b6abcd (patch) | |
tree | 76a6c69d797a28284d66639a55fcef34c0d21bee /gcc | |
parent | 096f8215d2172ca4177cb26035e748d8f182fc8f (diff) | |
download | gcc-1866182f6cf338880c68225d9de571b787b6abcd.zip gcc-1866182f6cf338880c68225d9de571b787b6abcd.tar.gz gcc-1866182f6cf338880c68225d9de571b787b6abcd.tar.bz2 |
rs6000: Guard density_test only for vector version
This patch teaches rs6000_density_test to only care about the vector
version cost calculation and early return when calculating the single
scalar iteration cost.
Bootstrapped/regtested on powerpc64le-linux-gnu P9.
gcc/ChangeLog:
* config/rs6000/rs6000.c (struct rs6000_cost_data): New member
costing_for_scalar.
(rs6000_density_test): Early return if costing_for_scalar is true.
(rs6000_init_cost): Init costing_for_scalar of rs6000_cost_data.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 1ef5149..d1b76f6 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -5238,6 +5238,8 @@ typedef struct _rs6000_cost_data /* For each vectorized loop, this var holds TRUE iff a non-memory vector instruction is needed by the vectorization. */ bool vect_nonmem; + /* Indicates this is costing for the scalar version of a loop or block. */ + bool costing_for_scalar; } rs6000_cost_data; /* Test for likely overcommitment of vector hardware resources. If a @@ -5259,6 +5261,12 @@ rs6000_density_test (rs6000_cost_data *data) int vec_cost = data->cost[vect_body], not_vec_cost = 0; int i, density_pct; + /* This density test only cares about the cost of vector version of the + loop, so immediately return if we are passed costing for the scalar + version (namely computing single scalar iteration cost). */ + if (data->costing_for_scalar) + return; + for (i = 0; i < nbbs; i++) { basic_block bb = bbs[i]; @@ -5296,7 +5304,7 @@ rs6000_density_test (rs6000_cost_data *data) /* Implement targetm.vectorize.init_cost. */ static void * -rs6000_init_cost (struct loop *loop_info, bool) +rs6000_init_cost (struct loop *loop_info, bool costing_for_scalar) { rs6000_cost_data *data = XNEW (struct _rs6000_cost_data); data->loop_info = loop_info; @@ -5304,6 +5312,7 @@ rs6000_init_cost (struct loop *loop_info, bool) data->cost[vect_body] = 0; data->cost[vect_epilogue] = 0; data->vect_nonmem = false; + data->costing_for_scalar = costing_for_scalar; return data; } |