https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111156
--- Comment #21 from Tamar Christina <tnfchris at gcc dot gnu.org> --- (In reply to Richard Biener from comment #18) > diff --git a/gcc/tree-vect-slp.cc b/gcc/tree-vect-slp.cc > index 7cf9504398c..8deeecfd4aa 100644 > --- a/gcc/tree-vect-slp.cc > +++ b/gcc/tree-vect-slp.cc > @@ -1280,8 +1280,11 @@ vect_build_slp_tree_1 (vec_info *vinfo, unsigned char > *swap, > && rhs_code.is_tree_code () > && (TREE_CODE_CLASS (tree_code (first_stmt_code)) > == tcc_comparison) > - && (swap_tree_comparison (tree_code (first_stmt_code)) > - == tree_code (rhs_code))) > + && ((swap_tree_comparison (tree_code (first_stmt_code)) > + == tree_code (rhs_code)) > + || ((TREE_CODE_CLASS (tree_code (alt_stmt_code)) > + == tcc_comparison) > + && rhs_code == alt_stmt_code))) > && !(STMT_VINFO_GROUPED_ACCESS (stmt_info) > && (first_stmt_code == ARRAY_REF > || first_stmt_code == BIT_FIELD_REF > > should get you SLP but: > > t.c:8:26: note: === vect_slp_analyze_operations === > t.c:8:26: note: ==> examining statement: pretmp_29 = *_28; > t.c:8:26: missed: unsupported load permutation > t.c:10:30: missed: not vectorized: relevant stmt not supported: pretmp_29 > = *_28; > > t.c:8:26: note: op template: pretmp_29 = *_28; > t.c:8:26: note: stmt 0 pretmp_29 = *_28; > t.c:8:26: note: stmt 1 pretmp_29 = *_28; > t.c:8:26: note: load permutation { 0 0 } hmm with that applied I get: sve-mis.c:8:26: note: ==> examining statement: pretmp_29 = *_28; sve-mis.c:8:26: note: Vectorizing an unaligned access. sve-mis.c:8:26: note: vect_model_load_cost: unaligned supported by hardware. sve-mis.c:8:26: note: vect_model_load_cost: inside_cost = 1, prologue_cost = 0 . but it bails out at: sve-mis.c:8:26: missed: Not using elementwise accesses due to variable vectorization factor. sve-mis.c:10:25: missed: not vectorized: relevant stmt not supported: .MASK_STORE (_5, 8B, _27, pretmp_29); sve-mis.c:8:26: missed: bad operation or unsupported loop bound. for me