blob: ca1acc376b322c98001e95dffa9b044eb1c2f580 [file] [log] [blame]
Matteo Martincigh992d6dc2019-01-10 17:34:20 +00001//
Teresa Charlin52664732020-06-29 16:27:03 +01002// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
Matteo Martincigh992d6dc2019-01-10 17:34:20 +00003// SPDX-License-Identifier: MIT
4//
5
josh minor4a3c6102020-01-06 16:40:46 -06006#include <armnn/Deprecated.hpp>
7#include <armnn/Descriptors.hpp>
Matteo Martincigh992d6dc2019-01-10 17:34:20 +00008#include <armnn/Exceptions.hpp>
josh minor4a3c6102020-01-06 16:40:46 -06009#include <armnn/Types.hpp>
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000010
Matteo Martincighe5b8eb92019-11-28 15:45:42 +000011#include <backendsCommon/LayerSupportBase.hpp>
12
Jan Eilers8eb25602020-03-09 12:13:48 +000013#include <armnn/utility/IgnoreUnused.hpp>
Derek Lambertif674aa02019-08-01 15:56:25 +010014
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000015namespace
16{
17
18bool DefaultLayerSupport(const char* func,
19 const char* file,
20 unsigned int line,
21 armnn::Optional<std::string&> reasonIfUnsupported)
22{
23 // NOTE: We only need to return the reason if the optional parameter is not empty
24 if (reasonIfUnsupported)
25 {
26 std::stringstream message;
27 message << func << " is not implemented [" << file << ":" << line << "]";
28
29 reasonIfUnsupported.value() = message.str();
30 }
31
32 return false;
33}
34
35} // anonymous namespace
36
37namespace armnn
38{
39
Teresa Charlin52664732020-06-29 16:27:03 +010040bool LayerSupportBase::IsActivationSupported(const TensorInfo&, // input
41 const TensorInfo&, //output
42 const ActivationDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000043 Optional<std::string&> reasonIfUnsupported) const
44{
45 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
46}
47
Teresa Charlin52664732020-06-29 16:27:03 +010048bool LayerSupportBase::IsAdditionSupported(const TensorInfo&, // input0
49 const TensorInfo&, // input1
50 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000051 Optional<std::string&> reasonIfUnsupported) const
52{
53 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
54}
55
Teresa Charlin52664732020-06-29 16:27:03 +010056bool LayerSupportBase::IsArgMinMaxSupported(const armnn::TensorInfo&, // input
57 const armnn::TensorInfo&, // output
58 const armnn::ArgMinMaxDescriptor&, // descriptor
Nikhil Rajee391d52019-09-05 17:50:44 +010059 armnn::Optional<std::string &> reasonIfUnsupported) const
60{
61 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
62}
63
Teresa Charlin52664732020-06-29 16:27:03 +010064bool LayerSupportBase::IsBatchNormalizationSupported(const TensorInfo&, //input
65 const TensorInfo&, // output
66 const TensorInfo&, //mean
67 const TensorInfo&, //var
68 const TensorInfo&, //beta
69 const TensorInfo&, //gamma
70 const BatchNormalizationDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000071 Optional<std::string&> reasonIfUnsupported) const
72{
73 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
74}
75
Teresa Charlin52664732020-06-29 16:27:03 +010076bool LayerSupportBase::IsBatchToSpaceNdSupported(const TensorInfo&, // input
77 const TensorInfo&, // output
78 const BatchToSpaceNdDescriptor&, //descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +000079 Optional<std::string&> reasonIfUnsupported) const
80{
81 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
82}
83
mathad01b392e982021-04-07 12:07:30 +010084bool LayerSupportBase::IsCastSupported(const TensorInfo&, //input
85 const TensorInfo&, //output
86 Optional<std::string &> reasonIfUnsupported) const
87{
88 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
89}
90
Simon Obute51f67772021-09-03 15:50:13 +010091bool LayerSupportBase::IsChannelShuffleSupported(const TensorInfo&, //input
92 const TensorInfo&, //output
93 const ChannelShuffleDescriptor&, //descriptor
94 Optional<std::string &> reasonIfUnsupported) const
95{
96 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
97}
98
Teresa Charlin52664732020-06-29 16:27:03 +010099bool LayerSupportBase::IsComparisonSupported(const TensorInfo&, // input0
100 const TensorInfo&, // input1
101 const TensorInfo&, // output
102 const ComparisonDescriptor&, // descriptor
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100103 Optional<std::string&> reasonIfUnsupported) const
104{
105 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
106}
107
Teresa Charlin52664732020-06-29 16:27:03 +0100108bool LayerSupportBase::IsConcatSupported(const std::vector<const TensorInfo*>, // inputs
109 const TensorInfo&, // output
110 const OriginsDescriptor&, // descriptor
Jim Flynn906f9462019-05-10 13:55:21 +0100111 Optional<std::string&> reasonIfUnsupported) const
112{
Jim Flynne242f2d2019-05-22 14:24:13 +0100113 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
Jim Flynn906f9462019-05-10 13:55:21 +0100114}
115
Teresa Charlin52664732020-06-29 16:27:03 +0100116bool LayerSupportBase::IsConstantSupported(const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000117 Optional<std::string&> reasonIfUnsupported) const
118{
119 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
120}
121
Teresa Charlin52664732020-06-29 16:27:03 +0100122bool LayerSupportBase::IsConvertBf16ToFp32Supported(const TensorInfo&, // input
123 const TensorInfo&, // output
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000124 Optional<std::string&> reasonIfUnsupported) const
125{
126 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
127}
128
Teresa Charlin52664732020-06-29 16:27:03 +0100129bool LayerSupportBase::IsConvertFp16ToFp32Supported(const TensorInfo&, // input
130 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000131 Optional<std::string&> reasonIfUnsupported) const
132{
133 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
134}
135
Teresa Charlin52664732020-06-29 16:27:03 +0100136bool LayerSupportBase::IsConvertFp32ToBf16Supported(const TensorInfo&, // input
137 const TensorInfo&, // output
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000138 Optional<std::string&> reasonIfUnsupported) const
139{
140 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
141}
142
143
Teresa Charlin52664732020-06-29 16:27:03 +0100144bool LayerSupportBase::IsConvertFp32ToFp16Supported(const TensorInfo&, // input
145 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000146 Optional<std::string&> reasonIfUnsupported) const
147{
148 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
149}
150
Teresa Charlin52664732020-06-29 16:27:03 +0100151bool LayerSupportBase::IsConvolution2dSupported(const TensorInfo&, // input
152 const TensorInfo&, // output
153 const Convolution2dDescriptor&, // descriptor
154 const TensorInfo&, // weights
155 const Optional<TensorInfo>&, // biases
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000156 Optional<std::string&> reasonIfUnsupported) const
157{
158 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
159}
160
Matthew Sloyanb63a3112021-09-08 13:05:51 +0100161bool LayerSupportBase::IsConvolution3dSupported(const TensorInfo&, // input
162 const TensorInfo&, // output
163 const Convolution3dDescriptor&, // descriptor
164 const TensorInfo&, // weights
165 const Optional<TensorInfo>&, // biases
166 Optional<std::string&> reasonIfUnsupported) const
167{
168 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
169}
170
Teresa Charlin52664732020-06-29 16:27:03 +0100171bool LayerSupportBase::IsDebugSupported(const TensorInfo&, // input
172 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000173 Optional<std::string&> reasonIfUnsupported) const
174{
175 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
176}
177
Teresa Charlin52664732020-06-29 16:27:03 +0100178bool LayerSupportBase::IsDepthToSpaceSupported(const TensorInfo&, // input
179 const TensorInfo&, // output
180 const DepthToSpaceDescriptor&, // descriptor
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +0100181 Optional<std::string&> reasonIfUnsupported) const
182{
183 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
184}
185
Teresa Charlin52664732020-06-29 16:27:03 +0100186bool LayerSupportBase::IsDepthwiseConvolutionSupported(const TensorInfo&, //input
187 const TensorInfo&, //output
188 const DepthwiseConvolution2dDescriptor&, // descriptor
189 const TensorInfo&, // weights
190 const Optional<TensorInfo>&, // biases
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000191 Optional<std::string&> reasonIfUnsupported) const
192{
193 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
194}
195
Teresa Charlin52664732020-06-29 16:27:03 +0100196bool LayerSupportBase::IsDequantizeSupported(const TensorInfo&, // input
197 const TensorInfo&, // output
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000198 Optional<std::string&> reasonIfUnsupported) const
199{
200 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
201}
202
Teresa Charlin52664732020-06-29 16:27:03 +0100203bool LayerSupportBase::IsDetectionPostProcessSupported(const TensorInfo&, // boxEncodings
204 const TensorInfo&, // scores
205 const TensorInfo&, // anchors
206 const TensorInfo&, // detectionBoxes
207 const TensorInfo&, // detectionClasses
208 const TensorInfo&, // detectionScores
209 const TensorInfo&, // numDetections
210 const DetectionPostProcessDescriptor&, //descriptor
Derek Lamberti6a5e5e82019-12-05 14:41:20 +0000211 Optional<std::string&> reasonIfUnsupported) const
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000212{
213 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
214}
215
Teresa Charlin52664732020-06-29 16:27:03 +0100216bool LayerSupportBase::IsDilatedDepthwiseConvolutionSupported(const TensorInfo&, // input
217 const TensorInfo&, // output
218 const DepthwiseConvolution2dDescriptor&, // descriptor
219 const TensorInfo&,// weights
220 const Optional<TensorInfo>&, // biases
Matteo Martincigheac246d2019-05-14 09:11:03 +0100221 Optional<std::string&> reasonIfUnsupported) const
222{
223 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
224}
225
Teresa Charlin52664732020-06-29 16:27:03 +0100226bool LayerSupportBase::IsDivisionSupported(const TensorInfo&, // input0
227 const TensorInfo&, // input1
228 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000229 Optional<std::string&> reasonIfUnsupported) const
230{
231 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
232}
233
Jan Eilers1b2654f2021-09-24 15:45:46 +0100234bool LayerSupportBase::IsElementwiseUnarySupported(const TensorInfo&, // input
235 const TensorInfo&, // output
236 const ElementwiseUnaryDescriptor&, // descriptor
josh minor4a3c6102020-01-06 16:40:46 -0600237 Optional<std::string&> reasonIfUnsupported) const
238{
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000239 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
240}
241
Teresa Charlin52664732020-06-29 16:27:03 +0100242bool LayerSupportBase::IsFakeQuantizationSupported(const TensorInfo&, // input
243 const FakeQuantizationDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000244 Optional<std::string&> reasonIfUnsupported) const
245{
246 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
247}
248
Teresa Charlin52664732020-06-29 16:27:03 +0100249bool LayerSupportBase::IsFillSupported(const TensorInfo&, // input
250 const TensorInfo&, // output
251 const FillDescriptor&, // descriptor
Ryan OSheaec6c6802020-06-05 17:17:06 +0100252 Optional<std::string&> reasonIfUnsupported) const
253{
254 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
255}
256
Teresa Charlin52664732020-06-29 16:27:03 +0100257bool LayerSupportBase::IsFloorSupported(const TensorInfo&, // input
258 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000259 Optional<std::string&> reasonIfUnsupported) const
260{
261 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
262}
263
Teresa Charlin52664732020-06-29 16:27:03 +0100264bool LayerSupportBase::IsFullyConnectedSupported(const TensorInfo&, // input
265 const TensorInfo&, // output
266 const TensorInfo&, // weights
267 const TensorInfo&, // biases
268 const FullyConnectedDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000269 Optional<std::string&> reasonIfUnsupported) const
270{
271 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
272}
273
Teresa Charlin52664732020-06-29 16:27:03 +0100274bool LayerSupportBase::IsGatherSupported(const armnn::TensorInfo&, // input0
275 const armnn::TensorInfo&, // input1
276 const armnn::TensorInfo&, // output
Teresa Charlin52664732020-06-29 16:27:03 +0100277 const GatherDescriptor&, // descriptor
278 armnn::Optional<std::string&> reasonIfUnsupported) const
279{
280 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
281}
282
Teresa Charlin52664732020-06-29 16:27:03 +0100283bool LayerSupportBase::IsInputSupported(const TensorInfo&, // input
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000284 Optional<std::string&> reasonIfUnsupported) const
285{
286 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
287}
288
Teresa Charlin52664732020-06-29 16:27:03 +0100289bool LayerSupportBase::IsInstanceNormalizationSupported(const TensorInfo&, // input
290 const TensorInfo&, // output
291 const InstanceNormalizationDescriptor&, // descriptor
Kevin Mayce5045a2019-10-02 14:07:47 +0100292 Optional<std::string&> reasonIfUnsupported) const
293{
294 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
295}
296
Teresa Charlin52664732020-06-29 16:27:03 +0100297bool LayerSupportBase::IsL2NormalizationSupported(const TensorInfo&, // input
James Conroyaba90cd2020-11-06 16:28:18 +0000298 const TensorInfo&, // output
Teresa Charlin52664732020-06-29 16:27:03 +0100299 const L2NormalizationDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000300 Optional<std::string&> reasonIfUnsupported) const
301{
302 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
303}
304
James Conroyaba90cd2020-11-06 16:28:18 +0000305bool LayerSupportBase::IsLogicalBinarySupported(const TensorInfo&, // input0
306 const TensorInfo&, // input1
307 const TensorInfo&, // output
308 const LogicalBinaryDescriptor&, // descriptor
309 Optional<std::string&> reasonIfUnsupported) const
310{
311 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
312}
313
314bool LayerSupportBase::IsLogicalUnarySupported(const TensorInfo&, // input
315 const TensorInfo&, // output
316 const ElementwiseUnaryDescriptor&, // descriptor
317 Optional<std::string&> reasonIfUnsupported) const
318{
319 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
320}
321
Teresa Charlin52664732020-06-29 16:27:03 +0100322bool LayerSupportBase::IsLogSoftmaxSupported(const TensorInfo&, // input
323 const TensorInfo&, // output
324 const LogSoftmaxDescriptor&, // descriptor
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100325 Optional<std::string&> reasonIfUnsupported) const
326{
327 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
328}
329
Teresa Charlin52664732020-06-29 16:27:03 +0100330bool LayerSupportBase::IsLstmSupported(const TensorInfo&, // input
331 const TensorInfo&, // outputStateIn
332 const TensorInfo&, // cellStateIn
333 const TensorInfo&, // scratchBuffer
334 const TensorInfo&, // outputStateOut
335 const TensorInfo&, // cellStateOut
336 const TensorInfo&, // output
337 const LstmDescriptor&, // descriptor
338 const LstmInputParamsInfo&, // paramsInfo
Jan Eilersd01a83c2019-07-03 18:20:40 +0100339 Optional<std::string&> reasonIfUnsupported) const
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000340{
341 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
342}
343
Teresa Charlin52664732020-06-29 16:27:03 +0100344bool LayerSupportBase::IsMaximumSupported(const TensorInfo&, // input0
345 const TensorInfo&, // input1
346 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000347 Optional<std::string&> reasonIfUnsupported) const
348{
349 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
350}
351
Teresa Charlin52664732020-06-29 16:27:03 +0100352bool LayerSupportBase::IsMeanSupported(const TensorInfo&, // input
353 const TensorInfo&, // output
354 const MeanDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000355 Optional<std::string&> reasonIfUnsupported) const
356{
357 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
358}
359
Teresa Charlin52664732020-06-29 16:27:03 +0100360bool LayerSupportBase::IsMemCopySupported(const armnn::TensorInfo&, // input
361 const armnn::TensorInfo&, // output
362 armnn::Optional<std::string &> ) const // reasonIfUnsupported
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000363{
Derek Lambertif674aa02019-08-01 15:56:25 +0100364 return true;
365}
366
Teresa Charlin52664732020-06-29 16:27:03 +0100367bool LayerSupportBase::IsMemImportSupported(const armnn::TensorInfo&, // input
368 const armnn::TensorInfo&, // output
369 armnn::Optional<std::string &> ) const // reasonIfUnsupported
Derek Lambertif674aa02019-08-01 15:56:25 +0100370{
Derek Lambertif674aa02019-08-01 15:56:25 +0100371 return true;
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000372}
373
Teresa Charlin52664732020-06-29 16:27:03 +0100374bool LayerSupportBase::IsMergeSupported(const TensorInfo&, // input0
375 const TensorInfo&, // input1
376 const TensorInfo&, // output
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100377 Optional<std::string&> reasonIfUnsupported) const
378{
379 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
380}
381
Teresa Charlin52664732020-06-29 16:27:03 +0100382bool LayerSupportBase::IsMinimumSupported(const TensorInfo&, // input0
383 const TensorInfo&, // input1
384 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000385 Optional<std::string&> reasonIfUnsupported) const
386{
387 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
388}
389
Teresa Charlin52664732020-06-29 16:27:03 +0100390bool LayerSupportBase::IsMultiplicationSupported(const TensorInfo&, // input0
391 const TensorInfo&, // input1
392 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000393 Optional<std::string&> reasonIfUnsupported) const
394{
395 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
396}
397
Teresa Charlin52664732020-06-29 16:27:03 +0100398bool LayerSupportBase::IsNormalizationSupported(const TensorInfo&, // input
399 const TensorInfo&, // output
400 const NormalizationDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000401 Optional<std::string&> reasonIfUnsupported) const
402{
403 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
404}
405
Teresa Charlin52664732020-06-29 16:27:03 +0100406bool LayerSupportBase::IsOutputSupported(const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000407 Optional<std::string&> reasonIfUnsupported) const
408{
409 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
410}
411
Teresa Charlin52664732020-06-29 16:27:03 +0100412bool LayerSupportBase::IsPadSupported(const TensorInfo&, // input
413 const TensorInfo&, // output
414 const PadDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000415 Optional<std::string&> reasonIfUnsupported) const
416{
417 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
418}
419
Teresa Charlin52664732020-06-29 16:27:03 +0100420bool LayerSupportBase::IsPermuteSupported(const TensorInfo&, // input
421 const TensorInfo&, // output
422 const PermuteDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000423 Optional<std::string&> reasonIfUnsupported) const
424{
425 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
426}
427
Teresa Charlin52664732020-06-29 16:27:03 +0100428bool LayerSupportBase::IsPooling2dSupported(const TensorInfo&, // input
429 const TensorInfo&, // output
430 const Pooling2dDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000431 Optional<std::string&> reasonIfUnsupported) const
432{
433 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
434}
435
Teresa Charlin52664732020-06-29 16:27:03 +0100436bool LayerSupportBase::IsPreCompiledSupported(const TensorInfo&, // input
437 const PreCompiledDescriptor&, // descriptor
Matteo Martincigh49124022019-01-11 13:25:59 +0000438 Optional<std::string&> reasonIfUnsupported) const
439{
440 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
441}
442
Teresa Charlin52664732020-06-29 16:27:03 +0100443bool LayerSupportBase::IsPreluSupported(const TensorInfo&, // input
444 const TensorInfo&, // alpha
445 const TensorInfo&, // output
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100446 Optional<std::string &> reasonIfUnsupported) const
447{
448 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
449}
450
Teresa Charlin52664732020-06-29 16:27:03 +0100451bool LayerSupportBase::IsQuantizeSupported(const armnn::TensorInfo&, // input
452 const armnn::TensorInfo&, // output
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000453 armnn::Optional<std::string&> reasonIfUnsupported) const
454{
455 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
456}
457
Teresa Charlin52664732020-06-29 16:27:03 +0100458bool LayerSupportBase::IsQLstmSupported(const TensorInfo&, // input
459 const TensorInfo&, // previousOutputIn
460 const TensorInfo&, // previousCellStateIn
461 const TensorInfo&, // outputStateOut
462 const TensorInfo&, // cellStateOut
463 const TensorInfo&, // output
464 const QLstmDescriptor&, // descriptor
465 const LstmInputParamsInfo&, // paramsInfo
James Conroy586a9aa2020-03-20 08:49:33 +0000466 Optional<std::string&> reasonIfUnsupported) const
467{
468 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
469}
470
Teresa Charlin52664732020-06-29 16:27:03 +0100471bool LayerSupportBase::IsQuantizedLstmSupported(const TensorInfo&, // input
472 const TensorInfo&, // previousCellStateIn
473 const TensorInfo&, // previousOutputIn
474 const TensorInfo&, // cellStateOut
475 const TensorInfo&, // output
476 const QuantizedLstmInputParamsInfo&, // paramsInfo
James Conroyee18dc82019-07-17 11:27:46 +0100477 Optional<std::string&> reasonIfUnsupported) const
478{
479 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
480}
481
Finn Williams2605b232020-06-10 15:53:46 +0100482bool LayerSupportBase::IsRankSupported(const TensorInfo&, // input
483 const TensorInfo&, // output
484 Optional<std::string&> reasonIfUnsupported) const
485{
486 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
487}
488
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +0000489bool LayerSupportBase::IsReduceSupported(const TensorInfo& /*input*/,
490 const TensorInfo& /*output*/,
491 const ReduceDescriptor& /*descriptor*/,
492 Optional<std::string&> reasonIfUnsupported) const
493{
494 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
495}
496
Teresa Charlin52664732020-06-29 16:27:03 +0100497bool LayerSupportBase::IsReshapeSupported(const TensorInfo&, // input
498 const TensorInfo&, // output
499 const ReshapeDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000500 Optional<std::string&> reasonIfUnsupported) const
501{
502 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
503}
504
Teresa Charlin52664732020-06-29 16:27:03 +0100505bool LayerSupportBase::IsResizeSupported(const TensorInfo&, // input
506 const TensorInfo&, // output
507 const ResizeDescriptor&, // descriptor
Teresa Charlina9075df2019-06-27 15:41:57 +0100508 Optional<std::string&> reasonIfUnsupported) const
509{
510 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
511}
512
Keith Davis3ae3f972021-05-21 16:33:48 +0100513bool LayerSupportBase::IsShapeSupported(const TensorInfo&, // input
514 const TensorInfo&, // output
515 Optional<std::string&> reasonIfUnsupported) const
516{
517 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
518}
519
Teresa Charlin52664732020-06-29 16:27:03 +0100520bool LayerSupportBase::IsSliceSupported(const TensorInfo&, // input
521 const TensorInfo&, // output
522 const SliceDescriptor&, // descriptor
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100523 Optional<std::string&> reasonIfUnsupported) const
524{
525 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
526}
527
Teresa Charlin52664732020-06-29 16:27:03 +0100528bool LayerSupportBase::IsSoftmaxSupported(const TensorInfo&, // input
529 const TensorInfo&, // output
530 const SoftmaxDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000531 Optional<std::string&> reasonIfUnsupported) const
532{
533 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
534}
Derek Lamberti901ea112019-12-10 22:07:09 +0000535/**/
Teresa Charlin52664732020-06-29 16:27:03 +0100536bool LayerSupportBase::IsSpaceToBatchNdSupported(const TensorInfo&, // input
537 const TensorInfo&, // output
538 const SpaceToBatchNdDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000539 Optional<std::string&> reasonIfUnsupported) const
540{
541 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
542}
543
Teresa Charlin52664732020-06-29 16:27:03 +0100544bool LayerSupportBase::IsSpaceToDepthSupported(const TensorInfo&, // input
545 const TensorInfo&, // output
546 const SpaceToDepthDescriptor&, // descriptor
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100547 Optional<std::string&> reasonIfUnsupported) const
548{
549 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
550}
551
Teresa Charlin52664732020-06-29 16:27:03 +0100552bool LayerSupportBase::IsSplitterSupported(const TensorInfo&, // input
Teresa Charlin52664732020-06-29 16:27:03 +0100553 const std::vector<std::reference_wrapper<TensorInfo>>&, // outputs
554 const ViewsDescriptor&, // descriptor
Narumol Prangnawarat15eb5832019-05-20 15:31:05 +0100555 Optional<std::string&> reasonIfUnsupported) const
556{
557 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
558}
559
Teresa Charlin52664732020-06-29 16:27:03 +0100560bool LayerSupportBase::IsStackSupported(const std::vector<const TensorInfo*>&, // inputs
561 const TensorInfo&, // output
562 const StackDescriptor&, // descriptor
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100563 Optional<std::string&> reasonIfUnsupported) const
564{
565 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
566}
567
Teresa Charlin52664732020-06-29 16:27:03 +0100568bool LayerSupportBase::IsStandInSupported(const std::vector<const TensorInfo*>&, // inputs
569 const std::vector<const TensorInfo*>&, // outputs
570 const StandInDescriptor&, // descriptor
Derek Lamberti013c3902019-10-21 10:46:16 +0100571 Optional<std::string&> reasonIfUnsupported) const
572{
573 if (reasonIfUnsupported)
574 {
575 std::stringstream message;
576 message << "StandIn layer is not executable via backends";
577
578 reasonIfUnsupported.value() = message.str();
579 }
580
581 return false;
582}
583
Teresa Charlin52664732020-06-29 16:27:03 +0100584bool LayerSupportBase::IsStridedSliceSupported(const TensorInfo&, // input
585 const TensorInfo&, // output
586 const StridedSliceDescriptor&, // descriptor
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000587 Optional<std::string&> reasonIfUnsupported) const
588{
589 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
590}
591
Teresa Charlin52664732020-06-29 16:27:03 +0100592bool LayerSupportBase::IsSubtractionSupported(const TensorInfo&, // input0
593 const TensorInfo&, // input1
594 const TensorInfo&, // output
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000595 Optional<std::string&> reasonIfUnsupported) const
596{
597 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
598}
599
Teresa Charlin52664732020-06-29 16:27:03 +0100600bool LayerSupportBase::IsSwitchSupported(const TensorInfo&, // input0
601 const TensorInfo&, // input1
602 const TensorInfo&, // output0
603 const TensorInfo&, // output1
Sadik Armaganeff363d2019-04-05 15:25:46 +0100604 Optional<std::string&> reasonIfUnsupported) const
605{
606 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
607}
608
Teresa Charlin52664732020-06-29 16:27:03 +0100609bool LayerSupportBase::IsTransposeConvolution2dSupported(const TensorInfo&, // input
610 const TensorInfo&, // output
611 const TransposeConvolution2dDescriptor&, // descriptor
612 const TensorInfo&, // weights
613 const Optional<TensorInfo>&, // biases
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100614 Optional<std::string&> reasonIfUnsupported) const
615{
616 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
Teresa Charlin52664732020-06-29 16:27:03 +0100617}
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100618
Teresa Charlin52664732020-06-29 16:27:03 +0100619bool LayerSupportBase::IsTransposeSupported(const TensorInfo&, // input
620 const TensorInfo&, // output
621 const TransposeDescriptor&, // descriptor
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000622 Optional<std::string&> reasonIfUnsupported) const
623{
624 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
625}
626
Narumol Prangnawarat8ed39ae2021-07-15 16:16:25 +0100627bool LayerSupportBase::IsUnidirectionalSequenceLstmSupported(const TensorInfo&, // input
628 const TensorInfo&, // outputStateIn
629 const TensorInfo&, // cellStateIn
630 const TensorInfo&, // output
631 const Optional<TensorInfo>&, // hiddenStateOut
632 const Optional<TensorInfo>&, // cellStateOut
633 const LstmDescriptor&, // descriptor
634 const LstmInputParamsInfo&, // paramsInfo
635 Optional<std::string&> reasonIfUnsupported) const
636{
637 return DefaultLayerSupport(__func__, __FILE__, __LINE__, reasonIfUnsupported);
638}
639
Matteo Martincigh992d6dc2019-01-10 17:34:20 +0000640} // namespace armnn