rjmccall added a comment.

In D79279#2168533 <https://reviews.llvm.org/D79279#2168533>, @jfb wrote:

> In D79279#2168479 <https://reviews.llvm.org/D79279#2168479>, @rjmccall wrote:
>
> > Is there a need for an atomic memcpy at all?  Why is it useful to allow 
> > this operation to take on "atomic" semantics — which aren't actually atomic 
> > because the loads and stores to elements are torn — with hardcoded memory 
> > ordering and somewhat arbitrary rules about what the atomic size is?
>
>
> Hans lays out a rationale for usefulness in his paper, but what I've 
> implemented is more useful: it's *unordered* so you can fence as you desire 
> around it, yet it guarantees a minimum memory access size based on the 
> pointer parameters. For example, copying an atomic `int` will be 4 byte 
> operations which are single-copy-atomic, but the accesses from one `int` to 
> the next aren't performed in any guaranteed order (or observable in any 
> guaranteed order either). I talked about this with him a while ago but IIRC 
> he wasn't sure about implementation among other things, so when you asked me 
> to widen my original `volatile`-only `memcpy` to also do other qualifiers, I 
> realized that it was a neat way to do atomic as well as other qualifiers. 
> I've talked to a few SG1 folks about this, and I believe (for other reasons 
> too) it's where the design will end up for Hans' paper.


I can see the usefulness of this operation, but it seems like a odd semantic 
mismatch for what is basically just a memcpy where one of the pointers happens 
to have `_Atomic` type, like you're shoe-horning it into this builtin just to 
avoid declaring a different one.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D79279/new/

https://reviews.llvm.org/D79279



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to