[LLVMdev] [Patch, RFC] Re: Adding support for explicitly specified TLS models (PR9788)

Hans Wennborg hans at chromium.org
Mon Jun 4 07:49:32 PDT 2012


Reviving this thread with a patch!

And some comments inline.

Please take a look and let me know what you think.

 - Hans

On Wed, Apr 25, 2012 at 12:39 PM, Hans Wennborg <hans at chromium.org> wrote:
> Hi all,
>
> I would like to hear your thoughts on adding support for extending the
> IR to allow for explicitly selecting which model to use for
> thread-local storage of a variable.
>
> The motivation is to allow Clang to support the "tls_model" variable
> attribute [1], as requested in PR9788.

This enables better performance for some code. For example, TCMalloc
[3] would like to use the initial-exec model, because it's faster.

> The idea would be to extend the IR to allow an optional TLS-model
> argument to the thread_local attribute, like this:
>
>  @x = thread_local(initialexec) global i32 42
>
> Just as it is illegal to specify thread_local for a target that
> doesn't support it, specifying a TLS model that isn't supported by the
> target would be illegal. If a model is not specified, the target gets
> to choose the appropriate model, as it does today.

As discussed on the original thread, I've changed my mind here. I
don't think there should be any error (or warning) for specifying a
model that isn't supported by a particular target. The target should
just fall back to whatever model it supports.

> The models in question are described in Section 4 of [2]. As far as I
> understand, LLVM supports the following models:
>
>  - X86/ELF: general dynamic, initial exec (but not for PIC code?), local exec

It now supports all four models.

>  - ARM/ELF: general dynamic, local exec

And also initial exec.

>  - Mips: general dynamic, local dynamic, initial exec, local exec
>  - X86 for Darwin and Windows, and XCore, do their own thing
>  - The other targets don't support thread-local storage
>
> [1] http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/Variable-Attributes.html#index-g_t_0040code_007btls_005fmodel_007d-attribute-1797
> [2] http://www.akkadia.org/drepper/tls.pdf

[3] http://code.google.com/searchframe#BGeH2W13jNw/trunk/src/thread_cache.h&l=257
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tls_models.diff
Type: application/octet-stream
Size: 36638 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120604/33a322f0/attachment.obj>


More information about the llvm-dev mailing list