On Fri, Oct 10, 2014 at 9:58 AM, Evgeny Stupachenko <evstu...@gmail.com> wrote: > the patch improves performance when previous are applied. > It makes RTL loop invariant behavior for GOT loads same as it was > before the 2 previous patches.
> The patch fixes x86 address cost so that cost for addresses with GOT > register becomes less, how it was before enabling EBX. > > In x86_address_cost the result of “REGNO (parts.base) >= > FIRST_PSEUDO_REGISTER” for hard ebx was always false. The patch makes > condition result > the same when parts.base is GOT register (the same for parts.index). > > 2014-10-08 Evgeny Stupachenko <evstu...@gmail.com> > * gcc/config/i386/i386.c (ix86_address_cost): Lower cost for > when address contains GOT register. > > diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c > index b43e870..9d8cfd1 100644 > --- a/gcc/config/i386/i386.c > +++ b/gcc/config/i386/i386.c > @@ -12497,8 +12497,12 @@ ix86_address_cost (rtx x, enum machine_mode, > addr_space_t, bool) > cost++; Please add a short comment here, explaining the reason for new condition. > if (parts.base > + && (!pic_offset_table_rtx > + || REGNO (pic_offset_table_rtx) != REGNO(parts.base)) > && (!REG_P (parts.base) || REGNO (parts.base) >= FIRST_PSEUDO_REGISTER) > && parts.index > + && (!pic_offset_table_rtx > + || REGNO (pic_offset_table_rtx) != REGNO(parts.index)) > && (!REG_P (parts.index) || REGNO (parts.index) >= > FIRST_PSEUDO_REGISTER) > && parts.base != parts.index) > cost++; Otherwise LGTM, but please repost the patch with a comment. Uros.