Add a cppType string in AttrDef to make it possible to use them as parameters in other attributes

Differential Revision: https://reviews.llvm.org/D113737
This commit is contained in:
Mehdi Amini 2021-11-12 07:20:33 +00:00
parent 751aa6c280
commit f5f11e6b16
4 changed files with 21 additions and 0 deletions

View file

@ -2938,6 +2938,9 @@ class AttrDef<Dialect dialect, string name, list<Trait> traits = [],
// The underlying C++ value type
let returnType = dialect.cppNamespace # "::" # cppClassName;
// Make it possible to use such attributes as parameters for other attributes.
string cppType = dialect.cppNamespace # "::" # cppClassName;
// The call expression to convert from the storage type to the return
// type. For example, an enum can be stored as an int but returned as an
// enum class.

View file

@ -43,6 +43,11 @@ def CompoundAttrA : Test_Attr<"CompoundA"> {
>: $arrayOfInts
);
}
def CompoundAttrNested : Test_Attr<"CompoundAttrNested"> {
let mnemonic = "cmpnd_nested";
let parameters = (ins CompoundAttrA : $nested );
let assemblyFormat = "`<` `nested` `=` $nested `>`";
}
// An attribute testing AttributeSelfTypeParameter.
def AttrWithSelfTypeParam : Test_Attr<"AttrWithSelfTypeParam"> {

View file

@ -1902,6 +1902,11 @@ def FormatCompoundAttr : TEST_Op<"format_compound_attr"> {
let assemblyFormat = "$compound attr-dict-with-keyword";
}
def FormatNestedAttr : TEST_Op<"format_nested_attr"> {
let arguments = (ins CompoundAttrNested:$nested);
let assemblyFormat = "$nested attr-dict-with-keyword";
}
//===----------------------------------------------------------------------===//
// Custom Directives

View file

@ -259,6 +259,14 @@ test.format_optional_else else
// CHECK: test.format_compound_attr #test.cmpnd_a<1, !test.smpla, [5, 6]>
test.format_compound_attr #test.cmpnd_a<1, !test.smpla, [5, 6]>
// CHECK: module attributes {test.nested = #test.cmpnd_nested<nested = #test.cmpnd_a<1, !test.smpla, [5, 6]>>} {
module attributes {test.nested = #test.cmpnd_nested<nested = #test.cmpnd_a<1, !test.smpla, [5, 6]>>} {
}
// CHECK: test.format_nested_attr #test.cmpnd_nested<nested = #test.cmpnd_a<1, !test.smpla, [5, 6]>>
test.format_nested_attr #test.cmpnd_nested<nested = #test.cmpnd_a<1, !test.smpla, [5, 6]>>
//===----------------------------------------------------------------------===//
// Format custom directives
//===----------------------------------------------------------------------===//