[LLVMdev] Can TargetInstrInfo::storeRegToStackSlot use temp/virtual regs?

Alireza.Moshtaghi at microchip.com Alireza.Moshtaghi at microchip.com
Tue Jan 27 10:33:14 PST 2009


We also (in PIC16) have the same issue but we found a nasty workaround for this. Our architecture only has one WREG and 2 pointer register. And to spill the pointer registers, we needed to use WREG. Now what happens for us is since there is only one WREG, during the lowering of indirect load/store, we can detect if WREG already contains a value or not and then we can spill it manually and make it available for the pointers, because even to load the pointer registers, we need WREG.
So I think our situation is slightly different from yours.

Regardless, I think we could benefit if llvm knew what to do when a register class is corrupted as result of spilling a different register class.

Regards
Ali

> -----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 5:21 AM
> To: LLVM Developers Mailing List
> Subject: Re: [LLVMdev] Can TargetInstrInfo::storeRegToStackSlot use
> temp/virtual regs?
> 
> 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
> 
> regards,
> 
> Cédric
> 
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list