https://github.com/lhames created 
https://github.com/llvm/llvm-project/pull/212998

Add a target.jit-engine setting that lets users choose which LLVM execution 
engine (MCJIT or ORC) is used to JIT expressions. Defaults to MCJIT to preserve 
current behavior. This is groundwork for migrating expression evaluation from 
MCJIT to ORC; IRExecutionUnit does not yet consult this setting.

>From 4acf66d8dac3274aa643a32804e53fddb69df4af Mon Sep 17 00:00:00 2001
From: Lang Hames <[email protected]>
Date: Thu, 30 Jul 2026 20:19:46 +1000
Subject: [PATCH] [lldb] Add target.jit-engine setting

Add a target.jit-engine setting that lets users choose which LLVM
execution engine (MCJIT or ORC) is used to JIT expressions. Defaults
to MCJIT to preserve current behavior. This is groundwork for
migrating expression evaluation from MCJIT to ORC; IRExecutionUnit
does not yet consult this setting.
---
 lldb/include/lldb/Target/Target.h             |  4 ++++
 lldb/source/Target/Target.cpp                 | 19 ++++++++++++++++
 lldb/source/Target/TargetProperties.td        |  4 ++++
 .../API/commands/settings/TestSettings.py     | 22 +++++++++++++++++++
 4 files changed, 49 insertions(+)

diff --git a/lldb/include/lldb/Target/Target.h 
b/lldb/include/lldb/Target/Target.h
index fb43f432a08da..b64bda33056f1 100644
--- a/lldb/include/lldb/Target/Target.h
+++ b/lldb/include/lldb/Target/Target.h
@@ -82,6 +82,8 @@ enum DynamicClassInfoHelper {
   eDynamicClassInfoHelperGetRealizedClassList,
 };
 
+enum JITEngine { eJITEngineMCJIT, eJITEngineORC };
+
 class TargetExperimentalProperties : public Properties {
 public:
   TargetExperimentalProperties();
@@ -187,6 +189,8 @@ class TargetProperties : public Properties {
 
   FileSpec GetSaveJITObjectsDir() const;
 
+  JITEngine GetJITEngine() const;
+
   bool GetEnableSyntheticValue() const;
 
   bool ShowHexVariableValuesWithLeadingZeroes() const;
diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index 148d7e0b30dbb..0bf553bd56e45 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -4911,6 +4911,19 @@ static constexpr OptionEnumValueElement 
g_x86_dis_flavor_value_types[] = {
     },
 };
 
+static constexpr OptionEnumValueElement g_jit_engine_value_types[] = {
+    {
+        eJITEngineMCJIT,
+        "mcjit",
+        "Use LLVM's MCJIT execution engine.",
+    },
+    {
+        eJITEngineORC,
+        "orc",
+        "Use LLVM's ORC execution engine.",
+    },
+};
+
 static constexpr OptionEnumValueElement g_import_std_module_value_types[] = {
     {
         eImportStdModuleFalse,
@@ -5530,6 +5543,12 @@ FileSpec TargetProperties::GetSaveJITObjectsDir() const {
   return GetPropertyAtIndexAs<FileSpec>(idx, {});
 }
 
+JITEngine TargetProperties::GetJITEngine() const {
+  const uint32_t idx = ePropertyJITEngine;
+  return GetPropertyAtIndexAs<JITEngine>(
+      idx, 
static_cast<JITEngine>(g_target_properties[idx].default_uint_value));
+}
+
 void TargetProperties::CheckJITObjectsDir() {
   FileSpec new_dir = GetSaveJITObjectsDir();
   if (!new_dir)
diff --git a/lldb/source/Target/TargetProperties.td 
b/lldb/source/Target/TargetProperties.td
index d63bc741e66ed..0e5a41e8eca1b 100644
--- a/lldb/source/Target/TargetProperties.td
+++ b/lldb/source/Target/TargetProperties.td
@@ -88,6 +88,10 @@ let Definition = "target", Path = "target" in {
   def SaveObjectsDir: Property<"save-jit-objects-dir", "FileSpec">,
     DefaultStringValue<"">,
     Desc<"If specified, the directory to save intermediate object files 
generated by the LLVM JIT">;
+  def JITEngine: Property<"jit-engine", "Enum">,
+    DefaultEnumValue<"eJITEngineMCJIT">,
+    EnumValues<"OptionEnumValues(g_jit_engine_value_types)">,
+    Desc<"The LLVM execution engine to use for JITting expressions.">;
   def ShowHexVariableValuesWithLeadingZeroes: 
Property<"show-hex-variable-values-with-leading-zeroes", "Boolean">,
     Global,
     DefaultTrue,
diff --git a/lldb/test/API/commands/settings/TestSettings.py 
b/lldb/test/API/commands/settings/TestSettings.py
index a66b6baac00a9..d71c077839666 100644
--- a/lldb/test/API/commands/settings/TestSettings.py
+++ b/lldb/test/API/commands/settings/TestSettings.py
@@ -383,6 +383,28 @@ def test_disassembler_settings(self):
         self.runCmd("settings set target.hex-immediate-style asm")
         self.expect("disassemble -n numberfn", substrs=["5ah"])
 
+    def test_jit_engine_setting(self):
+        """Test that the target.jit-engine setting round-trips and 
validates."""
+        # Defaults to mcjit.
+        self.expect(
+            "settings show target.jit-engine",
+            substrs=["target.jit-engine (enum) = mcjit"],
+        )
+
+        self.runCmd("settings set target.jit-engine orc")
+        self.expect(
+            "settings show target.jit-engine",
+            substrs=["target.jit-engine (enum) = orc"],
+        )
+
+        self.runCmd("settings set target.jit-engine mcjit")
+        self.expect(
+            "settings show target.jit-engine",
+            substrs=["target.jit-engine (enum) = mcjit"],
+        )
+
+        self.expect("settings set target.jit-engine bogus", error=True)
+
     @skipIfDarwinEmbedded  # <rdar://problem/34446098> debugserver on ios etc 
can't write files
     def test_run_args_and_env_vars(self):
         self.do_test_run_args_and_env_vars(use_launchsimple=False)

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to