On Tuesday 08 December 2009 15:53, Anton Korobeynikov
wrote:> Hello, David
>
> > For X86 CALLSEQ_START gets selected to ADJCALLSTACKDOWN or
> > ADJCALLSTACKDOWN64 in this case. So is CALLSEQ_START expected
> > to appear only once (at the top of the function)? The comments
> > are rather confusing. It seems like CALLSEQ_START is supposed
> > to appear before every call, but surely there's only one stack
> > adjustment in the final code.
>
> Right. Every call is surrounded by callseq_{start,end} nodes. The
> difference here is that call to special symbol is not real, it's not
> generated by lowering of the ISD::CALL node, thus no callseq stuff is
> ever generated.
>
> You might want to look into TLS lowering code inside
> X86ISelLowering.cpp to introduce yourself into this this.
I looked at that but it's not very helpful. It just creates some generic
instructions that get emitted as a code sequence. It doesn't say anything
about the stack frame.
Where in the backend is the operation to create and destroy the stack frame
either inserted or deleted? That's where I need to make a change.
-Dave