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:
Joseph Myers 2010-08-20 12:14:38 +01:00 committed by Andrew Stubbs
parent 46499993b1
commit f8fe0a4a8e
8 changed files with 29 additions and 18 deletions

View File

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

View File

@ -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. */

View 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

View File

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

View File

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

View File

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

View File

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

View File

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