brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · c0eedb8 Raw
74 lines · plain
1// RUN: mlir-tblgen -gen-attrdef-defs -I %S/../../include %s | FileCheck %s --check-prefix=ATTR2// RUN: mlir-tblgen -gen-typedef-defs -I %S/../../include %s | FileCheck %s --check-prefix=TYPE3 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 test48 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 test74