This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: gcc 3.4 > mainline performance regression


Steven Bosscher writes:
 > On 1/5/07, Andrew Haley <aph@redhat.com> wrote:
 > > This is from the gcc-help mailing list.  It's mentioned there for ARM,
 > > but it's just as bad for x86-64.
 > >
 > > It appears that memory references to arrays aren't being hoisted out
 > > of loops: in this test case, gcc 3.4 doesn't touch memory at all in
 > > the loop, but 4.3pre (and 4.2, etc) does.
 > >
 > > Here's the test case:
 > >
 > > void foo(int *a)
 > > {       int i;
 > >         for (i = 0; i < 1000000; i++)
 > >    a[0] += a[1];
 > > }
 > >
 > > gcc 3.4.5 -O2:
 > >
 > > .L5:
 > >         leal    (%rcx,%rsi), %edx
 > >         decl    %eax
 > >         movl    %edx, %ecx
 > >         jns     .L5
 > >
 > > gcc 4.3pre -O2:
 > >
 > > .L2:
 > >         addl    4(%rdi), %eax
 > >         addl    $1, %edx
 > >         cmpl    $1000000, %edx
 > >         movl    %eax, (%rdi)
 > >         jne     .L2
 > >
 > > Thoughts?
 > 
 > What does the code look like if you compile with -O2  -fgcse-sm?

A bit better, altho' there's still one memory ref:

.L2:
        addl    $1, %eax
        addl    4(%rdi), %edx
        cmpl    $1000000, %eax
        jne     .L2

Andrew.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]