diff options
author | Richard Biener <rguenther@suse.de> | 2024-11-08 11:12:06 +0100 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2024-11-12 09:54:25 +0100 |
commit | 82d955b0a8acfdf3e63e82135077806c19e622e6 (patch) | |
tree | f7f238c5654f449de53e47b2b053b902f50d3957 /gcc/tree-vectorizer.h | |
parent | 61cd1c43b82dc9d4c3edf122d22887fdce340223 (diff) | |
download | gcc-82d955b0a8acfdf3e63e82135077806c19e622e6.zip gcc-82d955b0a8acfdf3e63e82135077806c19e622e6.tar.gz gcc-82d955b0a8acfdf3e63e82135077806c19e622e6.tar.bz2 |
Add suggested_epilogue_mode to vector costs
The following enables targets to suggest the vector mode to be used
preferably for the epilogue of a vectorized loop. The patch also
enables more than one vectorized epilogue in case the target suggests
a vector mode for the epilogue of a vector epilogue.
* tree-vectorizer.h (vector_costs::suggested_epilogue_mode): New.
(vector_costs::m_suggested_epilogue_mode): Likewise.
(vector_costs::vector_costs): Initialize m_suggested_epilogue_mode.
* tree-vect-loop.cc (vect_analyze_loop): Honor the target
suggested prefered epilogue mode and support vector epilogues
of vector epilogues if requested.
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 88db34b..273e8c6 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -1669,6 +1669,7 @@ public: unsigned int outside_cost () const; unsigned int total_cost () const; unsigned int suggested_unroll_factor () const; + machine_mode suggested_epilogue_mode () const; protected: unsigned int record_stmt_cost (stmt_vec_info, vect_cost_model_location, @@ -1691,6 +1692,10 @@ protected: /* The suggested unrolling factor determined at finish_cost. */ unsigned int m_suggested_unroll_factor; + /* The suggested mode to be used for a vectorized epilogue or VOIDmode, + determined at finish_cost. */ + machine_mode m_suggested_epilogue_mode; + /* True if finish_cost has been called. */ bool m_finished; }; @@ -1704,6 +1709,7 @@ vector_costs::vector_costs (vec_info *vinfo, bool costing_for_scalar) m_costing_for_scalar (costing_for_scalar), m_costs (), m_suggested_unroll_factor(1), + m_suggested_epilogue_mode(VOIDmode), m_finished (false) { } @@ -1761,6 +1767,15 @@ vector_costs::suggested_unroll_factor () const return m_suggested_unroll_factor; } +/* Return the suggested epilogue mode. */ + +inline machine_mode +vector_costs::suggested_epilogue_mode () const +{ + gcc_checking_assert (m_finished); + return m_suggested_epilogue_mode; +} + #define VECT_MAX_COST 1000 /* The maximum number of intermediate steps required in multi-step type |