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 Scuttaristd::unique_ptr<Pass> mlir::tosa::createTosaToTensor() { 58039b969bSMichele Scuttari return std::make_unique<TosaToTensor>(); 59039b969bSMichele Scuttari } 60