Skip to content

Commit 011f653

Browse files
committed
[mlir] Add sectionMemoryMapper to ExecutionEngineOptions
By specifying a sectionMemoryMapper, users can control how memory for JIT code is allocated. In particular, I need this in order to use a named memory region so that profilers such as perf(1) can correctly label execution cycles coming from JIT'ed code. Reviewed-by: ezhulenev Differential Revision: https://reviews.llvm.org/D120415
1 parent e87c32e commit 011f653

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

mlir/include/mlir/ExecutionEngine/ExecutionEngine.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "mlir/Support/LLVM.h"
1717
#include "llvm/ExecutionEngine/ObjectCache.h"
1818
#include "llvm/ExecutionEngine/Orc/LLJIT.h"
19+
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
1920
#include "llvm/IR/LLVMContext.h"
2021
#include "llvm/Support/Error.h"
2122

@@ -68,6 +69,11 @@ struct ExecutionEngineOptions {
6869
/// open and link the shared libraries for symbol resolution.
6970
ArrayRef<StringRef> sharedLibPaths = {};
7071

72+
/// Specifies an existing `sectionMemoryMapper` to be associated with the
73+
/// compiled code. If none is provided, a default memory mapper that directly
74+
/// calls into the operating system is used.
75+
llvm::SectionMemoryManager::MemoryMapper *sectionMemoryMapper = nullptr;
76+
7177
/// If `enableObjectCache` is set, the JIT compiler will create one to store
7278
/// the object generated for the given module.
7379
bool enableObjectCache = true;

mlir/lib/ExecutionEngine/ExecutionEngine.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
#include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"
2525
#include "llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h"
2626
#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"
27-
#include "llvm/ExecutionEngine/SectionMemoryManager.h"
2827
#include "llvm/IR/IRBuilder.h"
2928
#include "llvm/MC/SubtargetFeature.h"
3029
#include "llvm/MC/TargetRegistry.h"
@@ -252,7 +251,9 @@ ExecutionEngine::create(ModuleOp m, const ExecutionEngineOptions &options) {
252251
auto objectLinkingLayerCreator = [&](ExecutionSession &session,
253252
const Triple &tt) {
254253
auto objectLayer = std::make_unique<RTDyldObjectLinkingLayer>(
255-
session, []() { return std::make_unique<SectionMemoryManager>(); });
254+
session, [sectionMemoryMapper = options.sectionMemoryMapper]() {
255+
return std::make_unique<SectionMemoryManager>(sectionMemoryMapper);
256+
});
256257

257258
// Register JIT event listeners if they are enabled.
258259
if (engine->gdbListener)

0 commit comments

Comments
 (0)