aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2018-12-12 09:53:49 +0100
committerIain Sandoe <iains@gcc.gnu.org>2018-12-12 08:53:49 +0000
commitbe611c9c5a544b08cfd3ff5d45b04a127d4d055f (patch)
tree429f0291958333f58e2c6ef01fb36188c136775a
parentaa3a2eca42d9bcebdaa2441e050df8b5bc24e4fa (diff)
downloadgcc-be611c9c5a544b08cfd3ff5d45b04a127d4d055f.zip
gcc-be611c9c5a544b08cfd3ff5d45b04a127d4d055f.tar.gz
gcc-be611c9c5a544b08cfd3ff5d45b04a127d4d055f.tar.bz2
rs6000 - Fix PR target/88343
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. 2018-12-12 Segher Boessenkool <segher@kernel.crashing.org> Iain Sandoe <iain@sandoe.co.uk> PR target/88343 * 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. Co-Authored-By: Iain Sandoe <iain@sandoe.co.uk> From-SVN: r267049
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/rs6000/rs6000.c9
2 files changed, 9 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c561bce..2a6916b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2018-12-12 Segher Boessenkool <segher@kernel.crashing.org>
+ Iain Sandoe <iain@sandoe.co.uk>
+
+ PR target/88343
+ * 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.
+
2018-12-12 Iain Sandoe <iain@sandoe.co.uk>
* config/rs6000/rs6000-protos.h (rs6000_call_darwin): New.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 5beb8df..a8e50cf 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -23969,7 +23969,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;
}
@@ -23989,13 +23989,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;
}