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: Excess registers pushed - regs_ever_live not right way?


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



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