[Mlir-commits] [mlir] 4bd435d - [ExecutionEngine] Set mlir-runner's library options in the LLVMContext (#233131)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Sat Oct 17 14:21:04 PDT 2026
Author: Fangrui Song
Date: 2026-10-17T14:20:58-07:00
New Revision: 4bd435d59f89ded8e537e5c6e0b560ad89518c3f
URL: https://github.com/llvm/llvm-project/commit/4bd435d59f89ded8e537e5c6e0b560ad89518c3f
DIFF: https://github.com/llvm/llvm-project/commit/4bd435d59f89ded8e537e5c6e0b560ad89518c3f.diff
LOG: [ExecutionEngine] Set mlir-runner's library options in the LLVMContext (#233131)
Since #233044, the LLVMContext that ExecutionEngine creates reads the
defaults instead, so LowerMatrixIntrinsics ignores
-matrix-default-layout=row-major and
Integration/Dialect/Vector/CPU/*-row.mlir fail.
Parse the options into a cl::LibraryOptionsContext and add
ExecutionEngineOptions::libraryOptions.
Added:
Modified:
mlir/include/mlir/ExecutionEngine/ExecutionEngine.h
mlir/lib/ExecutionEngine/ExecutionEngine.cpp
mlir/lib/ExecutionEngine/JitRunner.cpp
Removed:
################################################################################
diff --git a/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h b/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h
index 5bd71d68d253a1..79e2a56712d03e 100644
--- a/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h
+++ b/mlir/include/mlir/ExecutionEngine/ExecutionEngine.h
@@ -55,6 +55,9 @@ class SimpleObjectCache : public llvm::ObjectCache {
};
struct ExecutionEngineOptions {
+ /// Library options for the LLVMContext and the default TargetMachine.
+ const llvm::cl::LibraryOptionsContext *libraryOptions = nullptr;
+
/// If `llvmModuleBuilder` is provided, it will be used to create an LLVM
/// module from the given MLIR IR. Otherwise, a default
/// `translateModuleToLLVMIR` function will be used to translate to LLVM IR.
diff --git a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
index c8f4e81ddf07b3..d9dce6ef40f642 100644
--- a/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
+++ b/mlir/lib/ExecutionEngine/ExecutionEngine.cpp
@@ -28,6 +28,7 @@
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
+#include "llvm/Support/LibraryOptionsContext.h"
#include "llvm/Support/ToolOutputFile.h"
#include "llvm/TargetParser/Host.h"
#include "llvm/TargetParser/SubtargetFeature.h"
@@ -243,6 +244,8 @@ ExecutionEngine::create(Operation *m, const ExecutionEngineOptions &options,
}
std::unique_ptr<llvm::LLVMContext> ctx(new llvm::LLVMContext);
+ if (options.libraryOptions)
+ ctx->getLibraryOptions().assign(*options.libraryOptions);
auto llvmModule = options.llvmModuleBuilder
? options.llvmModuleBuilder(m, *ctx)
: translateModuleToLLVMIR(m, *ctx);
@@ -256,6 +259,8 @@ ExecutionEngine::create(Operation *m, const ExecutionEngineOptions &options,
if (!tmBuilderOrError)
return tmBuilderOrError.takeError();
+ tmBuilderOrError->getOptions().MCOptions.LibraryOptions =
+ options.libraryOptions;
auto tmOrError = tmBuilderOrError->createTargetMachine();
if (!tmOrError)
return tmOrError.takeError();
diff --git a/mlir/lib/ExecutionEngine/JitRunner.cpp b/mlir/lib/ExecutionEngine/JitRunner.cpp
index db0516533afcb3..0b08ad7d5de83e 100644
--- a/mlir/lib/ExecutionEngine/JitRunner.cpp
+++ b/mlir/lib/ExecutionEngine/JitRunner.cpp
@@ -34,6 +34,7 @@
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/FileUtilities.h"
+#include "llvm/Support/LibraryOptionsContext.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/StringSaver.h"
#include "llvm/Support/ToolOutputFile.h"
@@ -114,6 +115,9 @@ struct Options {
};
struct CompileAndExecuteConfig {
+ /// Library options passed to ExecutionEngine.
+ const llvm::cl::LibraryOptionsContext *libraryOptions = nullptr;
+
/// LLVM module transformer that is passed to ExecutionEngine.
std::function<llvm::Error(llvm::Module *)> transformer;
@@ -189,6 +193,7 @@ compileAndExecute(Options &options, Operation *module, StringRef entryPoint,
options.clSharedLibs.end());
mlir::ExecutionEngineOptions engineOptions;
+ engineOptions.libraryOptions = config.libraryOptions;
engineOptions.llvmModuleBuilder = config.llvmModuleBuilder;
if (config.transformer)
engineOptions.transformer = config.transformer;
@@ -312,7 +317,9 @@ int mlir::JitRunnerMain(int argc, char **argv, const DialectRegistry ®istry,
// Create the options struct containing the command line options for the
// runner. This must come before the command line options are parsed.
Options options;
- llvm::cl::ParseCommandLineOptions(argc, argv, "MLIR CPU execution driver\n");
+ llvm::cl::LibraryOptionsContext libraryOptions;
+ llvm::cl::parseCommandLineOptions(libraryOptions, ArrayRef(argv, argc),
+ "MLIR CPU execution driver\n");
if (options.hostSupportsJit) {
auto j = llvm::orc::LLJITBuilder().create();
@@ -362,6 +369,7 @@ int mlir::JitRunnerMain(int argc, char **argv, const DialectRegistry ®istry,
}
// Build TargetMachine
+ tmBuilderOrError->getOptions().MCOptions.LibraryOptions = &libraryOptions;
auto tmOrError = tmBuilderOrError->createTargetMachine();
if (!tmOrError) {
@@ -376,6 +384,7 @@ int mlir::JitRunnerMain(int argc, char **argv, const DialectRegistry ®istry,
});
CompileAndExecuteConfig compileAndExecuteConfig;
+ compileAndExecuteConfig.libraryOptions = &libraryOptions;
if (optLevel) {
compileAndExecuteConfig.transformer = mlir::makeOptimizingTransformer(
*optLevel, /*sizeLevel=*/0, /*targetMachine=*/tmOrError->get());
More information about the Mlir-commits
mailing list