[LLVMdev] multiple LLVMContext or just one?

Lang Hames lhames at gmail.com
Thu Feb 14 11:38:30 PST 2013


Hi Rick,

Yes - the usual scheme for compiling modules in parallel is to have one
LLVMContext and one Module per thread.

Can you clarify what you mean by sharing one module across "them all"? If
you mean "Can multiple threads hack on a single Module?", then the answer
is definitely no. A Module can only be associated with one LLVMContext, and
you must have a different LLVMContext for each thread.

The linker API docs can be found at
http://llvm.org/doxygen/classllvm_1_1Linker.html . I think the best way to
understand their use is just to read the llvm-link.cpp source file.

Regards,
Lang.

On Wed, Feb 13, 2013 at 5:36 PM, Rick Mann <rmann at latencyzero.com> wrote:

>
> On Feb 13, 2013, at 17:26 , Lang Hames <lhames at gmail.com> wrote:
>
> > LLVMContext was designed to support multithreading by holding the
> compilation context for each thread in a separate LLVMContext. If you're
> building modules in parallel you definitely need one LLVMContext per thread.
> >
> > If you're talking about compiling multiple modules sequentially with a
> single context I believe that should work, though I don't know how well
> tested it is. I think our tools usually create an LLVMContext for each
> Module to be compiled.
> >
> > The llvm-link tool links multiple modules that share an LLVMContext (see
> tools/llvm-link/llvm-link.cpp), so that use case has at least been tested.
>
> So, are you supposed to have one module and one context per thread when
> building modules in parallel? Or can you share one module across them all?
>
> What's the linking API?
>
> --
> Rick
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130214/d0e8f262/attachment.html>


More information about the llvm-dev mailing list