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