From: Joseph Myers Date: Fri, 20 Aug 2010 11:14:38 +0000 (+0100) Subject: tm.texi.in (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Document to be zero or nonzero. X-Git-Tag: releases/gcc-4.6.0~4917 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f8fe0a4a8e1df13c21dd0f394740582a4d264f03;p=thirdparty%2Fgcc.git tm.texi.in (PIC_OFFSET_TABLE_REG_CALL_CLOBBERED): Document to be zero or nonzero. 2010-08-20 Joseph Myers 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 31762851e516..11a82db620bf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2010-08-20 Joseph Myers + + * 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 * config/sparc/sparc.c (sparc_asm_function_epilogue): Don't output diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index 39fa25ccc5ff..b43d075f3c13 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -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. */ diff --git a/gcc/defaults.h b/gcc/defaults.h index 7aa227c3ff9a..aaf6ea66de9e 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -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 diff --git a/gcc/df-scan.c b/gcc/df-scan.c index b4633abfb10c..8b17ae294889 100644 --- a/gcc/df-scan.c +++ b/gcc/df-scan.c @@ -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 diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index 3e38618e79c9..7e8765b36385 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -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 diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 63589168f8d0..4d13cbe86874 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -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 diff --git a/gcc/reginfo.c b/gcc/reginfo.c index 1510ce84ec5d..879f50b08257 100644 --- a/gcc/reginfo.c +++ b/gcc/reginfo.c @@ -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); diff --git a/gcc/rtlanal.c b/gcc/rtlanal.c index f9e687157e3d..4331f416b253 100644 --- a/gcc/rtlanal.c +++ b/gcc/rtlanal.c @@ -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;