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

--- Comment #3 from Andreas Krebbel <krebbel at gcc dot gnu.org> ---
Moving the local definition of dst out of the function to global scope prevents
the store from getting eliminated.

union DST dst;

As expected the store is still in the FRE dump:

  _1 = src_6(D)->a;
  dst.val = _1;                <---
  _2 = BIT_FIELD_REF <dst, 8, 0>;
  _3 = _2 & 64;
  if (_3 != 0)
...

and the first by is accessed:

bar:
        movq    (%rdi), %rax
        movq    %rax, dst(%rip)
        testb   $64, %al
        jne     .L11

Reply via email to