xref: /llvm-project/mlir/test/lib/Dialect/Transform/TestTransformDialectInterpreter.cpp (revision a2e1f54bb7beff7ce84151353490c8b484da0a45)
1d064c480SAlex Zinenko //===- TestTransformDialectInterpreter.cpp --------------------------------===//
2d064c480SAlex Zinenko //
3d064c480SAlex Zinenko // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4d064c480SAlex Zinenko // See https://llvm.org/LICENSE.txt for license information.
5d064c480SAlex Zinenko // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6d064c480SAlex Zinenko //
7d064c480SAlex Zinenko //===----------------------------------------------------------------------===//
8d064c480SAlex Zinenko //
9d064c480SAlex Zinenko // This file defines a test pass that interprets Transform dialect operations in
10d064c480SAlex Zinenko // the module.
11d064c480SAlex Zinenko //
12d064c480SAlex Zinenko //===----------------------------------------------------------------------===//
13d064c480SAlex Zinenko 
14*5a9bdd85SOleksandr "Alex" Zinenko #include "mlir/Dialect/Transform/Interfaces/TransformInterfaces.h"
15d064c480SAlex Zinenko #include "mlir/IR/BuiltinOps.h"
16d064c480SAlex Zinenko #include "mlir/Pass/Pass.h"
17d064c480SAlex Zinenko 
18d064c480SAlex Zinenko using namespace mlir;
19d064c480SAlex Zinenko 
20d064c480SAlex Zinenko namespace {
216e44f11eSAlex Zinenko template <typename Derived>
22b7895f9dSAlex Zinenko class OpPassWrapper : public PassWrapper<Derived, OperationPass<>> {};
236e44f11eSAlex Zinenko 
2444cfea02SNicolas Vasilache struct TestTransformDialectEraseSchedulePass
2544cfea02SNicolas Vasilache     : public PassWrapper<TestTransformDialectEraseSchedulePass,
2644cfea02SNicolas Vasilache                          OperationPass<ModuleOp>> {
MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID__anonac4b0ea10111::TestTransformDialectEraseSchedulePass2744cfea02SNicolas Vasilache   MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(
2844cfea02SNicolas Vasilache       TestTransformDialectEraseSchedulePass)
2944cfea02SNicolas Vasilache 
3044cfea02SNicolas Vasilache   StringRef getArgument() const final {
3144cfea02SNicolas Vasilache     return "test-transform-dialect-erase-schedule";
3244cfea02SNicolas Vasilache   }
3344cfea02SNicolas Vasilache 
getDescription__anonac4b0ea10111::TestTransformDialectEraseSchedulePass3444cfea02SNicolas Vasilache   StringRef getDescription() const final {
3544cfea02SNicolas Vasilache     return "erase transform dialect schedule from the IR";
3644cfea02SNicolas Vasilache   }
3744cfea02SNicolas Vasilache 
runOnOperation__anonac4b0ea10111::TestTransformDialectEraseSchedulePass3844cfea02SNicolas Vasilache   void runOnOperation() override {
3944cfea02SNicolas Vasilache     getOperation()->walk<WalkOrder::PreOrder>([&](Operation *nestedOp) {
4044cfea02SNicolas Vasilache       if (isa<transform::TransformOpInterface>(nestedOp)) {
4144cfea02SNicolas Vasilache         nestedOp->erase();
4244cfea02SNicolas Vasilache         return WalkResult::skip();
4344cfea02SNicolas Vasilache       }
4444cfea02SNicolas Vasilache       return WalkResult::advance();
4544cfea02SNicolas Vasilache     });
4644cfea02SNicolas Vasilache   }
4744cfea02SNicolas Vasilache };
48d064c480SAlex Zinenko } // namespace
49d064c480SAlex Zinenko 
50d064c480SAlex Zinenko namespace mlir {
51d064c480SAlex Zinenko namespace test {
5244cfea02SNicolas Vasilache /// Registers the test pass for erasing transform dialect ops.
registerTestTransformDialectEraseSchedulePass()5344cfea02SNicolas Vasilache void registerTestTransformDialectEraseSchedulePass() {
5444cfea02SNicolas Vasilache   PassRegistration<TestTransformDialectEraseSchedulePass> reg;
5544cfea02SNicolas Vasilache }
56d064c480SAlex Zinenko } // namespace test
57d064c480SAlex Zinenko } // namespace mlir
58