IVGCVSW-1951 Remove type templating from ClDepthwiseConvolutionWorkload

Change-Id: I8bc11c93759605e21cc52f44d032c32a0be63658
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp
index 09dfab9..434b069 100644
--- a/src/backends/cl/ClLayerSupport.cpp
+++ b/src/backends/cl/ClLayerSupport.cpp
@@ -20,7 +20,7 @@
 #include "workloads/ClConvertFp16ToFp32Workload.hpp"
 #include "workloads/ClConvertFp32ToFp16Workload.hpp"
 #include "workloads/ClConvolution2dWorkload.hpp"
-#include "workloads/ClDepthwiseConvolutionBaseWorkload.hpp"
+#include "workloads/ClDepthwiseConvolutionWorkload.hpp"
 #include "workloads/ClDivisionFloatWorkload.hpp"
 #include "workloads/ClL2NormalizationFloatWorkload.hpp"
 #include "workloads/ClMultiplicationWorkload.hpp"
diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp
index 2e07445..c00d0ba 100644
--- a/src/backends/cl/ClWorkloadFactory.cpp
+++ b/src/backends/cl/ClWorkloadFactory.cpp
@@ -150,7 +150,7 @@
 std::unique_ptr<IWorkload> ClWorkloadFactory::CreateDepthwiseConvolution2d(
     const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const
 {
-    return MakeWorkload<ClDepthwiseConvolutionFloatWorkload, ClDepthwiseConvolutionUint8Workload>(descriptor, info);
+    return std::make_unique<ClDepthwiseConvolutionWorkload>(descriptor, info);
 }
 
 std::unique_ptr<armnn::IWorkload> ClWorkloadFactory::CreateNormalization(const NormalizationQueueDescriptor& descriptor,
diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk
index c86940c..04b8b9e 100644
--- a/src/backends/cl/backend.mk
+++ b/src/backends/cl/backend.mk
@@ -22,9 +22,7 @@
         workloads/ClConvertFp16ToFp32Workload.cpp \
         workloads/ClConvertFp32ToFp16Workload.cpp \
         workloads/ClConvolution2dWorkload.cpp \
-        workloads/ClDepthwiseConvolutionBaseWorkload.cpp \
-        workloads/ClDepthwiseConvolutionFloatWorkload.cpp \
-        workloads/ClDepthwiseConvolutionUint8Workload.cpp \
+        workloads/ClDepthwiseConvolutionWorkload.cpp \
         workloads/ClDivisionFloatWorkload.cpp \
         workloads/ClFloorFloatWorkload.cpp \
         workloads/ClFullyConnectedWorkload.cpp \
diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt
index 5a1653e..4d1c1bf 100644
--- a/src/backends/cl/workloads/CMakeLists.txt
+++ b/src/backends/cl/workloads/CMakeLists.txt
@@ -25,12 +25,8 @@
     ClConvertFp32ToFp16Workload.hpp
     ClConvolution2dWorkload.cpp
     ClConvolution2dWorkload.hpp
-    ClDepthwiseConvolutionBaseWorkload.cpp
-    ClDepthwiseConvolutionBaseWorkload.hpp
-    ClDepthwiseConvolutionFloatWorkload.cpp
-    ClDepthwiseConvolutionFloatWorkload.hpp
-    ClDepthwiseConvolutionUint8Workload.cpp
-    ClDepthwiseConvolutionUint8Workload.hpp
+    ClDepthwiseConvolutionWorkload.cpp
+    ClDepthwiseConvolutionWorkload.hpp
     ClDivisionFloatWorkload.cpp
     ClDivisionFloatWorkload.hpp
     ClFloorFloatWorkload.cpp
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp
deleted file mode 100644
index 17ecd29..0000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClDepthwiseConvolutionFloatWorkload.hpp"
-
-#include <backends/CpuTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-ClDepthwiseConvolutionFloatWorkload::ClDepthwiseConvolutionFloatWorkload(
-    const DepthwiseConvolution2dQueueDescriptor& descriptor,
-    const WorkloadInfo& info)
-    : ClDepthwiseConvolutionBaseWorkload(descriptor, info)
-{
-    InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight);
-
-    if (m_BiasTensor)
-    {
-        InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias);
-    }
-
-    m_DepthwiseConvolutionLayer->prepare();
-    FreeUnusedTensors();
-}
-
-void ClDepthwiseConvolutionFloatWorkload::Execute() const
-{
-    ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionFloatWorkload_Execute");
-    BOOST_ASSERT(m_DepthwiseConvolutionLayer);
-
-    m_DepthwiseConvolutionLayer->run();
-}
-
-} //namespace armnn
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp
deleted file mode 100644
index 4f9d5f3..0000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include "ClDepthwiseConvolutionBaseWorkload.hpp"
-
-namespace armnn
-{
-
-class ClDepthwiseConvolutionFloatWorkload : public ClDepthwiseConvolutionBaseWorkload<DataType::Float16,
-                                                                                      DataType::Float32>
-{
-public:
-    ClDepthwiseConvolutionFloatWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
-                                        const WorkloadInfo& info);
-    void Execute() const override;
-};
-
-} //namespace armnn
-
-
-
-
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp
deleted file mode 100644
index 22922e4..0000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "ClDepthwiseConvolutionUint8Workload.hpp"
-
-#include <backends/CpuTensorHandle.hpp>
-
-#include "ClWorkloadUtils.hpp"
-
-namespace armnn
-{
-
-ClDepthwiseConvolutionUint8Workload::ClDepthwiseConvolutionUint8Workload(
-    const DepthwiseConvolution2dQueueDescriptor& descriptor,
-    const WorkloadInfo& info)
-    : ClDepthwiseConvolutionBaseWorkload(descriptor, info)
-{
-    InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight);
-
-    if (m_BiasTensor)
-    {
-        InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias);
-    }
-
-    m_DepthwiseConvolutionLayer->prepare();
-    FreeUnusedTensors();
-}
-
-void ClDepthwiseConvolutionUint8Workload::Execute() const
-{
-    ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionUint8Workload_Execute");
-    BOOST_ASSERT(m_DepthwiseConvolutionLayer);
-
-    m_DepthwiseConvolutionLayer->run();
-}
-
-} //namespace armnn
-
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp
deleted file mode 100644
index b9f676d..0000000
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include "ClDepthwiseConvolutionBaseWorkload.hpp"
-
-namespace armnn
-{
-
-class ClDepthwiseConvolutionUint8Workload : public ClDepthwiseConvolutionBaseWorkload<DataType::QuantisedAsymm8>
-{
-public:
-    ClDepthwiseConvolutionUint8Workload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
-                                        const WorkloadInfo& info);
-    void Execute() const override;
-};
-
-} //namespace armnn
-
-
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
similarity index 82%
rename from src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp
rename to src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
index 53ac3ba..142cbc2 100644
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp
+++ b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp
@@ -3,15 +3,18 @@
 // SPDX-License-Identifier: MIT
 //
 
-#include "ClDepthwiseConvolutionBaseWorkload.hpp"
+#include "ClDepthwiseConvolutionWorkload.hpp"
 
 #include "TypeUtils.hpp"
+#include "ClWorkloadUtils.hpp"
 
 #include <backends/aclCommon/ArmComputeUtils.hpp>
 #include <backends/aclCommon/ArmComputeTensorUtils.hpp>
 #include <backends/cl/ClTensorHandle.hpp>
 #include <backends/CpuTensorHandle.hpp>
 
+#include <arm_compute/runtime/CL/functions/CLDepthwiseConvolutionLayer.h>
+
 namespace armnn
 {
 
@@ -49,11 +52,10 @@
                                                               aclDepthMultiplier);
 }
 
-template<armnn::DataType... dataTypes>
-ClDepthwiseConvolutionBaseWorkload<dataTypes...>::ClDepthwiseConvolutionBaseWorkload(
+ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload(
     const DepthwiseConvolution2dQueueDescriptor& descriptor,
     const WorkloadInfo& info)
-    : TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...>(descriptor, info)
+    : BaseWorkload<DepthwiseConvolution2dQueueDescriptor>(descriptor, info)
 {
     auto& weightInfo = m_Data.m_Weight->GetTensorInfo();
 
@@ -74,8 +76,7 @@
                                              m_Data.m_Parameters.m_PadBottom,
                                              arm_compute::DimensionRoundingType::FLOOR);
 
-    std::string name = std::string("ClDepthwiseConvolution") +
-            GetDataTypeName(m_Data.m_Weight->GetTensorInfo().GetDataType()) + "Workload";
+    std::string name = std::string("ClDepthwiseConvolutionWorkload");
     m_Data.ValidateInputsOutputs(name, 1, 1);
 
     arm_compute::ICLTensor& input  = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
@@ -109,17 +110,30 @@
     }
 
     BOOST_ASSERT(m_DepthwiseConvolutionLayer);
+
+    InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight);
+
+    if (m_BiasTensor)
+    {
+        InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias);
+    }
+
+    m_DepthwiseConvolutionLayer->prepare();
+    FreeUnusedTensors();
 }
 
-template<armnn::DataType... dataTypes>
-void ClDepthwiseConvolutionBaseWorkload<dataTypes...>::FreeUnusedTensors()
+void ClDepthwiseConvolutionWorkload::FreeUnusedTensors()
 {
     FreeTensorIfUnused(m_KernelTensor);
     FreeTensorIfUnused(m_BiasTensor);
 }
 
-// Generate known implementations for linker
-template class ClDepthwiseConvolutionBaseWorkload<DataType::Float16, DataType::Float32>;
-template class ClDepthwiseConvolutionBaseWorkload<DataType::QuantisedAsymm8>;
+void ClDepthwiseConvolutionWorkload::Execute() const
+{
+    ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionWorkload_Execute");
+    BOOST_ASSERT(m_DepthwiseConvolutionLayer);
+
+    m_DepthwiseConvolutionLayer->run();
+}
 
 } // namespace armnn
diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp
similarity index 64%
rename from src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp
rename to src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp
index 27aec8e..cde9f50 100644
--- a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp
+++ b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp
@@ -7,7 +7,9 @@
 
 #include <backends/Workload.hpp>
 
-#include <arm_compute/runtime/CL/CLFunctions.h>
+#include <arm_compute/runtime/IFunction.h>
+#include <arm_compute/core/Error.h>
+#include <arm_compute/runtime/CL/CLTensor.h>
 
 namespace armnn
 {
@@ -18,14 +20,15 @@
                                                            const TensorInfo& weights,
                                                            const Optional<TensorInfo>& biases);
 
-template<armnn::DataType... dataTypes>
-class ClDepthwiseConvolutionBaseWorkload : public TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...>
+class ClDepthwiseConvolutionWorkload : public BaseWorkload<DepthwiseConvolution2dQueueDescriptor>
 {
 public:
-    using TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...>::m_Data;
+    using BaseWorkload<DepthwiseConvolution2dQueueDescriptor>::m_Data;
 
-    ClDepthwiseConvolutionBaseWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
-                                       const WorkloadInfo& info);
+    ClDepthwiseConvolutionWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor,
+                                   const WorkloadInfo& info);
+
+    void Execute() const override;
 
 protected:
     std::unique_ptr<arm_compute::IFunction> m_DepthwiseConvolutionLayer;
diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp
index 0ef8fd3..6574d43 100644
--- a/src/backends/cl/workloads/ClWorkloads.hpp
+++ b/src/backends/cl/workloads/ClWorkloads.hpp
@@ -13,8 +13,7 @@
 #include "ClConstantFloatWorkload.hpp"
 #include "ClConstantUint8Workload.hpp"
 #include "ClConvolution2dWorkload.hpp"
-#include "ClDepthwiseConvolutionFloatWorkload.hpp"
-#include "ClDepthwiseConvolutionUint8Workload.hpp"
+#include "ClDepthwiseConvolutionWorkload.hpp"
 #include "ClDivisionFloatWorkload.hpp"
 #include "ClFloorFloatWorkload.hpp"
 #include "ClFullyConnectedWorkload.hpp"