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

            Bug ID: 99155
           Summary: redundant AND instructions generated to mask bit
                    fields
           Product: gcc
           Version: 10.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dennisc at harding dot ca
  Target Milestone: ---

Created attachment 50217
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50217&action=edit
C source file and Compiler Explorer screen capture

While looking at some code on Compiler Explorer I noticed that GCC 10.2 was
producing suboptimal code compared to MSVC 19.0. I saw that GCC was issuing
redundant AND instructions to mask off bit fields in my C code.

I have attached the short C source file used for the test and a screen capture
of the Compiler Explorer output from GCC 10.2 and MSVC 19.0 in a ZIP file. I
don't think this Compiler Explorer share URL will survive but in case it does
you can try https://godbolt.org/z/hhaov9

The assignment at source line 68 generates code at line 15-22 for GCC which
contains two redundant AND instructions at lines 16-17. This can be compared to
the MSVC code at lines 22-27 which contains an equivalent single AND at line
23.

The same issue is repeated at lines 24-25 corresponding to source line 69, and
lines 33-34 corresponding to source line 70.

Reply via email to