aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2016-05-04 22:53:58 +0930
committerAlan Modra <amodra@gcc.gnu.org>2016-05-04 22:53:58 +0930
commit24f77f59d12ad05d8b0c1dc1faae4f698d12da3f (patch)
treecbf264f08b880370e3148af0ec4e2e4c2df64e6b
parent967245d1f63076dde846f0201a0fba05c334a3e6 (diff)
downloadgcc-24f77f59d12ad05d8b0c1dc1faae4f698d12da3f.zip
gcc-24f77f59d12ad05d8b0c1dc1faae4f698d12da3f.tar.gz
gcc-24f77f59d12ad05d8b0c1dc1faae4f698d12da3f.tar.bz2
[RS6000] Correct PIC_OFFSET_TABLE_REGNUM
Leaving this as r30 results in pic_offset_table_rtx of (reg 30) for -m64, which is completely bogus. Various rtl analysis predicate functions treat pic_offset_table_rtx specially.. * config/rs6000/rs6000.h (PIC_OFFSET_TABLE_REGNUM): Correct. From-SVN: r235876
-rw-r--r--gcc/ChangeLog1
-rw-r--r--gcc/config/rs6000/rs6000.h5
2 files changed, 5 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a097aee..00440fc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,6 @@
2016-05-04 Alan Modra <amodra@gmail.com>
+ * config/rs6000/rs6000.h (PIC_OFFSET_TABLE_REGNUM): Correct.
* config/rs6000/sysv4.h (TARGET_TOC): Simplify.
* config/rs6000/rs6000.c (rs6000_elf_output_toc_section_asm_op):
Align .toc.
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 12fa727..c89236a 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -2058,7 +2058,10 @@ do { \
to allocate such a register (if necessary). */
#define RS6000_PIC_OFFSET_TABLE_REGNUM 30
-#define PIC_OFFSET_TABLE_REGNUM (flag_pic ? RS6000_PIC_OFFSET_TABLE_REGNUM : INVALID_REGNUM)
+#define PIC_OFFSET_TABLE_REGNUM \
+ (TARGET_TOC ? TOC_REGISTER \
+ : flag_pic ? RS6000_PIC_OFFSET_TABLE_REGNUM \
+ : INVALID_REGNUM)
#define TOC_REGISTER (TARGET_MINIMAL_TOC ? RS6000_PIC_OFFSET_TABLE_REGNUM : 2)