https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120428
--- Comment #19 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #18)
> This is a copy prop for aggegrates issue:
> _23 = MEM <uint128_t> [(char * {ref-all})data_9(D)];
> MEM <uint128_t> [(char * {ref-all})&buffer] = _23;
> _18 = MEM <uint128_t> [(char * {ref-all})data_9(D) + 16B];
> MEM <uint128_t> [(char * {ref-all})&buffer + 16B] = _18;
> _16 = MEM <vector(32) unsigned char> [(char * {ref-all})&buffer];
>
> We should see here that `MEM <vector(32) unsigned char> [(char *
> {ref-all})&buffer]` is the same thing as loading from data_9(D).
What is interesting is without AVX turned on we get:
MEM <unsigned char[32]> [(char * {ref-all})data_9(D)] = MEM <unsigned
char[32]> [(char * {ref-all})&buffer];
Which then SRA will transform `MEM <unsigned char[32]> [(char *
{ref-all})&buffer]` into 2 parts.
But SRA does not transform `MEM <vector(32) unsigned char> [(char *
{ref-all})&buffer]` into a constructor of the 2 parts.
Seems like something which SRA could do ...