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.