MLBEDSW-5839: Port of improved spilling behaviour

Ported the improved spilling behaviour from Regor
into Vela. This replaces use_fast_storage_for_feature_maps
with allocate_feature_maps and introduces the class called
FastStorageComponentAllocator.

Signed-off-by: erik.andersson@arm.com <erik.andersson@arm.com>
Change-Id: I34785840c905a79750a62863773015b00fb43387
diff --git a/ethosu/vela/live_range.py b/ethosu/vela/live_range.py
index 1aaaadd..fc94e9d 100644
--- a/ethosu/vela/live_range.py
+++ b/ethosu/vela/live_range.py
@@ -42,7 +42,10 @@
             self.add_tensor(tens)
 
     def __str__(self):
-        return "<live_range.LiveRange: '%s' start_time=%s, end_time=%s>" % (self.name, self.start_time, self.end_time)
+        return (
+            f"<live_range.LiveRange: {self.start_time}-{self.end_time}, "
+            f"size={self.size}, '{self.name}' #:{len(self.tensors)}>"
+        )
 
     __repr__ = __str__
 
@@ -142,10 +145,10 @@
 
     def get_temporal_memory_usage(self, target_mem_area):
         usage = np.zeros(self.update_endtime(), dtype=np.int32)
-        for rng in self.ranges.values():
-            if rng.mem_area == target_mem_area:
+        for lr in self.lrs:
+            if lr.mem_area == target_mem_area:
                 # End time is inclusive
-                usage[rng.start_time : rng.end_time + 1] += rng.size
+                usage[lr.start_time : lr.end_time + 1] += lr.size
 
         return usage