https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121737
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #2)
> (In reply to Richard Biener from comment #1)
> >
> > What taget were you testing?
>
> Just aarch64 without SVE enabled. Your dump seems to be without the if part
I get
> /abuild/rguenther/obj/gcc/cc1 -quiet t.c -O3 -fopt-info-vec -I
> /abuild/rguenther/obj/gcc/include -march=armv8.3-a+sve
> -fdump-tree-vect-details -fopt-info
t.c:29:6: optimized: loop split
^^^
t.c:27:17: optimized: loop vectorized using variable length vectors
so that would explain this.
> >
> > What do you mean by "manualy peeling"?
>
> ```
> rngx[0] = poly->v[0].x;
> rngx[1] = poly->v[0].x;
> rngy[0] = poly->v[0].y;
> rngy[1] = poly->v[0].y;
>
> for (int i=1; i<len; ++i)
> {
> if (poly->v[i].x < rngx[0]) rngx[0] = poly->v[i].x;
> if (poly->v[i].x > rngx[1]) rngx[1] = poly->v[i].x;
> if (poly->v[i].y < rngy[0]) rngy[0] = poly->v[i].y;
> if (poly->v[i].y > rngy[1]) rngy[1] = poly->v[i].y;
> }
> ```
But not that...
In fact with the peeling SVE no longer vectorizes it either.