reload1.c (reload): Only spill eliminable register with multiple adjacent elimination alternatives...
* reload1.c (reload): Only spill eliminable register with multiple adjacent elimination alternatives if all alternatives fail. From-SVN: r78430
This commit is contained in:
parent
e1471c91b8
commit
4ab51fb500
2 changed files with 21 additions and 3 deletions
|
@ -1,3 +1,8 @@
|
|||
2004-02-25 J"orn Rennecke <joern.rennecke@superh.com>
|
||||
|
||||
* reload1.c (reload): Only spill eliminable register with multiple
|
||||
adjacent elimination alternatives if all alternatives fail.
|
||||
|
||||
2004-02-25 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* arm.c (arm_legitimate_index_p): For QImode the range of an offset
|
||||
|
|
|
@ -849,9 +849,22 @@ reload (rtx first, int global)
|
|||
|
||||
/* Spill any hard regs that we know we can't eliminate. */
|
||||
CLEAR_HARD_REG_SET (used_spill_regs);
|
||||
for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; ep++)
|
||||
if (! ep->can_eliminate)
|
||||
spill_hard_reg (ep->from, 1);
|
||||
/* There can be multiple ways to eliminate a register;
|
||||
they should be listed adjacently.
|
||||
Elimination for any register fails only if all possible ways fail. */
|
||||
for (ep = reg_eliminate; ep < ®_eliminate[NUM_ELIMINABLE_REGS]; )
|
||||
{
|
||||
int from = ep->from;
|
||||
int can_eliminate = 0;
|
||||
do
|
||||
{
|
||||
can_eliminate |= ep->can_eliminate;
|
||||
ep++;
|
||||
}
|
||||
while (ep < ®_eliminate[NUM_ELIMINABLE_REGS] && ep->from == from);
|
||||
if (! can_eliminate)
|
||||
spill_hard_reg (from, 1);
|
||||
}
|
||||
|
||||
#if HARD_FRAME_POINTER_REGNUM != FRAME_POINTER_REGNUM
|
||||
if (frame_pointer_needed)
|
||||
|
|
Loading…
Add table
Reference in a new issue