[llvm-dev] RFC: Extending atomic loads and stores to floating point and vector types

JF Bastien via llvm-dev llvm-dev at lists.llvm.org
Tue Dec 15 16:21:12 PST 2015


>
>
>>>    - Once we add vector, should we consider adding other composite
>>>    types in general, including structs? C++ allows this, but has substantial
>>>    issues w.r.t. padding.
>>>
>>> I'd say possibly, but FCAs are poorly supported in the IR in general.  I
>>> am not willing to block changes for vectors on changes for FCAs.  This has
>>> never been our policy in the past and should not become so now.
>>>
>>
>> Oh yeah I don't think we should block it. FWIW I expect that some of
>> these will generate calls to the runtime's global atomic lock shard, which
>> is horrible.
>>
>> "global atomic lock shard"?  I have no idea what you're referring to.  Is
>> that something in libc?
>>
>
> compiler-rt:
> https://github.com/llvm-mirror/compiler-rt/blob/master/lib/builtins/atomic.c
>
> Hm, I think this raises an interesting semantic question.  We could use
> the global lock shard scheme to make loads atomic w.r.t. other llvm emitted
> writes, but not writes emitted by other compilers.  This would mean that
> linking object files with atomics might break their atomicity.  I'm not
> sure we want to allow that.  Maybe we can do that only if the
> synchronization scope allows it or something?
>

GCC does it in libatomic:
https://github.com/gcc-mirror/gcc/tree/master/libatomic

They agree on the function name, so AFAIK either runtime allows this to
work properly: the compiler just emits a call to the function, and one of
the runtimes has to be present.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151215/6e0d34cc/attachment.html>


More information about the llvm-dev mailing list