diff options
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()) |