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;
}

Reply via email to