https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112661

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
                 CC|                            |rsandifo at gcc dot gnu.org
   Last reconfirmed|                            |2023-11-22
             Status|UNCONFIRMED                 |NEW

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
We are code-generating

t.f90:1:12: note: node (constant) 0x53bc430 (max_nunits=1, refcnt=1)
vector([8,8]) unsigned int
t.f90:1:12: note:  { 1, 1, 1, 1, 1 }

during SLP node analysis we assume we can constant generate constants/externals
as only consumers will determine the vector type.  vectorizable_store
doesn't verify it can generate the constant though.  Instead we are checking
this at SLP build time.

We're using E_RVVM1SImode as base_vector_mode and count is 5.  There's
obviously no integer mode for size '5'.  But it is a constant size vector
so I wonder why we ask for can_duplicate_and_interleave_p at all, that is,
how we arrive at vector([8,8]) for a constant size vinfo->vector_mode.

At analysis time we do

          if ((dt == vect_constant_def
               || dt == vect_external_def)
              && !GET_MODE_SIZE (vinfo->vector_mode).is_constant ()
              && TREE_CODE (type) != BOOLEAN_TYPE
              && !can_duplicate_and_interleave_p (vinfo, stmts.length (),
type))
            {      

see how we look at vinfo->vector_mode here.

Reply via email to