http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46763

Alexander Monakov <amonakov at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amonakov at gcc dot gnu.org

--- Comment #1 from Alexander Monakov <amonakov at gcc dot gnu.org> 2010-12-02 
11:03:00 UTC ---
Small testcase for the global load/store issue:

int g;
extern int bar(int);
void foo(int n)
{
  int i;
  for (i = 0; i < n; i++)
    {
      if (g)
        {
          g++;
          g = bar(i);
        }
      else
        g = i;
    }
}

Trunk at -O3 does not optimize stores to g (at -O2, it also loads g on each
iteration):

.L3:
        movl    %ebx, g(%rip)
        movl    %ebx, %eax
        addl    $1, %ebx
        cmpl    %ebp, %ebx
        je      .L1
.L5:
        testl   %eax, %eax
        je      .L3
        addl    $1, %eax
        movl    %ebx, %edi
        addl    $1, %ebx
        movl    %eax, g(%rip)
        call    bar
        cmpl    %ebp, %ebx
        movl    %eax, g(%rip)
        jne     .L5

Reply via email to