1//===-- TestDialect.td - Test dialect definition -----------*- tablegen -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef TEST_DIALECT
10#define TEST_DIALECT
11
12include "mlir/IR/OpBase.td"
13
14def Test_Dialect : Dialect {
15  let name = "test";
16  let cppNamespace = "::test";
17  let emitAccessorPrefix = kEmitAccessorPrefix_Prefixed;
18  let hasCanonicalizer = 1;
19  let hasConstantMaterializer = 1;
20  let hasOperationAttrVerify = 1;
21  let hasRegionArgAttrVerify = 1;
22  let hasRegionResultAttrVerify = 1;
23  let hasOperationInterfaceFallback = 1;
24  let hasNonDefaultDestructor = 1;
25  let useDefaultTypePrinterParser = 0;
26  let useDefaultAttributePrinterParser = 1;
27  let isExtensible = 1;
28  let dependentDialects = ["::mlir::DLTIDialect"];
29
30  let extraClassDeclaration = [{
31    void registerAttributes();
32    void registerTypes();
33
34    // Provides a custom printing/parsing for some operations.
35    ::llvm::Optional<ParseOpHook>
36      getParseOperationHook(::llvm::StringRef opName) const override;
37    ::llvm::unique_function<void(::mlir::Operation *,
38                                 ::mlir::OpAsmPrinter &printer)>
39     getOperationPrinter(::mlir::Operation *op) const override;
40
41     ::mlir::Type parseType(::mlir::DialectAsmParser &parser) const override;
42     void printType(::mlir::Type type,
43                    ::mlir::DialectAsmPrinter &printer) const override;
44
45    /// Returns the external elements data manager for this dialect.
46    TestExternalElementsDataManager &getExternalDataManager() {
47      return externalDataManager;
48    }
49
50  private:
51    // Storage for a custom fallback interface.
52    void *fallbackEffectOpInterfaces;
53
54    ::mlir::Type parseTestType(::mlir::AsmParser &parser,
55                               ::llvm::SetVector<::mlir::Type> &stack) const;
56    void printTestType(::mlir::Type type, ::mlir::AsmPrinter &printer,
57                       ::llvm::SetVector<::mlir::Type> &stack) const;
58
59    /// An external data manager used to test external elements data.
60    TestExternalElementsDataManager externalDataManager;
61  }];
62}
63
64#endif // TEST_DIALECT
65