[pypy-svn] pypy jit-virtual_state: array support
hakanardo
commits-noreply at bitbucket.org
Mon Feb 7 08:23:47 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-virtual_state
Changeset: r41663:102f57821f4e
Date: 2011-02-07 07:57 +0100
http://bitbucket.org/pypy/pypy/changeset/102f57821f4e/
Log: array support
diff --git a/pypy/jit/metainterp/resume.py b/pypy/jit/metainterp/resume.py
--- a/pypy/jit/metainterp/resume.py
+++ b/pypy/jit/metainterp/resume.py
@@ -562,6 +562,16 @@
for i in self.fieldnums:
debug_print("\t\t", str(untag(i)))
+ def generalization_of(self, other):
+ if self.arraydescr is not other.arraydescr:
+ return False
+ if len(self.fieldstate) != len(other.fieldstate):
+ return False
+ for i in range(len(self.fieldstate)):
+ if not self.fieldstate[i].generalization_of(other.fieldstate[i]):
+ return False
+ return True
+
class VStrPlainInfo(AbstractVirtualInfo):
"""Stands for the string made out of the characters of all fieldnums."""
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
@@ -566,6 +566,38 @@
def g(n1, n2, s):
return f(n1, s) + f(n2, s)
# FIXME: Try the case where we need to call the second version from the interpreter
+
+ def test_virtual_array_bridge(self):
+ myjitdriver = JitDriver(greens = [], reds = ['n', 'node'])
+ def f(n):
+ node = [42, 42]
+ while n > 0:
+ myjitdriver.can_enter_jit(n=n, node=node)
+ myjitdriver.jit_merge_point(n=n, node=node)
+ if (n>>3) & 1:
+ node = [node[0], node[1] + n]
+ else:
+ node = [node[0] + n, node[1]]
+ n -= 1
+ return node[0] + node[1]
+ assert self.meta_interp(f, [40]) == f(40)
+
+ def test_virtual_array_different_bridge(self):
+ myjitdriver = JitDriver(greens = [], reds = ['n', 'node'])
+ def f(n):
+ node = [42, 42]
+ while n > 0:
+ myjitdriver.can_enter_jit(n=n, node=node)
+ myjitdriver.jit_merge_point(n=n, node=node)
+ if (n>>3) & 1:
+ node = [node[0], node[1] + n]
+ else:
+ node = [node[0] + n, node[-1], node[0] + node[1]]
+ n -= 1
+ return node[0] + node[1]
+ assert self.meta_interp(f, [40]) == f(40)
+
+
class VirtualMiscTests:
More information about the Pypy-commit
mailing list