aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Edelsohn <edelsohn@gnu.org>2004-12-28 00:39:18 +0000
committerDavid Edelsohn <dje@gcc.gnu.org>2004-12-27 19:39:18 -0500
commit55aa0757e2ea89e7f38e55bb323981e62b138d95 (patch)
tree5f6f00fcf7d237ff93d0d7877fa20ef1a4d46aa7 /gcc
parent460fdb4efa038372db8670b4d95f84aec75007c4 (diff)
downloadgcc-55aa0757e2ea89e7f38e55bb323981e62b138d95.zip
gcc-55aa0757e2ea89e7f38e55bb323981e62b138d95.tar.gz
gcc-55aa0757e2ea89e7f38e55bb323981e62b138d95.tar.bz2
rs6000.c (rs6000_eliminate_indexed_memrefs): Do not break apart constant pool addresses.
* config/rs6000/rs6000.c (rs6000_eliminate_indexed_memrefs): Do not break apart constant pool addresses. (rs6000_emit_move): Only force source into REG if target is MEM. From-SVN: r92657
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c4
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e01e756..66264fb 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-12-27 David Edelsohn <edelsohn@gnu.org>
+
+ * config/rs6000/rs6000.c (rs6000_eliminate_indexed_memrefs):
+ Do not break apart constant pool addresses.
+ (rs6000_emit_move): Only force source into REG if target is MEM.
+
2004-12-27 Mark Mitchell <mark@codesourcery.com>
PR c++/19148
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index f368b5f..cf7c8ee 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -4233,6 +4233,7 @@ rs6000_eliminate_indexed_memrefs (rtx operands[2])
{
if (GET_CODE (operands[0]) == MEM
&& GET_CODE (XEXP (operands[0], 0)) != REG
+ && ! legitimate_constant_pool_address_p (XEXP (operands[0], 0))
&& ! reload_in_progress)
operands[0]
= replace_equiv_address (operands[0],
@@ -4240,6 +4241,7 @@ rs6000_eliminate_indexed_memrefs (rtx operands[2])
if (GET_CODE (operands[1]) == MEM
&& GET_CODE (XEXP (operands[1], 0)) != REG
+ && ! legitimate_constant_pool_address_p (XEXP (operands[1], 0))
&& ! reload_in_progress)
operands[1]
= replace_equiv_address (operands[1],
@@ -4294,7 +4296,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
return;
}
- if (!no_new_pseudos && GET_CODE (operands[0]) != REG
+ if (!no_new_pseudos && GET_CODE (operands[0]) == MEM
&& !gpc_reg_operand (operands[1], mode))
operands[1] = force_reg (mode, operands[1]);