summaryrefslogtreecommitdiff
path: root/mlir/test/lib/Transforms/TestTransformsOps.td
blob: 9b0a26082490cebfa6c3bbbc6f0d10092ad8e9ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//===- TestTransformOps.td ---------------------------------*- tablegen -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef TEST_TRANSFORM_OPS
#define TEST_TRANSFORM_OPS

include "mlir/Dialect/Transform/IR/TransformDialect.td"
include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.td"
include "mlir/Dialect/Transform/IR/TransformTypes.td"
include "mlir/Interfaces/SideEffectInterfaces.td"
include "mlir/IR/OpBase.td"

/// Transform dialect operations for testing transformations in MLIR

def TestMoveOperandDeps :
    Op<Transform_Dialect, "test.move_operand_deps",
        [FunctionalStyleTransformOpTrait, MemoryEffectsOpInterface,
         DeclareOpInterfaceMethods<TransformOpInterface>,
         ReportTrackingListenerFailuresOpTrait]> {
  let description = [{
    Moves all dependencies of on operation before another operation.
  }];

  let arguments =
    (ins TransformHandleTypeInterface:$op,
         TransformHandleTypeInterface:$insertion_point);
  
  let results = (outs);

  let assemblyFormat = [{
    $op `before` $insertion_point attr-dict
    `:` type($op) `,` type($insertion_point)
  }];
}

def TestMoveValueDefns :
    Op<Transform_Dialect, "test.move_value_defns",
        [FunctionalStyleTransformOpTrait, MemoryEffectsOpInterface,
         DeclareOpInterfaceMethods<TransformOpInterface>,
         ReportTrackingListenerFailuresOpTrait]> {
  let description = [{
    Moves all dependencies of on operation before another operation.
  }];

  let arguments =
    (ins Variadic<TransformValueHandleTypeInterface>:$values,
         TransformHandleTypeInterface:$insertion_point);
  
  let results = (outs);

  let assemblyFormat = [{
    $values `before` $insertion_point attr-dict
    `:` `(` type($values) `)` `` `,` type($insertion_point)
  }];
}

//===----------------------------------------------------------------------===//
// Test affine functionality.
//===----------------------------------------------------------------------===//

def TestMakeComposedFoldedAffineApply :
    Op<Transform_Dialect, "test.make_composed_folded_affine_apply",
        [FunctionalStyleTransformOpTrait, 
         MemoryEffectsOpInterface,
         TransformOpInterface,
         TransformEachOpTrait,
         ReportTrackingListenerFailuresOpTrait]> {
  let description = [{
    Rewrite an affine_apply by using the makeComposedFoldedAffineApply API.
  }];
  let arguments = (ins TransformHandleTypeInterface:$op);
  let results = (outs TransformHandleTypeInterface:$composed);
  let assemblyFormat = [{
    $op attr-dict `:` functional-type(operands, results)
  }];
  let extraClassDeclaration = [{
    ::mlir::DiagnosedSilenceableFailure applyToOne(
        ::mlir::transform::TransformRewriter &rewriter,
        ::mlir::affine::AffineApplyOp affineApplyOp,
        ::mlir::transform::ApplyToEachResultList &results,
        ::mlir::transform::TransformState &state);
  }];
}

#endif // TEST_TRANSFORM_OPS