| 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());
|
|
|