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 #pragma once 7*3e777be0SXin Li 8*3e777be0SXin Li #include "../ConversionUtils.hpp" 9*3e777be0SXin Li #include "../ConversionUtils_1_2.hpp" 10*3e777be0SXin Li #include "../ConversionUtils_1_3.hpp" 11*3e777be0SXin Li 12*3e777be0SXin Li #include <HalInterfaces.h> 13*3e777be0SXin Li 14*3e777be0SXin Li #include <armnn/Types.hpp> 15*3e777be0SXin Li 16*3e777be0SXin Li namespace V1_3 = ::android::hardware::neuralnetworks::V1_3; 17*3e777be0SXin Li 18*3e777be0SXin Li namespace armnn_driver 19*3e777be0SXin Li { 20*3e777be0SXin Li namespace hal_1_3 21*3e777be0SXin Li { 22*3e777be0SXin Li 23*3e777be0SXin Li class HalPolicy 24*3e777be0SXin Li { 25*3e777be0SXin Li public: 26*3e777be0SXin Li using Model = V1_3::Model; 27*3e777be0SXin Li using Operand = V1_3::Operand; 28*3e777be0SXin Li using OperandLifeTime = V1_3::OperandLifeTime; 29*3e777be0SXin Li using OperandType = V1_3::OperandType; 30*3e777be0SXin Li using Operation = V1_3::Operation; 31*3e777be0SXin Li using OperationType = V1_3::OperationType; 32*3e777be0SXin Li using ExecutionCallback = V1_3::IExecutionCallback; 33*3e777be0SXin Li using getSupportedOperations_cb = V1_3::IDevice::getSupportedOperations_1_3_cb; 34*3e777be0SXin Li using ErrorStatus = V1_3::ErrorStatus; 35*3e777be0SXin Li 36*3e777be0SXin Li static bool ConvertOperation(const Operation& operation, const Model& model, ConversionData& data); 37*3e777be0SXin Li 38*3e777be0SXin Li private: 39*3e777be0SXin Li static bool ConvertArgMinMax(const Operation& operation, 40*3e777be0SXin Li const Model& model, 41*3e777be0SXin Li ConversionData& data, 42*3e777be0SXin Li armnn::ArgMinMaxFunction argMinMaxFunction); 43*3e777be0SXin Li 44*3e777be0SXin Li static bool ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data); 45*3e777be0SXin Li 46*3e777be0SXin Li static bool ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data); 47*3e777be0SXin Li 48*3e777be0SXin Li static bool ConvertCast(const Operation& operation, const Model& model, ConversionData& data); 49*3e777be0SXin Li 50*3e777be0SXin Li static bool ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data); 51*3e777be0SXin Li 52*3e777be0SXin Li static bool ConvertComparison(const Operation& operation, 53*3e777be0SXin Li const Model& model, 54*3e777be0SXin Li ConversionData& data, 55*3e777be0SXin Li armnn::ComparisonOperation comparisonOperation); 56*3e777be0SXin Li 57*3e777be0SXin Li static bool ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data); 58*3e777be0SXin Li 59*3e777be0SXin Li static bool ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data); 60*3e777be0SXin Li 61*3e777be0SXin Li static bool ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data); 62*3e777be0SXin Li 63*3e777be0SXin Li static bool ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data); 64*3e777be0SXin Li 65*3e777be0SXin Li static bool ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data); 66*3e777be0SXin Li 67*3e777be0SXin Li static bool ConvertElementwiseBinary(const Operation& operation, 68*3e777be0SXin Li const Model& model, 69*3e777be0SXin Li ConversionData& data, 70*3e777be0SXin Li armnn::BinaryOperation binaryOperation); 71*3e777be0SXin Li 72*3e777be0SXin Li static bool ConvertElementwiseUnary(const Operation& operation, 73*3e777be0SXin Li const Model& model, 74*3e777be0SXin Li ConversionData& data, 75*3e777be0SXin Li armnn::UnaryOperation unaryOperation); 76*3e777be0SXin Li 77*3e777be0SXin Li static bool ConvertElu(const Operation& operation, const Model& model, ConversionData& data); 78*3e777be0SXin Li 79*3e777be0SXin Li static bool ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data); 80*3e777be0SXin Li 81*3e777be0SXin Li static bool ConvertFill(const Operation& operation, const Model& model, ConversionData& data); 82*3e777be0SXin Li 83*3e777be0SXin Li static bool ConvertFloor(const Operation& operation, const Model& model, ConversionData& data); 84*3e777be0SXin Li 85*3e777be0SXin Li static bool ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data); 86*3e777be0SXin Li 87*3e777be0SXin Li static bool ConvertGather(const Operation& operation, const Model& model, ConversionData& data); 88*3e777be0SXin Li 89*3e777be0SXin Li static bool ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data); 90*3e777be0SXin Li 91*3e777be0SXin Li static bool ConvertHardSwish(const Operation& operation, const Model& model, ConversionData& data); 92*3e777be0SXin Li 93*3e777be0SXin Li static bool ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data); 94*3e777be0SXin Li 95*3e777be0SXin Li static bool ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data); 96*3e777be0SXin Li 97*3e777be0SXin Li static bool ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data); 98*3e777be0SXin Li 99*3e777be0SXin Li static bool ConvertLocalResponseNormalization(const Operation& operation, 100*3e777be0SXin Li const Model& model, 101*3e777be0SXin Li ConversionData& data); 102*3e777be0SXin Li 103*3e777be0SXin Li static bool ConvertLogicalBinary(const Operation& operation, 104*3e777be0SXin Li const Model& model, 105*3e777be0SXin Li ConversionData& data, 106*3e777be0SXin Li armnn::LogicalBinaryOperation logicalOperation); 107*3e777be0SXin Li 108*3e777be0SXin Li static bool ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data); 109*3e777be0SXin Li 110*3e777be0SXin Li static bool ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data); 111*3e777be0SXin Li 112*3e777be0SXin Li static bool ConvertLstm(const Operation& operation, const Model& model, ConversionData& data); 113*3e777be0SXin Li 114*3e777be0SXin Li static bool ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data); 115*3e777be0SXin Li 116*3e777be0SXin Li static bool ConvertMean(const Operation& operation, const Model& model, ConversionData& data); 117*3e777be0SXin Li 118*3e777be0SXin Li static bool ConvertPad(const Operation& operation, const Model& model, ConversionData& data); 119*3e777be0SXin Li 120*3e777be0SXin Li static bool ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data); 121*3e777be0SXin Li 122*3e777be0SXin Li static bool ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data); 123*3e777be0SXin Li 124*3e777be0SXin Li static bool ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data); 125*3e777be0SXin Li 126*3e777be0SXin Li static bool ConvertQuantizedLstm(const Operation& operation, const Model& model, ConversionData& data); 127*3e777be0SXin Li 128*3e777be0SXin Li static bool ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data); 129*3e777be0SXin Li 130*3e777be0SXin Li static bool ConvertRank(const Operation& operation, const Model& model, ConversionData& data); 131*3e777be0SXin Li 132*3e777be0SXin Li static bool ConvertReduce(const Operation& operation, 133*3e777be0SXin Li const Model& model, 134*3e777be0SXin Li ConversionData& data, 135*3e777be0SXin Li ReduceOperation reduceOperation); 136*3e777be0SXin Li 137*3e777be0SXin Li static bool ConvertReLu(const Operation& operation, const Model& model, ConversionData& data); 138*3e777be0SXin Li 139*3e777be0SXin Li static bool ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data); 140*3e777be0SXin Li 141*3e777be0SXin Li static bool ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data); 142*3e777be0SXin Li 143*3e777be0SXin Li static bool ConvertReshape(const Operation& operation, const Model& model, ConversionData& data); 144*3e777be0SXin Li 145*3e777be0SXin Li static bool ConvertResize(const Operation& operation, 146*3e777be0SXin Li const Model& model, 147*3e777be0SXin Li ConversionData& data, 148*3e777be0SXin Li armnn::ResizeMethod resizeMethod); 149*3e777be0SXin Li 150*3e777be0SXin Li static bool ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data); 151*3e777be0SXin Li 152*3e777be0SXin Li static bool ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data); 153*3e777be0SXin Li 154*3e777be0SXin Li static bool ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data); 155*3e777be0SXin Li 156*3e777be0SXin Li static bool ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data); 157*3e777be0SXin Li 158*3e777be0SXin Li static bool ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data); 159*3e777be0SXin Li 160*3e777be0SXin Li static bool ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data); 161*3e777be0SXin Li 162*3e777be0SXin Li static bool ConvertTanH(const Operation& operation, const Model& model, ConversionData& data); 163*3e777be0SXin Li 164*3e777be0SXin Li static bool ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data); 165*3e777be0SXin Li 166*3e777be0SXin Li static bool ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data); 167*3e777be0SXin Li 168*3e777be0SXin Li static bool ConvertUnidirectionalSequenceLstm(const Operation& operation, 169*3e777be0SXin Li const Model& model, 170*3e777be0SXin Li ConversionData& data); 171*3e777be0SXin Li }; 172*3e777be0SXin Li 173*3e777be0SXin Li } // namespace hal_1_3 174*3e777be0SXin Li } // namespace armnn_driver 175