[LLVMdev] llvm register reload/spilling around calls

Jakob Stoklund Olesen stoklund at 2pi.dk
Tue Oct 19 20:00:58 PDT 2010


On Oct 19, 2010, at 6:37 PM, Roland Scheidegger wrote:

> Thanks for giving it a look!
> 
> On 19.10.2010 23:21, Jakob Stoklund Olesen wrote:
>> On Oct 19, 2010, at 11:40 AM, Roland Scheidegger wrote:
>> 
>>> So I saw that the code is doing lots of register
>>> spilling/reloading. Now I understand that due to calling
>>> conventions, there's not really a way to avoid this - I tried using
>>> coldcc but apparently the backend doesn't implement it and hence
>>> this is ignored.
>> 
>> Yes, unfortunately the list of call-clobbered registers is fixed at
>> the moment, so coldcc is mostly ignored by the backend.
>> 
>> Patches welcome.
> What would be needed there? I actually tried a quick hack and simply
> changed the registers included in the list in
> X86RegisterInfo::getCalleeSavedRegs, so some xmm regs were included
> (similar to what was done for win64). But the result wasn't what I
> expected - the callee now indeed saved/restored all the xmm regs I
> added, however the calling code did not change at all...

Look in X86InstrControl.td. The call instructions are all prefixed by:

   let Defs = [RAX, RCX, RDX, RSI, RDI, R8, R9, R10, R11,
              FP0, FP1, FP2, FP3, FP4, FP5, FP6, ST0, ST1,
              MM0, MM1, MM2, MM3, MM4, MM5, MM6, MM7,
              XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7,
              XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, EFLAGS],

This is the fixed list of call-clobbered registers. It should really be controlled by the calling convention of the called function instead.

The WINCALL* instructions only exist because of this.

One problem is that calling conventions are handled while building the selection DAG, and the DAG doesn't really know to represent clobbered registers.

Perhaps X86TargetLowering::LowerCall() could decorate the X86ISD::CALL node with the calling convention somehow?

Dan, do you have any thoughts on how to communicate the calling convention and call clobbered registers to the eventual CALL MachineInstr?

/jakob

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 1929 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20101019/6ab1ee89/attachment.bin>


More information about the llvm-dev mailing list