diff options
author | Mandeep Singh Grang <mgrang@codeaurora.org> | 2018-10-03 17:24:21 +0000 |
---|---|---|
committer | Mandeep Singh Grang <mgrang@codeaurora.org> | 2018-10-03 17:24:21 +0000 |
commit | aef87980a97ccd062ecf4815ed9d6c5c7e5684eb (patch) | |
tree | 9a800acfc413e6e19f3ba7626105c56f20b80e7d /clang | |
parent | d37782627772fe13927baa282276c0af591f2b75 (diff) | |
download | bcm5719-llvm-aef87980a97ccd062ecf4815ed9d6c5c7e5684eb.tar.gz bcm5719-llvm-aef87980a97ccd062ecf4815ed9d6c5c7e5684eb.zip |
[COFF, ARM64] Add _ReadWriteBarrier intrinsic
Reviewers: rnk, mstorsjo, compnerd, TomTan, haripul, javed.absar
Reviewed By: rnk
Subscribers: kristof.beyls, chrib, jfb, cfe-commits
Differential Revision: https://reviews.llvm.org/D52809
llvm-svn: 343699
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/Basic/BuiltinsAArch64.def | 2 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 4 | ||||
-rw-r--r-- | clang/test/CodeGen/arm64-microsoft-intrinsics.c | 7 |
3 files changed, 13 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/BuiltinsAArch64.def b/clang/include/clang/Basic/BuiltinsAArch64.def index b5d971d0bc6..4c46f50a8dc 100644 --- a/clang/include/clang/Basic/BuiltinsAArch64.def +++ b/clang/include/clang/Basic/BuiltinsAArch64.def @@ -103,6 +103,8 @@ TARGET_HEADER_BUILTIN(_InterlockedIncrement64, "LLiLLiD*", "nh", "intrin.h" TARGET_HEADER_BUILTIN(_InterlockedOr64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "") TARGET_HEADER_BUILTIN(_InterlockedXor64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "") +TARGET_HEADER_BUILTIN(_ReadWriteBarrier, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "") + #undef BUILTIN #undef LANGBUILTIN #undef TARGET_HEADER_BUILTIN diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index df71dbb4b4a..49c2b126dd8 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -6581,6 +6581,10 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID, return Builder.CreateCall(F); } + if (BuiltinID == AArch64::BI_ReadWriteBarrier) + return Builder.CreateFence(llvm::AtomicOrdering::SequentiallyConsistent, + llvm::SyncScope::SingleThread); + // CRC32 Intrinsic::ID CRCIntrinsicID = Intrinsic::not_intrinsic; switch (BuiltinID) { diff --git a/clang/test/CodeGen/arm64-microsoft-intrinsics.c b/clang/test/CodeGen/arm64-microsoft-intrinsics.c index 2dbf1f9ea0f..d29e9305ccd 100644 --- a/clang/test/CodeGen/arm64-microsoft-intrinsics.c +++ b/clang/test/CodeGen/arm64-microsoft-intrinsics.c @@ -59,3 +59,10 @@ void check__sevl(void) { // CHECK-MSVC: @llvm.aarch64.hint(i32 5) // CHECK-LINUX: error: implicit declaration of function '__sevl' + +void check_ReadWriteBarrier() { + _ReadWriteBarrier(); +} + +// CHECK-MSVC: fence syncscope("singlethread") +// CHECK-LINUX: error: implicit declaration of function '_ReadWriteBarrier' |