]> granicus.if.org Git - clang/commitdiff
[COFF, ARM64] Add _ReadWriteBarrier intrinsic
authorMandeep Singh Grang <mgrang@codeaurora.org>
Wed, 3 Oct 2018 17:24:21 +0000 (17:24 +0000)
committerMandeep Singh Grang <mgrang@codeaurora.org>
Wed, 3 Oct 2018 17:24:21 +0000 (17:24 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@343699 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/BuiltinsAArch64.def
lib/CodeGen/CGBuiltin.cpp
test/CodeGen/arm64-microsoft-intrinsics.c

index b5d971d0bc6e4d7dc0e62d784fd3d268fecc8887..4c46f50a8dc62d13089e534af026a482b213d602 100644 (file)
@@ -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
index df71dbb4b4a5660aec4ee7acd1c8b029071b9260..49c2b126dd87b03907ea26ff9d14763def848dbf 100644 (file)
@@ -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) {
index 2dbf1f9ea0f4f87c309eb01b1ecf1b1afd1482c3..d29e9305ccd0b948a46222e97f84991b9f6a489c 100644 (file)
@@ -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'