1//===- TestTransformDialectExtension.td --------------------*- 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// This file declares the operations that are injected into the Transform
10// dialect through the extension mechanism, as a test.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef MLIR_TESTTRANSFORMDIALECTEXTENSION_TD
15#define MLIR_TESTTRANSFORMDIALECTEXTENSION_TD
16
17include "mlir/IR/OpBase.td"
18include "mlir/Dialect/Transform/IR/TransformDialect.td"
19include "mlir/Dialect/Transform/IR/TransformEffects.td"
20include "mlir/Dialect/Transform/IR/TransformInterfaces.td"
21include "mlir/Dialect/PDL/IR/PDLTypes.td"
22
23def TestProduceParamOrForwardOperandOp
24  : Op<Transform_Dialect, "test_produce_param_or_forward_operand",
25       [DeclareOpInterfaceMethods<TransformOpInterface>]> {
26  let arguments = (ins
27     Arg<Optional<PDL_Operation>, "", [TransformMappingRead]>:$operand,
28     OptionalAttr<I64Attr>:$parameter);
29  let results = (outs
30     Res<PDL_Operation, "",
31         [TransformMappingAlloc, TransformMappingWrite]>:$res);
32  let assemblyFormat = "(`from` $operand^)? ($parameter^)? attr-dict";
33  let cppNamespace = "::mlir::test";
34  let hasVerifier = 1;
35}
36
37def TestConsumeOperandIfMatchesParamOrFail
38  : Op<Transform_Dialect, "test_consume_operand_if_matches_param_or_fail",
39       [DeclareOpInterfaceMethods<TransformOpInterface>]> {
40  let arguments = (ins
41    Arg<PDL_Operation, "",
42        [TransformMappingWrite, TransformMappingFree]>:$operand,
43    I64Attr:$parameter);
44  let assemblyFormat = "$operand `[` $parameter `]` attr-dict";
45  let cppNamespace = "::mlir::test";
46}
47
48def TestPrintRemarkAtOperandOp
49  : Op<Transform_Dialect, "test_print_remark_at_operand",
50       [DeclareOpInterfaceMethods<TransformOpInterface>]> {
51  let arguments = (ins
52    Arg<PDL_Operation, "",
53        [TransformMappingRead, PayloadIRRead]>:$operand,
54    StrAttr:$message);
55  let assemblyFormat = "$operand `,` $message attr-dict";
56  let cppNamespace = "::mlir::test";
57}
58
59def TestAddTestExtensionOp
60  : Op<Transform_Dialect, "test_add_test_extension",
61       [DeclareOpInterfaceMethods<TransformOpInterface>,
62        NoSideEffect]> {
63  let arguments = (ins StrAttr:$message);
64  let assemblyFormat = "$message attr-dict";
65  let cppNamespace = "::mlir::test";
66}
67
68def TestCheckIfTestExtensionPresentOp
69  : Op<Transform_Dialect, "test_check_if_test_extension_present",
70       [DeclareOpInterfaceMethods<TransformOpInterface>]> {
71  let arguments = (ins
72    Arg<PDL_Operation, "", [TransformMappingRead, PayloadIRRead]>:$operand);
73  let assemblyFormat = "$operand attr-dict";
74  let cppNamespace = "::mlir::test";
75}
76
77def TestRemapOperandPayloadToSelfOp
78  : Op<Transform_Dialect, "test_remap_operand_to_self",
79       [DeclareOpInterfaceMethods<TransformOpInterface>]> {
80  let arguments = (ins
81    Arg<PDL_Operation, "",
82        [TransformMappingRead, TransformMappingWrite, PayloadIRRead]>:$operand);
83  let assemblyFormat = "$operand attr-dict";
84  let cppNamespace = "::mlir::test";
85}
86
87def TestRemoveTestExtensionOp
88  : Op<Transform_Dialect, "test_remove_test_extension",
89       [DeclareOpInterfaceMethods<TransformOpInterface>,
90        NoSideEffect]> {
91  let assemblyFormat = "attr-dict";
92  let cppNamespace = "::mlir::test";
93}
94
95def TestTransformOpWithRegions
96  : Op<Transform_Dialect, "test_transform_op_with_regions",
97       [DeclareOpInterfaceMethods<TransformOpInterface>,
98        DeclareOpInterfaceMethods<MemoryEffectsOpInterface>]> {
99  let regions = (region AnyRegion:$first, AnyRegion:$second);
100  let assemblyFormat = "attr-dict-with-keyword regions";
101  let cppNamespace = "::mlir::test";
102}
103
104def TestBranchingTransformOpTerminator
105  : Op<Transform_Dialect, "test_branching_transform_op_terminator",
106       [Terminator, DeclareOpInterfaceMethods<TransformOpInterface>,
107        DeclareOpInterfaceMethods<MemoryEffectsOpInterface>]> {
108  let successors = (successor VariadicSuccessor<AnySuccessor>:$succ);
109  let cppNamespace = "::mlir::test";
110}
111
112#endif // MLIR_TESTTRANSFORMDIALECTEXTENSION_TD
113