[pypy-svn] r36261 - pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter
arigo at codespeak.net
arigo at codespeak.net
Mon Jan 8 13:38:26 CET 2007
Author: arigo
Date: Mon Jan 8 13:38:21 2007
New Revision: 36261
Modified:
pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter/rtimeshift.py
pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter/transform.py
Log:
(mwh, arigo)
Start porting the timeshifter to use the new rgenop interface.
Modified: pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter/rtimeshift.py (original)
+++ pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter/rtimeshift.py Mon Jan 8 13:38:21 2007
@@ -330,7 +330,8 @@
node = resuming.path.pop()
assert isinstance(node, PromotionPathSplit)
return node.answer
- later_builder = jitstate.curbuilder.jump_if_false(exitgvar)
+ locals_gv = jitstate.get_locals_gv()
+ later_builder = jitstate.curbuilder.jump_if_false(exitgvar, locals_gv)
jitstate2 = jitstate.split(later_builder, resumepoint, list(greens_gv))
if resuming is None:
node = jitstate.promotion_path
@@ -864,6 +865,15 @@
self.exc_type_box = self.exc_type_box .replace(memo)
self.exc_value_box = self.exc_value_box.replace(memo)
+ def get_locals_gv(self):
+ # get all the genvars that are "alive", i.e. stored in the JITState
+ # or the VirtualFrames
+ incoming = []
+ memo = rvalue.enter_block_memo()
+ self.enter_block(incoming, memo)
+ locals_gv = [redbox.genvar for redbox in incoming]
+ return locals_gv
+
def residual_ll_exception(self, ll_evalue):
ll_etype = ll_evalue.typeptr
Modified: pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter/transform.py
==============================================================================
--- pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter/transform.py (original)
+++ pypy/branch/jit-codegen-refactor/pypy/jit/timeshifter/transform.py Mon Jan 8 13:38:21 2007
@@ -290,19 +290,19 @@
resulttype = lltype.Bool)
block.exitswitch = v_flag
- true_block = Block([])
- true_link = Link([], true_block)
- true_link.exitcase = True
- true_link.llexitcase = True
- block.recloseblock(link_f, true_link)
-
- reds, greens = self.sort_by_color(link_t.args)
- self.genop(true_block, 'save_locals', reds)
- self.genop(true_block, 'enter_block', [])
- true_block.closeblock(Link(link_t.args, link_t.target))
+## true_block = Block([])
+## true_link = Link([], true_block)
+## true_link.exitcase = True
+## true_link.llexitcase = True
+## block.recloseblock(link_f, true_link)
+
+## reds, greens = self.sort_by_color(link_t.args)
+## self.genop(true_block, 'save_locals', reds)
+## self.genop(true_block, 'enter_block', [])
+## true_block.closeblock(Link(link_t.args, link_t.target))
- SSA_to_SSI({block : True, # reachable from outside
- true_block: False}, self.hannotator)
+## SSA_to_SSI({block : True, # reachable from outside
+## true_block: False}, self.hannotator)
def get_resume_point_link(self, block):
try:
More information about the Pypy-commit
mailing list