[LLVMdev] llvm register reload/spilling around calls
Jakob Stoklund Olesen
stoklund at 2pi.dk
Wed Oct 20 09:13:29 PDT 2010
On Oct 20, 2010, at 7:46 AM, Roland Scheidegger wrote:
> On 20.10.2010 05:00, Jakob Stoklund Olesen wrote:
>> 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.
> Ahh I see now. I hacked this up and indeed the code looks much better.
> I can't force it to use win64 calling conventions right?
No, only by targeting Windows.
> Would do just fine for this case (much closer to a cold calling
> convention, I really only need 5 preserved xmm regs).
If XMM registers are the problem, -pre-alloc-split really ought to help you.
You may want to investigate why it doesn't.
/jakob
More information about the llvm-dev
mailing list