[llvm-dev] [RFC] Enable thread specific cl::opt values for multi-threaded support
Nicolai Hähnle via llvm-dev
llvm-dev at lists.llvm.org
Sat Oct 20 03:08:02 PDT 2018
Hi Yevgeny,
This would be a very welcome feature for Mesa as well, thank you for
doing this!
> When several threads compile different modules the compiler options > (instances of cl::opt) cannot be set individually for each thread.
That > is because the options are visible to all threads. In other words
all > options are global.> > It would be convenient if the options were
specific to LLVMContext and > they were accessed through an instance of
LLVMContext. This kind of > change would need changes in all source
files where options are used.> > This patch proposes a solution that
needs minimal changes in LLVM source > base.> > It is proposed to have a
thread local set of re-defined option values > mapped by pointers to
options.
That seems very sensible and pragmatic to me.
> Specifically, every time a program gets/sets a value for an option it is
> checked if the current thread local context is set for the current
> thread and the option has its local copy in this context. If so the
> local copy of the option is accessed, otherwise the global option is
> accessed. For all programs that existed so far the context is not set
> and they work with the global options. For new multi-threaded compilers
> (where every thread compiles its own module) every thread can be linked
> to its own context (see ContextValues) where any option can have its
> thread specific value that do not affect the other threads' option
> values. See the thread_routine() in the test ContextSpecificValues2.
Just to make sure I'm understanding this correctly: When a thread has a
non-null option context, then options set in the global context will
have no effect at all for that thread. Right? (That's what I would
expect and what makes sense to me.)
Cheers,
Nicolai
>
> This feature allows a configuration flexibility for multi-threaded
> compilers that can compile every compilation unit in its own thread with
> different command line options.
>
> ===
>
> Thanks.
>
> -Yevgeny Rouban
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
--
Lerne, wie die Welt wirklich ist,
Aber vergiss niemals, wie sie sein sollte.
More information about the llvm-dev
mailing list