MLBEDSW-7274 Add support for Variable Tensors

Added support for Variable Tensor, including offline planning.

Change-Id: I39f33fee207f1f1a4574a0f53f7377eec8709e15
Signed-off-by: Fredrik Svedberg <fredrik.svedberg@arm.com>
diff --git a/ethosu/vela/live_range.py b/ethosu/vela/live_range.py
index e980602..b18afec 100644
--- a/ethosu/vela/live_range.py
+++ b/ethosu/vela/live_range.py
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: Copyright 2020-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+# SPDX-FileCopyrightText: Copyright 2020-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
 #
 # SPDX-License-Identifier: Apache-2.0
 #
@@ -282,6 +282,11 @@
         rng = lr_graph.get_or_create_range(tens, cpu_tensor_alignment)
         rng.mark_usage(end_time)
 
+    # Variable tensor live-range is for entire inference
+    for tens, rng in lr_graph.ranges.items():
+        if tens.is_variable:
+            rng.mark_usage(0, end_time + 1)
+
     # Add subgraph to set of processed subgraphs
     lr_graph.processed_subgraphs.add(sg)
     return lr_graph
diff --git a/ethosu/vela/nn_graph.py b/ethosu/vela/nn_graph.py
index 98979f6..846632d 100644
--- a/ethosu/vela/nn_graph.py
+++ b/ethosu/vela/nn_graph.py
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: Copyright 2020-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+# SPDX-FileCopyrightText: Copyright 2020-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
 #
 # SPDX-License-Identifier: Apache-2.0
 #
@@ -197,7 +197,8 @@
 
             if op.type in (Op.Placeholder, Op.SubgraphInput):
                 assert len(op.outputs) == 1
-                self.input_tensors.append(op.outputs[0])
+                if not op.outputs[0].is_variable:
+                    self.input_tensors.append(op.outputs[0])
 
             for out in op.outputs:
                 if out not in visit_tensor_set:
diff --git a/ethosu/vela/reader_util.py b/ethosu/vela/reader_util.py
index 78eb436..d30a7bb 100644
--- a/ethosu/vela/reader_util.py
+++ b/ethosu/vela/reader_util.py
@@ -1,4 +1,4 @@
-# SPDX-FileCopyrightText: Copyright 2021-2022 Arm Limited and/or its affiliates <open-source-office@arm.com>
+# SPDX-FileCopyrightText: Copyright 2021-2023 Arm Limited and/or its affiliates <open-source-office@arm.com>
 #
 # SPDX-License-Identifier: Apache-2.0
 #
@@ -56,7 +56,7 @@
 
     for tens in tensors:
         if not tens.ops:
-            op = Operation(Op.Const, tens.name)
+            op = Operation(Op.Placeholder if tens.is_variable else Op.Const, tens.name)
             op.set_output_tensor(tens)