[pypy-svn] r51851 - pypy/branch/jit-refactoring/pypy/jit/rainbow
cfbolz at codespeak.net
cfbolz at codespeak.net
Mon Feb 25 14:44:00 CET 2008
Author: cfbolz
Date: Mon Feb 25 14:43:58 2008
New Revision: 51851
Modified:
pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
Log:
small cleanup
Modified: pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py
==============================================================================
--- pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py (original)
+++ pypy/branch/jit-refactoring/pypy/jit/rainbow/codewriter.py Mon Feb 25 14:43:58 2008
@@ -552,40 +552,44 @@
hints = op.args[1].value
arg = op.args[0]
result = op.result
- if "concrete" in hints:
- assert self.hannotator.binding(arg).is_green()
- assert self.hannotator.binding(result).is_green()
+ assert len(hints) == 1
+ hint = hints.keys()[0]
+ handler = getattr(self, "handle_%s_hint" % (hint, ))
+ return handler(op, arg, result)
+
+ def handle_concrete_hint(self, op, arg, result):
+ assert self.hannotator.binding(arg).is_green()
+ assert self.hannotator.binding(result).is_green()
+ self.register_greenvar(result, self.green_position(arg))
+
+ def handle_variable_hint(self, op, arg, result):
+ assert not self.hannotator.binding(result).is_green()
+ if self.hannotator.binding(arg).is_green():
+ resultindex = self.convert_to_red(arg)
+ self.register_redvar(result, resultindex)
+ else:
+ self.register_redvar(result, self.redvar_position(arg))
+
+ def handle_deepfreeze_hint(self, op, arg, result):
+ if self.varcolor(result) == "red":
+ self.register_redvar(result, self.redvar_position(arg))
+ else:
+ self.register_greenvar(result, self.green_position(arg))
+
+ def handle_promote_hint(self, op, arg, result):
+ if self.varcolor(arg) == "green":
self.register_greenvar(result, self.green_position(arg))
return
- if "variable" in hints:
- assert not self.hannotator.binding(result).is_green()
- if self.hannotator.binding(arg).is_green():
- resultindex = self.convert_to_red(arg)
- self.register_redvar(result, resultindex)
- else:
- self.register_redvar(result, self.redvar_position(arg))
- return
- if "deepfreeze" in hints:
- if self.varcolor(result) == "red":
- self.register_redvar(result, self.redvar_position(arg))
- else:
- self.register_greenvar(result, self.green_position(arg))
- return
- if "promote" in hints:
- if self.varcolor(arg) == "green":
- self.register_greenvar(result, self.green_position(arg))
- return
- self.emit("promote")
- self.emit(self.serialize_oparg("red", arg))
- self.emit(self.promotiondesc_position(arg.concretetype))
- self.register_greenvar(result)
- return
- if "global_merge_point" in hints:
- return # the compute_merge_points function already cared
- if "reverse_split_queue" in hints:
- self.emit("reverse_split_queue")
- return
- XXX
+ self.emit("promote")
+ self.emit(self.serialize_oparg("red", arg))
+ self.emit(self.promotiondesc_position(arg.concretetype))
+ self.register_greenvar(result)
+
+ def handle_global_merge_point_hint(self, op, arg, result):
+ return # the compute_merge_points function already cared
+
+ def handle_reverse_split_queue_hint(self, op, arg, result):
+ self.emit("reverse_split_queue")
def args_of_call(self, args, colored_as):
result = []
More information about the Pypy-commit
mailing list