aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/config/aarch64/aarch64.c6
-rw-r--r--gcc/config/rs6000/rs6000.c6
-rw-r--r--gcc/tree-vect-loop.c6
-rw-r--r--gcc/tree-vect-slp.c7
-rw-r--r--gcc/tree-vectorizer.c2
-rw-r--r--gcc/tree-vectorizer.h14
6 files changed, 23 insertions, 18 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index e23d7cf..cd4332d0 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -14745,7 +14745,7 @@ public:
stmt_vec_info stmt_info, tree vectype,
int misalign,
vect_cost_model_location where) override;
- void finish_cost () override;
+ void finish_cost (const vector_costs *) override;
private:
void record_potential_advsimd_unrolling (loop_vec_info);
@@ -16138,7 +16138,7 @@ aarch64_vector_costs::adjust_body_cost (unsigned int body_cost)
}
void
-aarch64_vector_costs::finish_cost ()
+aarch64_vector_costs::finish_cost (const vector_costs *scalar_costs)
{
loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (m_vinfo);
if (loop_vinfo
@@ -16146,7 +16146,7 @@ aarch64_vector_costs::finish_cost ()
&& aarch64_use_new_vector_costs_p ())
m_costs[vect_body] = adjust_body_cost (m_costs[vect_body]);
- vector_costs::finish_cost ();
+ vector_costs::finish_cost (scalar_costs);
}
static void initialize_aarch64_code_model (struct gcc_options *);
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 1f2aa60..e4843eb 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -5268,7 +5268,7 @@ public:
stmt_vec_info stmt_info, tree vectype,
int misalign,
vect_cost_model_location where) override;
- void finish_cost () override;
+ void finish_cost (const vector_costs *) override;
protected:
void update_target_cost_per_stmt (vect_cost_for_stmt, stmt_vec_info,
@@ -5522,7 +5522,7 @@ rs6000_cost_data::adjust_vect_cost_per_loop (loop_vec_info loop_vinfo)
}
void
-rs6000_cost_data::finish_cost ()
+rs6000_cost_data::finish_cost (const vector_costs *scalar_costs)
{
if (loop_vec_info loop_vinfo = dyn_cast<loop_vec_info> (m_vinfo))
{
@@ -5539,7 +5539,7 @@ rs6000_cost_data::finish_cost ()
m_costs[vect_body] += 10000;
}
- vector_costs::finish_cost ();
+ vector_costs::finish_cost (scalar_costs);
}
/* Implement targetm.loop_unroll_adjust. */
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 2153012..1cd5dbc 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -1301,7 +1301,7 @@ vect_compute_single_scalar_iteration_cost (loop_vec_info loop_vinfo)
(void) add_stmt_cost (loop_vinfo->scalar_costs, si->count,
si->kind, si->stmt_info, si->vectype,
si->misalign, si->where);
- loop_vinfo->scalar_costs->finish_cost ();
+ loop_vinfo->scalar_costs->finish_cost (nullptr);
}
@@ -4130,8 +4130,8 @@ vect_estimate_min_profitable_iters (loop_vec_info loop_vinfo,
}
/* Complete the target-specific cost calculations. */
- finish_cost (loop_vinfo->vector_costs, &vec_prologue_cost,
- &vec_inside_cost, &vec_epilogue_cost);
+ finish_cost (loop_vinfo->vector_costs, loop_vinfo->scalar_costs,
+ &vec_prologue_cost, &vec_inside_cost, &vec_epilogue_cost);
vec_outside_cost = (int)(vec_prologue_cost + vec_epilogue_cost);
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index d437bfd..94c7549 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -5344,7 +5344,8 @@ vect_bb_vectorization_profitable_p (bb_vec_info bb_vinfo,
while (si < li_scalar_costs.length ()
&& li_scalar_costs[si].first == sl);
unsigned dummy;
- finish_cost (scalar_target_cost_data, &dummy, &scalar_cost, &dummy);
+ finish_cost (scalar_target_cost_data, nullptr,
+ &dummy, &scalar_cost, &dummy);
delete scalar_target_cost_data;
/* Complete the target-specific vector cost calculation. */
@@ -5356,8 +5357,8 @@ vect_bb_vectorization_profitable_p (bb_vec_info bb_vinfo,
}
while (vi < li_vector_costs.length ()
&& li_vector_costs[vi].first == vl);
- finish_cost (vect_target_cost_data, &vec_prologue_cost,
- &vec_inside_cost, &vec_epilogue_cost);
+ finish_cost (vect_target_cost_data, scalar_target_cost_data,
+ &vec_prologue_cost, &vec_inside_cost, &vec_epilogue_cost);
delete vect_target_cost_data;
vec_outside_cost = vec_prologue_cost + vec_epilogue_cost;
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c
index dcbb2a3..71f12b3 100644
--- a/gcc/tree-vectorizer.c
+++ b/gcc/tree-vectorizer.c
@@ -1703,7 +1703,7 @@ vector_costs::add_stmt_cost (int count, vect_cost_for_stmt kind,
/* See the comment above the declaration for details. */
void
-vector_costs::finish_cost ()
+vector_costs::finish_cost (const vector_costs *)
{
gcc_assert (!m_finished);
m_finished = true;
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 ();