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