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?




I gave up with DF and instead went through function tree argument to rediscover argument registers.
It was then simple matter to exclude these from epilog/prolog registers saves/restores.


The patches is posted - and seem quite portable to other targets.

http://gcc.gnu.org/ml/gcc-patches/2008-03/msg00115.html


best regards and thanks for help.




Seongbae Park (???, ???) wrote:
2008/3/1 Andrew Hutchinson <andrewhutchinson@cox.net>:
I'm am still struggling with a good solution that avoids unneeded saves
 of parameter registers.

To solve problem all I need to know are the registers actually used for
parameters. Since the caller assumes all of these are clobbered by
callee - they should never need to be saved.

I'm totally confused what is the problem here. I thought you were seeing extra callee-save register save/restore in prologue, but now it sounds like you're seeing extra caller-save register save/restore. Which one are you trying to solve, and what kind of target is this ?

DF_REG_DEF_COUNT is showing 1 artificial def for all POTENTIAL parameter
registers - not just the ones that are really used (since it uses target
FUNCTION_ARG_REGNO_P to get parameter registers)

You said you wanted to know if there's a def of a register within a function. For an incoming parameter, there will be one artificial def, and if there's no other def, it means there's no real def of the register within the function.

So the DF artificial defs are useless in trying to find real parameter
registers.

I don't understand what you mean by this. What do you mean by "real parameter register" ?

That seem to require going over all DF chains to work out which
registers are externally defined. DF does not solve problem for me.

What do you mean by "externally defined" ? DF may not solve the problem for you, but now I'm completely lost on what your problem is.

There has got to be an easier way of finding parameter registers used by
function.

If you want to find all the uses (use as in reading a register but not writing to it), you should look at USE chain, not DEF chain, naturally.

Seongbae



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