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

Cédric Venet cedric.venet at laposte.net
Tue Jan 27 04:21:11 PST 2009


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




More information about the llvm-dev mailing list