COMPMID-1995: Prepare Graph to support different input/output quantization info

- Added support for different input/output qinfo in ActivationLayer and DepthwiseConv
- Added support for different input/output qinfo in ConcatenateLayer introducing ConcatDescriptor
- Added reshape validate
- Allow OutputLayer to return a specific connection index from the input
- Not run Inplace and Depth mutator when input/output quantization info are different

Change-Id: I03f5e416fc43ddd284e1501887202a3145f76d8a
Signed-off-by: Isabella Gottardi <isabella.gottardi@arm.com>
Reviewed-on: https://review.mlplatform.org/c/852
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
diff --git a/arm_compute/graph/nodes/ActivationLayerNode.h b/arm_compute/graph/nodes/ActivationLayerNode.h
index 7231206..a17b010 100644
--- a/arm_compute/graph/nodes/ActivationLayerNode.h
+++ b/arm_compute/graph/nodes/ActivationLayerNode.h
@@ -36,9 +36,11 @@
 public:
     /** Constructor
      *
-     * @param[in] info Activation Layer information
+     * @param[in] info           Activation Layer information
+     * @param[in] out_quant_info (Optional) Output quantization info
      */
-    ActivationLayerNode(ActivationLayerInfo info);
+    ActivationLayerNode(ActivationLayerInfo info,
+                        QuantizationInfo    out_quant_info = QuantizationInfo());
     /** Activation metadata accessor
      *
      * @return The activation info of the layer
@@ -56,6 +58,7 @@
 
 private:
     ActivationLayerInfo _info;
+    QuantizationInfo    _out_quant_info;
 };
 } // namespace graph
 } // namespace arm_compute
diff --git a/arm_compute/graph/nodes/ConcatenateLayerNode.h b/arm_compute/graph/nodes/ConcatenateLayerNode.h
index 20c8523..fc12284 100644
--- a/arm_compute/graph/nodes/ConcatenateLayerNode.h
+++ b/arm_compute/graph/nodes/ConcatenateLayerNode.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 ARM Limited.
+ * Copyright (c) 2018-2019 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -36,10 +36,10 @@
 public:
     /** Constructor
      *
-     * @param[in] total_nodes Number of nodes that will get concatenated
-     * @param[in] axis        Concatenation axis
+     * @param[in] total_nodes       Number of nodes that will get concatenated
+     * @param[in] concat_descriptor Concatenate Layer Descriptor
      */
-    ConcatenateLayerNode(unsigned int total_nodes, DataLayoutDimension axis);
+    ConcatenateLayerNode(unsigned int total_nodes, descriptors::ConcatLayerDescriptor concat_descriptor);
     /** Computes concatenations output descriptor
      *
      * @param[in] input_descriptors Input descriptors
@@ -68,6 +68,12 @@
      */
     DataLayoutDimension concatenation_axis() const;
 
+    /** Concatenation output quantization info accessor
+     *
+     * @return Output quantization info
+     */
+    QuantizationInfo output_quantization_info() const;
+
     // Inherited overridden methods:
     NodeType         type() const override;
     bool             forward_descriptors() override;
@@ -75,9 +81,9 @@
     void accept(INodeVisitor &v) override;
 
 private:
-    unsigned int        _total_nodes;
-    DataLayoutDimension _axis;
-    bool                _is_enabled;
+    unsigned int                       _total_nodes;
+    descriptors::ConcatLayerDescriptor _concat_descriptor;
+    bool                               _is_enabled;
 };
 } // namespace graph
 } // namespace arm_compute
diff --git a/arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h b/arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h
index 8c0aae1..fd02734 100644
--- a/arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h
+++ b/arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 ARM Limited.
+ * Copyright (c) 2018-2019 ARM Limited.
  *
  * SPDX-License-Identifier: MIT
  *
@@ -39,10 +39,12 @@
      * @param[in] info             Convolution layer attributes
      * @param[in] depth_multiplier (Optional) Depth multiplier parameter.
      * @param[in] method           (Optional) Depthwise convolution method to use
+     * @param[in] out_quant_info   (Optional) Output quantization info
      */
     DepthwiseConvolutionLayerNode(PadStrideInfo              info,
                                   int                        depth_multiplier = 1,
-                                  DepthwiseConvolutionMethod method           = DepthwiseConvolutionMethod::Default);
+                                  DepthwiseConvolutionMethod method           = DepthwiseConvolutionMethod::Default,
+                                  QuantizationInfo           out_quant_info   = QuantizationInfo());
     /** Sets the depthwise convolution method to use
      *
      * @param[in] method Depthwise convolution method to use
@@ -103,6 +105,7 @@
     PadStrideInfo              _info;
     int                        _depth_multiplier;
     DepthwiseConvolutionMethod _method;
+    QuantizationInfo           _out_quant_info;
     ActivationLayerInfo        _fused_activation;
 };
 } // namespace graph