rs6000.c (rs6000_machopic_legitimize_pic_address): Use an intermediate register for...
authorGeoffrey Keating <geoffk@apple.com>
Wed, 5 Nov 2003 18:21:30 +0000 (18:21 +0000)
committerGeoffrey Keating <geoffk@gcc.gnu.org>
Wed, 5 Nov 2003 18:21:30 +0000 (18:21 +0000)
* config/rs6000/rs6000.c (rs6000_machopic_legitimize_pic_address): Use
an intermediate register for better optimisation.

From-SVN: r73277

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

index 8f40fac01f3dbc2bfacd4c5096f0cca4b734f517..994e63a1f09974a40f894cc7e57025996d080d19 100644 (file)
@@ -1,3 +1,8 @@
+2003-11-05  Geoffrey Keating  <geoffk@apple.com>
+
+       * config/rs6000/rs6000.c (rs6000_machopic_legitimize_pic_address): Use
+       an intermediate register for better optimisation.
+
 2003-11-05  Zdenek Dvorak  <rakdver@atrey.karlin.mff.cuni.cz>
 
        * cfgloopanal.c (variable_initial_value, variable_initial_values,
index f2bc8d5dd627cad221c73750edb1fa4a33166346..14de35247a45d6d2bc0d75f0229bd3691c2ac120 100644 (file)
@@ -14787,9 +14787,13 @@ rs6000_machopic_legitimize_pic_address (rtx orig, enum machine_mode mode,
 
       if (GET_CODE (XEXP (orig, 0)) == PLUS)
        {
+         /* Use a different reg for the intermediate value, as
+            it will be marked UNCHANGING. */
+         rtx reg_temp = no_new_pseudos ? reg : gen_reg_rtx (Pmode);
+
          base =
            rs6000_machopic_legitimize_pic_address (XEXP (XEXP (orig, 0), 0),
-                                                   Pmode, reg);
+                                                   Pmode, reg_temp);
          offset =
            rs6000_machopic_legitimize_pic_address (XEXP (XEXP (orig, 0), 1),
                                                    Pmode, reg);