[pypy-svn] r66679 - in pypy/branch/pyjitpl5/pypy/jit/metainterp: . test
arigo at codespeak.net
arigo at codespeak.net
Wed Jul 29 20:11:27 CEST 2009
Author: arigo
Date: Wed Jul 29 20:11:26 2009
New Revision: 66679
Modified:
pypy/branch/pyjitpl5/pypy/jit/metainterp/optimizefindnode.py
pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimizefindnode.py
Log:
Implement and test matches_instance_node() on VirtualArraySpecNode.
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/optimizefindnode.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/optimizefindnode.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/optimizefindnode.py Wed Jul 29 20:11:26 2009
@@ -363,10 +363,29 @@
class __extend__(VirtualArraySpecNode):
def make_instance_node(self):
- xxx
- def matches_instance_node(self):
- xxx
-
+ raise AssertionError, "not implemented (but not used actually)"
+ def matches_instance_node(self, exitnode):
+ if exitnode.unique == UNIQUE_NO:
+ return False
+ #
+ assert exitnode.unique == UNIQUE_ARRAY
+ assert self.arraydescr == exitnode.arraydescr
+ if len(self.items) != exitnode.arraysize:
+ # the size is known to be a mismatch
+ return False
+ #
+ d = exitnode.curitems
+ for i in range(exitnode.arraysize):
+ try:
+ if d is None:
+ raise KeyError
+ itemnode = d[i]
+ except KeyError:
+ itemnode = NodeFinder.node_escaped
+ subspecnode = self.items[i]
+ if not subspecnode.matches_instance_node(itemnode):
+ return False
+ return True
class BridgeSpecializationFinder(NodeFinder):
Modified: pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimizefindnode.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimizefindnode.py (original)
+++ pypy/branch/pyjitpl5/pypy/jit/metainterp/test/test_optimizefindnode.py Wed Jul 29 20:11:26 2009
@@ -701,6 +701,28 @@
"""
self.find_bridge(ops, 'Not', 'Not')
+ def test_bridge_array_virtual_1(self):
+ ops = """
+ [i1]
+ p1 = new_array(3, descr=arraydescr)
+ setarrayitem_gc(p1, 0, i1, descr=arraydescr)
+ jump(p1)
+ """
+ self.find_bridge(ops, 'Not', 'Not')
+ self.find_bridge(ops, 'Not', 'VArray(arraydescr, Not, Not, Not)')
+
+ def test_bridge_array_virtual_2(self):
+ ops = """
+ [i1]
+ p1 = new_array(3, descr=arraydescr)
+ setarrayitem_gc(p1, 0, i1, descr=arraydescr)
+ escape(p1)
+ jump(p1)
+ """
+ self.find_bridge(ops, 'Not', 'Not')
+ self.find_bridge(ops, 'Not', 'VArray(arraydescr, Not, Not, Not)',
+ mismatch=True)
+
class TestLLtype(BaseTestOptimizeFindNode, LLtypeMixin):
pass
More information about the Pypy-commit
mailing list