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

hakanardo at codespeak.net hakanardo at codespeak.net
Sun Oct 10 19:06:17 CEST 2010


Author: hakanardo
Date: Sun Oct 10 19:06:15 2010
New Revision: 77762

Modified:
   pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.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:
test_basic.py and test_virtual.py probably ok

Modified: pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py
==============================================================================
--- pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py	(original)
+++ pypy/branch/jit-unroll-loops/pypy/jit/metainterp/optimizeopt/rewrite.py	Sun Oct 10 19:06:15 2010
@@ -209,6 +209,7 @@
             # the following assert should always be true for now,
             # because invalid loops that would fail it are detected
             # earlier, in optimizefindnode.py.
+            raise InvalidLoop
             assert realclassbox.same_constant(expectedclassbox)
             return
         emit_operation = True

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	Sun Oct 10 19:06:15 2010
@@ -19,6 +19,7 @@
         if op.getopnum() == rop.JUMP:
             loop = self.optimizer.loop
             loop.preamble.operations = self.optimizer.newoperations
+            print '\n'.join([str(o) for o in loop.preamble.operations])
             self.optimizer.newoperations = []
             jump_args = op.getarglist()
             op.initarglist([])
@@ -39,7 +40,8 @@
            argmap[loop_args[i]] = jump_args[i]
 
         for v in self.optimizer.values.values():
-           v.fromstart = True
+            if not v.is_constant() and v.box:
+                v.fromstart = True
 
         self.snapshot_map ={None: None}
         
@@ -47,9 +49,11 @@
         for arg in jump_args:
             for a in self.getvalue(arg).get_forced_boxes():
                 if not isinstance(a, Const):
-                    inputargs.append(a)        
-        
+                    inputargs.append(a)
+        print "Inputargs: ", inputargs
+
         for op in loop_operations:
+            #import pdb; pdb.set_trace()
             newop = op.clone()
             newop.initarglist([self.inline_arg(a) for a in newop.getarglist()])
             if op.result:
@@ -73,14 +77,20 @@
             self.emit_operation(newop)
 
             for op in self.optimizer.newoperations[current:]:
+                print "E: ", op
                 if op.is_guard():
                     op.getdescr().rd_snapshot = None #FIXME: In the right place?
-                    
-                for a in op.getarglist():
+                args = op.getarglist()
+                if op.is_guard():
+                    args = args + op.getfailargs()
+                for a in args:
                     if not isinstance(a, Const) and a in self.optimizer.values:
                         v = self.getvalue(a)
                         if v.fromstart and a not in inputargs:
+                            print "Arg: ", a
                             inputargs.append(a)
+                            if op.getopnum() == rop.JUMP:
+                                op.initarglist(op.getarglist() + [argmap[a]])
 
         return inputargs
 

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	Sun Oct 10 19:06:15 2010
@@ -122,11 +122,14 @@
                 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
+        if self.box is None:
+            lst = self._get_field_descr_list()
+            fieldboxes = []
+            for ofs in lst:
+                fieldboxes.extend(self._fields[ofs].get_forced_boxes())
+            return fieldboxes
+        else:
+            return [self.box]
 
 
 class VirtualValue(AbstractVirtualStructValue):

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	Sun Oct 10 19:06:15 2010
@@ -49,6 +49,24 @@
         res = self.meta_interp(f, [10])
         assert res == f(10)
         self.check_loop_count(1)
+        self.check_loops(new=0, float_add=0)
+
+    def test_virtualized_float2(self):
+        myjitdriver = JitDriver(greens = [], reds = ['n', 'node'])
+        def f(n):
+            node = self._new()
+            node.floatval = 0.0
+            while n > 0:
+                myjitdriver.can_enter_jit(n=n, node=node)
+                myjitdriver.jit_merge_point(n=n, node=node)
+                next = self._new()
+                next.floatval = node.floatval + .5
+                node = next
+                n -= 1
+            return node.floatval
+        res = self.meta_interp(f, [10])
+        assert res == f(10)
+        self.check_loop_count(1)
         self.check_loops(new=0, float_add=1)
 
     def test_virtualized_2(self):
@@ -143,10 +161,10 @@
                 node = next
                 n -= 1
             return node.value
-        res = self.meta_interp(f, [11], policy=StopAtXPolicy(externfn))
-        assert res == f(11)
+        res = self.meta_interp(f, [15], policy=StopAtXPolicy(externfn))
+        assert res == f(15)
         self.check_loop_count(2)
-        self.check_loops(**{self._new_op: 2})     # XXX was 1
+        self.check_loops(**{self._new_op: 1})
         self.check_loops(int_mul=0, call=1)
 
     def test_two_virtuals(self):



More information about the Pypy-commit mailing list