https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108199

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2022-12-22
            Summary|Bitfields and               |Bitfields, unions and SRA
                   |storage_order_attribute     |and storage_order_attribute
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andreas Krebbel from comment #2)
> The problem appears to get introduced when dead store elimination removes
> the assignment to the target struct in FRE.

There is no DSE in FRE going on .... Rather SRA did messed up.

> 
> Before FRE we  have the following:
> 
>   _1 = src_6(D)->a;               bswap
>   dst$val_9 = _1;                 bswap
>   _2 = BIT_FIELD_REF <dst$val_9, 8, 0>;  bswap
>   _3 = _2 & 64;
>   if (_3 != 0)


dst$val_9/_1 are both SSA names and not a store/load. so there is no swapping
going on.
It is definitely SRA going wrong.

Turning off SRA (-fno-sra) and we get the correct thing at the end.

Reply via email to