[llvm-dev] RFC: Extending atomic loads and stores to floating point and vector types
Craig, Ben via llvm-dev
llvm-dev at lists.llvm.org
Wed Dec 16 06:05:34 PST 2015
On 12/15/2015 7:06 PM, JF Bastien via llvm-dev wrote:
> On Tue, Dec 15, 2015 at 4:27 PM, Philip Reames
> <listmail at philipreames.com <mailto:listmail at philipreames.com>> wrote:
>
>
>
> On 12/15/2015 04:21 PM, JF Bastien wrote:
>>
>>>>> * 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.
> Do they end up using the same lock though? If not, we'd still
> have a race and break atomicity.
>
>
> I believe this is the intent.
Here are some gcc docs describing inlining atomics vs. making library
calls. The intro explicitly covers inter-compiler compatibility.
https://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary
>
>
> Also, what about the case of partially overlapping accesses? The
> code you linked to seems to only handle the case where the base
> and size of the access regions match exactly.
>
>
> That would be UB :-)
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20151216/0ac82233/attachment.html>
More information about the llvm-dev
mailing list