diff options
Diffstat (limited to 'mlir/lib/Target/LLVM/ModuleToObject.cpp')
| -rw-r--r-- | mlir/lib/Target/LLVM/ModuleToObject.cpp | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/mlir/lib/Target/LLVM/ModuleToObject.cpp b/mlir/lib/Target/LLVM/ModuleToObject.cpp index 77391341adaa..3f5b3d5e3186 100644 --- a/mlir/lib/Target/LLVM/ModuleToObject.cpp +++ b/mlir/lib/Target/LLVM/ModuleToObject.cpp @@ -34,10 +34,17 @@ using namespace mlir; using namespace mlir::LLVM; -ModuleToObject::ModuleToObject(Operation &module, StringRef triple, - StringRef chip, StringRef features, int optLevel) +ModuleToObject::ModuleToObject( + Operation &module, StringRef triple, StringRef chip, StringRef features, + int optLevel, function_ref<void(llvm::Module &)> initialLlvmIRCallback, + function_ref<void(llvm::Module &)> linkedLlvmIRCallback, + function_ref<void(llvm::Module &)> optimizedLlvmIRCallback, + function_ref<void(StringRef)> isaCallback) : module(module), triple(triple), chip(chip), features(features), - optLevel(optLevel) {} + optLevel(optLevel), initialLlvmIRCallback(initialLlvmIRCallback), + linkedLlvmIRCallback(linkedLlvmIRCallback), + optimizedLlvmIRCallback(optimizedLlvmIRCallback), + isaCallback(isaCallback) {} ModuleToObject::~ModuleToObject() = default; @@ -215,6 +222,9 @@ std::optional<SmallVector<char, 0>> ModuleToObject::run() { } setDataLayoutAndTriple(*llvmModule); + if (initialLlvmIRCallback) + initialLlvmIRCallback(*llvmModule); + // Link bitcode files. handleModulePreLink(*llvmModule); { @@ -227,10 +237,16 @@ std::optional<SmallVector<char, 0>> ModuleToObject::run() { handleModulePostLink(*llvmModule); } + if (linkedLlvmIRCallback) + linkedLlvmIRCallback(*llvmModule); + // Optimize the module. if (failed(optimizeModule(*llvmModule, optLevel))) return std::nullopt; + if (optimizedLlvmIRCallback) + optimizedLlvmIRCallback(*llvmModule); + // Return the serialized object. return moduleToObject(*llvmModule); } |
