[Mlir-commits] [mlir] Patch MLIR execution engine for AArch64 (PR #172833)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Thu Dec 18 02:36:39 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-mlir
@llvm/pr-subscribers-mlir-execution-engine
Author: Giacomo Castiglioni (castigli)
<details>
<summary>Changes</summary>
This PR enables JIT initialize for AArch64. Up to now it was disabled because of #<!-- -->71963 which was recently fixed by #<!-- -->71968.
---
Full diff: https://github.com/llvm/llvm-project/pull/172833.diff
1 Files Affected:
- (modified) mlir/lib/ExecutionEngine/ExecutionEngine.cpp (+9-11)
``````````diff
diff --git a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
index 287c52a262c11..f8f8ee390a2d6 100644
--- a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -218,10 +218,7 @@ ExecutionEngine::ExecutionEngine(bool enableObjectDump,
ExecutionEngine::~ExecutionEngine() {
// Execute the global destructors from the module being processed.
- // TODO: Allow JIT deinitialize for AArch64. Currently there's a bug causing a
- // crash for AArch64 see related issue #71963.
- if (jit && !jit->getTargetTriple().isAArch64())
- llvm::consumeError(jit->deinitialize(jit->getMainJITDylib()));
+ llvm::consumeError(jit->deinitialize(jit->getMainJITDylib()));
// Run all dynamic library destroy callbacks to prepare for the shutdown.
for (LibraryDestroyFn destroy : destroyFns)
destroy();
@@ -314,10 +311,14 @@ ExecutionEngine::create(Operation *m, const ExecutionEngineOptions &options,
// Callback to create the object layer with symbol resolution to current
// process and dynamically linked libraries.
auto objectLinkingLayerCreator = [&](ExecutionSession &session) {
+ // Needed to respect AArch64 ABI requirements on the distance between
+ // TEXT and GOT sections.
+ bool reserveAlloc = llvmModule->getTargetTriple().isAArch64();
auto objectLayer = std::make_unique<RTDyldObjectLinkingLayer>(
- session, [sectionMemoryMapper =
- options.sectionMemoryMapper](const MemoryBuffer &) {
- return std::make_unique<SectionMemoryManager>(sectionMemoryMapper);
+ session, [sectionMemoryMapper = options.sectionMemoryMapper,
+ reserveAlloc](const MemoryBuffer &) {
+ return std::make_unique<SectionMemoryManager>(sectionMemoryMapper,
+ reserveAlloc);
});
// Register JIT event listeners if they are enabled.
@@ -449,9 +450,6 @@ Error ExecutionEngine::invokePacked(StringRef name,
void ExecutionEngine::initialize() {
if (isInitialized)
return;
- // TODO: Allow JIT initialize for AArch64. Currently there's a bug causing a
- // crash for AArch64 see related issue #71963.
- if (!jit->getTargetTriple().isAArch64())
- cantFail(jit->initialize(jit->getMainJITDylib()));
+ cantFail(jit->initialize(jit->getMainJITDylib()));
isInitialized = true;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/172833
More information about the Mlir-commits
mailing list