Commit 39c39be9 by Richard Henderson Committed by Richard Henderson

flow.c (calculate_global_regs_live): Only force stack pointer live before reload.

        * flow.c (calculate_global_regs_live): Only force stack pointer
        live before reload.  Force pic register live before reload.
        (insn_dead_p): Don't protect pic references from deletion.

From-SVN: r38027
parent f8b93ea7
2000-12-05 Richard Henderson <rth@redhat.com>
* flow.c (calculate_global_regs_live): Only force stack pointer
live before reload. Force pic register live before reload.
(insn_dead_p): Don't protect pic references from deletion.
2000-12-05 Joseph S. Myers <jsm28@cam.ac.uk>
* invoke.texi: Add support for using texi2pod.pl. Don't use
......
......@@ -3368,15 +3368,32 @@ calculate_global_regs_live (blocks_in, blocks_out, flags)
IOR_REG_SET (new_live_at_end, sb->global_live_at_start);
}
/* Force the stack pointer to be live -- which might not already be
the case for blocks within infinite loops. */
SET_REGNO_REG_SET (new_live_at_end, STACK_POINTER_REGNUM);
/* Similarly for the frame pointer before reload. Any reference
to any pseudo before reload is a potential reference of the
frame pointer. */
/* Before reload, there are a few registers that must be forced
live everywhere -- which might not already be the case for
blocks within infinite loops. */
if (! reload_completed)
SET_REGNO_REG_SET (new_live_at_end, FRAME_POINTER_REGNUM);
{
/* The all-important stack pointer. */
SET_REGNO_REG_SET (new_live_at_end, STACK_POINTER_REGNUM);
/* Any reference to any pseudo before reload is a potential
reference of the frame pointer. */
SET_REGNO_REG_SET (new_live_at_end, FRAME_POINTER_REGNUM);
#if FRAME_POINTER_REGNUM != ARG_POINTER_REGNUM
/* Pseudos with argument area equivalences may require
reloading via the argument pointer. */
if (fixed_regs[ARG_POINTER_REGNUM])
SET_REGNO_REG_SET (new_live_at_end, ARG_POINTER_REGNUM);
#endif
#ifdef PIC_OFFSET_TABLE_REGNUM
/* Any constant, or pseudo with constant equivalences, may
require reloading from memory using the pic register. */
if (fixed_regs[PIC_OFFSET_TABLE_REGNUM])
SET_REGNO_REG_SET (new_live_at_end, PIC_OFFSET_TABLE_REGNUM);
#endif
}
/* Regs used in phi nodes are not included in
global_live_at_start, since they are live only along a
......@@ -4219,6 +4236,10 @@ insn_dead_p (pbi, x, call_ok, notes)
if (regno == STACK_POINTER_REGNUM)
return 0;
/* ??? These bits might be redundant with the force live bits
in calculate_global_regs_live. We would delete from
sequential sets; whether this actually affects real code
for anything but the stack pointer I don't know. */
/* Make sure insns to set the frame pointer aren't deleted. */
if (regno == FRAME_POINTER_REGNUM
&& (! reload_completed || frame_pointer_needed))
......@@ -4237,16 +4258,6 @@ insn_dead_p (pbi, x, call_ok, notes)
return 0;
#endif
#ifdef PIC_OFFSET_TABLE_REGNUM
/* Before reload, do not allow sets of the pic register
to be deleted. Reload can insert references to
constant pool memory anywhere in the function, making
the PIC register live where it wasn't before. */
if (regno == PIC_OFFSET_TABLE_REGNUM && fixed_regs[regno]
&& ! reload_completed)
return 0;
#endif
/* Otherwise, the set is dead. */
return 1;
}
......
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