xref: /aosp_15_r20/external/android-nn-driver/1.2/HalPolicy.cpp (revision 3e777be0405cee09af5d5785ff37f7cfb5bee59a)
1*3e777be0SXin Li //
2*3e777be0SXin Li // Copyright © 2019-2023 Arm Ltd and Contributors. All rights reserved.
3*3e777be0SXin Li // SPDX-License-Identifier: MIT
4*3e777be0SXin Li //
5*3e777be0SXin Li 
6*3e777be0SXin Li #include "HalPolicy.hpp"
7*3e777be0SXin Li #include "DriverOptions.hpp"
8*3e777be0SXin Li 
9*3e777be0SXin Li namespace armnn_driver
10*3e777be0SXin Li {
11*3e777be0SXin Li namespace hal_1_2
12*3e777be0SXin Li {
13*3e777be0SXin Li 
14*3e777be0SXin Li using namespace armnn;
15*3e777be0SXin Li 
16*3e777be0SXin Li namespace
17*3e777be0SXin Li {
18*3e777be0SXin Li 
19*3e777be0SXin Li } // anonymous namespace
20*3e777be0SXin Li 
GetDeviceTypeFromOptions(const DriverOptions & options)21*3e777be0SXin Li HalPolicy::DeviceType HalPolicy::GetDeviceTypeFromOptions(const DriverOptions& options)
22*3e777be0SXin Li {
23*3e777be0SXin Li         // Query backends list from the options
24*3e777be0SXin Li         auto backends = options.GetBackends();
25*3e777be0SXin Li         // Return first backend
26*3e777be0SXin Li         if(backends.size()>0)
27*3e777be0SXin Li         {
28*3e777be0SXin Li             const auto &first_backend = backends[0];
29*3e777be0SXin Li             if(first_backend.IsCpuAcc()||first_backend.IsCpuRef())
30*3e777be0SXin Li             {
31*3e777be0SXin Li                 return V1_2::DeviceType::CPU;
32*3e777be0SXin Li             }
33*3e777be0SXin Li             else if(first_backend.IsGpuAcc())
34*3e777be0SXin Li             {
35*3e777be0SXin Li                 return V1_2::DeviceType::GPU;
36*3e777be0SXin Li             }
37*3e777be0SXin Li             else
38*3e777be0SXin Li             {
39*3e777be0SXin Li                 return V1_2::DeviceType::ACCELERATOR;
40*3e777be0SXin Li             }
41*3e777be0SXin Li         }
42*3e777be0SXin Li         else
43*3e777be0SXin Li         {
44*3e777be0SXin Li             return V1_2::DeviceType::CPU;
45*3e777be0SXin Li         }
46*3e777be0SXin Li }
47*3e777be0SXin Li 
ConvertOperation(const Operation & operation,const Model & model,ConversionData & data)48*3e777be0SXin Li bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, ConversionData& data)
49*3e777be0SXin Li {
50*3e777be0SXin Li     switch (operation.type)
51*3e777be0SXin Li     {
52*3e777be0SXin Li         case V1_2::OperationType::ABS:
53*3e777be0SXin Li             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Abs);
54*3e777be0SXin Li         case V1_2::OperationType::ADD:
55*3e777be0SXin Li             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Add);
56*3e777be0SXin Li         case V1_2::OperationType::ARGMAX:
57*3e777be0SXin Li             return ConvertArgMinMax(operation, model, data, ArgMinMaxFunction::Max);
58*3e777be0SXin Li         case V1_2::OperationType::ARGMIN:
59*3e777be0SXin Li             return ConvertArgMinMax(operation, model, data, ArgMinMaxFunction::Min);
60*3e777be0SXin Li         case V1_2::OperationType::AVERAGE_POOL_2D:
61*3e777be0SXin Li             return ConvertAveragePool2d(operation, model, data);
62*3e777be0SXin Li         case V1_2::OperationType::BATCH_TO_SPACE_ND:
63*3e777be0SXin Li             return ConvertBatchToSpaceNd(operation, model, data);
64*3e777be0SXin Li         case V1_2::OperationType::CAST:
65*3e777be0SXin Li             return ConvertCast(operation, model, data);
66*3e777be0SXin Li         case V1_2::OperationType::CHANNEL_SHUFFLE:
67*3e777be0SXin Li             return ConvertChannelShuffle(operation, model, data);
68*3e777be0SXin Li         case V1_2::OperationType::CONCATENATION:
69*3e777be0SXin Li             return ConvertConcatenation(operation, model, data);
70*3e777be0SXin Li         case V1_2::OperationType::CONV_2D:
71*3e777be0SXin Li             return ConvertConv2d(operation, model, data);
72*3e777be0SXin Li         case V1_2::OperationType::DEPTH_TO_SPACE:
73*3e777be0SXin Li             return ConvertDepthToSpace(operation, model, data);
74*3e777be0SXin Li         case V1_2::OperationType::DEPTHWISE_CONV_2D:
75*3e777be0SXin Li             return ConvertDepthwiseConv2d(operation, model, data);
76*3e777be0SXin Li         case V1_2::OperationType::DEQUANTIZE:
77*3e777be0SXin Li             return ConvertDequantize(operation, model, data);
78*3e777be0SXin Li         case V1_2::OperationType::DIV:
79*3e777be0SXin Li             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Div);
80*3e777be0SXin Li         case V1_2::OperationType::EQUAL:
81*3e777be0SXin Li             return ConvertComparison(operation, model, data, ComparisonOperation::Equal);
82*3e777be0SXin Li         case V1_2::OperationType::EXP:
83*3e777be0SXin Li             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Exp);
84*3e777be0SXin Li         case V1_2::OperationType::EXPAND_DIMS:
85*3e777be0SXin Li             return ConvertExpandDims(operation, model, data);
86*3e777be0SXin Li         case V1_2::OperationType::FLOOR:
87*3e777be0SXin Li             return ConvertFloor(operation, model, data);
88*3e777be0SXin Li         case V1_2::OperationType::FULLY_CONNECTED:
89*3e777be0SXin Li             return ConvertFullyConnected(operation, model, data);
90*3e777be0SXin Li         case V1_2::OperationType::GATHER:
91*3e777be0SXin Li             return ConvertGather(operation, model, data);
92*3e777be0SXin Li         case V1_2::OperationType::GREATER:
93*3e777be0SXin Li             return ConvertComparison(operation, model, data, ComparisonOperation::Greater);
94*3e777be0SXin Li         case V1_2::OperationType::GREATER_EQUAL:
95*3e777be0SXin Li             return ConvertComparison(operation, model, data, ComparisonOperation::GreaterOrEqual);
96*3e777be0SXin Li         case V1_2::OperationType::GROUPED_CONV_2D:
97*3e777be0SXin Li             return ConvertGroupedConv2d(operation, model, data);
98*3e777be0SXin Li         case V1_2::OperationType::INSTANCE_NORMALIZATION:
99*3e777be0SXin Li             return ConvertInstanceNormalization(operation, model, data);
100*3e777be0SXin Li         case V1_2::OperationType::L2_NORMALIZATION:
101*3e777be0SXin Li             return ConvertL2Normalization(operation, model, data);
102*3e777be0SXin Li         case V1_2::OperationType::L2_POOL_2D:
103*3e777be0SXin Li             return ConvertL2Pool2d(operation, model, data);
104*3e777be0SXin Li         case V1_2::OperationType::LESS:
105*3e777be0SXin Li             return ConvertComparison(operation, model, data, ComparisonOperation::Less);
106*3e777be0SXin Li         case V1_2::OperationType::LESS_EQUAL:
107*3e777be0SXin Li             return ConvertComparison(operation, model, data, ComparisonOperation::LessOrEqual);
108*3e777be0SXin Li         case V1_2::OperationType::LOCAL_RESPONSE_NORMALIZATION:
109*3e777be0SXin Li             return ConvertLocalResponseNormalization(operation, model, data);
110*3e777be0SXin Li         case V1_2::OperationType::LOG:
111*3e777be0SXin Li             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Log);
112*3e777be0SXin Li         case V1_2::OperationType::LOGISTIC:
113*3e777be0SXin Li             return ConvertLogistic(operation, model, data);
114*3e777be0SXin Li         case V1_2::OperationType::LOG_SOFTMAX:
115*3e777be0SXin Li             return ConvertLogSoftmax(operation, model, data);
116*3e777be0SXin Li         case V1_2::OperationType::LSTM:
117*3e777be0SXin Li             return ConvertLstm(operation, model, data);
118*3e777be0SXin Li         case V1_2::OperationType::MAX_POOL_2D:
119*3e777be0SXin Li             return ConvertMaxPool2d(operation, model, data);
120*3e777be0SXin Li         case V1_2::OperationType::MAXIMUM:
121*3e777be0SXin Li             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Maximum);
122*3e777be0SXin Li         case V1_2::OperationType::MEAN:
123*3e777be0SXin Li             return ConvertMean(operation, model, data);
124*3e777be0SXin Li         case V1_2::OperationType::MINIMUM:
125*3e777be0SXin Li             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Minimum);
126*3e777be0SXin Li         case V1_2::OperationType::MUL:
127*3e777be0SXin Li             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Mul);
128*3e777be0SXin Li         case V1_2::OperationType::NEG:
129*3e777be0SXin Li             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Neg);
130*3e777be0SXin Li         case V1_2::OperationType::NOT_EQUAL:
131*3e777be0SXin Li             return ConvertComparison(operation, model, data, ComparisonOperation::NotEqual);
132*3e777be0SXin Li         case V1_2::OperationType::PAD:
133*3e777be0SXin Li             return ConvertPad(operation, model, data);
134*3e777be0SXin Li         case V1_2::OperationType::PAD_V2:
135*3e777be0SXin Li             return ConvertPadV2(operation, model, data);
136*3e777be0SXin Li         case V1_2::OperationType::PRELU:
137*3e777be0SXin Li             return ConvertPrelu(operation, model, data);
138*3e777be0SXin Li         case V1_2::OperationType::QUANTIZE:
139*3e777be0SXin Li             return ConvertQuantize(operation, model, data);
140*3e777be0SXin Li         case V1_2::OperationType::QUANTIZED_16BIT_LSTM:
141*3e777be0SXin Li             return ConvertQuantized16BitLstm(operation, model, data);
142*3e777be0SXin Li         case V1_2::OperationType::REDUCE_MAX:
143*3e777be0SXin Li             return ConvertReduce(operation, model, data, ReduceOperation::Max);
144*3e777be0SXin Li         case V1_2::OperationType::REDUCE_MIN:
145*3e777be0SXin Li             return ConvertReduce(operation, model, data, ReduceOperation::Min);
146*3e777be0SXin Li         case V1_2::OperationType::REDUCE_PROD:
147*3e777be0SXin Li             return ConvertReduce(operation, model, data, ReduceOperation::Prod);
148*3e777be0SXin Li         case V1_2::OperationType::REDUCE_SUM:
149*3e777be0SXin Li             return ConvertReduce(operation, model, data, ReduceOperation::Sum);
150*3e777be0SXin Li         case V1_2::OperationType::RELU:
151*3e777be0SXin Li             return ConvertReLu(operation, model, data);
152*3e777be0SXin Li         case V1_2::OperationType::RELU1:
153*3e777be0SXin Li             return ConvertReLu1(operation, model, data);
154*3e777be0SXin Li         case V1_2::OperationType::RELU6:
155*3e777be0SXin Li             return ConvertReLu6(operation, model, data);
156*3e777be0SXin Li         case V1_2::OperationType::RESHAPE:
157*3e777be0SXin Li             return ConvertReshape(operation, model, data);
158*3e777be0SXin Li         case V1_2::OperationType::RESIZE_BILINEAR:
159*3e777be0SXin Li             return ConvertResize(operation, model, data, ResizeMethod::Bilinear);
160*3e777be0SXin Li         case V1_2::OperationType::RESIZE_NEAREST_NEIGHBOR:
161*3e777be0SXin Li             return ConvertResize(operation, model, data, ResizeMethod::NearestNeighbor);
162*3e777be0SXin Li         case V1_2::OperationType::RSQRT:
163*3e777be0SXin Li             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Rsqrt);
164*3e777be0SXin Li         case V1_2::OperationType::SIN:
165*3e777be0SXin Li             return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Sin);
166*3e777be0SXin Li         case V1_2::OperationType::SOFTMAX:
167*3e777be0SXin Li             return ConvertSoftmax(operation, model, data);
168*3e777be0SXin Li         case V1_2::OperationType::SPACE_TO_BATCH_ND  :
169*3e777be0SXin Li             return ConvertSpaceToBatchNd(operation, model, data);
170*3e777be0SXin Li         case V1_2::OperationType::SPACE_TO_DEPTH:
171*3e777be0SXin Li             return ConvertSpaceToDepth(operation, model, data);
172*3e777be0SXin Li         case V1_2::OperationType::SQRT:
173*3e777be0SXin Li             return ConvertSqrt(operation, model, data);
174*3e777be0SXin Li         case V1_2::OperationType::SQUEEZE:
175*3e777be0SXin Li             return ConvertSqueeze(operation, model, data);
176*3e777be0SXin Li         case V1_2::OperationType::STRIDED_SLICE:
177*3e777be0SXin Li             return ConvertStridedSlice(operation, model, data);
178*3e777be0SXin Li         case V1_2::OperationType::SUB:
179*3e777be0SXin Li             return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Sub);
180*3e777be0SXin Li         case V1_2::OperationType::TRANSPOSE:
181*3e777be0SXin Li             return ConvertTranspose(operation, model, data);
182*3e777be0SXin Li         case V1_2::OperationType::TRANSPOSE_CONV_2D:
183*3e777be0SXin Li             return ConvertTransposeConv2d(operation, model, data);
184*3e777be0SXin Li         case V1_2::OperationType::TANH:
185*3e777be0SXin Li             return ConvertTanH(operation, model, data);
186*3e777be0SXin Li         case V1_2::OperationType::UNIDIRECTIONAL_SEQUENCE_LSTM:
187*3e777be0SXin Li             return ConvertUnidirectionalSequenceLstm(operation, model, data);
188*3e777be0SXin Li         default:
189*3e777be0SXin Li             return Fail("%s: Operation type %s not supported in ArmnnDriver",
190*3e777be0SXin Li                         __func__, toString(operation.type).c_str());
191*3e777be0SXin Li     }
192*3e777be0SXin Li }
193*3e777be0SXin Li 
ConvertArgMinMax(const V1_2::Operation & operation,const V1_2::Model & model,ConversionData & data,armnn::ArgMinMaxFunction argMinMaxFunction)194*3e777be0SXin Li bool HalPolicy::ConvertArgMinMax(const V1_2::Operation& operation,
195*3e777be0SXin Li                                  const V1_2::Model& model,
196*3e777be0SXin Li                                  ConversionData& data,
197*3e777be0SXin Li                                  armnn::ArgMinMaxFunction argMinMaxFunction)
198*3e777be0SXin Li {
199*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertArgMinMax()");
200*3e777be0SXin Li     return ::ConvertArgMinMax<hal_1_2::HalPolicy>(operation, model, data, argMinMaxFunction);
201*3e777be0SXin Li }
202*3e777be0SXin Li 
ConvertAveragePool2d(const Operation & operation,const Model & model,ConversionData & data)203*3e777be0SXin Li bool HalPolicy::ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data)
204*3e777be0SXin Li {
205*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertAveragePool2d()");
206*3e777be0SXin Li     return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::Average, model, data);
207*3e777be0SXin Li }
208*3e777be0SXin Li 
ConvertBatchToSpaceNd(const Operation & operation,const Model & model,ConversionData & data)209*3e777be0SXin Li bool HalPolicy::ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data)
210*3e777be0SXin Li {
211*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertBatchToSpaceNd()");
212*3e777be0SXin Li     return ::ConvertBatchToSpaceNd<hal_1_2::HalPolicy>(operation, model, data);
213*3e777be0SXin Li }
214*3e777be0SXin Li 
ConvertCast(const Operation & operation,const Model & model,ConversionData & data)215*3e777be0SXin Li bool HalPolicy::ConvertCast(const Operation& operation, const Model& model, ConversionData& data)
216*3e777be0SXin Li {
217*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertCast()");
218*3e777be0SXin Li     return ::ConvertCast<hal_1_2::HalPolicy>(operation, model, data);
219*3e777be0SXin Li }
220*3e777be0SXin Li 
ConvertChannelShuffle(const Operation & operation,const Model & model,ConversionData & data)221*3e777be0SXin Li bool HalPolicy::ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data)
222*3e777be0SXin Li {
223*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertChannelShuffle()");
224*3e777be0SXin Li     return ::ConvertChannelShuffle<hal_1_2::HalPolicy>(operation, model, data);
225*3e777be0SXin Li }
226*3e777be0SXin Li 
ConvertComparison(const Operation & operation,const Model & model,ConversionData & data,ComparisonOperation comparisonOperation)227*3e777be0SXin Li bool HalPolicy::ConvertComparison(const Operation& operation,
228*3e777be0SXin Li                                   const Model& model,
229*3e777be0SXin Li                                   ConversionData& data,
230*3e777be0SXin Li                                   ComparisonOperation comparisonOperation)
231*3e777be0SXin Li {
232*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertComparison()");
233*3e777be0SXin Li     return ::ConvertComparison_1_2<hal_1_2::HalPolicy>(operation, model, data, comparisonOperation);
234*3e777be0SXin Li }
235*3e777be0SXin Li 
ConvertConcatenation(const Operation & operation,const Model & model,ConversionData & data)236*3e777be0SXin Li bool HalPolicy::ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data)
237*3e777be0SXin Li {
238*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertConcatenation()");
239*3e777be0SXin Li     return ::ConvertConcatenation<hal_1_2::HalPolicy>(operation, model, data);
240*3e777be0SXin Li }
241*3e777be0SXin Li 
ConvertConv2d(const Operation & operation,const Model & model,ConversionData & data)242*3e777be0SXin Li bool HalPolicy::ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data)
243*3e777be0SXin Li {
244*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertConv2d()");
245*3e777be0SXin Li     return ::ConvertConv2d_1_2<hal_1_2::HalPolicy>(operation, model, data);
246*3e777be0SXin Li }
247*3e777be0SXin Li 
ConvertDepthToSpace(const Operation & operation,const Model & model,ConversionData & data)248*3e777be0SXin Li bool HalPolicy::ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data)
249*3e777be0SXin Li {
250*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertDepthToSpace()");
251*3e777be0SXin Li     return ::ConvertDepthToSpace<hal_1_2::HalPolicy>(operation, model, data);
252*3e777be0SXin Li }
253*3e777be0SXin Li 
ConvertDepthwiseConv2d(const Operation & operation,const Model & model,ConversionData & data)254*3e777be0SXin Li bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data)
255*3e777be0SXin Li {
256*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertDepthwiseConv2d()");
257*3e777be0SXin Li     return ::ConvertDepthwiseConv2d_1_2<hal_1_2::HalPolicy>(operation, model, data);
258*3e777be0SXin Li }
259*3e777be0SXin Li 
ConvertDequantize(const Operation & operation,const Model & model,ConversionData & data)260*3e777be0SXin Li bool HalPolicy::ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data)
261*3e777be0SXin Li {
262*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertDequantize()");
263*3e777be0SXin Li     return ::ConvertDequantize_1_2<hal_1_2::HalPolicy>(operation, model, data);
264*3e777be0SXin Li }
265*3e777be0SXin Li 
ConvertElementwiseBinary(const Operation & operation,const Model & model,ConversionData & data,BinaryOperation binaryOperation)266*3e777be0SXin Li bool HalPolicy::ConvertElementwiseBinary(const Operation& operation,
267*3e777be0SXin Li                                          const Model& model,
268*3e777be0SXin Li                                          ConversionData& data,
269*3e777be0SXin Li                                          BinaryOperation binaryOperation)
270*3e777be0SXin Li {
271*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertElementwiseBinary()");
272*3e777be0SXin Li     return ::ConvertElementwiseBinary<hal_1_2::HalPolicy>(operation, model, data, binaryOperation);
273*3e777be0SXin Li }
274*3e777be0SXin Li 
ConvertElementwiseUnary(const Operation & operation,const Model & model,ConversionData & data,UnaryOperation unaryOperation)275*3e777be0SXin Li bool HalPolicy::ConvertElementwiseUnary(const Operation& operation,
276*3e777be0SXin Li                                         const Model& model,
277*3e777be0SXin Li                                         ConversionData& data,
278*3e777be0SXin Li                                         UnaryOperation unaryOperation)
279*3e777be0SXin Li {
280*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertElementwiseUnary()");
281*3e777be0SXin Li     return ::ConvertElementwiseUnary<hal_1_2::HalPolicy>(operation, model, data, unaryOperation);
282*3e777be0SXin Li }
283*3e777be0SXin Li 
ConvertExpandDims(const Operation & operation,const Model & model,ConversionData & data)284*3e777be0SXin Li bool HalPolicy::ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data)
285*3e777be0SXin Li {
286*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertExpandDims()");
287*3e777be0SXin Li     return ::ConvertExpandDims<hal_1_2::HalPolicy>(operation, model, data);
288*3e777be0SXin Li }
289*3e777be0SXin Li 
ConvertFloor(const Operation & operation,const Model & model,ConversionData & data)290*3e777be0SXin Li bool HalPolicy::ConvertFloor(const Operation& operation, const Model& model, ConversionData& data)
291*3e777be0SXin Li {
292*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertFloor()");
293*3e777be0SXin Li     return ::ConvertFloor<hal_1_2::HalPolicy>(operation, model, data);
294*3e777be0SXin Li }
295*3e777be0SXin Li 
ConvertFullyConnected(const Operation & operation,const Model & model,ConversionData & data)296*3e777be0SXin Li bool HalPolicy::ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data)
297*3e777be0SXin Li {
298*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertFullyConnected()");
299*3e777be0SXin Li     return ::ConvertFullyConnected<hal_1_2::HalPolicy>(operation, model, data);
300*3e777be0SXin Li }
301*3e777be0SXin Li 
ConvertGather(const Operation & operation,const Model & model,ConversionData & data)302*3e777be0SXin Li bool HalPolicy::ConvertGather (const Operation& operation, const Model& model, ConversionData& data)
303*3e777be0SXin Li {
304*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertGather()");
305*3e777be0SXin Li     return ::ConvertGather<hal_1_2::HalPolicy>(operation, model, data);
306*3e777be0SXin Li }
307*3e777be0SXin Li 
ConvertGroupedConv2d(const Operation & operation,const Model & model,ConversionData & data)308*3e777be0SXin Li bool HalPolicy::ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data)
309*3e777be0SXin Li {
310*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertGroupedConv2d()");
311*3e777be0SXin Li     return ::ConvertGroupedConv2d<hal_1_2::HalPolicy>(operation, model, data);
312*3e777be0SXin Li }
313*3e777be0SXin Li 
ConvertInstanceNormalization(const Operation & operation,const Model & model,ConversionData & data)314*3e777be0SXin Li bool HalPolicy::ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data)
315*3e777be0SXin Li {
316*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertInstanceNormalization()");
317*3e777be0SXin Li     return ::ConvertInstanceNormalization<hal_1_2::HalPolicy>(operation, model, data);
318*3e777be0SXin Li }
319*3e777be0SXin Li 
ConvertL2Normalization(const Operation & operation,const Model & model,ConversionData & data)320*3e777be0SXin Li bool HalPolicy::ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data)
321*3e777be0SXin Li {
322*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertL2Normalization()");
323*3e777be0SXin Li     return ::ConvertL2Normalization<hal_1_2::HalPolicy>(operation, model, data);
324*3e777be0SXin Li }
325*3e777be0SXin Li 
ConvertL2Pool2d(const Operation & operation,const Model & model,ConversionData & data)326*3e777be0SXin Li bool HalPolicy::ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data)
327*3e777be0SXin Li {
328*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertL2Pool2d()");
329*3e777be0SXin Li     return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::L2, model, data);
330*3e777be0SXin Li }
331*3e777be0SXin Li 
ConvertLocalResponseNormalization(const Operation & operation,const Model & model,ConversionData & data)332*3e777be0SXin Li bool HalPolicy::ConvertLocalResponseNormalization(const Operation& operation,
333*3e777be0SXin Li                                                   const Model& model,
334*3e777be0SXin Li                                                   ConversionData& data)
335*3e777be0SXin Li {
336*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertLocalResponseNormalization()");
337*3e777be0SXin Li     return ::ConvertLocalResponseNormalization<hal_1_2::HalPolicy>(operation, model, data);
338*3e777be0SXin Li }
339*3e777be0SXin Li 
ConvertLogistic(const Operation & operation,const Model & model,ConversionData & data)340*3e777be0SXin Li bool HalPolicy::ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data)
341*3e777be0SXin Li {
342*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertLogistic()");
343*3e777be0SXin Li     return ::ConvertLogistic<hal_1_2::HalPolicy>(operation, model, data);
344*3e777be0SXin Li }
345*3e777be0SXin Li 
ConvertLogSoftmax(const Operation & operation,const Model & model,ConversionData & data)346*3e777be0SXin Li bool HalPolicy::ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data)
347*3e777be0SXin Li {
348*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertLogSoftmax()");
349*3e777be0SXin Li     return ::ConvertLogSoftmax<hal_1_2::HalPolicy>(operation, model, data);
350*3e777be0SXin Li }
351*3e777be0SXin Li 
ConvertMaxPool2d(const Operation & operation,const Model & model,ConversionData & data)352*3e777be0SXin Li bool HalPolicy::ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data)
353*3e777be0SXin Li {
354*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertMaxPool2d()");
355*3e777be0SXin Li     return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::Max, model, data);
356*3e777be0SXin Li }
357*3e777be0SXin Li 
ConvertMean(const Operation & operation,const Model & model,ConversionData & data)358*3e777be0SXin Li bool HalPolicy::ConvertMean(const Operation& operation, const Model& model, ConversionData& data)
359*3e777be0SXin Li {
360*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertMean()");
361*3e777be0SXin Li     return ::ConvertMean<hal_1_2::HalPolicy>(operation, model, data);
362*3e777be0SXin Li }
363*3e777be0SXin Li 
ConvertPad(const Operation & operation,const Model & model,ConversionData & data)364*3e777be0SXin Li bool HalPolicy::ConvertPad(const Operation& operation, const Model& model, ConversionData& data)
365*3e777be0SXin Li {
366*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertPad()");
367*3e777be0SXin Li     return ::ConvertPad<hal_1_2::HalPolicy>(operation, model, data);
368*3e777be0SXin Li }
369*3e777be0SXin Li 
ConvertPadV2(const Operation & operation,const Model & model,ConversionData & data)370*3e777be0SXin Li bool HalPolicy::ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data)
371*3e777be0SXin Li {
372*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertPadV2()");
373*3e777be0SXin Li     return ::ConvertPadV2<hal_1_2::HalPolicy>(operation, model, data);
374*3e777be0SXin Li }
375*3e777be0SXin Li 
ConvertPrelu(const Operation & operation,const Model & model,ConversionData & data)376*3e777be0SXin Li bool HalPolicy::ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data)
377*3e777be0SXin Li {
378*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertPrelu()");
379*3e777be0SXin Li     return ::ConvertPrelu<hal_1_2::HalPolicy>(operation, model, data);
380*3e777be0SXin Li }
381*3e777be0SXin Li 
ConvertQuantize(const Operation & operation,const Model & model,ConversionData & data)382*3e777be0SXin Li bool HalPolicy::ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data)
383*3e777be0SXin Li {
384*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertQuantize()");
385*3e777be0SXin Li     return ::ConvertQuantize<hal_1_2::HalPolicy>(operation, model, data);
386*3e777be0SXin Li }
387*3e777be0SXin Li 
ConvertQuantized16BitLstm(const Operation & operation,const Model & model,ConversionData & data)388*3e777be0SXin Li bool HalPolicy::ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data)
389*3e777be0SXin Li {
390*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertQuantized16BitLstm()");
391*3e777be0SXin Li     return ::ConvertQuantized16BitLstm<hal_1_2::HalPolicy>(operation, model, data);
392*3e777be0SXin Li }
393*3e777be0SXin Li 
ConvertReduce(const Operation & operation,const Model & model,ConversionData & data,ReduceOperation reduceOperation)394*3e777be0SXin Li bool HalPolicy::ConvertReduce(const Operation& operation,
395*3e777be0SXin Li                               const Model& model,
396*3e777be0SXin Li                               ConversionData& data,
397*3e777be0SXin Li                               ReduceOperation reduceOperation)
398*3e777be0SXin Li {
399*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertReduce()");
400*3e777be0SXin Li     return ::ConvertReduce<hal_1_2::HalPolicy>(operation, model, data, reduceOperation);
401*3e777be0SXin Li }
402*3e777be0SXin Li 
ConvertReLu(const Operation & operation,const Model & model,ConversionData & data)403*3e777be0SXin Li bool HalPolicy::ConvertReLu(const Operation& operation, const Model& model, ConversionData& data)
404*3e777be0SXin Li {
405*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertReLu()");
406*3e777be0SXin Li     return ::ConvertReLu<hal_1_2::HalPolicy>(operation, model, data);
407*3e777be0SXin Li }
408*3e777be0SXin Li 
ConvertReLu1(const Operation & operation,const Model & model,ConversionData & data)409*3e777be0SXin Li bool HalPolicy::ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data)
410*3e777be0SXin Li {
411*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertReLu1()");
412*3e777be0SXin Li     return ::ConvertReLu1<hal_1_2::HalPolicy>(operation, model, data);
413*3e777be0SXin Li }
414*3e777be0SXin Li 
ConvertReLu6(const Operation & operation,const Model & model,ConversionData & data)415*3e777be0SXin Li bool HalPolicy::ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data)
416*3e777be0SXin Li {
417*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertReLu6()");
418*3e777be0SXin Li     return ::ConvertReLu6<hal_1_2::HalPolicy>(operation, model, data);
419*3e777be0SXin Li }
420*3e777be0SXin Li 
ConvertReshape(const Operation & operation,const Model & model,ConversionData & data)421*3e777be0SXin Li bool HalPolicy::ConvertReshape(const Operation& operation, const Model& model, ConversionData& data)
422*3e777be0SXin Li {
423*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertReshape()");
424*3e777be0SXin Li     return ::ConvertReshape<hal_1_2::HalPolicy>(operation, model, data);
425*3e777be0SXin Li }
426*3e777be0SXin Li 
ConvertResize(const Operation & operation,const Model & model,ConversionData & data,ResizeMethod resizeMethod)427*3e777be0SXin Li bool HalPolicy::ConvertResize(const Operation& operation,
428*3e777be0SXin Li                               const Model& model,
429*3e777be0SXin Li                               ConversionData& data,
430*3e777be0SXin Li                               ResizeMethod resizeMethod)
431*3e777be0SXin Li {
432*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertResize()");
433*3e777be0SXin Li     return ::ConvertResize<hal_1_2::HalPolicy>(operation, model, data, resizeMethod);
434*3e777be0SXin Li }
435*3e777be0SXin Li 
ConvertSpaceToBatchNd(const Operation & operation,const Model & model,ConversionData & data)436*3e777be0SXin Li bool HalPolicy::ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data)
437*3e777be0SXin Li {
438*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertSpaceToBatchNd()");
439*3e777be0SXin Li     return ::ConvertSpaceToBatchNd<hal_1_2::HalPolicy>(operation, model, data);
440*3e777be0SXin Li }
441*3e777be0SXin Li 
ConvertSpaceToDepth(const Operation & operation,const Model & model,ConversionData & data)442*3e777be0SXin Li bool HalPolicy::ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data)
443*3e777be0SXin Li {
444*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertSpaceToDepth()");
445*3e777be0SXin Li     return ::ConvertSpaceToDepth<hal_1_2::HalPolicy>(operation, model, data);
446*3e777be0SXin Li }
447*3e777be0SXin Li 
ConvertSoftmax(const Operation & operation,const Model & model,ConversionData & data)448*3e777be0SXin Li bool HalPolicy::ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data)
449*3e777be0SXin Li {
450*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertSoftmax()");
451*3e777be0SXin Li     return ::ConvertSoftmax<hal_1_2::HalPolicy>(operation, model, data);
452*3e777be0SXin Li }
453*3e777be0SXin Li 
ConvertTanH(const Operation & operation,const Model & model,ConversionData & data)454*3e777be0SXin Li bool HalPolicy::ConvertTanH(const Operation& operation, const Model& model, ConversionData& data)
455*3e777be0SXin Li {
456*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertTanH()");
457*3e777be0SXin Li     return ::ConvertTanH<hal_1_2::HalPolicy>(operation, model, data);
458*3e777be0SXin Li }
459*3e777be0SXin Li 
ConvertLstm(const Operation & operation,const Model & model,ConversionData & data)460*3e777be0SXin Li bool HalPolicy::ConvertLstm(const Operation& operation, const Model& model, ConversionData& data)
461*3e777be0SXin Li {
462*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertLstm()");
463*3e777be0SXin Li     return ::ConvertLstm<hal_1_2::HalPolicy>(operation, model, data);
464*3e777be0SXin Li }
465*3e777be0SXin Li 
ConvertSqrt(const Operation & operation,const Model & model,ConversionData & data)466*3e777be0SXin Li bool HalPolicy::ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data)
467*3e777be0SXin Li {
468*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertSqrt()");
469*3e777be0SXin Li     ActivationDescriptor desc;
470*3e777be0SXin Li     desc.m_Function = ActivationFunction::Sqrt;
471*3e777be0SXin Li 
472*3e777be0SXin Li     return ::ConvertToActivation<hal_1_2::HalPolicy>(operation, __func__, desc, model, data);
473*3e777be0SXin Li }
474*3e777be0SXin Li 
ConvertSqueeze(const Operation & operation,const Model & model,ConversionData & data)475*3e777be0SXin Li bool HalPolicy::ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data)
476*3e777be0SXin Li {
477*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertSqueeze()");
478*3e777be0SXin Li     return ::ConvertSqueeze<hal_1_2::HalPolicy>(operation, model, data);
479*3e777be0SXin Li }
480*3e777be0SXin Li 
ConvertStridedSlice(const Operation & operation,const Model & model,ConversionData & data)481*3e777be0SXin Li bool HalPolicy::ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data)
482*3e777be0SXin Li {
483*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertStridedSlice()");
484*3e777be0SXin Li     return ::ConvertStridedSlice<hal_1_2::HalPolicy>(operation, model, data);
485*3e777be0SXin Li }
486*3e777be0SXin Li 
ConvertTranspose(const Operation & operation,const Model & model,ConversionData & data)487*3e777be0SXin Li bool HalPolicy::ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data)
488*3e777be0SXin Li {
489*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertTranspose()");
490*3e777be0SXin Li     return ::ConvertTranspose<hal_1_2::HalPolicy>(operation, model, data);
491*3e777be0SXin Li }
492*3e777be0SXin Li 
ConvertTransposeConv2d(const Operation & operation,const Model & model,ConversionData & data)493*3e777be0SXin Li bool HalPolicy::ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data)
494*3e777be0SXin Li {
495*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertTransposeConv2d()");
496*3e777be0SXin Li     return ::ConvertTransposeConv2d<hal_1_2::HalPolicy>(operation, model, data);
497*3e777be0SXin Li }
498*3e777be0SXin Li 
ConvertUnidirectionalSequenceLstm(const Operation & operation,const Model & model,ConversionData & data)499*3e777be0SXin Li bool HalPolicy::ConvertUnidirectionalSequenceLstm(const Operation& operation, const Model& model, ConversionData& data)
500*3e777be0SXin Li {
501*3e777be0SXin Li     ALOGV("hal_1_2::HalPolicy::ConvertUnidirectionalSequenceLstm()");
502*3e777be0SXin Li     return ::ConvertUnidirectionalSequenceLstm<hal_1_2::HalPolicy>(operation, model, data);
503*3e777be0SXin Li }
504*3e777be0SXin Li 
505*3e777be0SXin Li } // namespace hal_1_2
506*3e777be0SXin Li } // namespace armnn_driver
507