On Tue, 5 Nov 2024, Victor Do Nascimento wrote:

> The current codegen code to support VF's that are multiples of a simdclone
> simdlen rely on BIT_FIELD_REF to create multiple input vectors.  This does not
> work for non-constant simdclones, so we should disable using such clones when
> the VF is a multiple of the non-constant simdlen until we change the codegen 
> to
> support those.

ISTR BIT_FIELD_REF now uses poly-int offset and size so what breaks
here?  I don't see any other way that such BIT_FIELD_REFs to represent
hi/lo part accesses?

Richard.

> gcc/ChangeLog:
> 
>       * tree-vect-stmts.cc (vectorizable_simd_clone_call): Reject simdclones
>       with non-constant simdlen when VF is not exactly the same.
> ---
>  gcc/tree-vect-stmts.cc | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
> index 2d0da6f0a0e..961421fee25 100644
> --- a/gcc/tree-vect-stmts.cc
> +++ b/gcc/tree-vect-stmts.cc
> @@ -4149,7 +4149,10 @@ vectorizable_simd_clone_call (vec_info *vinfo, 
> stmt_vec_info stmt_info,
>       if (!constant_multiple_p (vf * group_size, n->simdclone->simdlen,
>                                 &num_calls)
>           || (!n->simdclone->inbranch && (masked_call_offset > 0))
> -         || (nargs != simd_nargs))
> +         || (nargs != simd_nargs)
> +         /* Currently we do not support multiple calls of non-constant
> +            simdlen as poly vectors can not be accessed by BIT_FIELD_REF.  */
> +         || (!n->simdclone->simdlen.is_constant () && num_calls != 1))
>         continue;
>       if (num_calls != 1)
>         this_badness += floor_log2 (num_calls) * 4096;
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH,
Frankenstrasse 146, 90461 Nuernberg, Germany;
GF: Ivo Totev, Andrew McDonald, Werner Knoblich; (HRB 36809, AG Nuernberg)

Reply via email to