| Index: lib/Transforms/NaCl/RewriteAtomics.cpp
|
| diff --git a/lib/Transforms/NaCl/RewriteAtomics.cpp b/lib/Transforms/NaCl/RewriteAtomics.cpp
|
| index 6b02dea276886ba3885d1efda51fbed3d30d360a..8aafe3d13d3f1615da60f2e26e03e3b8e7bab6cf 100644
|
| --- a/lib/Transforms/NaCl/RewriteAtomics.cpp
|
| +++ b/lib/Transforms/NaCl/RewriteAtomics.cpp
|
| @@ -19,12 +19,13 @@
|
| #include "llvm/IR/DataLayout.h"
|
| #include "llvm/IR/Function.h"
|
| #include "llvm/IR/InlineAsm.h"
|
| +#include "llvm/IR/InstVisitor.h"
|
| #include "llvm/IR/Instructions.h"
|
| #include "llvm/IR/Intrinsics.h"
|
| #include "llvm/IR/Module.h"
|
| #include "llvm/IR/NaClAtomicIntrinsics.h"
|
| -#include "llvm/IR/InstVisitor.h"
|
| #include "llvm/Pass.h"
|
| +#include "llvm/Support/CommandLine.h"
|
| #include "llvm/Support/Compiler.h"
|
| #include "llvm/Support/raw_ostream.h"
|
| #include "llvm/Transforms/NaCl.h"
|
| @@ -33,7 +34,17 @@
|
|
|
| using namespace llvm;
|
|
|
| +// TODO(jfb) Keep the default of this option to true for Chrome 42, and change
|
| +// it to false for Chrome 43. This allows the PNaCl translator to be
|
| +// updated before the SDK starts emitting atomic memory orders that
|
| +// the old translator rejected.
|
| +static cl::opt<bool> PNaClMemoryOrderSeqCstOnly(
|
| + "pnacl-memory-order-seq-cst-only",
|
| + cl::desc("PNaCl should upgrade all atomic memory orders to seq_cst"),
|
| + cl::init(true));
|
| +
|
| namespace {
|
| +
|
| class RewriteAtomics : public ModulePass {
|
| public:
|
| static char ID; // Pass identification, replacement for typeid
|
| @@ -195,7 +206,7 @@ ConstantInt *AtomicVisitor::freezeMemoryOrder(const Instruction &I,
|
| }
|
|
|
| // TODO For now only acquire/release/acq_rel/seq_cst are allowed.
|
| - if (AO == NaCl::MemoryOrderRelaxed)
|
| + if (PNaClMemoryOrderSeqCstOnly || AO == NaCl::MemoryOrderRelaxed)
|
| AO = NaCl::MemoryOrderSequentiallyConsistent;
|
|
|
| return ConstantInt::get(Type::getInt32Ty(C), AO);
|
|
|