https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82436
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Doesn't reproduce with struct reflection_type { int h; int k; int l; double f_exp; double f_sigma; _Complex double f_calc; double f_pred; double i_exp; double i_sigma; double i_pred; }; struct { void *data; int offset; int stride; int span; } ext_refs; double y, w; void foo (struct reflection_type *r, int n, unsigned s) { y = 0; w = 0; for (int i = 1; i < n; ++i) { struct reflection_type *x = (struct reflection_type *)(ext_refs.data + (ext_refs.offset + ext_refs.stride * i) * ext_refs.span); double fpred = x->f_pred; double fexp = x->f_exp; double tem = (fpred - fexp); y += __builtin_fabs (tem / x->f_sigma); w += __builtin_fabs (tem / fexp); } } and -Ofast -march=core-avx2 -m32 -fno-vect-cost-model --param vect-max-peeling-for-alignment=0. Somehow the original case gets crystal.fppized.f90:3643:0: note: === vect_make_slp_decision === crystal.fppized.f90:3643:0: note: Decided to SLP 1 instances. Unrolling factor 2 crystal.fppized.f90:3643:0: note: === vect_detect_hybrid_slp === crystal.fppized.f90:3643:0: note: === vect_update_vf_for_slp === crystal.fppized.f90:3643:0: note: Loop contains SLP and non-SLP stmts crystal.fppized.f90:3643:0: note: Updating vectorization factor to 8 while I get only SLP stmts in the C case.