MLBEDSW-4976: index errors in scheduler

- Fixed index error in memory_snapshot
- When removing a cascade, also references are removed

Change-Id: I2b35dc52671d8ce115eb32bfdd93584391d1fc6d
Signed-off-by: Louis Verhaard <louis.verhaard@arm.com>
diff --git a/ethosu/vela/live_range.py b/ethosu/vela/live_range.py
index 7ff1b28..0b94b19 100644
--- a/ethosu/vela/live_range.py
+++ b/ethosu/vela/live_range.py
@@ -138,15 +138,11 @@
         return live_range
 
     def update_endtime(self):
-        self.end_time = 0
-        for rng in self.ranges.values():
-            self.end_time = max(self.end_time, rng.end_time)
+        self.end_time = self.current_time
         return self.end_time + 1
 
     def get_temporal_memory_usage(self, target_mem_area):
-        if not self.end_time:
-            self.update_endtime()
-        usage = np.zeros(self.end_time, dtype=np.int32)
+        usage = np.zeros(self.update_endtime(), dtype=np.int32)
         for rng in self.ranges.values():
             if rng.mem_area == target_mem_area:
                 # End time is inclusive
diff --git a/ethosu/vela/scheduler.py b/ethosu/vela/scheduler.py
index a375a93..de10bad 100644
--- a/ethosu/vela/scheduler.py
+++ b/ethosu/vela/scheduler.py
@@ -861,10 +861,12 @@
             return max_sched
 
         # Extract the cascades
-        cascades = [cascade for cascade in schedule.cascades.values()]
-        for cascade_info in cascades:
-            # Remove existing cascade from schedule
-            del schedule.cascades[cascade_info.end]
+        cascades = schedule.cascades
+        # Remove existing cascade from schedule
+        schedule.cascades = {}
+        for cost in schedule.cost_map.values():
+            cost.cascade = 0
+        for cascade_info in cascades.values():
             # Optimize the sub-schedule in this cascade
             opt_sub_schedule = self.optimize_sub_schedule(cascade_info, schedule, max_template, sram_limit)
             # Update the sub-schedule Op and cascade costs to the full schedule