xref: /aosp_15_r20/external/armnn/shim/sl/canonical/Converter.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include "ConversionUtils.hpp"
9 
10 #include <nnapi/OperandTypes.h>
11 #include <nnapi/Result.h>
12 #include <nnapi/Types.h>
13 
14 #include <armnn/Types.hpp>
15 using namespace armnn;
16 
17 namespace armnn_driver
18 {
19 
20 class Converter
21 {
22 
23 public:
24     using Model                     = ::android::nn::Model;
25     using Operand                   = ::android::nn::Operand;
26     using OperandLifeTime           = ::android::nn::Operand::LifeTime;
27     using OperandType               = ::android::nn::OperandType;
28     using Operation                 = ::android::nn::Operation;
29     using OperationType             = ::android::nn::OperationType;
30     using ErrorStatus               = ::android::nn::ErrorStatus;
31     static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data);
32 
33 private:
34     static bool ConvertAdd(const Operation& operation, const Model& model, ConversionData& data);
35 
36     static bool ConvertArgMinMax(const Operation& operation,
37                                  const Model& model,
38                                  ConversionData& data,
39                                  armnn::ArgMinMaxFunction argMinMaxFunction);
40 
41     static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data);
42 
43     static bool ConvertBatchMatMul(const Operation& operation, const Model& model, ConversionData& data);
44 
45     static bool ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data);
46 
47     static bool ConvertCast(const Operation& operation, const Model& model, ConversionData& data);
48 
49     static bool ConvertComparison(const Operation& operation,
50                                   const Model& model,
51                                   ConversionData& data,
52                                   armnn::ComparisonOperation comparisonOperation);
53 
54     static bool ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data);
55 
56     static bool ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data);
57 
58     static bool ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data);
59 
60     static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data);
61 
62     static bool ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data);
63 
64     static bool ConvertDiv(const Operation& operation, const Model& model, ConversionData& data);
65 
66     static bool ConvertElementwiseUnary(const Operation& operation,
67                                         const Model& model,
68                                         ConversionData& data,
69                                         armnn::UnaryOperation unaryOperation);
70 
71     static bool ConvertElu(const Operation& operation, const Model& model, ConversionData& data);
72 
73     static bool ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data);
74 
75     static bool ConvertFill(const Operation& operation, const Model& model, ConversionData& data);
76 
77     static bool ConvertFloor(const Operation& operation, const Model& model, ConversionData& data);
78 
79     static bool ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data);
80 
81     static bool ConvertGather(const Operation& operation, const Model& model, ConversionData& data);
82 
83     static bool ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data);
84 
85     static bool ConvertHardSwish(const Operation& operation, const Model& model, ConversionData& data);
86 
87     static bool ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data);
88 
89     static bool ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data);
90 
91     static bool ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data);
92 
93     static bool ConvertLocalResponseNormalization(const Operation& operation,
94                                                   const Model& model,
95                                                   ConversionData& data);
96 
97     static bool ConvertLogicalBinary(const Operation& operation,
98                                      const Model& model,
99                                      ConversionData& data,
100                                      armnn::LogicalBinaryOperation logicalOperation);
101 
102     static bool ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data);
103 
104     static bool ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data);
105 
106     static bool ConvertLstm(const Operation& operation, const Model& model, ConversionData& data);
107 
108     static bool ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data);
109 
110     static bool ConvertMaximum(const Operation& operation, const Model& model, ConversionData& data);
111 
112     static bool ConvertMean(const Operation& operation, const Model& model, ConversionData& data);
113 
114     static bool ConvertMinimum(const Operation& operation, const Model& model, ConversionData& data);
115 
116     static bool ConvertMul(const Operation& operation, const Model& model, ConversionData& data);
117 
118     static bool ConvertPad(const Operation& operation, const Model& model, ConversionData& data);
119 
120     static bool ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data);
121 
122     static bool ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data);
123 
124     static bool ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data);
125 
126     static bool ConvertQuantizedLstm(const Operation& operation, const Model& model, ConversionData& data);
127 
128     static bool ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data);
129 
130     static bool ConvertRank(const Operation& operation, const Model& model, ConversionData& data);
131 
132     static bool ConvertReLu(const Operation& operation, const Model& model, ConversionData& data);
133 
134     static bool ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data);
135 
136     static bool ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data);
137 
138     static bool ConvertReshape(const Operation& operation, const Model& model, ConversionData& data);
139 
140     static bool ConvertResize(const Operation& operation,
141                               const Model& model,
142                               ConversionData& data,
143                               armnn::ResizeMethod resizeMethod);
144 
145     static bool ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data);
146 
147     static bool ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data);
148 
149     static bool ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data);
150 
151     static bool ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data);
152 
153     static bool ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data);
154 
155     static bool ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data);
156 
157     static bool ConvertSub(const Operation& operation, const Model& model, ConversionData& data);
158 
159     static bool ConvertTanH(const Operation& operation, const Model& model, ConversionData& data);
160 
161     static bool ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data);
162 
163     static bool ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data);
164 };
165 
166 } // namespace armnn_driver
167