]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[RS6000] Correct PIC_OFFSET_TABLE_REGNUM
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 May 2016 13:23:58 +0000 (13:23 +0000)
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 May 2016 13:23:58 +0000 (13:23 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@235876 138bc75d-0d04-0410-961f-82ee72b054a4

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)