1//===- TosaToArithPass.cpp - Lowering Tosa to Linalg 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-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This transformation pass legalizes Tosa operations to the Arith dialect.
10//
11//===----------------------------------------------------------------------===//
12
13#include "mlir/Conversion/TosaToArith/TosaToArith.h"
14
15#include "mlir/Dialect/Arith/IR/Arith.h"
16#include "mlir/Dialect/Tosa/IR/TosaOps.h"
17#include "mlir/Dialect/Tosa/Transforms/Passes.h"
18#include "mlir/IR/PatternMatch.h"
19#include "mlir/Pass/PassManager.h"
20#include "mlir/Transforms/DialectConversion.h"
21#include "mlir/Transforms/GreedyPatternRewriteDriver.h"
22
23namespace mlir {
24#define GEN_PASS_DEF_TOSATOARITH
25#include "mlir/Conversion/Passes.h.inc"
26} // namespace mlir
27
28using namespace mlir;
29using namespace tosa;
30
31namespace {
32struct TosaToArith : public impl::TosaToArithBase<TosaToArith> {
33public:
34 TosaToArith(TosaToArithOptions &options) : TosaToArithBase(options) {}
35
36 void runOnOperation() override {
37 RewritePatternSet patterns(&getContext());
38 ConversionTarget target(getContext());
39 target.addIllegalOp<tosa::ConstOp>();
40 target.addLegalDialect<arith::ArithDialect>();
41
42 mlir::tosa::populateTosaToArithConversionPatterns(patterns: &patterns);
43
44 if (this->includeApplyRescale) {
45 mlir::tosa::populateTosaRescaleToArithConversionPatterns(patterns: &patterns,
46 include32Bit: this->use32Bit);
47 target.addIllegalOp<tosa::ApplyScaleOp>();
48 }
49
50 if (failed(applyPartialConversion(getOperation(), target,
51 std::move(patterns))))
52 signalPassFailure();
53 }
54};
55} // namespace
56
57std::unique_ptr<Pass> mlir::tosa::createTosaToArith(bool includeApplyRescale,
58 bool use32BitApplyRescale) {
59 TosaToArithOptions options = {includeApplyRescale, use32BitApplyRescale};
60 return std::make_unique<TosaToArith>(options);
61}
62

source code of mlir/lib/Conversion/TosaToArith/TosaToArithPass.cpp