[pypy-svn] pypy jit-virtual_state: this should be based on key_boxes

hakanardo commits-noreply at bitbucket.org
Tue Feb 15 20:37:46 CET 2011


Author: Hakan Ardo <hakan at debian.org>
Branch: jit-virtual_state
Changeset: r41996:3f71bc1c4427
Date: 2011-02-15 20:34 +0100
http://bitbucket.org/pypy/pypy/changeset/3f71bc1c4427/

Log:	this should be based on key_boxes

diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -161,10 +161,11 @@
         return self.optimizer.getvalue(box)
 
     def state(self, box):
+        value = self.getvalue(box)
+        box = value.get_key_box()
         try:
             info = self.info[box]
         except KeyError:
-            value = self.getvalue(box)
             if value.is_virtual():
                 self.info[box] = info = value.make_virtual_info(self, None)
                 flds = self.fieldboxes[box]

diff --git a/pypy/jit/metainterp/test/test_virtual.py b/pypy/jit/metainterp/test/test_virtual.py
--- a/pypy/jit/metainterp/test/test_virtual.py
+++ b/pypy/jit/metainterp/test/test_virtual.py
@@ -703,10 +703,64 @@
                 n -= 1
             return node[0] + node[1]
         assert self.meta_interp(f, [40]) == f(40)
-        
+
+    def FIXME_why_does_this_force(self):
+        mydriver = JitDriver(reds = ['i', 'j'], greens = []) 
+        def f():
+            i = self._new()
+            i.value = 0
+            j = self._new()
+            while i.value < 10:
+                mydriver.can_enter_jit(i=i, j=j)
+                mydriver.jit_merge_point(i=i, j=j)
+                nxt = self._new()
+                nxt.value = i.value + 1
+                i = nxt
+                j = nxt
+            return i.value + j.value
+        assert self.meta_interp(f, []) == 20
+
+    def FIXME_why_does_this_force2(self):
+        mydriver = JitDriver(reds = ['i', 'j'], greens = []) 
+        def f():
+            i = self._new()
+            i.value = 0
+            j = self._new()
+            j.value = 0
+            while i.value < 10:
+                mydriver.can_enter_jit(i=i, j=j)
+                mydriver.jit_merge_point(i=i, j=j)
+                nxt = self._new()
+                nxt.value = i.value + 1
+                i = nxt
+                nxt = self._new()
+                nxt.value = i.value + 1
+                j = nxt
+                i = j
+            return i.value + j.value
+        assert self.meta_interp(f, []) == 20
+                
 
 class VirtualMiscTests:
 
+    def test_multiple_equal_virtuals(self):
+        mydriver = JitDriver(reds = ['i'], greens = [])
+        class A:
+            pass
+        def f():
+            i = A()
+            i.value = 0
+            while i.value < 10:
+                mydriver.can_enter_jit(i=i)
+                mydriver.jit_merge_point(i=i)
+                nxt = A()
+                nxt.value = i.value + 1
+                tmp = A()
+                tmp.ref = nxt
+                i = tmp.ref
+            return i.value
+        assert self.meta_interp(f, []) == 10
+
     def test_guards_around_forcing(self):
         class A(object):
             def __init__(self, x):
@@ -756,6 +810,23 @@
         expected = f(70)
         assert r == expected
 
+    def test_arraycopy_disappears(self):
+        mydriver = JitDriver(reds = ['i'], greens = []) 
+        def f():
+            i = 0
+            while i < 10:
+                mydriver.can_enter_jit(i=i)
+                mydriver.jit_merge_point(i=i)                
+                t = (1, 2, 3, i + 1)
+                t2 = t[:]
+                del t
+                i = t2[3]
+                del t2
+            return i
+        assert self.meta_interp(f, []) == 10
+        self.check_loops(new_array=0)
+
+
 # ____________________________________________________________
 # Run 1: all the tests instantiate a real RPython class
 


More information about the Pypy-commit mailing list