Procházet zdrojové kódy

Introduced create-node CFG values

jonathanvdc před 8 roky
rodič
revize
9801da4d04

+ 14 - 0
kernel/modelverse_jit/cfg_ir.py

@@ -520,6 +520,20 @@ class Read(Value):
     def __str__(self):
         return 'read %s' % (self.node.ref_str())
 
+class CreateNode(Value):
+    """A value that creates a new node."""
+    def __init__(self, value):
+        Value.__init__(self)
+        self.value = value
+        assert isinstance(value, Definition)
+
+    def get_dependencies(self):
+        """Gets all definitions and instructions on which this instruction depends."""
+        return [self.value]
+
+    def __str__(self):
+        return 'create-node %s' % (self.value.ref_str())
+
 class Input(Value):
     """A value that pops a node from the input queue."""
     def get_dependencies(self):

+ 9 - 0
kernel/modelverse_jit/cfg_to_tree.py

@@ -466,6 +466,14 @@ class LoweringState(object):
         return tree_ir.ReadValueInstruction(
             self.load_definition(value.node))
 
+    def lower_create_node(self, value):
+        """Lowers a 'create-node' value."""
+        if value.value.has_value():
+            return tree_ir.CreateNodeWithValueInstruction(
+                self.load_definition(value.value))
+        else:
+            return tree_ir.CreateNodeInstruction()
+
     def lower_binary(self, value):
         """Lowers a 'binary' value."""
         return tree_ir.BinaryInstruction(
@@ -510,6 +518,7 @@ class LoweringState(object):
         cfg_ir.LoadPointer : lower_load_pointer,
         cfg_ir.StoreAtPointer : lower_store_pointer,
         cfg_ir.Read : lower_read,
+        cfg_ir.CreateNode : lower_create_node,
         cfg_ir.Binary : lower_binary,
         cfg_ir.Input : lower_input,
         cfg_ir.Output : lower_output,