xref: /llvm-project/mlir/lib/Dialect/Tosa/Transforms/TosaOptionalDecompositions.cpp (revision 09dfc5713d7e2342bea4c8447d1ed76c85eb8225)
13bcaf2ebSGeorgios Pinitas //===- TosaOptionalDecompositions.cpp -------------------------------------===//
2dfd07082SAaron DeBattista //
3dfd07082SAaron DeBattista // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4dfd07082SAaron DeBattista // See https://llvm.org/LICENSE.txt for license information.
5dfd07082SAaron DeBattista // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6dfd07082SAaron DeBattista //
7dfd07082SAaron DeBattista //===----------------------------------------------------------------------===//
8dfd07082SAaron DeBattista //
9dfd07082SAaron DeBattista // Pass to apply the Tosa operations decompositions
10dfd07082SAaron DeBattista // exposed as populate functions in
11dfd07082SAaron DeBattista // include/mlir/Dialect/Tosa/Transforms/Passes.h
12dfd07082SAaron DeBattista //
13dfd07082SAaron DeBattista //===----------------------------------------------------------------------===//
14dfd07082SAaron DeBattista 
15039b969bSMichele Scuttari #include "mlir/Dialect/Tosa/Transforms/Passes.h"
1667d0d7acSMichele Scuttari 
1767d0d7acSMichele Scuttari #include "mlir/Dialect/Func/IR/FuncOps.h"
1867d0d7acSMichele Scuttari #include "mlir/Dialect/Tosa/IR/TosaOps.h"
19dfd07082SAaron DeBattista #include "mlir/Pass/Pass.h"
20dfd07082SAaron DeBattista #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
21dfd07082SAaron DeBattista 
2267d0d7acSMichele Scuttari namespace mlir {
2367d0d7acSMichele Scuttari namespace tosa {
2467d0d7acSMichele Scuttari #define GEN_PASS_DEF_TOSAOPTIONALDECOMPOSITIONS
2567d0d7acSMichele Scuttari #include "mlir/Dialect/Tosa/Transforms/Passes.h.inc"
2667d0d7acSMichele Scuttari } // namespace tosa
2767d0d7acSMichele Scuttari } // namespace mlir
2867d0d7acSMichele Scuttari 
29dfd07082SAaron DeBattista using namespace mlir;
30dfd07082SAaron DeBattista 
31dfd07082SAaron DeBattista namespace {
32dfd07082SAaron DeBattista 
33039b969bSMichele Scuttari struct TosaOptionalDecompositions
3467d0d7acSMichele Scuttari     : public tosa::impl::TosaOptionalDecompositionsBase<
3567d0d7acSMichele Scuttari           TosaOptionalDecompositions> {
3641574554SRiver Riddle   void runOnOperation() override {
37dfd07082SAaron DeBattista     auto *ctx = &getContext();
38dfd07082SAaron DeBattista     RewritePatternSet patterns(ctx);
3941574554SRiver Riddle     auto func = getOperation();
40dfd07082SAaron DeBattista 
41dfd07082SAaron DeBattista     mlir::tosa::populateTosaDecomposeConv2D(ctx, patterns);
42dfd07082SAaron DeBattista     mlir::tosa::populateTosaDecomposeTransposeConv(ctx, patterns);
43dfd07082SAaron DeBattista     mlir::tosa::populateTosaDecomposeDepthwise(ctx, patterns);
44dfd07082SAaron DeBattista 
45*09dfc571SJacques Pienaar     if (applyPatternsGreedily(func, std::move(patterns)).failed())
46dfd07082SAaron DeBattista       signalPassFailure();
47dfd07082SAaron DeBattista   }
48dfd07082SAaron DeBattista };
49dfd07082SAaron DeBattista 
50dfd07082SAaron DeBattista } // namespace
51039b969bSMichele Scuttari 
52039b969bSMichele Scuttari std::unique_ptr<Pass> mlir::tosa::createTosaOptionalDecompositions() {
53039b969bSMichele Scuttari   return std::make_unique<TosaOptionalDecompositions>();
54039b969bSMichele Scuttari }
55