Commit 44a5da09 by Graham Stott Committed by Graham Stott

* local-alloc.c (combine_regs): Handle SUBREG_REG being a MEM.

From-SVN: r47268
parent 0bf93a51
2001-11-22 Graham Stott <grahams@redhat.com>
* local-alloc.c (combine_regs): Handle SUBREG_REG being a MEM.
Thu Nov 22 06:49:14 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> Thu Nov 22 06:49:14 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* config/i386/i386.md (leave, leave_rex64): Have RTL reflect what * config/i386/i386.md (leave, leave_rex64): Have RTL reflect what
......
...@@ -1801,20 +1801,29 @@ combine_regs (usedreg, setreg, may_save_copy, insn_number, insn, already_dead) ...@@ -1801,20 +1801,29 @@ combine_regs (usedreg, setreg, may_save_copy, insn_number, insn, already_dead)
while (GET_CODE (usedreg) == SUBREG) while (GET_CODE (usedreg) == SUBREG)
{ {
if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (usedreg))) > UNITS_PER_WORD) rtx subreg = SUBREG_REG (usedreg);
may_save_copy = 0;
if (REGNO (SUBREG_REG (usedreg)) < FIRST_PSEUDO_REGISTER) if (GET_CODE (subreg) == REG)
offset += subreg_regno_offset (REGNO (SUBREG_REG (usedreg)), {
GET_MODE (SUBREG_REG (usedreg)), if (GET_MODE_SIZE (GET_MODE (subreg)) > UNITS_PER_WORD)
SUBREG_BYTE (usedreg), may_save_copy = 0;
GET_MODE (usedreg));
else if (REGNO (subreg) < FIRST_PSEUDO_REGISTER)
offset += (SUBREG_BYTE (usedreg) offset += subreg_regno_offset (REGNO (subreg),
/ REGMODE_NATURAL_SIZE (GET_MODE (usedreg))); GET_MODE (subreg),
usedreg = SUBREG_REG (usedreg); SUBREG_BYTE (usedreg),
GET_MODE (usedreg));
else
offset += (SUBREG_BYTE (usedreg)
/ REGMODE_NATURAL_SIZE (GET_MODE (usedreg)));
}
usedreg = subreg;
} }
if (GET_CODE (usedreg) != REG) if (GET_CODE (usedreg) != REG)
return 0; return 0;
ureg = REGNO (usedreg); ureg = REGNO (usedreg);
if (ureg < FIRST_PSEUDO_REGISTER) if (ureg < FIRST_PSEUDO_REGISTER)
usize = HARD_REGNO_NREGS (ureg, GET_MODE (usedreg)); usize = HARD_REGNO_NREGS (ureg, GET_MODE (usedreg));
...@@ -1825,20 +1834,29 @@ combine_regs (usedreg, setreg, may_save_copy, insn_number, insn, already_dead) ...@@ -1825,20 +1834,29 @@ combine_regs (usedreg, setreg, may_save_copy, insn_number, insn, already_dead)
while (GET_CODE (setreg) == SUBREG) while (GET_CODE (setreg) == SUBREG)
{ {
if (GET_MODE_SIZE (GET_MODE (SUBREG_REG (setreg))) > UNITS_PER_WORD) rtx subreg = SUBREG_REG (setreg);
may_save_copy = 0;
if (REGNO (SUBREG_REG (setreg)) < FIRST_PSEUDO_REGISTER) if (GET_CODE (subreg) == REG)
offset -= subreg_regno_offset (REGNO (SUBREG_REG (setreg)), {
GET_MODE (SUBREG_REG (setreg)), if (GET_MODE_SIZE (GET_MODE (subreg)) > UNITS_PER_WORD)
SUBREG_BYTE (setreg), may_save_copy = 0;
GET_MODE (setreg));
else if (REGNO (subreg) < FIRST_PSEUDO_REGISTER)
offset -= (SUBREG_BYTE (setreg) offset -= subreg_regno_offset (REGNO (subreg),
/ REGMODE_NATURAL_SIZE (GET_MODE (setreg))); GET_MODE (subreg),
setreg = SUBREG_REG (setreg); SUBREG_BYTE (setreg),
GET_MODE (setreg));
else
offset -= (SUBREG_BYTE (setreg)
/ REGMODE_NATURAL_SIZE (GET_MODE (setreg)));
}
setreg = subreg;
} }
if (GET_CODE (setreg) != REG) if (GET_CODE (setreg) != REG)
return 0; return 0;
sreg = REGNO (setreg); sreg = REGNO (setreg);
if (sreg < FIRST_PSEUDO_REGISTER) if (sreg < FIRST_PSEUDO_REGISTER)
ssize = HARD_REGNO_NREGS (sreg, GET_MODE (setreg)); ssize = HARD_REGNO_NREGS (sreg, GET_MODE (setreg));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment