]> granicus.if.org Git - clang/commit
[MS] Implement __iso_volatile loads/stores as builtins
authorMartin Storsjo <martin@martin.st>
Fri, 30 Sep 2016 19:13:46 +0000 (19:13 +0000)
committerMartin Storsjo <martin@martin.st>
Fri, 30 Sep 2016 19:13:46 +0000 (19:13 +0000)
commitf8d7a08a5c6855b8de1907f1969866ee6d157e6a
tree07f2824e7f008e7f94e8b9c74cf4ae7554747885
parent39766c54d85d4aef2398c1eab284806a08916de0
[MS] Implement __iso_volatile loads/stores as builtins

These are supposed to produce the same as normal volatile
pointer loads/stores. When -volatile:ms is specified,
normal volatile pointers are forced to have atomic semantics
(as is the default on x86 in MSVC mode). In that case,
these builtins should still produce non-atomic volatile
loads/stores without acquire/release semantics, which
the new test verifies.

These are only available on ARM (and on AArch64,
although clang doesn't support AArch64/Windows yet).

This implements what is missing for PR30394, making it possible
to compile C++ for ARM in MSVC mode with MSVC headers.

Differential Revision: https://reviews.llvm.org/D24986

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@282900 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Basic/BuiltinsARM.def
lib/CodeGen/CGBuiltin.cpp
test/CodeGen/ms-volatile-arm.c [new file with mode: 0644]