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