On Thu, 2 May 2024, Richard Biener wrote:

> The vectorizer handles a _Float16 to __bf16 conversion through
> vectorizable_assignment, thinking it's a noop.  The following
> fixes this by making the same-size check stricter, requiring
> the same vector component mode.
> 
> Bootstrap & regtest running on x86_64-unknown-linux-gnu.  I couldn't
> manage to produce a meaningful (runtime) testcase.
> 
>       PR tree-optimization/114921
>       * tree-vect-stmts.cc (vectorizable_assignment): Require
>       same vector component modes for input and output.
> ---
>  gcc/tree-vect-stmts.cc | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
> index f8d8636b139..5ec053755a2 100644
> --- a/gcc/tree-vect-stmts.cc
> +++ b/gcc/tree-vect-stmts.cc
> @@ -5961,8 +5961,7 @@ vectorizable_assignment (vec_info *vinfo,
>         || code == VIEW_CONVERT_EXPR)
>        && (!vectype_in
>         || maybe_ne (TYPE_VECTOR_SUBPARTS (vectype_in), nunits)
> -       || maybe_ne (GET_MODE_SIZE (TYPE_MODE (vectype)),
> -                    GET_MODE_SIZE (TYPE_MODE (vectype_in)))))
> +       || TYPE_MODE (vectype) != TYPE_MODE (vectype_in)))

-         || maybe_ne (GET_MODE_SIZE (TYPE_MODE (vectype)),
-                      GET_MODE_SIZE (TYPE_MODE (vectype_in)))))
+         || (TYPE_MODE (TREE_TYPE (vectype))
+             != TYPE_MODE (TREE_TYPE (vectype_in)))))

actually so it matches the comment in the commit message.  ISTR
we have v4si and v2six2 modes on some archs that we possibly want
to inter-operate with through vectorizable_assignment.

Richard.

Reply via email to