aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2010-08-20 12:14:38 +0100
committerAndrew Stubbs <ams@gcc.gnu.org>2010-08-20 11:14:38 +0000
commitf8fe0a4a8e1df13c21dd0f394740582a4d264f03 (patch)
tree2d9f05dc440f7a83a7c9010772e45442652c54fa /gcc
parent46499993b183dd96d52a050628e409c0512cc411 (diff)
downloadgcc-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/ChangeLog12
-rw-r--r--gcc/config/ia64/ia64.h2
-rw-r--r--gcc/defaults.h4
-rw-r--r--gcc/df-scan.c5
-rw-r--r--gcc/doc/tm.texi5
-rw-r--r--gcc/doc/tm.texi.in5
-rw-r--r--gcc/reginfo.c5
-rw-r--r--gcc/rtlanal.c9
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;