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
This commit is contained in:
Evgeny Stupachenko 2014-10-13 17:28:24 +00:00 committed by Kirill Yukhin
parent bcb21886b9
commit fa53ca7196
2 changed files with 14 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2014-10-13 Evgeny Stupachenko <evstupac@gmail.com>
* config/i386/i386.c (ix86_address_cost): Lower cost for
when address contains GOT register.
2014-10-13 Ilya Enkovich <ilya.enkovich@intel.com>
Vladimir Makarov <vmakarov@redhat.com>

View File

@ -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++;