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: var-tracking wrt. leaf regs on sparc


On Wed, Feb 06, 2013 at 03:18:27PM -0500, David Miller wrote:
> From: Eric Botcazou <ebotcazou@adacore.com>
> Date: Wed, 06 Feb 2013 11:13:30 +0100
> 
> > I think testing crtl->uses_only_leaf_regs is sufficient here (and
> > while you're at it, you could also test the value of
> > HAVE_window_save, which can be 0 if -mflat is passed on the SPARC),
> > so
> > 
> > #ifdef HAVE_window_save
> >     if (HAVE_window_save && !crtl->uses_only_leaf_regs)
> >       {
> > 
> >       }
> > #endif
> 
> Yes, this works perfectly, Jakub any objections?

Perhaps some progress, but not fully working.  I guess you should start
with deciding when the regs should be remapped.  Consider even
simple testcase like (-O2 -g -dA):

int
foo (int a, int b)
{
  int c = a;
  int d = a + b;
  int e = a + b;
  return e;
}

Before *.vartrack, all debug_insn as well as normal insns refer to
%i0 and %i1, before your patch some NOTE_INSN_VAR_LOCATION were referring
to %o[01] registers, others to %i[01] registers, with your patch all refer
to %i[01] registers.  leaf_renumber_regs isn't performed on notes (so,
neither NOTE_INSN_VAR_LOCATION nor NOTE_INSN_CALL_ARG_LOCATION are
adjusted).  Then supposedly somewhere in dwarf2out we do some adjustment,
but still end up with d/e loclist of:
.LLST2:
        .uaxword        .LVL0-.Ltext0   ! Location list begin address (*.LLST2)
        .uaxword        .LVL1-.Ltext0   ! Location list end address (*.LLST2)
        .uahalf 0x6     ! Location expression size
        .byte   0x88    ! DW_OP_breg24
        .byte   0       ! sleb128 0
        .byte   0x89    ! DW_OP_breg25
        .byte   0       ! sleb128 0
        .byte   0x22    ! DW_OP_plus
        .byte   0x9f    ! DW_OP_stack_value
        .uaxword        .LVL1-.Ltext0   ! Location list begin address (*.LLST2)
        .uaxword        .LFE0-.Ltext0   ! Location list end address (*.LLST2)
        .uahalf 0x1     ! Location expression size
        .byte   0x58    ! DW_OP_reg8
        .uaxword        0       ! Location list terminator begin (*.LLST2)
        .uaxword        0       ! Location list terminator end (*.LLST2)
where I'd expect breg8/breg9 instead.

	Jakub


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