https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122219
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jamborm at gcc dot gnu.org
--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
So early we have
MEM <uint128_t> [(union simde__m256_private *)&r_] = _23;
v_24 = MEM[(union simde__m256_private *)&r_];
r_ ={v} {CLOBBER(eos)};
and update-address-taken can transform partial stores to BIT_INSERT_EXPR,
but it does so only when the decl is of VECTOR_TYPE and I think it is
confused by CLOBBERs (which it should simply drop if rewriting anything
into SSA). The store above is on the union of all vector types, so r_
itself cannot be rewritten into SSA. Which means it is likely not a
good case for update-address-taken but SRA. Not sure why it ends up
disqualifying it though, it seems a perfect candidate to me. It works for
the following, so I'm not sure what the difference is.
union X {
unsigned vec128 __attribute__((vector_size(16)));
char pad[32];
};
unsigned __attribute__((vector_size(16)))
foo (char *y)
{
union X x;
__builtin_memcpy (&x, y, 16);
return x.vec128;
}