summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-27 21:40:33 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1999-08-27 21:40:33 +0000
commitd3c3f88dc6b706896fa5c0d4607a62ca72e491a6 (patch)
tree6927da3263e762e2b9bfd736f8760517ff2c0df0
parent47d41401b54247a70c05c4ac4b6a85eaeb82a390 (diff)
downloadppe42-gcc-d3c3f88dc6b706896fa5c0d4607a62ca72e491a6.tar.gz
ppe42-gcc-d3c3f88dc6b706896fa5c0d4607a62ca72e491a6.zip
* pa.c (emit_move_sequence): Do not stop on SUBREG_WORD of an
operand. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@28939 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/pa/pa.c16
2 files changed, 17 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a1a9b65a36c..f123ab187d2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Fri Aug 27 15:35:24 1999 Jeffrey A Law (law@cygnus.com)
+
+ * pa.c (emit_move_sequence): Do not stop on SUBREG_WORD of an
+ operand.
+
Fri Aug 27 14:01:19 1999 Marc Espie <espie@cvs.openbsd.org>
* config/openbsd.h: Define SET_ASM_OP.
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c
index 7568f1fbaa4..640b02b71a7 100644
--- a/gcc/config/pa/pa.c
+++ b/gcc/config/pa/pa.c
@@ -1136,8 +1136,12 @@ emit_move_sequence (operands, mode, scratch_reg)
&& GET_CODE (SUBREG_REG (operand0)) == REG
&& REGNO (SUBREG_REG (operand0)) >= FIRST_PSEUDO_REGISTER)
{
- SUBREG_REG (operand0) = reg_equiv_mem[REGNO (SUBREG_REG (operand0))];
- operand0 = alter_subreg (operand0);
+ /* We must not alter SUBREG_WORD (operand0) since that would confuse
+ the code which tracks sets/uses for delete_output_reload. */
+ rtx temp = gen_rtx_SUBREG (GET_MODE (operand0),
+ reg_equiv_mem [REGNO (SUBREG_REG (operand0))],
+ SUBREG_WORD (operand0));
+ operand0 = alter_subreg (temp);
}
if (scratch_reg
@@ -1149,8 +1153,12 @@ emit_move_sequence (operands, mode, scratch_reg)
&& GET_CODE (SUBREG_REG (operand1)) == REG
&& REGNO (SUBREG_REG (operand1)) >= FIRST_PSEUDO_REGISTER)
{
- SUBREG_REG (operand1) = reg_equiv_mem[REGNO (SUBREG_REG (operand1))];
- operand1 = alter_subreg (operand1);
+ /* We must not alter SUBREG_WORD (operand0) since that would confuse
+ the code which tracks sets/uses for delete_output_reload. */
+ rtx temp = gen_rtx_SUBREG (GET_MODE (operand1),
+ reg_equiv_mem [REGNO (SUBREG_REG (operand1))],
+ SUBREG_WORD (operand1));
+ operand1 = alter_subreg (temp);
}
if (scratch_reg && reload_in_progress && GET_CODE (operand0) == MEM
OpenPOWER on IntegriCloud