MLBEDSW-3019: Add profiling debug database

 - Added mechanism to track input to output graph transforms for
   debugging the resultant command stream.
 - Provides base implementation for MLBEDSW-2661

Signed-off-by: Tim Hall <tim.hall@arm.com>
Change-Id: I2dfe8a409fbde7ad0282bfab5acb11ba1c8b82d8
diff --git a/ethosu/vela/compiler_driver.py b/ethosu/vela/compiler_driver.py
index 9263305..e089b70 100644
--- a/ethosu/vela/compiler_driver.py
+++ b/ethosu/vela/compiler_driver.py
@@ -31,10 +31,13 @@
 from . import scheduler
 from . import tensor_allocation
 from . import weight_compressor
+from .debug_database import DebugDatabase
 from .errors import VelaError
 from .nn_graph import PassPlacement
 from .nn_graph import TensorAllocator
+from .operation import Op
 from .rewrite_graph import verify_graph_health
+from .rewrite_graph import visit_graph_post_order
 from .tensor import MemType
 from .tensor import Tensor
 
@@ -127,8 +130,18 @@
     return ((lower + upper) / 2, True)
 
 
+def _record_operator(op, arch):
+    if op.type != Op.Const:
+        DebugDatabase.add_source(op)
+
+
 def compiler_driver(nng, arch, options, scheduler_options):
     assert verify_graph_health(nng)
+
+    # Pre-optimisation operator tracking
+    for sg in nng.subgraphs:
+        visit_graph_post_order(sg.output_tensors, arch, [], [_record_operator])
+
     nng = graph_optimiser.optimise_graph_a(nng, arch, options.verbose_graph)
     assert verify_graph_health(nng)