54 lines · cpp
1//===- TosaToTensorPass.cpp - Lowering Tosa to Tensor Dialect -------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This transformation pass legalizes Tosa operations to the Tensor dialect.10//11//===----------------------------------------------------------------------===//12 13#include "mlir/Conversion/TosaToTensor/TosaToTensor.h"14 15#include "mlir/Dialect/Arith/IR/Arith.h"16#include "mlir/Dialect/Tensor/IR/Tensor.h"17#include "mlir/Dialect/Tosa/IR/TosaOps.h"18#include "mlir/Dialect/Tosa/Transforms/Passes.h"19#include "mlir/IR/PatternMatch.h"20#include "mlir/Transforms/DialectConversion.h"21 22namespace mlir {23#define GEN_PASS_DEF_TOSATOTENSORPASS24#include "mlir/Conversion/Passes.h.inc"25} // namespace mlir26 27using namespace mlir;28using namespace tosa;29 30namespace {31struct TosaToTensor : public impl::TosaToTensorPassBase<TosaToTensor> {32public:33 void runOnOperation() override {34 RewritePatternSet patterns(&getContext());35 ConversionTarget target(getContext());36 target.addIllegalOp<tosa::ConcatOp>();37 target.addIllegalOp<tosa::ReshapeOp>();38 target.addIllegalOp<tosa::SliceOp>();39 target.addIllegalOp<tosa::PadOp>();40 target.addLegalDialect<arith::ArithDialect>();41 target.addLegalDialect<tensor::TensorDialect>();42 43 TypeConverter converter;44 mlir::tosa::populateTosaTypeConversion(converter);45 46 mlir::tosa::populateTosaToTensorConversionPatterns(converter, &patterns);47 48 if (failed(applyPartialConversion(getOperation(), target,49 std::move(patterns))))50 signalPassFailure();51 }52};53} // namespace54