[llvm-dev] LLVM and heap-allocated thread stacks
Demi M. Obenour via llvm-dev
llvm-dev at lists.llvm.org
Thu Aug 23 16:46:06 PDT 2018
On 08/23/2018 03:55 PM, TB Schardl wrote:
> Speaking as a bystander just trying to understand the problem: Are you
> looking for a way to ensure that "setHasOpaqueSPAdjustment(true)" is
> executed on appropriate MachineFrameInfo objects during CodeGen for
> GHC and Go? Or do you need something more than that?
>
> Cheers,
> TB
>
> On Thu, Aug 23, 2018 at 2:08 PM Demi M. Obenour via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
> In some language implementations, such as the Glasgow Haskell
> Compiler (GHC) and the reference implementation of Go, a thread’s
> stack is allocated as a data structure on the garbage-collected
> heap. The garbage collector is free to move this data structure
> whenever it is invoked.
>
> Currently, GHC’s LLVM backend does not use the C stack. However,
> there have been discussions about whether using the C stack could
> lead to a performance gain. I think it could. The elephant in
> the room, however, is that */any call into the RTS may then change
> the stack pointer*./ LLVM presumably has no support for this.
> Without such support, however, GHC must spill all locals to memory
> at every call into the RTS. It seems to me that this is why GHC
> cannot transform its output into SSA form: GHC must reify its stack.
>
> It would be nice (both for GHC and for llgo) if LLVM could be made
> to treat the stack pointer as a volatile register that may be
> changed by any function call. In this model, the stack pointer
> needs to be treated the same as any other GC’d object — stack maps
> need to be emitted for it, and the RTS is allowed to relocate it.
>
> Would this be practical? If so, it would be a major boon to the
> implementation of lightweight threading in languages that compile
> to LLVM IR.
>
> Sincerely,
>
> Demi Obenour
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
I have no idea what setHasOpaqueSPAdjustment(true) is or does, so I
cannot give an answer to your question. Does it ensure that %rsp can be
safely changed by function calls?
Demi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180823/ef113747/attachment.html>
More information about the llvm-dev
mailing list