[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