Hi! On Sat, Jan 23, 2021 at 01:03:31AM +0100, Jakub Jelinek wrote: > On Fri, Jan 22, 2021 at 05:45:54PM -0600, Segher Boessenkool wrote: > > 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. > > It being an integer type is not the problem.
Sure, just pointing out the quite big difference we have. > > > 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. > > The problem is that the testcase uses the > _mm_loadl_pi > API, and per the Intel intrinsic rules it is ok when that intrinsic > loads from wide range of types, e.g. including pairs of integers or > 4 shorts or 8 chars or pair of floats. <snip> Oh right. I nominate it for worst API ever :-) Thanks for the explanation. The patch is okay for trunk. Thanks! Segher