diff options
author | James Conroy <james.conroy@arm.com> | 2020-11-13 10:18:51 +0000 |
---|---|---|
committer | Teresa Charlin <teresa.charlinreyes@arm.com> | 2020-11-18 20:26:13 +0000 |
commit | 177df1e4483184e526f61a6bd1c00f9b33577571 (patch) | |
tree | 66c98f7bb80af2f7f86319c18c0ee0f4291cf1f0 /src/backends/neon/NeonLayerSupport.cpp | |
parent | 0c95f4cd319874ffa4aba3a378e0e3346f688fdc (diff) | |
download | armnn-177df1e4483184e526f61a6bd1c00f9b33577571.tar.gz |
IVGCVSW-5093 Add NEON Logical workload
* Add NEON Logical workloads for NOT,
AND and OR.
* Enable Layer and IsSupported tests on NEON.
Signed-off-by: James Conroy <james.conroy@arm.com>
Change-Id: Ibca59530457a664ca3d77751825642f8daf52fab
Diffstat (limited to 'src/backends/neon/NeonLayerSupport.cpp')
-rw-r--r-- | src/backends/neon/NeonLayerSupport.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp index f55d1c8df6..2d22576e57 100644 --- a/src/backends/neon/NeonLayerSupport.cpp +++ b/src/backends/neon/NeonLayerSupport.cpp @@ -37,6 +37,9 @@ #include "workloads/NeonInstanceNormalizationWorkload.hpp" #include "workloads/NeonL2NormalizationFloatWorkload.hpp" #include "workloads/NeonLogSoftmaxWorkload.hpp" +#include "workloads/NeonLogicalAndWorkload.hpp" +#include "workloads/NeonLogicalNotWorkload.hpp" +#include "workloads/NeonLogicalOrWorkload.hpp" #include "workloads/NeonLstmFloatWorkload.hpp" #include "workloads/NeonMaximumWorkload.hpp" #include "workloads/NeonMeanWorkload.hpp" @@ -434,6 +437,11 @@ bool NeonLayerSupport::IsElementwiseUnarySupported(const TensorInfo& input, reasonIfUnsupported, input, output); + case UnaryOperation::LogicalNot: + FORWARD_WORKLOAD_VALIDATE_FUNC(NeonLogicalNotWorkloadValidate, + reasonIfUnsupported, + input, + output); default: return false; } @@ -532,6 +540,31 @@ bool NeonLayerSupport::IsL2NormalizationSupported(const TensorInfo& input, FORWARD_WORKLOAD_VALIDATE_FUNC(NeonL2NormalizationWorkloadValidate, reasonIfUnsupported, input, output, descriptor); } +bool NeonLayerSupport::IsLogicalBinarySupported(const TensorInfo& input0, + const TensorInfo& input1, + const TensorInfo& output, + const LogicalBinaryDescriptor& descriptor, + Optional<std::string&> reasonIfUnsupported) const +{ + switch(descriptor.m_Operation) + { + case LogicalBinaryOperation::LogicalAnd: + FORWARD_WORKLOAD_VALIDATE_FUNC(NeonLogicalAndWorkloadValidate, + reasonIfUnsupported, + input0, + input1, + output); + case LogicalBinaryOperation::LogicalOr: + FORWARD_WORKLOAD_VALIDATE_FUNC(NeonLogicalOrWorkloadValidate, + reasonIfUnsupported, + input0, + input1, + output); + default: + return false; + } +} + bool NeonLayerSupport::IsLogSoftmaxSupported(const TensorInfo& input, const TensorInfo& output, const LogSoftmaxDescriptor& descriptor, |