diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-10 12:31:02 +0000 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2021-11-10 12:31:02 +0000 |
commit | 0612883d9dc6eebecdbe937893b86597acae237c (patch) | |
tree | 7e70dd558bb1fe1a5e589f6325cfce88f48f0ec3 /gcc/tree-vectorizer.h | |
parent | 6ddc6a57a74c3a388eb1626e59005f54c6e66c57 (diff) | |
download | gcc-0612883d9dc6eebecdbe937893b86597acae237c.zip gcc-0612883d9dc6eebecdbe937893b86597acae237c.tar.gz gcc-0612883d9dc6eebecdbe937893b86597acae237c.tar.bz2 |
vect: Pass scalar_costs to finish_cost
When finishing the vector costs, it can be useful to know
what the associated scalar costs were. This allows targets
to read information collected about the original scalar loop
when trying to make a final judgement about the cost of the
vector code.
This patch therefore passes the scalar costs to
vector_costs::finish_cost. The parameter is null for the
scalar costs themselves.
gcc/
* tree-vectorizer.h (vector_costs::finish_cost): Take the
corresponding scalar costs as a parameter.
(finish_cost): Likewise.
* tree-vect-loop.c (vect_compute_single_scalar_iteration_cost)
(vect_estimate_min_profitable_iters): Update accordingly.
* tree-vect-slp.c (vect_bb_vectorization_profitable_p): Likewise.
* tree-vectorizer.c (vector_costs::finish_cost): Likewise.
* config/aarch64/aarch64.c (aarch64_vector_costs::finish_cost):
Likewise.
* config/rs6000/rs6000.c (rs6000_cost_data::finish_cost): Likewise.
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index a8ce308..f8f3064 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -1415,8 +1415,11 @@ public: vect_cost_model_location where); /* Finish calculating the cost of the code. The results can be - read back using the functions below. */ - virtual void finish_cost (); + read back using the functions below. + + If the costs describe vector code, SCALAR_COSTS gives the costs + of the corresponding scalar code, otherwise it is null. */ + virtual void finish_cost (const vector_costs *scalar_costs); /* The costs in THIS and OTHER both describe ways of vectorizing a main loop. Return true if the costs described by THIS are @@ -1691,10 +1694,11 @@ add_stmt_cost (vector_costs *costs, stmt_info_for_cost *i) /* Alias targetm.vectorize.finish_cost. */ static inline void -finish_cost (vector_costs *costs, unsigned *prologue_cost, - unsigned *body_cost, unsigned *epilogue_cost) +finish_cost (vector_costs *costs, const vector_costs *scalar_costs, + unsigned *prologue_cost, unsigned *body_cost, + unsigned *epilogue_cost) { - costs->finish_cost (); + costs->finish_cost (scalar_costs); *prologue_cost = costs->prologue_cost (); *body_cost = costs->body_cost (); *epilogue_cost = costs->epilogue_cost (); |