diff options
Diffstat (limited to 'gcc/df-scan.c')
-rw-r--r-- | gcc/df-scan.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/gcc/df-scan.c b/gcc/df-scan.c index 42b4b14..7179051 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -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 blocks within infinite loops. */ { + unsigned int picreg = PIC_OFFSET_TABLE_REGNUM; + /* Any reference to any pseudo before reload is a potential reference of the frame pointer. */ 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) /* Any constant, or pseudo with constant equivalences, may require reloading from memory using the pic register. */ - if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM - && fixed_regs[PIC_OFFSET_TABLE_REGNUM]) - bitmap_set_bit (regular_block_artificial_uses, PIC_OFFSET_TABLE_REGNUM); + if (picreg != INVALID_REGNUM + && fixed_regs[picreg]) + bitmap_set_bit (regular_block_artificial_uses, picreg); } /* The all-important stack pointer must always be live. */ bitmap_set_bit (regular_block_artificial_uses, STACK_POINTER_REGNUM); @@ -3779,6 +3781,10 @@ df_get_entry_block_def_set (bitmap entry_block_defs) /* These registers are live everywhere. */ if (!reload_completed) { +#ifdef PIC_OFFSET_TABLE_REGNUM + unsigned int picreg = PIC_OFFSET_TABLE_REGNUM; +#endif + #if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM /* Pseudos with argument area equivalences may require reloading via the argument pointer. */ @@ -3789,9 +3795,9 @@ df_get_entry_block_def_set (bitmap entry_block_defs) #ifdef PIC_OFFSET_TABLE_REGNUM /* Any constant, or pseudo with constant equivalences, may require reloading from memory using the pic register. */ - if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM - && fixed_regs[PIC_OFFSET_TABLE_REGNUM]) - bitmap_set_bit (entry_block_defs, PIC_OFFSET_TABLE_REGNUM); + if (picreg != INVALID_REGNUM + && fixed_regs[picreg]) + bitmap_set_bit (entry_block_defs, picreg); #endif } @@ -3889,6 +3895,7 @@ static void df_get_exit_block_use_set (bitmap exit_block_uses) { unsigned int i; + unsigned int picreg = PIC_OFFSET_TABLE_REGNUM; bitmap_clear (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 other means, if it is not fixed. */ if (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED - && (unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM - && fixed_regs[PIC_OFFSET_TABLE_REGNUM]) - bitmap_set_bit (exit_block_uses, PIC_OFFSET_TABLE_REGNUM); + && picreg != INVALID_REGNUM + && fixed_regs[picreg]) + bitmap_set_bit (exit_block_uses, picreg); /* Mark all global registers, and all registers used by the epilogue as being live at the end of the function since they |