[Mlir-commits] [flang] [mlir] [mlir][func] Refactor FuncToLLVM discardable attributes algorithm (PR #188232)
Hocky Yudhiono
llvmlistbot at llvm.org
Wed Mar 25 00:53:48 PDT 2026
================
@@ -59,19 +68,114 @@ static bool shouldUseBarePtrCallConv(Operation *op,
typeConverter->getOptions().useBarePtrCallConv;
}
+static bool isDiscardableAttr(StringRef name) {
+ return name == linkageAttrName || name == varargsAttrName ||
+ name == LLVM::LLVMDialect::getReadnoneAttrName();
+}
+
/// Only retain those attributes that are not constructed by
/// `LLVMFuncOp::build`.
static void filterFuncAttributes(FunctionOpInterface func,
SmallVectorImpl<NamedAttribute> &result) {
for (const NamedAttribute &attr : func->getDiscardableAttrs()) {
- if (attr.getName() == linkageAttrName ||
- attr.getName() == varargsAttrName ||
- attr.getName() == LLVM::LLVMDialect::getReadnoneAttrName())
+ if (isDiscardableAttr(attr.getName().strref()))
continue;
result.push_back(attr);
}
}
+/// Add custom lowered funcOp to llvm.func attributes here.
+struct LoweredFuncAttrs {
+ LLVM::Linkage linkage = LLVM::Linkage::External;
+ bool hasReadnone = false;
+ SmallVector<NamedAttribute, 4> attrs;
+};
+
+static LogicalResult lowerLinkageAttr(FunctionOpInterface func,
+ Attribute attrValue,
+ LoweredFuncAttrs &lowered) {
+ auto linkageAttr = dyn_cast<mlir::LLVM::LinkageAttr>(attrValue);
+ if (!linkageAttr) {
+ func->emitError() << "Contains " << linkageAttrName
+ << " attribute not of type LLVM::LinkageAttr";
+ return failure();
+ }
+ lowered.linkage = linkageAttr.getLinkage();
+ return success();
+}
+
+static LogicalResult lowerReadnoneAttr(FunctionOpInterface func,
+ Attribute attrValue,
+ LoweredFuncAttrs &lowered) {
+ StringRef readnoneAttrName = LLVM::LLVMDialect::getReadnoneAttrName();
+ if (!isa<UnitAttr>(attrValue)) {
+ func->emitError() << "Contains " << readnoneAttrName
+ << " attribute not of type UnitAttr";
----------------
hockyy wrote:
Refactored this function, I'm returning a failure in the call site.
https://github.com/llvm/llvm-project/pull/188232
More information about the Mlir-commits
mailing list