1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017 Arm Ltd and Contributors. All rights reserved. 3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT 4*89c4ff92SAndroid Build Coastguard Worker // 5*89c4ff92SAndroid Build Coastguard Worker #pragma once 6*89c4ff92SAndroid Build Coastguard Worker 7*89c4ff92SAndroid Build Coastguard Worker #include <armnn/backends/IBackendInternal.hpp> 8*89c4ff92SAndroid Build Coastguard Worker 9*89c4ff92SAndroid Build Coastguard Worker #include <backendsCommon/LayerSupportBase.hpp> 10*89c4ff92SAndroid Build Coastguard Worker 11*89c4ff92SAndroid Build Coastguard Worker namespace armnn 12*89c4ff92SAndroid Build Coastguard Worker { 13*89c4ff92SAndroid Build Coastguard Worker 14*89c4ff92SAndroid Build Coastguard Worker class NeonLayerSupport : public LayerSupportBase 15*89c4ff92SAndroid Build Coastguard Worker { 16*89c4ff92SAndroid Build Coastguard Worker public: 17*89c4ff92SAndroid Build Coastguard Worker explicit NeonLayerSupport(const IBackendInternal::IBackendSpecificModelContextPtr& modelContextPtr); 18*89c4ff92SAndroid Build Coastguard Worker NeonLayerSupport(); 19*89c4ff92SAndroid Build Coastguard Worker ~NeonLayerSupport()20*89c4ff92SAndroid Build Coastguard Worker ~NeonLayerSupport() {} 21*89c4ff92SAndroid Build Coastguard Worker 22*89c4ff92SAndroid Build Coastguard Worker bool IsLayerSupported(const LayerType& type, 23*89c4ff92SAndroid Build Coastguard Worker const std::vector<TensorInfo>& infos, 24*89c4ff92SAndroid Build Coastguard Worker const BaseDescriptor& descriptor, 25*89c4ff92SAndroid Build Coastguard Worker const Optional<LstmInputParamsInfo>& lstmParamsInfo, 26*89c4ff92SAndroid Build Coastguard Worker const Optional<QuantizedLstmInputParamsInfo>& quantizedLstmParamsInfo, 27*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const override; 28*89c4ff92SAndroid Build Coastguard Worker 29*89c4ff92SAndroid Build Coastguard Worker bool IsActivationSupported(const TensorInfo& input, 30*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 31*89c4ff92SAndroid Build Coastguard Worker const ActivationDescriptor& descriptor, 32*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 33*89c4ff92SAndroid Build Coastguard Worker 34*89c4ff92SAndroid Build Coastguard Worker bool IsAdditionSupported(const TensorInfo& input0, 35*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 36*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 37*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 38*89c4ff92SAndroid Build Coastguard Worker 39*89c4ff92SAndroid Build Coastguard Worker bool IsArgMinMaxSupported(const TensorInfo& input, 40*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 41*89c4ff92SAndroid Build Coastguard Worker const ArgMinMaxDescriptor& descriptor, 42*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 43*89c4ff92SAndroid Build Coastguard Worker 44*89c4ff92SAndroid Build Coastguard Worker bool IsBatchMatMulSupported(const TensorInfo& inputX, 45*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& inputY, 46*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 47*89c4ff92SAndroid Build Coastguard Worker const BatchMatMulDescriptor& descriptor, 48*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const; 49*89c4ff92SAndroid Build Coastguard Worker 50*89c4ff92SAndroid Build Coastguard Worker bool IsBatchNormalizationSupported(const TensorInfo& input, 51*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 52*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& mean, 53*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& var, 54*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& beta, 55*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& gamma, 56*89c4ff92SAndroid Build Coastguard Worker const BatchNormalizationDescriptor& descriptor, 57*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 58*89c4ff92SAndroid Build Coastguard Worker 59*89c4ff92SAndroid Build Coastguard Worker bool IsBatchToSpaceNdSupported(const TensorInfo& input, 60*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 61*89c4ff92SAndroid Build Coastguard Worker const BatchToSpaceNdDescriptor& descriptor, 62*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 63*89c4ff92SAndroid Build Coastguard Worker 64*89c4ff92SAndroid Build Coastguard Worker bool IsCastSupported(const TensorInfo& input, 65*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 66*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 67*89c4ff92SAndroid Build Coastguard Worker 68*89c4ff92SAndroid Build Coastguard Worker bool IsChannelShuffleSupported(const TensorInfo& input, 69*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 70*89c4ff92SAndroid Build Coastguard Worker const ChannelShuffleDescriptor& descriptor, 71*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 72*89c4ff92SAndroid Build Coastguard Worker 73*89c4ff92SAndroid Build Coastguard Worker bool IsComparisonSupported(const TensorInfo& input0, 74*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 75*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 76*89c4ff92SAndroid Build Coastguard Worker const ComparisonDescriptor& descriptor, 77*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 78*89c4ff92SAndroid Build Coastguard Worker 79*89c4ff92SAndroid Build Coastguard Worker bool IsConcatSupported(const std::vector<const TensorInfo*> inputs, 80*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 81*89c4ff92SAndroid Build Coastguard Worker const OriginsDescriptor& descriptor, 82*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 83*89c4ff92SAndroid Build Coastguard Worker 84*89c4ff92SAndroid Build Coastguard Worker bool IsConstantSupported(const TensorInfo& output, 85*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 86*89c4ff92SAndroid Build Coastguard Worker 87*89c4ff92SAndroid Build Coastguard Worker bool IsConvertFp16ToFp32Supported(const TensorInfo& input, 88*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 89*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 90*89c4ff92SAndroid Build Coastguard Worker 91*89c4ff92SAndroid Build Coastguard Worker bool IsConvertFp32ToFp16Supported(const TensorInfo& input, 92*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 93*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 94*89c4ff92SAndroid Build Coastguard Worker 95*89c4ff92SAndroid Build Coastguard Worker bool IsConvolution2dSupported(const TensorInfo& input, 96*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 97*89c4ff92SAndroid Build Coastguard Worker const Convolution2dDescriptor& descriptor, 98*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 99*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 100*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 101*89c4ff92SAndroid Build Coastguard Worker 102*89c4ff92SAndroid Build Coastguard Worker bool IsConvolution3dSupported(const TensorInfo& input, 103*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 104*89c4ff92SAndroid Build Coastguard Worker const Convolution3dDescriptor& descriptor, 105*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 106*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 107*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 108*89c4ff92SAndroid Build Coastguard Worker 109*89c4ff92SAndroid Build Coastguard Worker bool IsDepthToSpaceSupported(const TensorInfo& input, 110*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 111*89c4ff92SAndroid Build Coastguard Worker const DepthToSpaceDescriptor& descriptor, 112*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 113*89c4ff92SAndroid Build Coastguard Worker 114*89c4ff92SAndroid Build Coastguard Worker 115*89c4ff92SAndroid Build Coastguard Worker bool IsDepthwiseConvolutionSupported(const TensorInfo& input, 116*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 117*89c4ff92SAndroid Build Coastguard Worker const DepthwiseConvolution2dDescriptor& descriptor, 118*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 119*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 120*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 121*89c4ff92SAndroid Build Coastguard Worker 122*89c4ff92SAndroid Build Coastguard Worker bool IsDequantizeSupported(const TensorInfo& input, 123*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 124*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 125*89c4ff92SAndroid Build Coastguard Worker 126*89c4ff92SAndroid Build Coastguard Worker bool IsDilatedDepthwiseConvolutionSupported(const TensorInfo& input, 127*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 128*89c4ff92SAndroid Build Coastguard Worker const DepthwiseConvolution2dDescriptor& descriptor, 129*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 130*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 131*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reason = EmptyOptional()) const override; 132*89c4ff92SAndroid Build Coastguard Worker 133*89c4ff92SAndroid Build Coastguard Worker bool IsElementwiseUnarySupported(const TensorInfo& input, 134*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 135*89c4ff92SAndroid Build Coastguard Worker const ElementwiseUnaryDescriptor& descriptor, 136*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 137*89c4ff92SAndroid Build Coastguard Worker 138*89c4ff92SAndroid Build Coastguard Worker bool IsFillSupported(const TensorInfo& input, 139*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 140*89c4ff92SAndroid Build Coastguard Worker const FillDescriptor& descriptor, 141*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 142*89c4ff92SAndroid Build Coastguard Worker 143*89c4ff92SAndroid Build Coastguard Worker bool IsFloorSupported(const TensorInfo& input, 144*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 145*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 146*89c4ff92SAndroid Build Coastguard Worker 147*89c4ff92SAndroid Build Coastguard Worker bool IsFullyConnectedSupported(const TensorInfo& input, 148*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 149*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 150*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& biases, 151*89c4ff92SAndroid Build Coastguard Worker const FullyConnectedDescriptor& descriptor, 152*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 153*89c4ff92SAndroid Build Coastguard Worker 154*89c4ff92SAndroid Build Coastguard Worker bool IsGatherNdSupported(const TensorInfo& input0, 155*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 156*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 157*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const; 158*89c4ff92SAndroid Build Coastguard Worker 159*89c4ff92SAndroid Build Coastguard Worker bool IsGatherSupported(const TensorInfo& input0, 160*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 161*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 162*89c4ff92SAndroid Build Coastguard Worker const GatherDescriptor& descriptor, 163*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const override; 164*89c4ff92SAndroid Build Coastguard Worker 165*89c4ff92SAndroid Build Coastguard Worker bool IsInputSupported(const TensorInfo& input, 166*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 167*89c4ff92SAndroid Build Coastguard Worker 168*89c4ff92SAndroid Build Coastguard Worker bool IsInstanceNormalizationSupported(const TensorInfo& input, 169*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 170*89c4ff92SAndroid Build Coastguard Worker const InstanceNormalizationDescriptor& descriptor, 171*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 172*89c4ff92SAndroid Build Coastguard Worker 173*89c4ff92SAndroid Build Coastguard Worker bool IsL2NormalizationSupported(const TensorInfo& input, 174*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 175*89c4ff92SAndroid Build Coastguard Worker const L2NormalizationDescriptor& descriptor, 176*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 177*89c4ff92SAndroid Build Coastguard Worker 178*89c4ff92SAndroid Build Coastguard Worker bool IsLogicalBinarySupported(const TensorInfo& input0, 179*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 180*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 181*89c4ff92SAndroid Build Coastguard Worker const LogicalBinaryDescriptor& descriptor, 182*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const override; 183*89c4ff92SAndroid Build Coastguard Worker 184*89c4ff92SAndroid Build Coastguard Worker bool IsLogSoftmaxSupported(const TensorInfo& input, 185*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 186*89c4ff92SAndroid Build Coastguard Worker const LogSoftmaxDescriptor& descriptor, 187*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 188*89c4ff92SAndroid Build Coastguard Worker 189*89c4ff92SAndroid Build Coastguard Worker bool IsLstmSupported(const TensorInfo& input, 190*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateIn, 191*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateIn, 192*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& scratchBuffer, 193*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateOut, 194*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateOut, 195*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 196*89c4ff92SAndroid Build Coastguard Worker const LstmDescriptor& descriptor, 197*89c4ff92SAndroid Build Coastguard Worker const LstmInputParamsInfo& paramsInfo, 198*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 199*89c4ff92SAndroid Build Coastguard Worker 200*89c4ff92SAndroid Build Coastguard Worker bool IsMaximumSupported(const TensorInfo& input0, 201*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 202*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 203*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 204*89c4ff92SAndroid Build Coastguard Worker 205*89c4ff92SAndroid Build Coastguard Worker bool IsMeanSupported(const TensorInfo& input, 206*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 207*89c4ff92SAndroid Build Coastguard Worker const MeanDescriptor& descriptor, 208*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 209*89c4ff92SAndroid Build Coastguard Worker 210*89c4ff92SAndroid Build Coastguard Worker bool IsMinimumSupported(const TensorInfo& input0, 211*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 212*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 213*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 214*89c4ff92SAndroid Build Coastguard Worker 215*89c4ff92SAndroid Build Coastguard Worker bool IsMultiplicationSupported(const TensorInfo& input0, 216*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 217*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 218*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 219*89c4ff92SAndroid Build Coastguard Worker 220*89c4ff92SAndroid Build Coastguard Worker bool IsDivisionSupported(const TensorInfo& input0, 221*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 222*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 223*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 224*89c4ff92SAndroid Build Coastguard Worker 225*89c4ff92SAndroid Build Coastguard Worker bool IsNormalizationSupported(const TensorInfo& input, 226*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 227*89c4ff92SAndroid Build Coastguard Worker const NormalizationDescriptor& descriptor, 228*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 229*89c4ff92SAndroid Build Coastguard Worker 230*89c4ff92SAndroid Build Coastguard Worker bool IsOutputSupported(const TensorInfo& output, 231*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 232*89c4ff92SAndroid Build Coastguard Worker 233*89c4ff92SAndroid Build Coastguard Worker bool IsPadSupported(const TensorInfo& input, 234*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 235*89c4ff92SAndroid Build Coastguard Worker const PadDescriptor& descriptor, 236*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 237*89c4ff92SAndroid Build Coastguard Worker 238*89c4ff92SAndroid Build Coastguard Worker bool IsPermuteSupported(const TensorInfo& input, 239*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 240*89c4ff92SAndroid Build Coastguard Worker const PermuteDescriptor& descriptor, 241*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 242*89c4ff92SAndroid Build Coastguard Worker 243*89c4ff92SAndroid Build Coastguard Worker bool IsPooling2dSupported(const TensorInfo& input, 244*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 245*89c4ff92SAndroid Build Coastguard Worker const Pooling2dDescriptor& descriptor, 246*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 247*89c4ff92SAndroid Build Coastguard Worker bool IsPooling3dSupported(const TensorInfo& input, 248*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 249*89c4ff92SAndroid Build Coastguard Worker const Pooling3dDescriptor& descriptor, 250*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 251*89c4ff92SAndroid Build Coastguard Worker bool IsPreluSupported(const TensorInfo& input, 252*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& alpha, 253*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 254*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 255*89c4ff92SAndroid Build Coastguard Worker 256*89c4ff92SAndroid Build Coastguard Worker bool IsQLstmSupported(const TensorInfo& input, 257*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& previousOutputIn, 258*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& previousCellStateIn, 259*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateOut, 260*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateOut, 261*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 262*89c4ff92SAndroid Build Coastguard Worker const QLstmDescriptor& descriptor, 263*89c4ff92SAndroid Build Coastguard Worker const LstmInputParamsInfo& paramsInfo, 264*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 265*89c4ff92SAndroid Build Coastguard Worker 266*89c4ff92SAndroid Build Coastguard Worker bool IsQuantizeSupported(const TensorInfo& input, 267*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 268*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 269*89c4ff92SAndroid Build Coastguard Worker 270*89c4ff92SAndroid Build Coastguard Worker bool IsQuantizedLstmSupported(const TensorInfo& input, 271*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateIn, 272*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateIn, 273*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateOut, 274*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateOut, 275*89c4ff92SAndroid Build Coastguard Worker const QuantizedLstmInputParamsInfo& paramsInfo, 276*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 277*89c4ff92SAndroid Build Coastguard Worker 278*89c4ff92SAndroid Build Coastguard Worker bool IsReduceSupported(const TensorInfo& input, 279*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 280*89c4ff92SAndroid Build Coastguard Worker const ReduceDescriptor& descriptor, 281*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 282*89c4ff92SAndroid Build Coastguard Worker 283*89c4ff92SAndroid Build Coastguard Worker bool IsReshapeSupported(const TensorInfo& input, 284*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 285*89c4ff92SAndroid Build Coastguard Worker const ReshapeDescriptor& descriptor, 286*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 287*89c4ff92SAndroid Build Coastguard Worker 288*89c4ff92SAndroid Build Coastguard Worker bool IsResizeSupported(const TensorInfo& input, 289*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 290*89c4ff92SAndroid Build Coastguard Worker const ResizeDescriptor& descriptor, 291*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 292*89c4ff92SAndroid Build Coastguard Worker 293*89c4ff92SAndroid Build Coastguard Worker bool IsSliceSupported(const TensorInfo& input, 294*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 295*89c4ff92SAndroid Build Coastguard Worker const SliceDescriptor& descriptor, 296*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 297*89c4ff92SAndroid Build Coastguard Worker 298*89c4ff92SAndroid Build Coastguard Worker bool IsSoftmaxSupported(const TensorInfo& input, 299*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 300*89c4ff92SAndroid Build Coastguard Worker const SoftmaxDescriptor& descriptor, 301*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 302*89c4ff92SAndroid Build Coastguard Worker 303*89c4ff92SAndroid Build Coastguard Worker bool IsSpaceToBatchNdSupported(const TensorInfo& input, 304*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 305*89c4ff92SAndroid Build Coastguard Worker const SpaceToBatchNdDescriptor& descriptor, 306*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 307*89c4ff92SAndroid Build Coastguard Worker 308*89c4ff92SAndroid Build Coastguard Worker bool IsSpaceToDepthSupported(const TensorInfo& input, 309*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 310*89c4ff92SAndroid Build Coastguard Worker const SpaceToDepthDescriptor& descriptor, 311*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 312*89c4ff92SAndroid Build Coastguard Worker 313*89c4ff92SAndroid Build Coastguard Worker bool IsSplitterSupported(const TensorInfo& input, 314*89c4ff92SAndroid Build Coastguard Worker const std::vector<std::reference_wrapper<TensorInfo>>& outputs, 315*89c4ff92SAndroid Build Coastguard Worker const ViewsDescriptor& descriptor, 316*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 317*89c4ff92SAndroid Build Coastguard Worker 318*89c4ff92SAndroid Build Coastguard Worker bool IsStackSupported(const std::vector<const TensorInfo*>& inputs, 319*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 320*89c4ff92SAndroid Build Coastguard Worker const StackDescriptor& descriptor, 321*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 322*89c4ff92SAndroid Build Coastguard Worker 323*89c4ff92SAndroid Build Coastguard Worker bool IsStridedSliceSupported(const TensorInfo& input, 324*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 325*89c4ff92SAndroid Build Coastguard Worker const StridedSliceDescriptor& descriptor, 326*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 327*89c4ff92SAndroid Build Coastguard Worker 328*89c4ff92SAndroid Build Coastguard Worker bool IsSubtractionSupported(const TensorInfo& input0, 329*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& input1, 330*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 331*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 332*89c4ff92SAndroid Build Coastguard Worker 333*89c4ff92SAndroid Build Coastguard Worker bool IsTransposeConvolution2dSupported(const TensorInfo& input, 334*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 335*89c4ff92SAndroid Build Coastguard Worker const TransposeConvolution2dDescriptor& descriptor, 336*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& weights, 337*89c4ff92SAndroid Build Coastguard Worker const Optional<TensorInfo>& biases, 338*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 339*89c4ff92SAndroid Build Coastguard Worker 340*89c4ff92SAndroid Build Coastguard Worker bool IsTransposeSupported(const TensorInfo& input, 341*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 342*89c4ff92SAndroid Build Coastguard Worker const TransposeDescriptor& descriptor, 343*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override; 344*89c4ff92SAndroid Build Coastguard Worker 345*89c4ff92SAndroid Build Coastguard Worker bool IsUnidirectionalSequenceLstmSupported(const TensorInfo& input, 346*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateIn, 347*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateIn, 348*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& outputStateOut, 349*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& cellStateOut, 350*89c4ff92SAndroid Build Coastguard Worker const TensorInfo& output, 351*89c4ff92SAndroid Build Coastguard Worker const UnidirectionalSequenceLstmDescriptor& descriptor, 352*89c4ff92SAndroid Build Coastguard Worker const LstmInputParamsInfo& paramsInfo, 353*89c4ff92SAndroid Build Coastguard Worker Optional<std::string&> reasonIfUnsupported) const override; 354*89c4ff92SAndroid Build Coastguard Worker 355*89c4ff92SAndroid Build Coastguard Worker private: 356*89c4ff92SAndroid Build Coastguard Worker const IBackendInternal::IBackendSpecificModelContextPtr m_ModelContextPtr; 357*89c4ff92SAndroid Build Coastguard Worker 358*89c4ff92SAndroid Build Coastguard Worker }; // class NeonLayerSupport 359*89c4ff92SAndroid Build Coastguard Worker 360*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn 361