diff --git a/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h b/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h --- a/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h +++ b/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h @@ -94,6 +94,9 @@ /// pointer to it. Propagates errors in case of failure. llvm::Expected lookup(StringRef name) const; + /// Maps a symbol to an in-process address. + llvm::Error addInProcessSymbol(StringRef name, void *address); + /// Invokes the function with the given name passing it the list of arguments /// as a list of opaque pointers. llvm::Error invoke(StringRef name, MutableArrayRef args = llvm::None); diff --git a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp --- a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp @@ -335,6 +335,12 @@ return fptr; } +llvm::Error ExecutionEngine::addInProcessSymbol(StringRef name, void *address) { + return jit->getMainJITDylib().define(llvm::orc::absoluteSymbols( + {{jit->getExecutionSession().intern(name), + llvm::JITEvaluatedSymbol::fromPointer(address)}})); +} + Error ExecutionEngine::invoke(StringRef name, MutableArrayRef args) { auto expectedFPtr = lookup(name); if (!expectedFPtr)