Sfoglia il codice sorgente

Support 'resolve-local', 'load' and 'store' CFG value->tree lowering

jonathanvdc 8 anni fa
parent
commit
35ba529c80
1 ha cambiato i file con 18 aggiunte e 1 eliminazioni
  1. 18 1
      kernel/modelverse_jit/cfg_to_tree.py

+ 18 - 1
kernel/modelverse_jit/cfg_to_tree.py

@@ -365,6 +365,11 @@ class LoweringState(object):
                 self.load_definition(value.root_node)),
             tree_ir.LoadLocalInstruction(local_name))
 
+    def lower_resolve_local(self, value):
+        """Lowers a 'resolve-local' value."""
+        return tree_ir.LoadLocalInstruction(
+            self.local_name_map.get_local_name(value.variable.node_id))
+
     def lower_alloc_root_node(self, value):
         """Lowers an 'alloc-root-node' value."""
         local_name = tree_ir.VariableName(self.__get_root_node_name(value))
@@ -381,12 +386,24 @@ class LoweringState(object):
         """Lowers a 'free-root-node' value."""
         return tree_ir.DeleteEdgeInstruction(self.__get_root_edge_name(value.root_node))
 
+    def lower_load_pointer(self, value):
+        """Lowers a 'load' value."""
+        return bytecode_to_tree.create_access(self.load_definition(value.pointer))
+
+    def lower_store_pointer(self, value):
+        """Lowers a 'store' value."""
+        return bytecode_to_tree.create_assign(
+            self.load_definition(value.pointer), self.load_definition(value.value))
+
     value_lowerings = {
         cfg_ir.Literal : lower_literal,
         cfg_ir.CheckLocalExists : lower_check_local_exists,
         cfg_ir.DeclareLocal : lower_declare_local,
+        cfg_ir.ResolveLocal : lower_resolve_local,
         cfg_ir.AllocateRootNode : lower_alloc_root_node,
-        cfg_ir.DeallocateRootNode : lower_free_root_node
+        cfg_ir.DeallocateRootNode : lower_free_root_node,
+        cfg_ir.LoadPointer : lower_load_pointer,
+        cfg_ir.StoreAtPointer : lower_store_pointer
     }
 
     def lower_flow(self, flow):