rs6000 - Fix PR target/88343
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 12 Dec 2018 08:53:49 +0000 (09:53 +0100)
committerIain Sandoe <iains@gcc.gnu.org>
Wed, 12 Dec 2018 08:53:49 +0000 (08:53 +0000)
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

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index c561bce2627f8013730d6a93442f7c3387802132..2a6916b95ac1d15cd7e575137f817088d986dc8d 100644 (file)
@@ -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.
index 5beb8dfe24af2936982b49c4c9509ad4cde3b112..a8e50cf1be315e1f2852e34a0654d265e7703338 100644 (file)
@@ -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;
 }