diff options
author | Joseph Myers <joseph@codesourcery.com> | 2010-08-20 12:14:38 +0100 |
---|---|---|
committer | Andrew Stubbs <ams@gcc.gnu.org> | 2010-08-20 11:14:38 +0000 |
commit | f8fe0a4a8e1df13c21dd0f394740582a4d264f03 (patch) | |
tree | 2d9f05dc440f7a83a7c9010772e45442652c54fa /gcc | |
parent | 46499993b183dd96d52a050628e409c0512cc411 (diff) | |
download | gcc-f8fe0a4a8e1df13c21dd0f394740582a4d264f03.zip gcc-f8fe0a4a8e1df13c21dd0f394740582a4d264f03.tar.gz gcc-f8fe0a4a8e1df13c21dd0f394740582a4d264f03.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/config/ia64/ia64.h | 2 | ||||
-rw-r--r-- | gcc/defaults.h | 4 | ||||
-rw-r--r-- | gcc/df-scan.c | 5 | ||||
-rw-r--r-- | gcc/doc/tm.texi | 5 | ||||
-rw-r--r-- | gcc/doc/tm.texi.in | 5 | ||||
-rw-r--r-- | gcc/reginfo.c | 5 | ||||
-rw-r--r-- | gcc/rtlanal.c | 9 |
8 files changed, 29 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3176285..11a82db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index 39fa25c..b43d075 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 7aa227c..aaf6ea6 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 b4633ab..8b17ae2 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 3e38618..7e8765b 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 6358916..4d13cbe 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 1510ce8..879f50b 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 f9e6871..4331f41 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; |