https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85697
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pinskia at gcc dot gnu.org Component|target |tree-optimization --- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Interesting: ``` struct alignas(16) A { A (void) :a(0),b(0),c(0),d(0) {} int a,b,c,d; }; __attribute__((noinline, noipa)) void UseA (A& a) { a.a=1; } int main (void) { char b[sizeof(A)] = {}; A a {}; __builtin_memcpy(&a, b, sizeof(a)); UseA (a); return a.a; } ``` Generates: MEM <uint128_t> [(char * {ref-all})&a] = 0; Store merging only goes up to: /* The maximum size (in bits) of the stores this pass should generate. */ #define MAX_STORE_BITSIZE (BITS_PER_WORD) #define MAX_STORE_BYTES (MAX_STORE_BITSIZE / BITS_PER_UNIT) Blah.