https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98849
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- tree-vect-generic.c claims that /* The rtl expander will expand vector/scalar as vector/vector if necessary. Pick one with wider vector type. */ but that doesn't seem to be the case (at least on this testcase and this target). I only see the vashl* used if: /* Determine whether the shift/rotate amount is a vector, or scalar. If the shift amount is a vector, use the vector/vector shift patterns. */ if (VECTOR_MODE_P (mode) && VECTOR_MODE_P (op1_mode)) { lshift_optab = vashl_optab; rshift_arith_optab = vashr_optab; rshift_uns_optab = vlshr_optab; lrotate_optab = vrotl_optab; rrotate_optab = vrotr_optab; } So, shall tree-vect-generic.c stop relying on that and broadcast the scalar shift to vector if vector x vector but not vector x scalar shift/rotate is supported? Or shall expmed.c do the broadcast? Or are targets required to support the vector x scalar shift/rotate optabs if they do support vector x vector?