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.