https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80198

--- Comment #20 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> 
---
(In reply to Richard Biener from comment #19)
> So I think when you consider
> 
> void __attribute__((noinline)) fun(int * a, int * b, int c)
> {
>   int i;
>   for (i=0; i < 256; i++) {
>      a[i] = b[i] | c;
>   }
> }
> 
> we can improve the versioning condition to allow a dependence distance
> of zero.
This one was fixed by r10-4803.  E.g. for aarch64 we now have:

        add     x3, x1, 4
        sub     x3, x0, x3
        cmp     x3, 8
        bls     .L5

> Likewise with
> 
> void __attribute__((noipa)) generic(int * a, int * b, int c)
> {
>   int i;
>   a = __builtin_assume_aligned (a, 16);
>   b = __builtin_assume_aligned (b, 16);
>   for (i=0; i < 256; i++) {
>       a[i] = b[i] | c;
>   }
> }
> 
> we fail to realize no versioning check is required - the distance is
> either zero or a multiple of 16.
> 
> Richard - ISTR you added some alignment considerations to the alias
> versioning code, but it doesn't seem to help?
I don't remember adding anything for that, but yeah, I agree it looks
like we need it.

Reply via email to