diff options
| author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-08-27 21:40:33 +0000 |
|---|---|---|
| committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-08-27 21:40:33 +0000 |
| commit | d3c3f88dc6b706896fa5c0d4607a62ca72e491a6 (patch) | |
| tree | 6927da3263e762e2b9bfd736f8760517ff2c0df0 | |
| parent | 47d41401b54247a70c05c4ac4b6a85eaeb82a390 (diff) | |
| download | ppe42-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/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/config/pa/pa.c | 16 |
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 |

