Hi Jakub,

On Fri, Jan 22, 2021 at 07:02:04PM +0100, Jakub Jelinek wrote:
> 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.

We define __m64 as an integer type, because we do not have 8-byte
vectors.  There is __m64_union to do conversions.

> 
> 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.

What is the actual error there?  It sounds like something forgot to
pass something through __m64_union.

I'm fine with adding the attribute if needed, these headers are only
meant for quick and easy porting of x86 code, it almost always is worse
performance than wanted (often much worse than can be achieved), but I
would rather not make it worse than needed ;-)


Segher


> 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

Reply via email to