| Index: lib/Transforms/NaCl/RewriteAsmDirectives.cpp | 
| diff --git a/lib/Transforms/NaCl/RewriteAsmDirectives.cpp b/lib/Transforms/NaCl/RewriteAsmDirectives.cpp | 
| deleted file mode 100644 | 
| index cb726d2365ef34cd326767e84c03d255a037e4ef..0000000000000000000000000000000000000000 | 
| --- a/lib/Transforms/NaCl/RewriteAsmDirectives.cpp | 
| +++ /dev/null | 
| @@ -1,111 +0,0 @@ | 
| -//===- RewriteAsmDirectives.cpp - Handle Architecture-Independent Assembly-===// | 
| -// | 
| -//                     The LLVM Compiler Infrastructure | 
| -// | 
| -// This file is distributed under the University of Illinois Open Source | 
| -// License. See LICENSE.TXT for details. | 
| -// | 
| -//===----------------------------------------------------------------------===// | 
| -// | 
| -// This pass rewrites any inline assembly directive which is portable | 
| -// into LLVM bitcode. | 
| -// | 
| -//===----------------------------------------------------------------------===// | 
| - | 
| -#include "llvm/ADT/Twine.h" | 
| -#include "llvm/IR/Function.h" | 
| -#include "llvm/IR/InlineAsm.h" | 
| -#include "llvm/IR/Instructions.h" | 
| -#include "llvm/IR/Module.h" | 
| -#include "llvm/InstVisitor.h" | 
| -#include "llvm/Pass.h" | 
| -#include <string> | 
| - | 
| -using namespace llvm; | 
| - | 
| -namespace { | 
| -class RewriteAsmDirectives : public FunctionPass { | 
| -public: | 
| -  static char ID; // Pass identification, replacement for typeid | 
| -  RewriteAsmDirectives() : FunctionPass(ID) { | 
| -    initializeRewriteAsmDirectivesPass(*PassRegistry::getPassRegistry()); | 
| -  } | 
| - | 
| -  virtual bool runOnFunction(Function &F); | 
| -}; | 
| - | 
| -class AsmDirectivesVisitor : public InstVisitor<AsmDirectivesVisitor> { | 
| -public: | 
| -  AsmDirectivesVisitor(Function &F) | 
| -      : F(F), C(F.getParent()->getContext()), ModifiedFunction(false) {} | 
| -  ~AsmDirectivesVisitor() {} | 
| -  bool modifiedFunction() const { return ModifiedFunction; } | 
| - | 
| -  /// Only Call Instructions are ever inline assembly directives. | 
| -  void visitCallInst(CallInst &CI); | 
| - | 
| -private: | 
| -  Function &F; | 
| -  LLVMContext &C; | 
| -  bool ModifiedFunction; | 
| - | 
| -  AsmDirectivesVisitor() LLVM_DELETED_FUNCTION; | 
| -  AsmDirectivesVisitor(const AsmDirectivesVisitor &) LLVM_DELETED_FUNCTION; | 
| -  AsmDirectivesVisitor &operator=(const AsmDirectivesVisitor &) LLVM_DELETED_FUNCTION; | 
| -}; | 
| -} | 
| - | 
| -char RewriteAsmDirectives::ID = 0; | 
| -INITIALIZE_PASS( | 
| -    RewriteAsmDirectives, "rewrite-asm-directives", | 
| -    "rewrite portable inline assembly directives into non-asm LLVM IR", | 
| -    false, false) | 
| - | 
| -bool RewriteAsmDirectives::runOnFunction(Function &F) { | 
| -  AsmDirectivesVisitor AV(F); | 
| -  AV.visit(F); | 
| -  return AV.modifiedFunction(); | 
| -} | 
| - | 
| -void AsmDirectivesVisitor::visitCallInst(CallInst &CI) { | 
| -  if (!CI.isInlineAsm()) | 
| -    return; | 
| - | 
| -  Instruction *Replacement = NULL; | 
| - | 
| -  InlineAsm *IA = cast<InlineAsm>(CI.getCalledValue()); | 
| -  std::string AsmStr(IA->getAsmString()); | 
| -  std::string ConstraintStr(IA->getConstraintString()); | 
| -  Type *T = CI.getType(); | 
| - | 
| -  bool isEmptyAsm = AsmStr.empty(); | 
| -  // Different triples will encode "touch everything" differently, e.g.: | 
| -  //  - le32-unknown-nacl has "~{memory}". | 
| -  //  - x86 "~{memory},~{dirflag},~{fpsr},~{flags}". | 
| -  // The following code therefore only searches for memory: this pass | 
| -  // deals with portable assembly, touching anything else than memory in | 
| -  // an empty assembly statement is meaningless. | 
| -  bool touchesMemory = ConstraintStr.find("~{memory}") != std::string::npos; | 
| - | 
| -  if (T->isVoidTy() && IA->hasSideEffects() && isEmptyAsm && touchesMemory) { | 
| -    // asm("":::"memory") => fence seq_cst | 
| -    // This transformation is safe and strictly stronger: the former is | 
| -    // purely a compiler fence, whereas the latter is a compiler fence | 
| -    // as well as a hardware fence which orders all loads and stores on | 
| -    // the current thread of execution. | 
| -    Replacement = new FenceInst(C, SequentiallyConsistent, CrossThread, &CI); | 
| -  } | 
| - | 
| -  if (Replacement) { | 
| -    Replacement->setDebugLoc(CI.getDebugLoc()); | 
| -    CI.replaceAllUsesWith(Replacement); | 
| -    CI.eraseFromParent(); | 
| -    ModifiedFunction = true; | 
| -  } | 
| -} | 
| - | 
| -namespace llvm { | 
| -FunctionPass *createRewriteAsmDirectivesPass() { | 
| -  return new RewriteAsmDirectives(); | 
| -} | 
| -} | 
|  |