[llvm-commits] [llvm] r109035 - in /llvm/trunk/lib/Target/X86: X86ISelLowering.cpp X86InstrInfo.cpp

Nate Begeman natebegeman at mac.com
Wed Jul 21 14:23:16 PDT 2010


On Jul 21, 2010, at 2:16 PM, Anton Korobeynikov wrote:

>>>> xmm6-15 are marked as clobbered by call instructions on win64 even though they aren't.
>>> They in fact are. Consider reading e.g.
>>> http://msdn.microsoft.com/en-us/library/9z1stfyw.aspx
>> 
>> Your link says they're callee-save, not call-clobbered.
> Hrm. Sorry, I should drink more coffee. Where they are marked as call-clobbered?
> 
>> How so?  The previous code is obviously incorrect, and leads to code like the following being generated on win64 today;
>> movaps rsi, (stack)
> Right. It was broken in r105344. In any case - your change is
> incorrect :) The problem just moves to prologue / epilogue expansion
> code.

Can you explain a bit about how prolog/epilog expansion is broken?  Sorry, I'm not 100% following this yet.

> You can find the full description of the problem at
> http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20090824/085827.html
> Unfortunately, I didnt't find the time since that time to make a generic fix....

I assume this is referencing:

http://msdn.microsoft.com/en-us/library/ew5tede7.aspx

If I recall correctly, PowerPC has an extremely similar issue with where LR/CR are stored.  I'll revert that part of the patch and work on a "more correct" one, but it seems strange that win64 wouldn't save callee-save regs in this routine, and instead choose to save them some other way.

Nate





More information about the llvm-commits mailing list