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?

Reply via email to