From: Evgeny Stupachenko Date: Mon, 13 Oct 2014 17:28:24 +0000 (+0000) Subject: i386.c (ix86_address_cost): Lower cost for when address contains GOT register. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fa53ca71968d55090aad54653415cd38029b4421;p=gcc.git i386.c (ix86_address_cost): Lower cost for when address contains GOT register. gcc/ * config/i386/i386.c (ix86_address_cost): Lower cost for when address contains GOT register. From-SVN: r216155 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 66fecb93119..7dfd1b80bb0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-10-13 Evgeny Stupachenko + + * config/i386/i386.c (ix86_address_cost): Lower cost for + when address contains GOT register. + 2014-10-13 Ilya Enkovich Vladimir Makarov diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 2a64d2d3611..1c38353cc9c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -12455,9 +12455,18 @@ ix86_address_cost (rtx x, enum machine_mode, addr_space_t, bool) || REGNO (parts.index) >= FIRST_PSEUDO_REGISTER))) cost++; + /* When address base or index is "pic_offset_table_rtx" we don't increase + address cost. When a memopt with "pic_offset_table_rtx" is not invariant + itself it most likely means that base or index is not invariant. + Therefore only "pic_offset_table_rtx" could be hoisted out, which is not + profitable for x86. */ 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++;