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..
Bootsrapped etc. OK to apply? * config/rs6000/rs6000.h (PIC_OFFSET_TABLE_REGNUM): Correct. diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index 230ca43..9647106 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -2050,7 +2050,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) -- Alan Modra Australia Development Lab, IBM