Commit 2098e438 by Jeff Law Committed by Jeff Law

df-problems.c (df_lr_local_compute): Manually CSE PIC_OFFSET_TABLE_REGNUM.

	* df-problems.c (df_lr_local_compute): Manually CSE
	PIC_OFFSET_TABLE_REGNUM.
	* df-scan.c (df_get_regular_block_artificial_uses): Likewise.
	(df_get_entry_block_def_set, df_get_exit_block_use_set): Likewise.

From-SVN: r175081
parent 6beec681
2011-05-06 Jeff Law <law@redhat.com>
* df-problems.c (df_lr_local_compute): Manually CSE
PIC_OFFSET_TABLE_REGNUM.
* df-scan.c (df_get_regular_block_artificial_uses): Likewise.
(df_get_entry_block_def_set, df_get_exit_block_use_set): Likewise.
2011-06-13 Jan Hubicka <jh@suse.cz> 2011-06-13 Jan Hubicka <jh@suse.cz>
* cgraphunit.c (handle_alias_pairs): New function. * cgraphunit.c (handle_alias_pairs): New function.
......
...@@ -906,6 +906,7 @@ df_lr_local_compute (bitmap all_blocks ATTRIBUTE_UNUSED) ...@@ -906,6 +906,7 @@ df_lr_local_compute (bitmap all_blocks ATTRIBUTE_UNUSED)
blocks within infinite loops. */ blocks within infinite loops. */
if (!reload_completed) if (!reload_completed)
{ {
unsigned int pic_offset_table_regnum = PIC_OFFSET_TABLE_REGNUM;
/* Any reference to any pseudo before reload is a potential /* Any reference to any pseudo before reload is a potential
reference of the frame pointer. */ reference of the frame pointer. */
bitmap_set_bit (&df->hardware_regs_used, FRAME_POINTER_REGNUM); bitmap_set_bit (&df->hardware_regs_used, FRAME_POINTER_REGNUM);
...@@ -919,9 +920,9 @@ df_lr_local_compute (bitmap all_blocks ATTRIBUTE_UNUSED) ...@@ -919,9 +920,9 @@ df_lr_local_compute (bitmap all_blocks ATTRIBUTE_UNUSED)
/* Any constant, or pseudo with constant equivalences, may /* Any constant, or pseudo with constant equivalences, may
require reloading from memory using the pic register. */ require reloading from memory using the pic register. */
if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM if (pic_offset_table_regnum != INVALID_REGNUM
&& fixed_regs[PIC_OFFSET_TABLE_REGNUM]) && fixed_regs[pic_offset_table_regnum])
bitmap_set_bit (&df->hardware_regs_used, PIC_OFFSET_TABLE_REGNUM); bitmap_set_bit (&df->hardware_regs_used, pic_offset_table_regnum);
} }
EXECUTE_IF_SET_IN_BITMAP (df_lr->out_of_date_transfer_functions, 0, bb_index, bi) EXECUTE_IF_SET_IN_BITMAP (df_lr->out_of_date_transfer_functions, 0, bb_index, bi)
......
...@@ -3625,6 +3625,8 @@ df_get_regular_block_artificial_uses (bitmap regular_block_artificial_uses) ...@@ -3625,6 +3625,8 @@ df_get_regular_block_artificial_uses (bitmap regular_block_artificial_uses)
live everywhere -- which might not already be the case for live everywhere -- which might not already be the case for
blocks within infinite loops. */ blocks within infinite loops. */
{ {
unsigned int picreg = PIC_OFFSET_TABLE_REGNUM;
/* Any reference to any pseudo before reload is a potential /* Any reference to any pseudo before reload is a potential
reference of the frame pointer. */ reference of the frame pointer. */
bitmap_set_bit (regular_block_artificial_uses, FRAME_POINTER_REGNUM); bitmap_set_bit (regular_block_artificial_uses, FRAME_POINTER_REGNUM);
...@@ -3642,9 +3644,9 @@ df_get_regular_block_artificial_uses (bitmap regular_block_artificial_uses) ...@@ -3642,9 +3644,9 @@ df_get_regular_block_artificial_uses (bitmap regular_block_artificial_uses)
/* Any constant, or pseudo with constant equivalences, may /* Any constant, or pseudo with constant equivalences, may
require reloading from memory using the pic register. */ require reloading from memory using the pic register. */
if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM if (picreg != INVALID_REGNUM
&& fixed_regs[PIC_OFFSET_TABLE_REGNUM]) && fixed_regs[picreg])
bitmap_set_bit (regular_block_artificial_uses, PIC_OFFSET_TABLE_REGNUM); bitmap_set_bit (regular_block_artificial_uses, picreg);
} }
/* The all-important stack pointer must always be live. */ /* The all-important stack pointer must always be live. */
bitmap_set_bit (regular_block_artificial_uses, STACK_POINTER_REGNUM); bitmap_set_bit (regular_block_artificial_uses, STACK_POINTER_REGNUM);
...@@ -3779,6 +3781,10 @@ df_get_entry_block_def_set (bitmap entry_block_defs) ...@@ -3779,6 +3781,10 @@ df_get_entry_block_def_set (bitmap entry_block_defs)
/* These registers are live everywhere. */ /* These registers are live everywhere. */
if (!reload_completed) if (!reload_completed)
{ {
#ifdef PIC_OFFSET_TABLE_REGNUM
unsigned int picreg = PIC_OFFSET_TABLE_REGNUM;
#endif
#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
/* Pseudos with argument area equivalences may require /* Pseudos with argument area equivalences may require
reloading via the argument pointer. */ reloading via the argument pointer. */
...@@ -3789,9 +3795,9 @@ df_get_entry_block_def_set (bitmap entry_block_defs) ...@@ -3789,9 +3795,9 @@ df_get_entry_block_def_set (bitmap entry_block_defs)
#ifdef PIC_OFFSET_TABLE_REGNUM #ifdef PIC_OFFSET_TABLE_REGNUM
/* Any constant, or pseudo with constant equivalences, may /* Any constant, or pseudo with constant equivalences, may
require reloading from memory using the pic register. */ require reloading from memory using the pic register. */
if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM if (picreg != INVALID_REGNUM
&& fixed_regs[PIC_OFFSET_TABLE_REGNUM]) && fixed_regs[picreg])
bitmap_set_bit (entry_block_defs, PIC_OFFSET_TABLE_REGNUM); bitmap_set_bit (entry_block_defs, picreg);
#endif #endif
} }
...@@ -3889,6 +3895,7 @@ static void ...@@ -3889,6 +3895,7 @@ static void
df_get_exit_block_use_set (bitmap exit_block_uses) df_get_exit_block_use_set (bitmap exit_block_uses)
{ {
unsigned int i; unsigned int i;
unsigned int picreg = PIC_OFFSET_TABLE_REGNUM;
bitmap_clear (exit_block_uses); bitmap_clear (exit_block_uses);
...@@ -3913,9 +3920,9 @@ df_get_exit_block_use_set (bitmap exit_block_uses) ...@@ -3913,9 +3920,9 @@ df_get_exit_block_use_set (bitmap exit_block_uses)
Assume the pic register is not in use, or will be handled by Assume the pic register is not in use, or will be handled by
other means, if it is not fixed. */ other means, if it is not fixed. */
if (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED if (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
&& (unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM && picreg != INVALID_REGNUM
&& fixed_regs[PIC_OFFSET_TABLE_REGNUM]) && fixed_regs[picreg])
bitmap_set_bit (exit_block_uses, PIC_OFFSET_TABLE_REGNUM); bitmap_set_bit (exit_block_uses, picreg);
/* Mark all global registers, and all registers used by the /* Mark all global registers, and all registers used by the
epilogue as being live at the end of the function since they epilogue as being live at the end of the function since they
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment