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