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 ...

Reply via email to