xref: /llvm-project/mlir/lib/Conversion/TosaToTensor/TosaToTensorPass.cpp (revision af22e274e9c5643780f25066442e05b5bd453328)
1126e7eafSRob Suderman //===- TosaToTensorPass.cpp - Lowering Tosa to Tensor Dialect -------------===//
2126e7eafSRob Suderman //
3126e7eafSRob Suderman // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4126e7eafSRob Suderman // See https://llvm.org/LICENSE.txt for license information.
5126e7eafSRob Suderman // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6126e7eafSRob Suderman //
7126e7eafSRob Suderman //===----------------------------------------------------------------------===//
8126e7eafSRob Suderman //
9126e7eafSRob Suderman // This transformation pass legalizes Tosa operations to the Tensor dialect.
10126e7eafSRob Suderman //
11126e7eafSRob Suderman //===----------------------------------------------------------------------===//
12126e7eafSRob Suderman 
13126e7eafSRob Suderman #include "mlir/Conversion/TosaToTensor/TosaToTensor.h"
1467d0d7acSMichele Scuttari 
15abc362a1SJakub Kuderski #include "mlir/Dialect/Arith/IR/Arith.h"
16126e7eafSRob Suderman #include "mlir/Dialect/Tensor/IR/Tensor.h"
17126e7eafSRob Suderman #include "mlir/Dialect/Tosa/IR/TosaOps.h"
18126e7eafSRob Suderman #include "mlir/Dialect/Tosa/Transforms/Passes.h"
19126e7eafSRob Suderman #include "mlir/IR/PatternMatch.h"
20126e7eafSRob Suderman #include "mlir/Pass/PassManager.h"
21126e7eafSRob Suderman #include "mlir/Transforms/DialectConversion.h"
22126e7eafSRob Suderman #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
23126e7eafSRob Suderman 
2467d0d7acSMichele Scuttari namespace mlir {
2567d0d7acSMichele Scuttari #define GEN_PASS_DEF_TOSATOTENSOR
2667d0d7acSMichele Scuttari #include "mlir/Conversion/Passes.h.inc"
2767d0d7acSMichele Scuttari } // namespace mlir
2867d0d7acSMichele Scuttari 
29126e7eafSRob Suderman using namespace mlir;
30126e7eafSRob Suderman using namespace tosa;
31126e7eafSRob Suderman 
32126e7eafSRob Suderman namespace {
3367d0d7acSMichele Scuttari struct TosaToTensor : public impl::TosaToTensorBase<TosaToTensor> {
34126e7eafSRob Suderman public:
runOnOperation__anon849f45e10111::TosaToTensor35126e7eafSRob Suderman   void runOnOperation() override {
36126e7eafSRob Suderman     RewritePatternSet patterns(&getContext());
37126e7eafSRob Suderman     ConversionTarget target(getContext());
38fbf719b8SMaya Amrami     target.addIllegalOp<tosa::ConcatOp>();
39fbf719b8SMaya Amrami     target.addIllegalOp<tosa::ReshapeOp>();
40126e7eafSRob Suderman     target.addIllegalOp<tosa::SliceOp>();
412a196254SRamkumar Ramachandra     target.addIllegalOp<tosa::PadOp>();
42abc362a1SJakub Kuderski     target.addLegalDialect<arith::ArithDialect>();
43126e7eafSRob Suderman     target.addLegalDialect<tensor::TensorDialect>();
44126e7eafSRob Suderman 
45*af22e274SMatthias Gehre     TypeConverter converter;
46*af22e274SMatthias Gehre     mlir::tosa::populateTosaTypeConversion(converter);
47*af22e274SMatthias Gehre 
48*af22e274SMatthias Gehre     mlir::tosa::populateTosaToTensorConversionPatterns(converter, &patterns);
49126e7eafSRob Suderman 
50126e7eafSRob Suderman     if (failed(applyPartialConversion(getOperation(), target,
51126e7eafSRob Suderman                                       std::move(patterns))))
52126e7eafSRob Suderman       signalPassFailure();
53126e7eafSRob Suderman   }
54126e7eafSRob Suderman };
55126e7eafSRob Suderman } // namespace
56039b969bSMichele Scuttari 
createTosaToTensor()57039b969bSMichele Scuttari std::unique_ptr<Pass> mlir::tosa::createTosaToTensor() {
58039b969bSMichele Scuttari   return std::make_unique<TosaToTensor>();
59039b969bSMichele Scuttari }
60