v2: Update rs6000 length_mode hook to QImode, also update description of the hook.
gcc/ChangeLog: 2020-MM-DD Kewen Lin <li...@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 --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 --