This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Excess registers pushed - regs_ever_live not right way?
You can use DF_REG_DEF_COUNT() - if this is indeed a parameter register,
there should be only one def (artificial def) or no def at all.
Or if you want to see all defs for the reg,
follow DF_REG_DEF_CHAIN().
Seongbae
On Wed, Feb 27, 2008 at 6:03 PM, Andrew Hutchinson
<andrewhutchinson@cox.net> wrote:
> Register contains parameter that is passed to function. This register
> is not part of call used set.
>
> If this type of register were modified by function, then it would be
> saved by function.
>
> If this register is not modified by function, it should not be saved.
> This is true even if function is not a leaf function (as same register
> would be preserved by deeper calls)
>
>
> Andy
>
>
>
>
>
> Seongbae Park (박성배, 朴成培) wrote:
> > On Wed, Feb 27, 2008 at 5:16 PM, Andrew Hutchinson
> > <andrewhutchinson@cox.net> wrote:
> >
> >> Register saves by prolog (pushes) are typically made with reference to
> >> "df_regs_ever_live_p()" or "regs_ever_live. "||
> >>
> >> If my understanding is correct, these calls reflect register USEs and
> >> not register DEFs. So if register is used in a function, but not
> >> otherwise changed, it will get pushed unnecessarily on stack by prolog.
> >>
> >
> > This implies that the register is either a global register
> > or a parameter register, in either case it won't be saved/restored
> > as callee save.
> > What kind of a register is it and how com there's only use of it in a function
> > but it's not a global ?
> >
> > Seongbae
> >
> >
>
--
#pragma ident "Seongbae Park, compiler, http://seongbae.blogspot.com"