tm.texi.in (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Document to be zero or nonzero.
2010-08-20 Joseph Myers <joseph@codesourcery.com> gcc/ * doc/tm.texi.in (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Document to be zero or nonzero. * doc/tm.texi: Regenerate. * defaults.h (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define. * df-scan.c (df_get_exit_block_use_set), reginfo.c (init_reg_sets_1), rtlanal.c (rtx_unstable_p, rtx_varies_p): Handle new PIC_OFFSET_TABLE_REG_CALL_CLOBBERED semantics. * config/ia64/ia64.h (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define to 1. From-SVN: r163399
This commit is contained in:
parent
46499993b1
commit
f8fe0a4a8e
8 changed files with 29 additions and 18 deletions
|
@ -1,3 +1,15 @@
|
|||
2010-08-20 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* doc/tm.texi.in (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Document to
|
||||
be zero or nonzero.
|
||||
* doc/tm.texi: Regenerate.
|
||||
* defaults.h (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define.
|
||||
* df-scan.c (df_get_exit_block_use_set), reginfo.c
|
||||
(init_reg_sets_1), rtlanal.c (rtx_unstable_p, rtx_varies_p):
|
||||
Handle new PIC_OFFSET_TABLE_REG_CALL_CLOBBERED semantics.
|
||||
* config/ia64/ia64.h (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Define
|
||||
to 1.
|
||||
|
||||
2010-08-20 Olivier Hainque <hainque@adacore.com>
|
||||
|
||||
* config/sparc/sparc.c (sparc_asm_function_epilogue): Don't output
|
||||
|
|
|
@ -1359,7 +1359,7 @@ do { \
|
|||
/* Define this macro if the register defined by `PIC_OFFSET_TABLE_REGNUM' is
|
||||
clobbered by calls. */
|
||||
|
||||
#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 1
|
||||
|
||||
|
||||
/* The Overall Framework of an Assembler File. */
|
||||
|
|
|
@ -722,6 +722,10 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|||
#define PIC_OFFSET_TABLE_REGNUM INVALID_REGNUM
|
||||
#endif
|
||||
|
||||
#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
#define PIC_OFFSET_TABLE_REG_CALL_CLOBBERED 0
|
||||
#endif
|
||||
|
||||
#ifndef TARGET_DLLIMPORT_DECL_ATTRIBUTES
|
||||
#define TARGET_DLLIMPORT_DECL_ATTRIBUTES 0
|
||||
#endif
|
||||
|
|
|
@ -4032,14 +4032,13 @@ df_get_exit_block_use_set (bitmap exit_block_uses)
|
|||
#endif
|
||||
}
|
||||
|
||||
#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
/* Many architectures have a GP register even without flag_pic.
|
||||
Assume the pic register is not in use, or will be handled by
|
||||
other means, if it is not fixed. */
|
||||
if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
|
||||
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);
|
||||
#endif
|
||||
|
||||
/* Mark all global registers, and all registers used by the
|
||||
epilogue as being live at the end of the function since they
|
||||
|
|
|
@ -7128,8 +7128,9 @@ when @code{flag_pic} is true).
|
|||
@end defmac
|
||||
|
||||
@defmac PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
Define this macro if the register defined by
|
||||
@code{PIC_OFFSET_TABLE_REGNUM} is clobbered by calls. Do not define
|
||||
A C expression that is nonzero if the register defined by
|
||||
@code{PIC_OFFSET_TABLE_REGNUM} is clobbered by calls. If not defined,
|
||||
the default is zero. Do not define
|
||||
this macro if @code{PIC_OFFSET_TABLE_REGNUM} is not defined.
|
||||
@end defmac
|
||||
|
||||
|
|
|
@ -7123,8 +7123,9 @@ when @code{flag_pic} is true).
|
|||
@end defmac
|
||||
|
||||
@defmac PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
Define this macro if the register defined by
|
||||
@code{PIC_OFFSET_TABLE_REGNUM} is clobbered by calls. Do not define
|
||||
A C expression that is nonzero if the register defined by
|
||||
@code{PIC_OFFSET_TABLE_REGNUM} is clobbered by calls. If not defined,
|
||||
the default is zero. Do not define
|
||||
this macro if @code{PIC_OFFSET_TABLE_REGNUM} is not defined.
|
||||
@end defmac
|
||||
|
||||
|
|
|
@ -495,10 +495,9 @@ init_reg_sets_1 (void)
|
|||
else if (i == ARG_POINTER_REGNUM && fixed_regs[i])
|
||||
;
|
||||
#endif
|
||||
#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
else if (i == (unsigned) PIC_OFFSET_TABLE_REGNUM && fixed_regs[i])
|
||||
else if (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
&& i == (unsigned) PIC_OFFSET_TABLE_REGNUM && fixed_regs[i])
|
||||
;
|
||||
#endif
|
||||
else if (CALL_REALLY_USED_REGNO_P (i))
|
||||
{
|
||||
SET_HARD_REG_BIT (regs_invalidated_by_call, i);
|
||||
|
|
|
@ -118,13 +118,11 @@ rtx_unstable_p (const_rtx x)
|
|||
/* The arg pointer varies if it is not a fixed register. */
|
||||
|| (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
|
||||
return 0;
|
||||
#ifndef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
/* ??? When call-clobbered, the value is stable modulo the restore
|
||||
that must happen after a call. This currently screws up local-alloc
|
||||
into believing that the restore is not needed. */
|
||||
if (x == pic_offset_table_rtx)
|
||||
if (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED && x == pic_offset_table_rtx)
|
||||
return 0;
|
||||
#endif
|
||||
return 1;
|
||||
|
||||
case ASM_OPERANDS:
|
||||
|
@ -197,14 +195,11 @@ rtx_varies_p (const_rtx x, bool for_alias)
|
|||
|| (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM]))
|
||||
return 0;
|
||||
if (x == pic_offset_table_rtx
|
||||
#ifdef PIC_OFFSET_TABLE_REG_CALL_CLOBBERED
|
||||
/* ??? When call-clobbered, the value is stable modulo the restore
|
||||
that must happen after a call. This currently screws up
|
||||
local-alloc into believing that the restore is not needed, so we
|
||||
must return 0 only if we are called from alias analysis. */
|
||||
&& for_alias
|
||||
#endif
|
||||
)
|
||||
&& (!PIC_OFFSET_TABLE_REG_CALL_CLOBBERED || for_alias))
|
||||
return 0;
|
||||
return 1;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue