[LLVMdev] Spilling register and frame indices

Vladimir Prus ghost at cs.msu.su
Tue May 23 06:33:37 PDT 2006

right now, LLVM does register spilling by:

1. Creating stack object
2. Passing index of that stack object to MRegisterInfo::storeRegToStackSlot
3. At later stage, frame indices are replaced by calling to

This works for me, but there's slight problem. The target does not have
"register + contant" addressing mode, so accessing frame index should be
done like this:

   some_register = frame_pointer + offset
         ...... [some_register]

Since frame index eliminations happens after register allocation, I must
make sure 'some_register' does not participate in normal register

That approach sounds suboptimal. By "reserving" one register we can already
cause some values to be spilled, that otherwise would be stored in

The lifetimes of those 'some_register' is likely to be very small (1
instruction), so "reserving" it everywhere is not good.

Ideal approach would be to add a method to MRegisterInfo to spill specific
virtual register. The implementation can then create code like:
   virtual_register = frame_pointer + offset

and then have 'virtual_register' allocated on next iteration of register

Also, while RegAllocLocal and RegAllocSimple directly call
storeRegToStackSlot, I would not found any calls to that method in
RegAllocLinearScan. Am I missing something?

- Volodya

More information about the llvm-dev mailing list