[Mlir-commits] [mlir] [MLIR] [Python] The generated op definitions now use typed parameters (PR #188635)
Maksim Levental
llvmlistbot at llvm.org
Sat Mar 28 14:31:18 PDT 2026
================
@@ -638,6 +643,35 @@ static std::string getPythonAttrName(mlir::tblgen::Attribute attr) {
return "Attribute";
}
+/// Returns the Python raw value type accepted by the AttrBuilder for the given
+/// attribute. Returns empty StringRef if no mapping is known.
+static StringRef getPythonAttrRawType(mlir::tblgen::Attribute attr) {
+ return llvm::StringSwitch<StringRef>(attr.getAttrDefName())
+ .Cases({"BoolAttr", "I1Attr"}, "bool")
+ .Cases({"I8Attr", "I16Attr", "I32Attr", "I64Attr"}, "int")
+ .Cases({"SI1Attr", "SI8Attr", "SI16Attr", "SI32Attr", "SI64Attr"}, "int")
+ .Cases({"UI1Attr", "UI8Attr", "UI16Attr", "UI32Attr", "UI64Attr"}, "int")
+ .Case("IndexAttr", "int")
+ .Cases({"F32Attr", "F64Attr"}, "float")
+ .Cases({"StrAttr", "SymbolNameAttr"}, "str")
+ .Cases({"FlatSymbolRefAttr", "SymbolRefAttr"}, "str")
+ .Case("TypeAttr", "_ods_ir.Type")
+ .Case("AffineMapAttr", "_ods_ir.AffineMap")
+ .Case("IntegerSetAttr", "_ods_ir.IntegerSet")
+ .Case("DictionaryAttr", "dict")
+ .Case("ArrayAttr", "_Sequence[_ods_ir.Attribute]")
+ .Cases({"I32ArrayAttr", "I64ArrayAttr", "I64SmallVectorArrayAttr"},
+ "_Sequence[int]")
+ .Cases({"F32ArrayAttr", "F64ArrayAttr"}, "_Sequence[float]")
+ .Cases({"BoolArrayAttr", "DenseBoolArrayAttr"}, "_Sequence[bool]")
+ .Cases({"StrArrayAttr", "FlatSymbolRefArrayAttr"}, "_Sequence[str]")
+ .Cases({"DenseI8ArrayAttr", "DenseI16ArrayAttr", "DenseI32ArrayAttr",
+ "DenseI64ArrayAttr"},
+ "_Sequence[int]")
----------------
makslevental wrote:
I dunno that line is 4 years old (maybe @jpienaar remembers what the thinking was back then) but we have unqualified imports elsewhere like https://github.com/llvm/llvm-project/blob/9f3a9ea6ae689fa0fbd0137999834915cc908e5c/mlir/python/mlir/runtime/np_to_memref.py#L7
https://github.com/llvm/llvm-project/pull/188635
More information about the Mlir-commits
mailing list