Dominic P <[email protected]> writes:
> Thanks Richard.  I may have misunderstood, but I don't think the lanes
> skipped by masked peeling are bounded by max_iters: the skip is
> VF - npeel (or the runtime misalignment), so a small peel count gives a
> large skip even for a short loop.  When I tried the check, this went
> wrong at -O3 -fno-vect-cost-model -msve-vector-bits=256:
>
>   int x[8] __attribute__ ((aligned (64)));
>
>   void
>   foo (int *restrict b, unsigned int n)
>   {
>     for (unsigned int i = 5; i < n; ++i)
>       x[i] = b[i * 650000000L];
>   }
>
> max_iters is 2 and npeel is 3, so 5 lanes are skipped and i = 7 is in
> lane 7, but count = 4 gave 32-bit offsets and x[7] came out wrong under
> qemu (similarly at -msve-vector-bits=512).  The largest lane index seems
> to be min (VF - 1, max_iters + VF - npeel), so I couldn't find a useful
> bound when the misalignment is unknown, and I'd leave the code as it is.

Ah, right, I see.  Thanks for the explanation.  So yeah, I agree that
the original version is best.

Richard

Reply via email to