TOSA: Added RESHAPE, SLICE and CONCAT

Added support for Data layout ops
RESHAPE, SLICE and CONCAT.
-No support for bool_t
-Support limited to Rank <= 4 and N = 1

Signed-off-by: Patrik Gustavsson <patrik.gustavsson@arm.com>
Change-Id: I487ac494b6506a2a6ba947ee758aa193194dd796
diff --git a/ethosu/vela/graph_optimiser_util.py b/ethosu/vela/graph_optimiser_util.py
index d01d4a1..8095f08 100644
--- a/ethosu/vela/graph_optimiser_util.py
+++ b/ethosu/vela/graph_optimiser_util.py
@@ -212,6 +212,29 @@
                     cons.set_input_tensor(ifm, ifm_idx)
 
 
+def move_splitsliceread_to_consumer(op, cons_op):
+    assert op.type == Op.SplitSliceRead
+
+    if cons_op.ifm == op.ofm:
+        cons_op.read_offsets[0] = op.read_offsets[0]
+        cons_op.read_shapes[0] = op.read_shapes[0]
+        cons_op.set_input_tensor(op.ifm, cons_op.type.info.indices.ifms[0])
+        cons_op.ifm_shapes[0] = op.ifm_shapes[0]
+    elif cons_op.type.is_binary_elementwise_op() and cons_op.ifm2 == op.ofm:
+        cons_op.read_offsets[1] = op.read_offsets[0]
+        cons_op.read_shapes[1] = op.read_shapes[0]
+        cons_op.set_input_tensor(op.ifm, cons_op.type.info.indices.ifms[1])
+        cons_op.ifm_shapes[1] = op.ifm_shapes[0]
+
+    if "skirt" in cons_op.attrs:
+        assert cons_op.attrs["explicit_padding"] == cons_op.attrs["skirt"]
+        cons_op.attrs["skirt"] = None
+        cons_op.attrs["force_padding"] = True
+    op.ofm.consumer_list.remove(cons_op)
+    op.ofm.ops = []
+    op.ifm.consumer_list.remove(op)
+
+
 def check_reshapes(op, arch):
     if op.run_on_npu and op.type == Op.Reshape:
         ofm = op.ofm