This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]