<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Jan 31, 2016 at 12:42 AM, Hal Finkel via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">----- Original Message -----<br>
> From: "Ben via llvm-dev Craig" <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>><br>
> To: <a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
> Sent: Thursday, January 28, 2016 9:41:06 AM<br>
> Subject: Re: [llvm-dev] Adding sanity to the Atomics implementation<br>
><br>
><br>
> I don't have much of substance to add, but I will say that I like the<br>
> proposal (I too prefer Alternative A).<br>
<br>
</span>I also prefer alternative A.<br></blockquote><div><br></div><div>Same here: +1 to A.</div><div><br></div><div>it makes it easier to support virtual ISAs. For targets such as WebAssembly we don't know ahead-of time what's atomic but we make certain assumptions (e.g. atomic_flag has to be sufficiently sized to be lock-free). As David pointed out this means that _Atomic and std::atomic have to be "sufficiently sized" e.g. sizeof(T) == sizeof(std::atomic<T>) isn't guaranteed (the guarantee is also there for other academic reasons, but I don't think they matter in this case).</div><div><br></div><div>Another consideration: we want to get the atomic optimizations, which option B would forbid because the middle-end would see libcalls instead of atomics.</div><div><br></div><div>Also, I'd like LLVM to eventually be able to patch code at load-time and transform maybe-lock-free operations into the proper instruction or libcall.</div><div><br></div><div>Related to always lock-free: <a href="http://wg21.link/n4509">wg21.link/n4509</a></div><div>Note that C has macros that return never / sometimes / always lock-free.</div></div></div></div>