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

            Bug ID: 80301
           Summary: Sub-optimal code with an array of structs offsetted
                    inside a struct global on x86/x86_64 at -O2
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mednafen at sent dot com
  Target Milestone: ---

Created attachment 41114
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=41114&action=edit
test code

gcc -fno-asynchronous-unwind-tables -S -O2 -o test.s -c test.c

The displacement should be coded in the memory access instructions, but instead
a separate addition instruction is being generated.

Assembly is from 4.9.2, but the issue shows up on at least 5.3.0, 6.1.0, and a
relatively recent 7.0 build.
[...]
func:
        movl    %edi, %edx
        addq    $2, %rdx
        movl    m(,%rdx,8), %eax
        cmpl    %edi, %eax
        je      .L2
        movl    m+4(,%rdx,8), %eax
.L2:
        rep ret
[...]

Reply via email to