[Mlir-commits] [mlir] [mlir][ExecutionEngine] Use JITLink for RISC-V (and AArch64) and fix … (PR #196023)

Mehdi Amini llvmlistbot at llvm.org
Wed May 6 01:34:03 PDT 2026


================
@@ -316,27 +318,57 @@ ExecutionEngine::create(Operation *m, const ExecutionEngineOptions &options,
                                            &IgnoredMemMgr) {
     // 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,
-                  reserveAlloc](const MemoryBuffer &) {
-          return std::make_unique<SectionMemoryManager>(sectionMemoryMapper,
-                                                        reserveAlloc);
-        });
-
-    // Register JIT event listeners if they are enabled.
-    if (engine->gdbListener)
-      objectLayer->registerJITEventListener(*engine->gdbListener);
-    if (engine->perfListener)
-      objectLayer->registerJITEventListener(*engine->perfListener);
+
+    // Check if we should use ObjectLinkingLayer (JITLink)
+    // JITLink supports modern architectures like RISC-V, AArch64
+    // RuntimeDyld is older and provides better compatibility with legacy
+    // platforms
+
+    // Decide which layer to use
+    bool useJITLink = llvmModule->getTargetTriple().isAArch64() ||
+                      llvmModule->getTargetTriple().isRISCV();
+
+    std::unique_ptr<llvm::orc::ObjectLayer> objectLayer;
+
+    if (useJITLink) {
+      // JITLink path
+      objectLayer = std::make_unique<llvm::orc::ObjectLinkingLayer>(session);
+
+      LLVM_DEBUG(llvm::dbgs() << "Using ObjectLinkingLayer (JITLink)\n");
+
+    } else {
+      // RuntimeDyld path
+      auto rtDyldLayer = std::make_unique<llvm::orc::RTDyldObjectLinkingLayer>(
+          session,
+          [sectionMemoryMapper =
+               options.sectionMemoryMapper](const llvm::MemoryBuffer &)
+              -> std::unique_ptr<llvm::RuntimeDyld::MemoryManager> {
+            return std::make_unique<SectionMemoryManager>(sectionMemoryMapper);
+          });
+
+      // Only RTDyld supports listener
+      if (engine->gdbListener)
+        rtDyldLayer->registerJITEventListener(*engine->gdbListener);
+
+      if (engine->perfListener)
+        rtDyldLayer->registerJITEventListener(*engine->perfListener);
+
+      LLVM_DEBUG(llvm::dbgs() << "Using RTDyldObjectLinkingLayer\n");
+
+      // Upcast
----------------
joker-eph wrote:

```suggestion
      LDBG("Using RTDyldObjectLinkingLayer");
```

https://github.com/llvm/llvm-project/pull/196023


More information about the Mlir-commits mailing list