diff --git a/mlir/include/mlir/Bindings/Python/Attributes.td b/mlir/include/mlir/Bindings/Python/Attributes.td --- a/mlir/include/mlir/Bindings/Python/Attributes.td +++ b/mlir/include/mlir/Bindings/Python/Attributes.td @@ -21,14 +21,4 @@ string pythonType = p; } -// Mappings between supported builtin attribtues and Python types. -def : PythonAttr<"::mlir::Attribute", "_ods_ir.Attribute">; -def : PythonAttr<"::mlir::BoolAttr", "_ods_ir.BoolAttr">; -def : PythonAttr<"::mlir::IntegerAttr", "_ods_ir.IntegerAttr">; -def : PythonAttr<"::mlir::FloatAttr", "_ods_ir.FloatAttr">; -def : PythonAttr<"::mlir::StringAttr", "_ods_ir.StringAttr">; -def : PythonAttr<"::mlir::DenseElementsAttr", "_ods_ir.DenseElementsAttr">; -def : PythonAttr<"::mlir::DenseIntElementsAttr", "_ods_ir.DenseIntElementsAttr">; -def : PythonAttr<"::mlir::DenseFPElementsAttr", "_ods_ir.DenseFPElementsAttr">; - #endif diff --git a/mlir/test/mlir-tblgen/op-python-bindings.td b/mlir/test/mlir-tblgen/op-python-bindings.td --- a/mlir/test/mlir-tblgen/op-python-bindings.td +++ b/mlir/test/mlir-tblgen/op-python-bindings.td @@ -1,6 +1,7 @@ // RUN: mlir-tblgen -gen-python-op-bindings -bind-dialect=test -I %S/../../include %s | FileCheck %s include "mlir/IR/OpBase.td" +include "mlir/IR/AttrTypeBase.td" include "mlir/Interfaces/InferTypeOpInterface.td" include "mlir/Bindings/Python/Attributes.td" @@ -12,6 +13,9 @@ let name = "test"; let cppNamespace = "Test"; } +def TestAttr : AttrDef; +def : PythonAttr">; + class TestOp traits = []> : Op; @@ -110,7 +114,7 @@ // CHECK-NOT: _ODS_OPERAND_SEGMENTS // CHECK-NOT: _ODS_RESULT_SEGMENTS def AttributedOp : TestOp<"attributed_op"> { - // CHECK: def __init__(self, i32attr, in_, *, optionalF32Attr=None, unitAttr=None, loc=None, ip=None): + // CHECK: def __init__(self, i32attr, in_, test_attr, *, optionalF32Attr=None, unitAttr=None, loc=None, ip=None): // CHECK: operands = [] // CHECK: results = [] // CHECK: attributes = {} @@ -130,13 +134,13 @@ // CHECK: @builtins.property // CHECK: def i32attr(self): - // CHECK: return _ods_ir.IntegerAttr(self.operation.attributes["i32attr"]) + // CHECK: return (self.operation.attributes["i32attr"]) // CHECK: @builtins.property // CHECK: def optionalF32Attr(self): // CHECK: if "optionalF32Attr" not in self.operation.attributes: // CHECK: return None - // CHECK: return _ods_ir.FloatAttr(self.operation.attributes["optionalF32Attr"]) + // CHECK: return (self.operation.attributes["optionalF32Attr"]) // CHECK: @builtins.property // CHECK: def unitAttr(self): @@ -144,9 +148,13 @@ // CHECK: @builtins.property // CHECK: def in_(self): - // CHECK: return _ods_ir.IntegerAttr(self.operation.attributes["in"]) + // CHECK: return (self.operation.attributes["in"]) + + // CHECK: @builtins.property + // CHECK: def test_attr(self): + // CHECK: return (self.operation.attributes["test_attr"]) let arguments = (ins I32Attr:$i32attr, OptionalAttr:$optionalF32Attr, - UnitAttr:$unitAttr, I32Attr:$in); + UnitAttr:$unitAttr, I32Attr:$in, TestAttr:$test_attr); } // CHECK: @_ods_cext.register_operation(_Dialect) @@ -178,7 +186,7 @@ // CHECK: def is_(self): // CHECK: if "is" not in self.operation.attributes: // CHECK: return None - // CHECK: return _ods_ir.FloatAttr(self.operation.attributes["is"]) + // CHECK: return (self.operation.attributes["is"]) let arguments = (ins I32, UnitAttr:$in, F32, OptionalAttr:$is); } diff --git a/mlir/tools/mlir-tblgen/OpPythonBindingGen.cpp b/mlir/tools/mlir-tblgen/OpPythonBindingGen.cpp --- a/mlir/tools/mlir-tblgen/OpPythonBindingGen.cpp +++ b/mlir/tools/mlir-tblgen/OpPythonBindingGen.cpp @@ -468,10 +468,6 @@ continue; } - // Other kinds of attributes need a mapping to a Python type. - if (!attributeClasses.count(namedAttr.attr.getStorageType().trim())) - continue; - StringRef pythonType = attributeClasses.lookup(namedAttr.attr.getStorageType()); if (namedAttr.attr.isOptional()) {