浏览代码

Try harder to inline values during CFG->tree lowering

jonathanvdc 8 年之前
父节点
当前提交
4db86cf6e4
共有 1 个文件被更改,包括 7 次插入4 次删除
  1. 7 4
      kernel/modelverse_jit/cfg_to_tree.py

+ 7 - 4
kernel/modelverse_jit/cfg_to_tree.py

@@ -317,8 +317,8 @@ class LoweringState(object):
     def __create_value_load(self, value):
         """Creates a tree that loads the given value."""
         if value.has_value():
-            if isinstance(value, cfg_ir.Literal):
-                return self.lower_literal(value)
+            if isinstance(value, LoweringState.inline_value_types):
+                return self.lower_value(value)
             else:
                 return tree_ir.LoadLocalInstruction(None)
         else:
@@ -346,10 +346,11 @@ class LoweringState(object):
 
     def lower_definition(self, definition):
         """Lowers the given definition to a tree."""
-        if isinstance(definition.value, cfg_ir.Definition):
+        instruction = definition.value
+        if (isinstance(instruction, cfg_ir.Definition)
+                or isinstance(instruction, LoweringState.inline_value_types)):
             return tree_ir.EmptyInstruction()
 
-        instruction = definition.value
         tree_instruction = self.lower_value(instruction)
         def_load = self.load_definition(definition)
         if isinstance(def_load, tree_ir.LocalInstruction):
@@ -497,6 +498,8 @@ class LoweringState(object):
             self.load_definition(value.target),
             [(name, self.load_definition(arg)) for name, arg in value.argument_list])
 
+    inline_value_types = (cfg_ir.Literal, cfg_ir.ResolveLocal, cfg_ir.FunctionParameter)
+
     value_lowerings = {
         cfg_ir.Literal : lower_literal,
         cfg_ir.CheckLocalExists : lower_check_local_exists,