On Tue, Aug 09, 2022 at 02:23:48PM +0100, Andrew Stubbs wrote:
>
> The vecsize_int/vecsize_float has an assumption that all arguments will use
> the same bitsize, and vary the number of lanes according to the element size,
> but this is inappropriate on targets where the number of lanes is fixed and
> the bitsize varies (i.e. amdgcn).
>
> With this change the vecsize can be left zero and the vectorization factor
> will
> be the same for all types.
>
> gcc/ChangeLog:
>
> * doc/tm.texi: Regenerate.
> * omp-simd-clone.cc (simd_clone_adjust_return_type): Allow zero
> vecsize.
> (simd_clone_adjust_argument_types): Likewise.
> * target.def (compute_vecsize_and_simdlen): Document the new
> vecsize_int and vecsize_float semantics.
LGTM, except for a formatting nit.
> @@ -618,8 +621,12 @@ simd_clone_adjust_argument_types (struct cgraph_node
> *node)
> veclen = sc->vecsize_int;
> else
> veclen = sc->vecsize_float;
> - veclen = exact_div (veclen,
> - GET_MODE_BITSIZE (SCALAR_TYPE_MODE (parm_type)));
> + if (known_eq (veclen, 0))
> + veclen = sc->simdlen;
> + else
> + veclen = exact_div (veclen,
> + GET_MODE_BITSIZE
> + (SCALAR_TYPE_MODE (parm_type)));
Macro name on one line and ( on another is too ugly, can you please use:
veclen
= exact_div (veclen,
GET_MODE_BITSIZE (SCALAR_TYPE_MODE (parm_type)));
or:
{
scalar_mode m = SCALAR_TYPE_MODE (parm_type);
veclen = exact_div (veclen, GET_MODE_BITSIZE (m));
}
?
Jakub