Hi!

The x86 __m64 type is defined as:
/* The Intel API is flexible enough that we must allow aliasing with other
   vector types, and their scalar components.  */
typedef int __m64 __attribute__ ((__vector_size__ (8), __may_alias__));
and so matches the comment above it in that reads and stores through
pointers to __m64 can alias anything.
But in the rs6000 headers that is the case only for __m128, but not __m64.

The following patch adds that attribute, which fixes the
FAIL: gcc.target/powerpc/sse-movhps-1.c execution test
FAIL: gcc.target/powerpc/sse-movlps-1.c execution test
regressions that appeared when Honza improved ipa-modref.

Bootstrapped/regtested on powerpc64le-linux and powerpc64-linux (the latter
with -m32/-m64 testing), ok for trunk?

2021-01-22  Jakub Jelinek  <ja...@redhat.com>

        PR testsuite/97301
        * config/rs6000/mmintrin.h (__m64): Add __may_alias__ attribute.

--- gcc/config/rs6000/mmintrin.h.jj     2021-01-04 10:25:46.794143679 +0100
+++ gcc/config/rs6000/mmintrin.h        2021-01-22 13:03:28.511043929 +0100
@@ -58,7 +58,8 @@
 #include <altivec.h>
 /* The Intel API is flexible enough that we must allow aliasing with other
    vector types, and their scalar components.  */
-typedef __attribute__ ((__aligned__ (8))) unsigned long long __m64;
+typedef __attribute__ ((__aligned__ (8),
+                       __may_alias__)) unsigned long long __m64;
 
 typedef __attribute__ ((__aligned__ (8)))
 union

        Jakub

Reply via email to