Hi! On Fri, Jan 22, 2021 at 08:02:28PM +0100, Jakub Jelinek wrote: > On Mon, Sep 21, 2020 at 10:12:20AM +0200, Richard Biener wrote: > > On Mon, 21 Sep 2020, Jan Hubicka wrote: > > > these testcases now fails because they contains an invalid type puning > > > that happens via const VALUE_TYPE *v pointer. Since the check function > > > is noinline, modref is needed to trigger the wrong code. > > > I think it is easiest to fix it by no-strict-aliasing.
> > > diff --git a/gcc/testsuite/gcc.target/i386/m128-check.h > > > b/gcc/testsuite/gcc.target/i386/m128-check.h > > > index 48b23328539..6f414b07be7 100644 > > > --- a/gcc/testsuite/gcc.target/i386/m128-check.h > > > +++ b/gcc/testsuite/gcc.target/i386/m128-check.h > > > @@ -78,6 +78,7 @@ typedef union > > > > > > #define CHECK_EXP(UINON_TYPE, VALUE_TYPE, FMT) \ > > > static int \ > > > +__attribute__((optimize ("no-strict-aliasing"))) \ > > > __attribute__((noinline, unused)) \ > > > check_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v) \ > > > { \ > > On powerpc64le the tests suffer from the exact same issue. > > Tested on powerpc64le-linux, ok for trunk? So what is the actual error here? This whole union stuff is because we *do* want proper aliasing, afaics. Segher > --- gcc/testsuite/gcc.target/powerpc/m128-check.h > +++ gcc/testsuite/gcc.target/powerpc/m128-check.h > @@ -85,6 +85,7 @@ typedef union > > #define CHECK_EXP(UINON_TYPE, VALUE_TYPE, FMT) \ > static int \ > +__attribute__((optimize ("no-strict-aliasing"))) \ > __attribute__((noinline, unused)) \ > check_##UINON_TYPE (UINON_TYPE u, const VALUE_TYPE *v) \ > { \