https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105219
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|aarch64 |aarch64, x86_64-*-* --- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> --- 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.