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