[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