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: PTR-PLUS merge into the mainline


On 7/5/07, Roman Zippel <zippel@linux-m68k.org> wrote:
Hi,

On Thu, 5 Jul 2007, Richard Guenther wrote:

> For me both canonicalizations generate
>
>         movl    8(%ecx,%edx,4), %eax
>         addl    4(%ecx,%edx,4), %eax

Hmm, there seem to be other problems in this area as well.
Either add a "p[i + 3]" to it to fool combine or try this:

Combine is not going to help here anyways since rtl forwprop does the address selection now :).

Anyways you need to do both:
int g(void);
void foo(int *p, unsigned int i)
{
      p[i + 1] = g();
      p[i + 2] = g();
      p[i + 3] = g();
}

With that we get:
       movl    %eax, 4(%esi,%ebx,4)
       sall    $2, %ebx
...
       movl    %eax, 8(%ebx,%esi)
....
       movl    %eax, 12(%ebx,%esi)

Which is worse.  Now if we had returned i*sizeof(int), it would not be
worse at all because the shift would still be required.


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