| Index: lib/IR/InlineAsm.cpp
 | 
| diff --git a/lib/IR/InlineAsm.cpp b/lib/IR/InlineAsm.cpp
 | 
| index 9f2a9fea4b93b1bd6ff4f65d16f952caf4bbd5a5..121fe1528ebd604c96cecba628afdd4c5fa0eb34 100644
 | 
| --- a/lib/IR/InlineAsm.cpp
 | 
| +++ b/lib/IR/InlineAsm.cpp
 | 
| @@ -293,3 +293,18 @@ bool InlineAsm::Verify(FunctionType *Ty, StringRef ConstStr) {
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| +// @LOCALMOD-START
 | 
| +bool InlineAsm::isAsmMemory() const {
 | 
| +  bool retVoid = getFunctionType()->getReturnType()->isVoidTy();
 | 
| +  bool noArgs = getFunctionType()->getNumParams() == 0 &&
 | 
| +      !getFunctionType()->isVarArg();
 | 
| +  bool isEmptyAsm = AsmString.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.
 | 
| +  bool touchesMemory = Constraints.find("~{memory}") != std::string::npos;
 | 
| +
 | 
| +  return retVoid && noArgs && hasSideEffects() && isEmptyAsm && touchesMemory;
 | 
| +}
 | 
| +// @LOCALMOD-END
 | 
| 
 |