[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
This commit is contained in:
River Riddle 2022-11-09 12:39:04 -08:00
parent 01f924d0e3
commit df5ea69105
4 changed files with 19 additions and 4 deletions

View File

@ -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

View File

@ -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";

View File

@ -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

View File

@ -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()));
}