Index: lib/Transforms/NaCl/ResolvePNaClIntrinsics.cpp |
diff --git a/lib/Transforms/NaCl/ResolvePNaClIntrinsics.cpp b/lib/Transforms/NaCl/ResolvePNaClIntrinsics.cpp |
index 25e1a8620b9f78b5b06ed00f8a4b4280a5bb9e44..fc5138574d4d20812e8ad2966bcdfcd201891f79 100644 |
--- a/lib/Transforms/NaCl/ResolvePNaClIntrinsics.cpp |
+++ b/lib/Transforms/NaCl/ResolvePNaClIntrinsics.cpp |
@@ -18,6 +18,8 @@ |
#include "llvm/ADT/SmallVector.h" |
#include "llvm/IR/Constant.h" |
+#include "llvm/IR/DerivedTypes.h" |
+#include "llvm/IR/InlineAsm.h" |
#include "llvm/IR/Instructions.h" |
#include "llvm/IR/IntrinsicInst.h" |
#include "llvm/IR/Intrinsics.h" |
@@ -242,6 +244,20 @@ private: |
I = new FenceInst(M->getContext(), |
thawMemoryOrder(Call->getArgOperand(0)), SS, Call); |
break; |
+ case Intrinsic::nacl_atomic_fence_all: { |
+ FunctionType *FTy = |
+ FunctionType::get(Type::getVoidTy(M->getContext()), false); |
+ std::string AsmString; // Empty. |
+ std::string Constraints("~{memory}"); |
+ bool HasSideEffect = true; |
+ CallInst *Asm = CallInst::Create( |
+ InlineAsm::get(FTy, AsmString, Constraints, HasSideEffect), "", Call); |
+ Asm->setDebugLoc(Call->getDebugLoc()); |
+ I = new FenceInst(M->getContext(), SequentiallyConsistent, SS, Asm); |
+ Asm = CallInst::Create( |
+ InlineAsm::get(FTy, AsmString, Constraints, HasSideEffect), "", I); |
+ Asm->setDebugLoc(Call->getDebugLoc()); |
+ } break; |
} |
I->setName(Call->getName()); |
I->setDebugLoc(Call->getDebugLoc()); |