diff mbox series

[4/7,V2] hook/rs6000: Add vectorize length mode for vector with length

Message ID af28d496-0776-819c-a500-eeffbc361d6e@linux.ibm.com
State New
Headers show
Series None | expand

Commit Message

Kewen.Lin June 10, 2020, 6:44 a.m. UTC
v2: Update rs6000 length_mode hook to QImode, also update description of the hook.

gcc/ChangeLog:

2020-MM-DD  Kewen Lin  <linkw@gcc.gnu.org>

	* config/rs6000/rs6000.c (TARGET_VECTORIZE_LENGTH_MODE): New macro.
	* doc/tm.texi: Regenerate.
	* doc/tm.texi.in: New hook.
	* target.def: Likewise.
---
 gcc/config/rs6000/rs6000.c | 3 +++
 gcc/doc/tm.texi            | 8 ++++++++
 gcc/doc/tm.texi.in         | 2 ++
 gcc/target.def             | 9 +++++++++
 4 files changed, 22 insertions(+)

--
diff mbox series

Patch

diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8435bc15d72..89881a352f0 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -1659,6 +1659,9 @@  static const struct attribute_spec rs6000_attribute_table[] =
 #undef TARGET_HAVE_COUNT_REG_DECR_P
 #define TARGET_HAVE_COUNT_REG_DECR_P true
 
+#undef TARGET_VECTORIZE_LENGTH_MODE
+#define TARGET_VECTORIZE_LENGTH_MODE QImode
+
 /* 1000000000 is infinite cost in IVOPTs.  */
 #undef TARGET_DOLOOP_COST_FOR_GENERIC
 #define TARGET_DOLOOP_COST_FOR_GENERIC 1000000000
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 6e7d9dc54a9..087a39b840d 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -6084,6 +6084,14 @@  The default implementation returns a @code{MODE_VECTOR_INT} with the
 same size and number of elements as @var{mode}, if such a mode exists.
 @end deftypefn
 
+@deftypevr {Target Hook} scalar_int_mode TARGET_VECTORIZE_LENGTH_MODE
+For the targets which support length-based partial vectorization, also
+known as vector memory access with length, return the scalar int mode to
+be used for the length.  Normally it should be set according to the
+required minimum precision of supported length.
+The default is to use @code{word_mode}.
+@end deftypevr
+
 @deftypefn {Target Hook} bool TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE (unsigned @var{ifn})
 This hook returns true if masked internal function @var{ifn} (really of
 type @code{internal_fn}) should be considered expensive when the mask is
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 3be984bbd5c..83034176b56 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -4181,6 +4181,8 @@  address;  but often a machine-dependent strategy can generate better code.
 
 @hook TARGET_VECTORIZE_GET_MASK_MODE
 
+@hook TARGET_VECTORIZE_LENGTH_MODE
+
 @hook TARGET_VECTORIZE_EMPTY_MASK_IS_EXPENSIVE
 
 @hook TARGET_VECTORIZE_INIT_COST
diff --git a/gcc/target.def b/gcc/target.def
index 07059a87caf..f64861189cb 100644
--- a/gcc/target.def
+++ b/gcc/target.def
@@ -1969,6 +1969,15 @@  same size and number of elements as @var{mode}, if such a mode exists.",
  (machine_mode mode),
  default_get_mask_mode)
 
+DEFHOOKPOD
+(length_mode,
+ "For the targets which support length-based partial vectorization, also\n\
+known as vector memory access with length, return the scalar int mode to\n\
+be used for the length.  Normally it should be set according to the\n\
+required minimum precision of supported length.\n\
+The default is to use @code{word_mode}.",
+ scalar_int_mode, word_mode)
+
 /* Function to say whether a masked operation is expensive when the
    mask is all zeros.  */
 DEFHOOK