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

            Bug ID: 94600
           Summary: Ignored volatile specifier on loop unrolling and
                    bitfield misoptimization
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hp at gcc dot gnu.org
  Target Milestone: ---
              Host: x86_64-unknown-linux-gnu
            Target: arm-eabi, cris-elf, aarch64-linux

Created attachment 48275
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=48275&action=edit
test-case in need of decoration for the gcc test-suite. Compile e.g. at -O2 or
-Os.

Observe the unwieldy code in function foo compiled at -O2 or -Os for any of the
listed targets (and likely many more, except curiously not x86_64 and i386).

Compare this to the compiled bar; nice as expected.

Note in particular the reads in the generated code from the LHS specified as
volatile and which is only stored into in the source code.  Note also the
smaller-than-struct-sized stores. The latter may be target-dependent but the
reads should not happen anywhere.

Reply via email to