Hi, The PR is about unnecessary saves of the pic base register, it shows on m32 Linux and m32/m64 Darwin.
The fix is to check that we are in a pic mode and that the picbase has actually been used. As a bonus, some #ifdef’d TARGET_MACHO code is no longer required. Tested on power7, bootstrapped on Darwin (testing continues). OK for trunk? Branches? Iain 2018-xx-xx Segher Boessenkool <seg...@kernel.crashing.org> Iain Sandoe <i...@sandoe.co.uk> gcc/ * config/rs6000/rs6000.c (save_reg_p): Do not save the picbase reg unless it has been used. (first_reg_to_save): Remove dead code. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index dfd5303..380cf9d 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -23961,7 +23961,7 @@ save_reg_p (int reg) return true; if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_DARWIN) - && flag_pic) + && flag_pic && crtl->uses_pic_offset_table) return true; } @@ -23981,13 +23981,6 @@ first_reg_to_save (void) if (save_reg_p (first_reg)) break; -#if TARGET_MACHO - if (flag_pic - && crtl->uses_pic_offset_table - && first_reg > RS6000_PIC_OFFSET_TABLE_REGNUM) - return RS6000_PIC_OFFSET_TABLE_REGNUM; -#endif - return first_reg; }