https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117554
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |ASSIGNED CC| |rguenth at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Keywords| |needs-bisection Last reconfirmed| |2024-11-13 Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Ah, this is a disconnect between if ((*memory_access_type == VMAT_ELEMENTWISE || *memory_access_type == VMAT_STRIDED_SLP) && single_element_p && loop_vinfo && vect_use_strided_gather_scatters_p (stmt_info, loop_vinfo, masked_p, gs_info)) *memory_access_type = VMAT_GATHER_SCATTER; where single_element_p == single DR and /* ??? The following checks should really be part of get_group_load_store_type. */ if (slp && SLP_TREE_LOAD_PERMUTATION (slp_node).exists () && !((memory_access_type == VMAT_ELEMENTWISE || memory_access_type == VMAT_GATHER_SCATTER) && SLP_TREE_LANES (slp_node) == 1)) { slp_perm = true; where the single element check is SLP_TREE_LANES == 1. But here we have a splat: t.c:10:6: note: node 0x47f5200 (max_nunits=2, refcnt=1) vector(2) char t.c:10:6: note: op template: _17 = *m_23; t.c:10:6: note: [l] stmt 0 _17 = *m_23; t.c:10:6: note: [l] stmt 1 _17 = *m_23; t.c:10:6: note: load permutation { 0 0 } fix: diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc index baf49ec4cf1..3ad3b9bf371 100644 --- a/gcc/tree-vect-stmts.cc +++ b/gcc/tree-vect-stmts.cc @@ -2277,6 +2277,7 @@ get_group_load_store_type (vec_info *vinfo, stmt_vec_info stmt_info, if ((*memory_access_type == VMAT_ELEMENTWISE || *memory_access_type == VMAT_STRIDED_SLP) && single_element_p + && SLP_TREE_LANES (slp_node) == 1 && loop_vinfo && vect_use_strided_gather_scatters_p (stmt_info, loop_vinfo, masked_p, gs_info))