[LLVMdev] Can TargetInstrInfo::storeRegToStackSlot use temp/virtual regs?
Mondada Gabriele
g.mondada at etel.ch
Thu Jan 29 03:56:00 PST 2009
> -----Original Message-----
> From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu]
> On Behalf Of Cédric Venet
> Sent: Tuesday, January 27, 2009 1:21 PM
> Dan Gohman a écrit :
> > On Jan 23, 2009, at 3:28 AM, Mondada Gabriele wrote:
> >
> >> Hi,
> >> I'm implementing storeRegToStackSlot() and, in order to store some
> >> specific registers (floating point regs and address regs) I've to
> >> copy them to more standard regs and copy these last ones to the
> slot.
> >> I tried to generate instructions that use physical registers, but by
> >> doing that I overwrote registers already assigned by the register
> >> allocator.
> >> Is it possible to use virtual registers in the instructions
> >> generated by storeRegToStackSlot()?
> >> This function is called by the register allocator. So, if it needs
> >> to store regs on a slot, this means that there is no more registers
> >> available. So, I cannot believe that it is able to allocate new
> >> virtual registers generated by storeRegToStackSlot().
> >>
> >
> > Your analysis here sounds right. The current design with
> > storeRegToStackSlot currently assumes that any register
> > can be stored without requiring intermediate registers.
> >
> >
> >> What is the good way to implement this ?
> >>
> >
> > It looks like you'll have to make your own way here. If
> > you find a good solution, perhaps others with similar needs
> > may be able to follow.
> >
> An easy way (but not very efficient) is to reserve a register for this
> (just disallow automatic selection of this register). It is just a few
> line to change in your td files. You may also want to check how it is
> done in the PIC16 backend. I think they also need a register at spill
> time (to compute the destination adress) but I may be wrong.
> I didn't work much with llvm, so I may be wrong
It is finally what I did. I need a very specific register to store value in the stack so I reserved one register to save and restore the value of this specific register. So, I save the specific register, I use it and I restore it.
To improve the efficiency, I could check if my specific register is used or not in the location where I'm inserting the store to slot. If it is not used, I don't need to save and restore it. But how to know if a register is used from within the storeRegToStackSlot() function?
For the moment, I keep this solution as it is.
Thanks for your help.
Gab
More information about the llvm-dev
mailing list