[pypy-svn] r63129 - in pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp: . test
fijal at codespeak.net
fijal at codespeak.net
Fri Mar 20 12:52:45 CET 2009
Author: fijal
Date: Fri Mar 20 12:52:44 2009
New Revision: 63129
Modified:
pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/compile.py
pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/specnode.py
pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/test/test_virtualizable.py
Log:
A test and a partial fix
Modified: pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/compile.py
==============================================================================
--- pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/compile.py (original)
+++ pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/compile.py Fri Mar 20 12:52:44 2009
@@ -169,9 +169,9 @@
#
res = optimize.optimize_bridge(metainterp.options, old_loops, bridge,
metainterp.cpu)
- old_loop, newboxlist, storage = res
- if old_loop is None:
+ if res is None:
return None
+ old_loop, newboxlist, storage = res
bridge.jump_to = old_loop
if newboxlist:
# recompile loop
Modified: pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/specnode.py
==============================================================================
--- pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/specnode.py (original)
+++ pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/specnode.py Fri Mar 20 12:52:44 2009
@@ -266,6 +266,15 @@
class VirtualizedSpecNode(VirtualizedOrDelayedSpecNode):
+ def matches(self, instnode):
+ for key, value in self.fields:
+ if not isinstance(value, MatchEverythingSpecNode):
+ if key not in instnode.curfields:
+ return False
+ if value is not None and not value.matches(instnode.curfields[key]):
+ return False
+ return True
+
def equals(self, other):
if not self.known_class.equals(other.known_class):
return False
Modified: pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/test/test_virtualizable.py
==============================================================================
--- pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/test/test_virtualizable.py (original)
+++ pypy/branch/virtualizable-specnodes-2/pypy/jit/metainterp/test/test_virtualizable.py Fri Mar 20 12:52:44 2009
@@ -459,6 +459,45 @@
self.check_loops(getfield_gc=0)
assert res == f(30)
+
+ def test_virtual_obj_on_always_virtual_more_bridges(self):
+ py.test.skip("Broken")
+ jitdriver = JitDriver(greens = [], reds = ['frame', 'n', 's'],
+ virtualizables = ['frame'])
+
+ class Frame(object):
+ _virtualizable2_ = True
+
+ _always_virtual_ = ['l']
+
+ def __init__(self, l):
+ self.l = l
+
+ class Stuff(object):
+ def __init__(self, elem):
+ self.elem = elem
+
+ def f(n):
+ frame = Frame([Stuff(3), Stuff(4)])
+ s = 0
+ while n > 0:
+ jitdriver.can_enter_jit(frame=frame, n=n, s=s)
+ jitdriver.jit_merge_point(frame=frame, n=n, s=s)
+ if n % 2:
+ s += frame.l[0].elem
+ frame.l[0] = Stuff(n)
+ elif n % 3:
+ s += 1
+ else:
+ s += frame.l[1].elem
+ frame.l[1] = Stuff(n)
+ n -= 1
+ return (frame.l[0].elem << 16) + frame.l[1].elem
+
+ res = self.meta_interp(f, [60], listops=True)
+ self.check_loops(getfield_gc=0)
+ assert res == f(60)
+
def test_external_read(self):
py.test.skip("Fails")
jitdriver = JitDriver(greens = [], reds = ['frame'],
More information about the Pypy-commit
mailing list