[r11-5391 Regression] FAIL: gcc.target/i386/avx512vl-vxorpd-2.c execution test on Linux/x86_64

Hongtao Liu crazylht@gmail.com
Wed Dec 9 01:50:47 GMT 2020


On Tue, Dec 8, 2020 at 6:23 PM Jakub Jelinek <jakub@redhat.com> wrote:
>
> On Mon, Nov 30, 2020 at 06:16:06PM +0800, Hongtao Liu via Gcc-patches wrote:
> > Add no strict aliasing to function CALC, since there are
> >
> > "long long tmp = (*(long long *) &src1[i]) ^ (*(long long *) &src2[i]);"
> >  in function CALC.
> >
> >
> > modified   gcc/testsuite/gcc.target/i386/avx512dq-vandnpd-2.c
> > @@ -9,6 +9,7 @@
> >  #include "avx512f-mask-type.h"
> >
> >  void
> > +__attribute__ ((optimize ("no-strict-aliasing"), noinline))
> >  CALC (double *s1, double *s2, double *r)
> >  {
> >    int i;
> > modified   gcc/testsuite/gcc.target/i386/avx512dq-vandpd-2.c
>
> I think that is not the best fix, the CALC routines just want to
> model the behavior of the instructions, they are just part of the
> verification that the rest of the test works correctly and so we
> can just rewrite the code not to violate aliasing.
>
> Fixed thusly, committed to the trunk as obvious:
>
> 2020-12-08  Jakub Jelinek  <jakub@redhat.com>
>
>         * gcc.target/i386/avx512dq-vandnpd-2.c (CALC): Use union
>         to avoid aliasing violations.
>         * gcc.target/i386/avx512dq-vandnps-2.c (CALC): Likewise.
>         * gcc.target/i386/avx512dq-vandpd-2.c (CALC): Likewise.
>         * gcc.target/i386/avx512dq-vandps-2.c (CALC): Likewise.
>         * gcc.target/i386/avx512dq-vorpd-2.c (CALC): Likewise.
>         * gcc.target/i386/avx512dq-vorps-2.c (CALC): Likewise.
>         * gcc.target/i386/avx512dq-vxorpd-2.c (CALC): Likewise.
>         * gcc.target/i386/avx512dq-vxorps-2.c (CALC): Likewise.
>
> --- gcc/testsuite/gcc.target/i386/avx512dq-vandnpd-2.c.jj       2020-01-14 20:02:47.785594824 +0100
> +++ gcc/testsuite/gcc.target/i386/avx512dq-vandnpd-2.c  2020-12-08 11:12:37.106053066 +0100
> @@ -16,8 +16,11 @@ CALC (double *s1, double *s2, double *r)
>
>    for (i = 0; i < SIZE; i++)
>      {
> -      tmp = (~(*(long long *) &s1[i])) & (*(long long *) &s2[i]);
> -      r[i] = *(double *) &tmp;
> +      union U { double d; long long l; } u1, u2;
> +      u1.d = s1[i];
> +      u2.d = s2[i];
> +      u1.l = (~u1.l) & u2.l;
> +      r[i] = u1.d;
>      }
>  }
>
> --- gcc/testsuite/gcc.target/i386/avx512dq-vandnps-2.c.jj       2020-01-14 20:02:47.785594824 +0100
> +++ gcc/testsuite/gcc.target/i386/avx512dq-vandnps-2.c  2020-12-08 11:12:55.033852659 +0100
> @@ -16,8 +16,11 @@ CALC (float *s1, float *s2, float *r)
>
>    for (i = 0; i < SIZE; i++)
>      {
> -      tmp = (~(*(int *) &s1[i])) & (*(int *) &s2[i]);
> -      r[i] = *(float *) &tmp;
> +      union U { float f; int i; } u1, u2;
> +      u1.f = s1[i];
> +      u2.f = s2[i];
> +      u1.i = (~u1.i) & u2.i;
> +      r[i] = u1.f;
>      }
>  }
>
> --- gcc/testsuite/gcc.target/i386/avx512dq-vandpd-2.c.jj        2020-01-14 20:02:47.785594824 +0100
> +++ gcc/testsuite/gcc.target/i386/avx512dq-vandpd-2.c   2020-12-08 11:10:03.767767230 +0100
> @@ -16,8 +16,11 @@ CALC (double *s1, double *s2, double *r)
>
>    for (i = 0; i < SIZE; i++)
>      {
> -      tmp = (*(long long *) &s1[i]) & (*(long long *) &s2[i]);
> -      r[i] = *(double *) &tmp;
> +      union U { double d; long long l; } u1, u2;
> +      u1.d = s1[i];
> +      u2.d = s2[i];
> +      u1.l &= u2.l;
> +      r[i] = u1.d;
>      }
>  }
>
> --- gcc/testsuite/gcc.target/i386/avx512dq-vandps-2.c.jj        2020-01-14 20:02:47.785594824 +0100
> +++ gcc/testsuite/gcc.target/i386/avx512dq-vandps-2.c   2020-12-08 11:11:51.548562356 +0100
> @@ -16,8 +16,11 @@ CALC (float *s1, float *s2, float *r)
>
>    for (i = 0; i < SIZE; i++)
>      {
> -      tmp = (*(int *) &s1[i]) & (*(int *) &s2[i]);
> -      r[i] = *(float *) &tmp;
> +      union U { float f; int i; } u1, u2;
> +      u1.f = s1[i];
> +      u2.f = s2[i];
> +      u1.i &= u2.i;
> +      r[i] = u1.f;
>      }
>  }
>
> --- gcc/testsuite/gcc.target/i386/avx512dq-vorpd-2.c.jj 2020-01-14 20:02:47.786594810 +0100
> +++ gcc/testsuite/gcc.target/i386/avx512dq-vorpd-2.c    2020-12-08 11:15:35.497058846 +0100
> @@ -15,8 +15,11 @@ CALC (double *src1, double *src2, double
>
>    for (i = 0; i < SIZE; i++)
>      {
> -      long long tmp = (*(long long *) &src1[i]) | (*(long long *) &src2[i]);
> -      dst[i] = *(double *) &tmp;
> +      union U { double d; long long l; } u1, u2;
> +      u1.d = src1[i];
> +      u2.d = src2[i];
> +      u1.l |= u2.l;
> +      dst[i] = u1.d;
>      }
>  }
>
> --- gcc/testsuite/gcc.target/i386/avx512dq-vorps-2.c.jj 2020-01-14 20:02:47.786594810 +0100
> +++ gcc/testsuite/gcc.target/i386/avx512dq-vorps-2.c    2020-12-08 11:15:45.737944364 +0100
> @@ -15,8 +15,11 @@ CALC (float *src1, float *src2, float *d
>
>    for (i = 0; i < SIZE; i++)
>      {
> -      int tmp = (*(int *) &src1[i]) | (*(int *) &src2[i]);
> -      dst[i] = *(float *) &tmp;
> +      union U { float f; int i; } u1, u2;
> +      u1.f = src1[i];
> +      u2.f = src2[i];
> +      u1.i |= u2.i;
> +      dst[i] = u1.f;
>      }
>  }
>
> --- gcc/testsuite/gcc.target/i386/avx512dq-vxorpd-2.c.jj        2020-01-14 20:02:47.787594795 +0100
> +++ gcc/testsuite/gcc.target/i386/avx512dq-vxorpd-2.c   2020-12-08 11:15:59.644788891 +0100
> @@ -15,8 +15,11 @@ CALC (double *src1, double *src2, double
>
>    for (i = 0; i < SIZE; i++)
>      {
> -      long long tmp = (*(long long *) &src1[i]) ^ (*(long long *) &src2[i]);
> -      dst[i] = *(double *) &tmp;
> +      union U { double d; long long l; } u1, u2;
> +      u1.d = src1[i];
> +      u2.d = src2[i];
> +      u1.l ^= u2.l;
> +      dst[i] = u1.d;
>      }
>  }
>
> --- gcc/testsuite/gcc.target/i386/avx512dq-vxorps-2.c.jj        2020-01-14 20:02:47.787594795 +0100
> +++ gcc/testsuite/gcc.target/i386/avx512dq-vxorps-2.c   2020-12-08 11:16:07.549700530 +0100
> @@ -15,8 +15,11 @@ CALC (float *src1, float *src2, float *d
>
>    for (i = 0; i < SIZE; i++)
>      {
> -      int tmp = (*(int *) &src1[i]) ^ (*(int *) &src2[i]);
> -      dst[i] = *(float *) &tmp;
> +      union U { float f; int i; } u1, u2;
> +      u1.f = src1[i];
> +      u2.f = src2[i];
> +      u1.i ^= u2.i;
> +      dst[i] = u1.f;
>      }
>  }
>
>
>
>         Jakub
>

Yes, thanks.

-- 
BR,
Hongtao


More information about the Gcc-patches mailing list