This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Why is there no arg_pointer_needed?
On Sun, 2005-01-30 at 23:52 -0500, Ian Lance Taylor wrote:
> Øyvind Harboe <oyvind.harboe@zylin.com> writes:
>
> > I'm trying to understand what ensures that the frame pointer will not be
> > eliminated in the case that the frame pointer is not needed, but the
> > argument pointer relies on the frame pointer because the argument
> > pointer failed to be eliminated to the stack pointer.
> >
> > This could potentially be a problem in an elimination scheme where
> > FRAME/ARG_POINTER_REGNUM are two fake registers that either get
> > eliminated to the stack or frame pointer.
> >
> > #define ELIMINABLE_REGS { \
> > {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
> > {FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
> > {ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
> > {ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM} \
> > }
> >
> > #define CAN_ELIMINATE(FROM, TO) 1
>
> In general init_elim_table() will reject attempts to eliminate to the
> stack pointer when frame_pointer_needed is true. In other cases, it
> will eliminate to the stack pointer. So it seems that if you can't
> eliminate the argument pointer to the stack pointer, then the frame
> pointer must be needed; there is no other reason that the elimination
> would fail.
If I have understood you correctly:
If the frame pointer is not needed and GCC fails to eliminate the
argument pointer to the stack pointer, then GCC(or the backend) is
broken.
--
Øyvind Harboe
http://www.zylin.com