aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@apple.com>2003-11-05 18:21:30 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2003-11-05 18:21:30 +0000
commit2cf520bf3a4f66defe88168233bb9004d3e90dce (patch)
tree15b8e862a5d6eb99853bf5820b476008ef1f63a6
parenta6cf80f29cd5353bc4e22fee9b87abec03b5e6b2 (diff)
downloadgcc-2cf520bf3a4f66defe88168233bb9004d3e90dce.zip
gcc-2cf520bf3a4f66defe88168233bb9004d3e90dce.tar.gz
gcc-2cf520bf3a4f66defe88168233bb9004d3e90dce.tar.bz2
rs6000.c (rs6000_machopic_legitimize_pic_address): Use an intermediate register for better optimisation.
* config/rs6000/rs6000.c (rs6000_machopic_legitimize_pic_address): Use an intermediate register for better optimisation. From-SVN: r73277
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c6
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8f40fac..994e63a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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,
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index f2bc8d5..14de352 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -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);