aboutsummaryrefslogtreecommitdiff
path: root/src/backends/tosaCommon/operatorMappings
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/tosaCommon/operatorMappings')
-rw-r--r--src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp44
-rw-r--r--src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp36
-rw-r--r--src/backends/tosaCommon/operatorMappings/CMakeLists.txt1
-rw-r--r--src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp6
4 files changed, 49 insertions, 38 deletions
diff --git a/src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp b/src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp
new file mode 100644
index 0000000000..98ea03ac3c
--- /dev/null
+++ b/src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp
@@ -0,0 +1,44 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "AdditionOperator.hpp"
+
+TosaSerializationBasicBlock* ConvertAdditionToTosaOperator(const std::vector<const TensorInfo*>& inputs,
+ const std::vector<const TensorInfo*>& outputs)
+{
+ // A helper function with static global variables ensures uniqueness
+ // for dynamically generating input, output and block names
+ std::string input0Name = std::string("Op_ADD_input0_") + GetUniqueTosaMappingID();
+ std::string input1Name = std::string("Op_ADD_input1_") + GetUniqueTosaMappingID();
+ std::string outputName = std::string("Op_ADD_output0_") + GetUniqueTosaMappingID();
+ std::string blockName = std::string("Op_ADD_block_") + GetUniqueTosaMappingID();
+
+ TosaSerializationOperator* op = new TosaSerializationOperator(Op_ADD,
+ Attribute_NONE,
+ nullptr,
+ {input0Name, input1Name},
+ {outputName});
+
+ std::vector<int32_t> inputShape0 = GetTosaTensorShape(inputs[0]->GetShape());
+ DType inputDType0 = ArmNNToDType(inputs[0]->GetDataType());
+
+ std::vector<int32_t> inputShape1 = GetTosaTensorShape(inputs[1]->GetShape());
+ DType inputDType1 = ArmNNToDType(inputs[1]->GetDataType());
+
+ std::vector<int32_t> outputShape0 = GetTosaTensorShape(outputs[0]->GetShape());
+ DType outputDType0 = ArmNNToDType(outputs[0]->GetDataType());
+
+ TosaSerializationTensor* inputTensor0 = new TosaSerializationTensor(input0Name, inputShape0, inputDType0, {});
+ TosaSerializationTensor* inputTensor1 = new TosaSerializationTensor(input1Name, inputShape1, inputDType1, {});
+ TosaSerializationTensor* outputTensor0 = new TosaSerializationTensor(outputName, outputShape0, outputDType0, {});
+
+ // operatorInputNames/operatorOutputNames ends up being the same as
+ // blockInputNames/blockOutputNames for one-to-one ArmNN to Tosa mappings
+ return new TosaSerializationBasicBlock(blockName, // name
+ {op}, // operators
+ {inputTensor0, inputTensor1, outputTensor0}, // tensors
+ {input0Name, input1Name}, // inputs
+ {outputName}); // outputs
+} \ No newline at end of file
diff --git a/src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp b/src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp
index 98c01e2cb8..2a9c479d8e 100644
--- a/src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp
+++ b/src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp
@@ -14,39 +14,5 @@ using namespace armnn;
using namespace tosa;
TosaSerializationBasicBlock* ConvertAdditionToTosaOperator(const std::vector<const TensorInfo*>& inputs,
- const std::vector<const TensorInfo*>& outputs)
-{
- // A helper function with static global variables ensures uniqueness
- // for dynamically generating input, output and block names
- std::string input0Name = std::string("Op_ADD_input0_") + GetUniqueTosaMappingID();
- std::string input1Name = std::string("Op_ADD_input1_") + GetUniqueTosaMappingID();
- std::string outputName = std::string("Op_ADD_output0_") + GetUniqueTosaMappingID();
- std::string blockName = std::string("Op_ADD_block_") + GetUniqueTosaMappingID();
+ const std::vector<const TensorInfo*>& outputs);
- TosaSerializationOperator* op = new TosaSerializationOperator(Op_ADD,
- Attribute_NONE,
- nullptr,
- {input0Name, input1Name},
- {outputName});
-
- std::vector<int32_t> inputShape0 = GetTosaTensorShape(inputs[0]->GetShape());
- DType inputDType0 = ArmNNToDType(inputs[0]->GetDataType());
-
- std::vector<int32_t> inputShape1 = GetTosaTensorShape(inputs[1]->GetShape());
- DType inputDType1 = ArmNNToDType(inputs[1]->GetDataType());
-
- std::vector<int32_t> outputShape0 = GetTosaTensorShape(outputs[0]->GetShape());
- DType outputDType0 = ArmNNToDType(outputs[0]->GetDataType());
-
- TosaSerializationTensor* inputTensor0 = new TosaSerializationTensor(input0Name, inputShape0, inputDType0, {});
- TosaSerializationTensor* inputTensor1 = new TosaSerializationTensor(input1Name, inputShape1, inputDType1, {});
- TosaSerializationTensor* outputTensor0 = new TosaSerializationTensor(outputName, outputShape0, outputDType0, {});
-
- // operatorInputNames/operatorOutputNames ends up being the same as
- // blockInputNames/blockOutputNames for one-to-one ArmNN to Tosa mappings
- return new TosaSerializationBasicBlock(blockName, // name
- {op}, // operators
- {inputTensor0, inputTensor1, outputTensor0}, // tensors
- {input0Name, input1Name}, // inputs
- {outputName}); // outputs
-}
diff --git a/src/backends/tosaCommon/operatorMappings/CMakeLists.txt b/src/backends/tosaCommon/operatorMappings/CMakeLists.txt
index 3965a6ab04..9fc33e9205 100644
--- a/src/backends/tosaCommon/operatorMappings/CMakeLists.txt
+++ b/src/backends/tosaCommon/operatorMappings/CMakeLists.txt
@@ -5,6 +5,7 @@
list(APPEND armnnTosaBackendOperators_sources
AdditionOperator.hpp
+ AdditionOperator.cpp
TosaOperatorUtils.hpp
)
diff --git a/src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp b/src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp
index e11f293b12..f580a53ebc 100644
--- a/src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp
+++ b/src/backends/tosaCommon/operatorMappings/TosaOperatorUtils.hpp
@@ -14,7 +14,7 @@ using namespace armnn;
using namespace tosa;
// Function to return Tosa datatype from input ArmNN datatype.
-DType ArmNNToDType(const DataType& type)
+inline DType ArmNNToDType(const DataType& type)
{
switch (type)
{
@@ -43,7 +43,7 @@ DType ArmNNToDType(const DataType& type)
}
// Function to return Tosa tensor shape from input ArmNN tensor shape.
-std::vector<int32_t> GetTosaTensorShape(const TensorShape& shape)
+inline std::vector<int32_t> GetTosaTensorShape(const TensorShape& shape)
{
std::vector<int32_t> returnShape;
for (u_int32_t i = 0; i < shape.GetNumDimensions(); i++)
@@ -55,7 +55,7 @@ std::vector<int32_t> GetTosaTensorShape(const TensorShape& shape)
// Function to return unique int as a string to ensure uniqueness between all input, output and block names.
static int uniqueTosaMappingID = 0;
-std::string GetUniqueTosaMappingID()
+inline std::string GetUniqueTosaMappingID()
{
return std::to_string(++uniqueTosaMappingID);
}