forked from OSchip/llvm-project
[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:
parent
01f924d0e3
commit
df5ea69105
|
@ -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
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue