This is the mail archive of the gcc-patches@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: Fix var-tracking WRT location list for DW_AT_frame_base


> > And how about changing
> >
> >>         /* Set its initial "location".  */
> >> !       base = gen_rtx_MEM (Pmode,
> >> ! 			  gen_rtx_PLUS (Pmode, stack_pointer_rtx,
> >> ! 					GEN_INT (frame_stack_adjust)));
> >
> > to
> >
> > 	base = frame_stack_adjust
> > 	       ? gen_rtx_PLUS (Pmode, stack_pointer_rtx,
> > 			       GEN_INT (frame_stack_adjust))
> > 	       : stack_pointer_rtx;
> > 	base = gen_rtx_MEM (Pmode, base);
> 
> Maybe it'd be better to use plus_constant.  I.e.:
> 
>         base = gen_rtx_MEM (Pmode, plus_constant (stack_pointer_rtx,
>                                                   frame_stack_adjust);

IMHO plus_constant is too heavyweight, all I need is to generate a
(mem (stackreg)) or (mem (plus (stackreg) (const)))

What about using the following function instead of those gen_rtx_MEMs
which would probably get inlined?

static rtx 
frame_base_location_rtx (HOST_WIDE_INT offset)
{
  rtx x;

  if (offset == 0)
    return gen_rtx_MEM (Pmode, stack_pointer_rtx);

  return gen_rtx_MEM (Pmode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
                                           GEN_INT (offset)));
}

Regards,

Josef


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