xref: /llvm-project/mlir/test/mlir-tblgen/default-type-attr-print-parser.td (revision 9750648cb44e3b201bce5878ce785228d1c005c7)
1// RUN: mlir-tblgen -gen-attrdef-defs -I %S/../../include %s | FileCheck %s --check-prefix=ATTR
2// RUN: mlir-tblgen -gen-typedef-defs -I %S/../../include %s | FileCheck %s --check-prefix=TYPE
3
4include "mlir/IR/AttrTypeBase.td"
5include "mlir/IR/OpBase.td"
6
7/// Test that attribute and type printers and parsers are correctly generated.
8def Test_Dialect : Dialect {
9  let name = "TestDialect";
10  let cppNamespace = "::test";
11
12  let useDefaultAttributePrinterParser = 1;
13
14  let useDefaultTypePrinterParser = 1;
15}
16
17class TestAttr<string name> : AttrDef<Test_Dialect, name>;
18class TestType<string name> : TypeDef<Test_Dialect, name>;
19
20def AttrA : TestAttr<"AttrA"> {
21  let mnemonic = "attr_a";
22}
23
24// ATTR: namespace test {
25
26// ATTR: ::mlir::Attribute TestDialect::parseAttribute(::mlir::DialectAsmParser &parser,
27// ATTR:                                               ::mlir::Type type) const {
28// ATTR:   ::llvm::SMLoc typeLoc = parser.getCurrentLocation();
29// ATTR:   ::llvm::StringRef attrTag;
30// ATTR:   {
31// ATTR:     ::mlir::Attribute attr;
32// ATTR:     auto parseResult = generatedAttributeParser(parser, &attrTag, type, attr);
33// ATTR:     if (parseResult.has_value())
34// ATTR:       return attr;
35// ATTR:   }
36// ATTR:   parser.emitError(typeLoc) << "unknown attribute `"
37// ATTR:       << attrTag << "` in dialect `" << getNamespace() << "`";
38// ATTR:   return {}
39// ATTR: }
40
41// ATTR: void TestDialect::printAttribute(::mlir::Attribute attr,
42// ATTR:                          ::mlir::DialectAsmPrinter &printer) const {
43// ATTR:   if (::mlir::succeeded(generatedAttributePrinter(attr, printer)))
44// ATTR:     return;
45// ATTR: }
46
47// ATTR: } // namespace test
48
49def TypeA : TestType<"TypeA"> {
50  let mnemonic = "type_a";
51}
52
53// TYPE: namespace test {
54
55// TYPE: ::mlir::Type TestDialect::parseType(::mlir::DialectAsmParser &parser) const {
56// TYPE:   ::llvm::SMLoc typeLoc = parser.getCurrentLocation();
57// TYPE:   ::llvm::StringRef mnemonic;
58// TYPE:   ::mlir::Type genType;
59// TYPE:   auto parseResult = generatedTypeParser(parser, &mnemonic, genType);
60// TYPE:   if (parseResult.has_value())
61// TYPE:     return genType;
62// TYPE:   parser.emitError(typeLoc) << "unknown  type `"
63// TYPE:       << mnemonic << "` in dialect `" << getNamespace() << "`";
64// TYPE:   return {};
65// TYPE: }
66
67// TYPE: void TestDialect::printType(::mlir::Type type,
68// TYPE:                     ::mlir::DialectAsmPrinter &printer) const {
69// TYPE:   if (::mlir::succeeded(generatedTypePrinter(type, printer)))
70// TYPE:     return;
71// TYPE: }
72
73// TYPE: } // namespace test
74