diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2025-04-23 21:11:36 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-23 21:11:36 -0700 |
commit | e6466420505d9940fda087f30a500fb03e5507b5 (patch) | |
tree | e3953ac0a6312ce0c4264f2939c87dfd348cdaf5 /mlir/lib/Target/LLVMIR/ModuleImport.cpp | |
parent | 0975c09c671aca48c25b1f5952a675931ae93702 (diff) | |
download | llvm-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.cpp | 14 |
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()) |