multiple LLVMContext or just one?

When building multiple modules should I be using multiple LLVMContext's
or just one of them shared between the modules?

I'm a little bit uncertain in regards to how the types work. The IR type
checking appears to check exact ptrs for equality so how would multiple
contexts actually work? Or is the type checking limited to within a
given module?


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.

  • Lang.

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?

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.