COMPMID-2273: Fuse Batch Normalization with Depthwise Convolution layer at graph level (only for CL)

Change-Id: I1d941c6e66722f39583bf68148c980bb28ff89a1
Signed-off-by: Manuel Bottini <manuel.bottini@arm.com>
Reviewed-on: https://review.mlplatform.org/c/1423
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
diff --git a/src/graph/backends/CL/CLFunctionsFactory.cpp b/src/graph/backends/CL/CLFunctionsFactory.cpp
index c14100a..b9f22f6 100644
--- a/src/graph/backends/CL/CLFunctionsFactory.cpp
+++ b/src/graph/backends/CL/CLFunctionsFactory.cpp
@@ -74,8 +74,9 @@
 /** Function and tensor types to be used inside a CL fused convolution/batch normalization layer */
 struct CLFusedLayerTypes
 {
-    using ConvolutionLayer       = CLConvolutionLayer;
-    using FuseBatchNormalization = CLFuseBatchNormalization;
+    using ConvolutionLayer          = CLConvolutionLayer;
+    using DepthwiseConvolutionLayer = CLDepthwiseConvolutionLayer;
+    using FuseBatchNormalization    = CLFuseBatchNormalization;
 };
 
 // TODO (isagot01): Remove once we support heterogeneous scheduling at function level
@@ -203,6 +204,8 @@
             return detail::create_fully_connected_layer<CLFullyConnectedLayer, CLTargetInfo>(*polymorphic_downcast<FullyConnectedLayerNode *>(node), ctx);
         case NodeType::FusedConvolutionBatchNormalizationLayer:
             return detail::create_fused_convolution_batch_normalization_layer<CLFusedLayerTypes, CLTargetInfo>(*polymorphic_downcast<FusedConvolutionBatchNormalizationNode *>(node));
+        case NodeType::FusedDepthwiseConvolutionBatchNormalizationLayer:
+            return detail::create_fused_depthwise_convolution_batch_normalization_layer<CLFusedLayerTypes, CLTargetInfo>(*polymorphic_downcast<FusedDepthwiseConvolutionBatchNormalizationNode *>(node));
         case NodeType::GenerateProposalsLayer:
             return detail::create_generate_proposals_layer<CLGenerateProposalsLayer, CLTargetInfo>(*polymorphic_downcast<GenerateProposalsLayerNode *>(node), ctx);
         case NodeType::NormalizationLayer:
diff --git a/src/graph/backends/NEON/NEFunctionFactory.cpp b/src/graph/backends/NEON/NEFunctionFactory.cpp
index d4892f5..ad96240 100644
--- a/src/graph/backends/NEON/NEFunctionFactory.cpp
+++ b/src/graph/backends/NEON/NEFunctionFactory.cpp
@@ -80,8 +80,9 @@
 /** Function and tensor types to be used inside a NEON fused convolution/batch normalization layer */
 struct NEFusedLayerTypes
 {
-    using ConvolutionLayer       = NEConvolutionLayer;
-    using FuseBatchNormalization = NEFuseBatchNormalization;
+    using ConvolutionLayer          = NEConvolutionLayer;
+    using DepthwiseConvolutionLayer = NEDepthwiseConvolutionLayer;
+    using FuseBatchNormalization    = NEFuseBatchNormalization;
 };
 
 namespace detail