[llvm-dev] @llvm.memcpy not honoring volatile?
Guillaume Chatelet via llvm-dev
llvm-dev at lists.llvm.org
Fri Jun 7 01:38:33 PDT 2019
On Thu, Jun 6, 2019 at 8:24 PM Eli Friedman <efriedma at quicinc.com> wrote:
> clang uses a volatile memcpy for struct assignment in C. For example,
> “void f(volatile struct S*p) { p[0] = p[1]; }”. It’s not really that
> useful, but it’s been done that way since before clang was written.
>
Thx. I guess my next question is, from the code gen perspective is there a
difference between the volatile and non volatile versions
> void f(volatile struct S*p) { p[0] = p[1]; }
and
> void f(struct S*p) { p[0] = p[1]; }
Clang could lower the volatile copy to a regular copy. And since memcpy has
side effects it would still maintain "that volatile operations are emitted
in source order relative to other volatile operations."
I tried x86_64 gcc, x86_64 clang, ARM gcc, they all generate the exact same
code.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190607/8e54f2d0/attachment.html>
More information about the llvm-dev
mailing list