diff --git a/mlir/include/mlir-c/ExecutionEngine.h b/mlir/include/mlir-c/ExecutionEngine.h --- a/mlir/include/mlir-c/ExecutionEngine.h +++ b/mlir/include/mlir-c/ExecutionEngine.h @@ -67,6 +67,11 @@ mlirExecutionEngineRegisterSymbol(MlirExecutionEngine jit, MlirStringRef name, void *sym); +/// Dump as an object in `fileName`. +MLIR_CAPI_EXPORTED void +mlirExecutionEngineDumpToObjectFile(MlirExecutionEngine jit, + MlirStringRef fileName); + #ifdef __cplusplus } #endif diff --git a/mlir/lib/Bindings/Python/ExecutionEngine.cpp b/mlir/lib/Bindings/Python/ExecutionEngine.cpp --- a/mlir/lib/Bindings/Python/ExecutionEngine.cpp +++ b/mlir/lib/Bindings/Python/ExecutionEngine.cpp @@ -93,5 +93,13 @@ mlirStringRefCreate(name.c_str(), name.size()), reinterpret_cast(sym)); }, - "Lookup function `func` in the ExecutionEngine."); + "Lookup function `func` in the ExecutionEngine.") + .def( + "dump_to_object_file", + [](PyExecutionEngine &executionEngine, const std::string &fileName) { + mlirExecutionEngineDumpToObjectFile( + executionEngine.get(), + mlirStringRefCreate(fileName.c_str(), fileName.size())); + }, + "Dump ExecutionEngine to an object file."); } diff --git a/mlir/lib/CAPI/ExecutionEngine/ExecutionEngine.cpp b/mlir/lib/CAPI/ExecutionEngine/ExecutionEngine.cpp --- a/mlir/lib/CAPI/ExecutionEngine/ExecutionEngine.cpp +++ b/mlir/lib/CAPI/ExecutionEngine/ExecutionEngine.cpp @@ -66,3 +66,8 @@ return symbolMap; }); } + +extern "C" void mlirExecutionEngineDumpToObjectFile(MlirExecutionEngine jit, + MlirStringRef name) { + unwrap(jit)->dumpToObjectFile(unwrap(name)); +}