MLCE-37: Adds PermuteNode support in graph

Change-Id: Iaa93a497e7913c27f2fd09e974125cda5f04bc4b
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/142463
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Tested-by: Jenkins <bsgcomp@arm.com>
diff --git a/arm_compute/graph/frontend/Layers.h b/arm_compute/graph/frontend/Layers.h
index 0a1a0cf..cf80dd9 100644
--- a/arm_compute/graph/frontend/Layers.h
+++ b/arm_compute/graph/frontend/Layers.h
@@ -445,6 +445,33 @@
     NormalizationLayerInfo _norm_info;
 };
 
+/** Permute Layer */
+class PermuteLayer final : public ILayer
+{
+public:
+    /** Construct a permute layer.
+     *
+     * @param[in] perm   Permutation vector.
+     * @param[in] layout (Optional) Data layout to assign to permuted tensor.
+     *                   If UNKNOWN then the input's layout will be used.
+     */
+    PermuteLayer(PermutationVector perm, DataLayout layout = DataLayout::UNKNOWN)
+        : _perm(perm), _layout(layout)
+    {
+    }
+
+    NodeID create_layer(IStream &s) override
+    {
+        NodeParams  common_params = { name(), s.hints().target_hint };
+        NodeIdxPair input         = { s.tail_node(), 0 };
+        return GraphBuilder::add_permute_node(s.graph(), common_params, input, _perm, _layout);
+    }
+
+private:
+    PermutationVector _perm;
+    DataLayout        _layout;
+};
+
 /** Pooling Layer */
 class PoolingLayer final : public ILayer
 {