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.