aboutsummaryrefslogtreecommitdiff
path: root/mlir/lib/Target/LLVMIR/ModuleImport.cpp
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2025-04-23 21:11:36 -0700
committerGitHub <noreply@github.com>2025-04-23 21:11:36 -0700
commite6466420505d9940fda087f30a500fb03e5507b5 (patch)
treee3953ac0a6312ce0c4264f2939c87dfd348cdaf5 /mlir/lib/Target/LLVMIR/ModuleImport.cpp
parent0975c09c671aca48c25b1f5952a675931ae93702 (diff)
downloadllvm-e6466420505d9940fda087f30a500fb03e5507b5.zip
llvm-e6466420505d9940fda087f30a500fb03e5507b5.tar.gz
llvm-e6466420505d9940fda087f30a500fb03e5507b5.tar.bz2
[MLIR][LLVM] Allow strings in module flag value (#136793)
Expand support a bit beyond integers. Next step is to support more complex metadata values (e.g. !"CG Profile" and !"ProfileSummary"), but that's a bit more complex and deserves it own PR.
Diffstat (limited to 'mlir/lib/Target/LLVMIR/ModuleImport.cpp')
-rw-r--r--mlir/lib/Target/LLVMIR/ModuleImport.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/mlir/lib/Target/LLVMIR/ModuleImport.cpp b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
index df7c8d6..3f80002 100644
--- a/mlir/lib/Target/LLVMIR/ModuleImport.cpp
+++ b/mlir/lib/Target/LLVMIR/ModuleImport.cpp
@@ -525,18 +525,20 @@ LogicalResult ModuleImport::convertModuleFlagsMetadata() {
SmallVector<Attribute> moduleFlags;
for (const auto [behavior, key, val] : llvmModuleFlags) {
- // Currently only supports most common: int constant values.
- auto *constInt = llvm::mdconst::dyn_extract<llvm::ConstantInt>(val);
- if (!constInt) {
+ Attribute valAttr = nullptr;
+ if (auto *constInt = llvm::mdconst::dyn_extract<llvm::ConstantInt>(val)) {
+ valAttr = builder.getI32IntegerAttr(constInt->getZExtValue());
+ } else if (auto *mdString = dyn_cast<llvm::MDString>(val)) {
+ valAttr = builder.getStringAttr(mdString->getString());
+ } else {
emitWarning(mlirModule.getLoc())
- << "unsupported module flag value: " << diagMD(val, llvmModule.get())
- << ", only constant integer currently supported";
+ << "unsupported module flag value: " << diagMD(val, llvmModule.get());
continue;
}
moduleFlags.push_back(builder.getAttr<ModuleFlagAttr>(
convertModFlagBehaviorFromLLVM(behavior),
- builder.getStringAttr(key->getString()), constInt->getZExtValue()));
+ builder.getStringAttr(key->getString()), valAttr));
}
if (!moduleFlags.empty())