[RS6000] Correct PIC_OFFSET_TABLE_REGNUM
authorAlan Modra <amodra@gmail.com>
Wed, 4 May 2016 13:23:58 +0000 (22:53 +0930)
committerAlan Modra <amodra@gcc.gnu.org>
Wed, 4 May 2016 13:23:58 +0000 (22:53 +0930)
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

gcc/ChangeLog
gcc/config/rs6000/rs6000.h

index a097aeef062230c0f5c6a3b5e650f27e8d273910..00440fc08c035f65bc43ad6cb4b903ed7574875c 100644 (file)
@@ -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.
index 12fa7275cdca7400e125a939157115f7df3aab10..c89236a29eefcba15e35e965330d04c5ce8dfd63 100644 (file)
@@ -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)