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
Iain Sandoe
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;
}