diff --git a/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h b/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h index 2f73257c9f79..9774825bda3c 100644 --- a/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h +++ b/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h @@ -67,6 +67,11 @@ public: template llvm::Error invoke(StringRef name, Args &... args); + /// Invokes the function with the given name passing it the list of arguments + /// as a list of opaque pointers. This is the arity-agnostic equivalent of + /// the templated `invoke`. + llvm::Error invoke(StringRef name, MutableArrayRef args); + private: // Private implementation of the JIT (PIMPL) std::unique_ptr jit; diff --git a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp index 9ee453e0ecdd..e344c86799ac 100644 --- a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp +++ b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp @@ -295,3 +295,15 @@ Expected ExecutionEngine::lookup(StringRef name) const { return make_string_error("looked up function is null"); return fptr; } + +llvm::Error ExecutionEngine::invoke(StringRef name, + MutableArrayRef args) { + auto expectedFPtr = lookup(name); + if (!expectedFPtr) + return expectedFPtr.takeError(); + auto fptr = *expectedFPtr; + + (*fptr)(args.data()); + + return llvm::Error::success(); +}