[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)
commited95a08ea4e7bf62d7dc71388b61991de065da5b
tree905ca6b2f6f6850df3dbda7e7a5471b67b6fccf7
parentc16219486a30076752d6803c68ab6f883b5fd4a4
[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

llvm-svn: 282900
clang/include/clang/Basic/BuiltinsARM.def
clang/lib/CodeGen/CGBuiltin.cpp
clang/test/CodeGen/ms-volatile-arm.c [new file with mode: 0644]