https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105219
--- Comment #13 from Martin Liška <marxin at gcc dot gnu.org> --- (In reply to Richard Biener from comment #11) > int data[128]; > > void __attribute((noipa)) > foo (int *data, int n) > { > for (int i = 0; i < n; ++i) > data[i] = i; > } > > int main() > { > for (int start = 0; start < 16; ++start) > for (int n = 1; n < 3*16; ++n) > { > __builtin_memset (data, 0, sizeof (data)); > foo (&data[start], n); > for (int j = 0; j < n; ++j) > if (data[start + j] != j) > __builtin_abort (); > } > return 0; > } > > for example aborts with -O3 -mtune=intel -fno-vect-cost-model on x86_64, > the cost model disabling is necessary to have the epilogue vectorized. > Without a cost model we peel for the maximum number of aligned refs > but still use the target cost to decide whether peeling is worth at all. This one started with r12-1181-g7ed1cd9665d8ca0f.