diff options
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 6 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 6 | ||||
-rw-r--r-- | gcc/tree-vect-slp.c | 7 | ||||
-rw-r--r-- | gcc/tree-vectorizer.c | 2 | ||||
-rw-r--r-- | gcc/tree-vectorizer.h | 14 |
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 (); |