[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