[pypy-svn] r77744 - in pypy/branch/jit-unroll-loops/pypy/jit/metainterp: optimizeopt test

hakanardo at codespeak.net hakanardo at codespeak.net
Sat Oct 9 15:33:51 CEST 2010


Author: hakanardo
Date: Sat Oct  9 15:33:49 2010
New Revision: 77744

Modified:
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_virtual.py
Log:
support some virtuals

Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py	(original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/optimizer.py	Sat Oct  9 15:33:49 2010
@@ -47,6 +47,10 @@
     def get_key_box(self):
         return self.box
 
+    # FIXME: Reise get_args_for_fail instead?
+    def get_forced_boxes(self):
+        return [self.force_box()]
+
     def get_args_for_fail(self, modifier):
         pass
 

Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py	(original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/unroll.py	Sat Oct  9 15:33:49 2010
@@ -14,13 +14,13 @@
         if not self.enabled:
             self.emit_operation(op)
             return
-            
+
         if op.getopnum() == rop.JUMP:
             loop = self.optimizer.loop
             loop.preamble.operations = self.optimizer.newoperations
             self.optimizer.newoperations = []
             jump_args = op.getarglist()
-            inputargs = self.inline(loop.preamble.operations + [op],
+            inputargs = self.inline(loop.operations,
                                     loop.inputargs, jump_args)
             loop.inputargs = inputargs
             jmp = ResOperation(rop.JUMP, loop.inputargs[:], None)
@@ -38,7 +38,10 @@
         for v in self.optimizer.values.values():
            v.fromstart = True
 
-        inputargs = jump_args[:]
+        inputargs = []
+        for arg in jump_args:
+            inputargs.extend(self.getvalue(arg).get_forced_boxes())
+        
         for op in loop_operations:
             newop = op.clone()
             for i in range(op.numargs()):
@@ -55,9 +58,10 @@
                 descr.rd_numb = None
 
             if newop.getopnum() == rop.JUMP:
-                args = newop.getarglist()
+                args = []
+                for arg in newop.getarglist():
+                    args.extend(self.getvalue(arg).get_forced_boxes())
                 newop.initarglist(args + inputargs[len(args):])
-                # FIXME: Assumes no virtuals
 
             current = len(self.optimizer.newoperations)
             self.emit_operation(newop)

Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py	(original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/virtualize.py	Sat Oct  9 15:33:49 2010
@@ -121,6 +121,13 @@
                 fieldvalue = self._fields[ofs]
                 fieldvalue.get_args_for_fail(modifier)
 
+    def get_forced_boxes(self):
+        lst = self._get_field_descr_list()
+        fieldboxes = []
+        for ofs in lst:
+            fieldboxes.extend(self._fields[ofs].get_forced_boxes())
+        return fieldboxes
+
 
 class VirtualValue(AbstractVirtualStructValue):
     level = LEVEL_KNOWNCLASS

Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_virtual.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_virtual.py	(original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/test/test_virtual.py	Sat Oct  9 15:33:49 2010
@@ -12,7 +12,7 @@
     def _freeze_(self):
         return True
 
-    def test_virtualized(self):
+    def test_virtualized1(self):
         myjitdriver = JitDriver(greens = [], reds = ['n', 'node'])
         def f(n):
             node = self._new()



More information about the Pypy-commit mailing list