Browse Source

Print CFG alongside function bodies

jonathanvdc 8 years ago
parent
commit
6ae853a3fc
1 changed files with 14 additions and 0 deletions
  1. 14 0
      kernel/modelverse_jit/jit.py

+ 14 - 0
kernel/modelverse_jit/jit.py

@@ -2,6 +2,8 @@ import modelverse_kernel.primitives as primitive_functions
 import modelverse_jit.bytecode_ir as bytecode_ir
 import modelverse_jit.bytecode_parser as bytecode_parser
 import modelverse_jit.bytecode_to_tree as bytecode_to_tree
+import modelverse_jit.bytecode_to_cfg as bytecode_to_cfg
+import modelverse_jit.cfg_optimization as cfg_optimization
 import modelverse_jit.tree_ir as tree_ir
 import modelverse_jit.runtime as jit_runtime
 import keyword
@@ -435,6 +437,18 @@ class ModelverseJit(object):
             self, body_id, task_root, body_param_dict,
             self.max_instructions)
         constructed_body, = yield [("CALL_ARGS", [state.analyze, (body_bytecode,)])]
+        if self.jit_code_log_function is not None:
+            bytecode_analyzer = bytecode_to_cfg.AnalysisState()
+            bytecode_analyzer.analyze(body_bytecode)
+            self.jit_code_log_function(
+                "CFG for function '%s' at '%d':\n%s" % (
+                    function_name, body_id,
+                    '\n'.join(
+                        map(
+                            str,
+                            cfg_optimization.get_all_reachable_blocks(
+                                bytecode_analyzer.entry_point)))))
+
         yield [("END_TRY", [])]
         del self.compilation_dependencies[body_id]