[LLVMdev] [PATCH] Segmented Stacks

Sanjoy Das sanjoy at playingwithpointers.com
Thu Jul 14 09:07:55 PDT 2011


Hi llvm-dev!

I have attached the current state of my GSoC work in patches [1] for
review; this currently allows LLVM to correctly handle functions running
out of stack space and variable sized stack objects.

Firstly, since I think it is better to get things merged in small
chunks, I'd like to have some specific feedback on where my work stands
in terms of mergeability.

Secondly, I had been working on supporting variable arguments before I
started to clean up my work and roll a patch series. The varargs work is
not completed yet; and I recall having a discussion on this list some
time back [2] about adding support for co-routines. Does postponing the
vararg work and seeing if co-routines can be implemented sound more
useful (since we should be able to cheaply create and destroy stacks
now). I understand that segmented stacks will primarily be used by
managed languages; does support for varargs seem important enough in
such cases?

Thanks!

[1] I'm working on implementing segmented stacks as a part of GSoC '11.

[2] The previous discussion has concluded with a suggestion of adding
three intrinsics to LLVM: llvm.stacknew, llvm.stackswitch and
llvm.stackdestroy; which should be enough to allow the frontend
developer to implement his or her own co-routining semantics.

-- 
Sanjoy Das
http://playingwithpointers.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Adds-a-command-line-option-segmented-stacks-to-enabl.patch
Type: text/x-diff
Size: 1644 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110714/1955e17f/attachment.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-Adds-a-StackSegmenter-pass.patch
Type: text/x-diff
Size: 6959 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110714/1955e17f/attachment-0001.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-Implements-prologue-code-emission-for-X86.patch
Type: text/x-diff
Size: 9781 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110714/1955e17f/attachment-0002.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0004-Adds-a-new-SelectionDAG-node-and-two-pseudo-instruct.patch
Type: text/x-diff
Size: 4335 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110714/1955e17f/attachment-0003.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0005-Adds-support-for-variable-sized-allocas.patch
Type: text/x-diff
Size: 10712 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110714/1955e17f/attachment-0004.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0006-Adds-some-basic-test-code.patch
Type: text/x-diff
Size: 2075 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110714/1955e17f/attachment-0005.patch>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0007-Adds-some-preliminary-documentation.patch
Type: text/x-diff
Size: 6384 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110714/1955e17f/attachment-0006.patch>


More information about the llvm-dev mailing list