aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vectorizer.h
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2024-11-08 11:12:06 +0100
committerRichard Biener <rguenth@gcc.gnu.org>2024-11-12 09:54:25 +0100
commit82d955b0a8acfdf3e63e82135077806c19e622e6 (patch)
treef7f238c5654f449de53e47b2b053b902f50d3957 /gcc/tree-vectorizer.h
parent61cd1c43b82dc9d4c3edf122d22887fdce340223 (diff)
downloadgcc-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.h15
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