[Mlir-commits] [mlir] df5ea69 - [mlir] Don't include the attribute self type in a `params` directive
River Riddle
llvmlistbot at llvm.org
Sat Nov 12 15:05:58 PST 2022
Author: River Riddle
Date: 2022-11-12T14:38:45-08:00
New Revision: df5ea69105189e71b47aaa96a9060863c4101109
URL: https://github.com/llvm/llvm-project/commit/df5ea69105189e71b47aaa96a9060863c4101109
DIFF: https://github.com/llvm/llvm-project/commit/df5ea69105189e71b47aaa96a9060863c4101109.diff
LOG: [mlir] Don't include the attribute self type in a `params` directive
The self type is handled separately from normal parameters, and
the use of the params directive currently breaks attributes that
want to use it (e.g. in a struct directive).
Differential Revision: https://reviews.llvm.org/D137732
Added:
Modified:
mlir/docs/AttributesAndTypes.md
mlir/test/lib/Dialect/Test/TestAttrDefs.td
mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir
mlir/tools/mlir-tblgen/AttrOrTypeFormatGen.cpp
Removed:
################################################################################
diff --git a/mlir/docs/AttributesAndTypes.md b/mlir/docs/AttributesAndTypes.md
index d19b1bf443ad7..52b00739a5b13 100644
--- a/mlir/docs/AttributesAndTypes.md
+++ b/mlir/docs/AttributesAndTypes.md
@@ -762,8 +762,9 @@ Attribute and type assembly formats have the following directives:
###### `params` Directive
-This directive is used to refer to all parameters of an attribute or type. When
-used as a top-level directive, `params` generates a parser and printer for a
+This directive is used to refer to all parameters of an attribute or type, except
+for the attribute self type (which is handled separately from normal parameters).
+When used as a top-level directive, `params` generates a parser and printer for a
comma-separated list of the parameters. For example:
```tablegen
diff --git a/mlir/test/lib/Dialect/Test/TestAttrDefs.td b/mlir/test/lib/Dialect/Test/TestAttrDefs.td
index c4996abf9b271..145d02161bf11 100644
--- a/mlir/test/lib/Dialect/Test/TestAttrDefs.td
+++ b/mlir/test/lib/Dialect/Test/TestAttrDefs.td
@@ -229,6 +229,14 @@ def TestAttrSelfTypeParameterFormat
let assemblyFormat = "`<` $a `>`";
}
+def TestAttrSelfTypeParameterStructFormat
+ : Test_Attr<"TestAttrSelfTypeParameterStructFormat", [TypedAttrInterface]> {
+ let parameters = (ins "int":$a, AttributeSelfTypeParameter<"">:$type);
+
+ let mnemonic = "attr_self_type_struct_format";
+ let assemblyFormat = "`<` struct(params) `>`";
+}
+
// Test overridding attribute builders with a custom builder.
def TestOverrideBuilderAttr : Test_Attr<"TestOverrideBuilder"> {
let mnemonic = "override_builder";
diff --git a/mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir b/mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir
index 1abf362097160..22cf36509598a 100644
--- a/mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir
+++ b/mlir/test/mlir-tblgen/attr-or-type-format-roundtrip.mlir
@@ -17,10 +17,12 @@ attributes {
attr4 = #test.attr_with_type<i32, vector<4xi32>>,
// CHECK: #test.attr_self_type_format<5> : i32
attr5 = #test.attr_self_type_format<5> : i32,
+ // CHECK: #test.attr_self_type_struct_format<a = 5> : i32
+ attr6 = #test.attr_self_type_struct_format<a = 5> : i32,
// CHECK: #test.custom_anchor<5>
- attr6 = #test.custom_anchor<5>,
+ attr7 = #test.custom_anchor<5>,
// CHECK: #test.custom_anchor<5, true>
- attr7 = #test.custom_anchor<5, true>
+ attr8 = #test.custom_anchor<5, true>
}
// CHECK-LABEL: @test_roundtrip_default_parsers_struct
diff --git a/mlir/tools/mlir-tblgen/AttrOrTypeFormatGen.cpp b/mlir/tools/mlir-tblgen/AttrOrTypeFormatGen.cpp
index d094fcd70011b..da2455b690b5e 100644
--- a/mlir/tools/mlir-tblgen/AttrOrTypeFormatGen.cpp
+++ b/mlir/tools/mlir-tblgen/AttrOrTypeFormatGen.cpp
@@ -1126,6 +1126,10 @@ FailureOr<FormatElement *> DefFormatParser::parseParamsDirective(SMLoc loc,
return emitError(loc, "`params` captures duplicate parameter: " +
it.value().getName());
}
+ // Self-type parameters are handled separately from the rest of the
+ // parameters.
+ if (isa<AttributeSelfTypeParameter>(it.value()))
+ continue;
seenParams.set(it.index());
vars.push_back(create<ParameterElement>(it.value()));
}
More information about the Mlir-commits
mailing list