[pypy-svn] r66378 - in pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp: . test

arigo at codespeak.net arigo at codespeak.net
Sat Jul 18 20:13:59 CEST 2009


Author: arigo
Date: Sat Jul 18 20:13:59 2009
New Revision: 66378

Modified:
   pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizefindnode.py
   pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py
Log:
More tests.  One small fix.


Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizefindnode.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizefindnode.py	(original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizefindnode.py	Sat Jul 18 20:13:59 2009
@@ -233,7 +233,7 @@
 
 class __extend__(NotSpecNode):
     def make_instance_node(self):
-        return NodeFinder.node_escaped
+        return InstanceNode(escaped=True)
     def matches_instance_node(self, exitnode):
         return True
 

Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py	(original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py	Sat Jul 18 20:13:59 2009
@@ -167,6 +167,7 @@
         return True
 
     def find_nodes(self, ops, spectext, boxkinds=None):
+        assert boxkinds is None or isinstance(boxkinds, dict)
         loop = self.parse(ops, boxkinds=boxkinds)
         perfect_specialization_finder = PerfectSpecializationFinder()
         perfect_specialization_finder.find_nodes_loop(loop)
@@ -490,6 +491,7 @@
 
     def find_bridge(self, ops, inputspectext, outputspectext, boxkinds=None,
                     mismatch=False):
+        assert boxkinds is None or isinstance(boxkinds, dict)
         inputspecnodes = self.unpack_specnodes(inputspectext)
         outputspecnodes = self.unpack_specnodes(outputspectext)
         bridge = self.parse(ops, boxkinds=boxkinds)
@@ -617,6 +619,57 @@
                             Virtual(node_vtable, valuedescr=Not)''',
                          mismatch=True)    # duplicate p0
 
+    def test_bridge_guard_class(self):
+        ops = """
+        [p1]
+        p2 = getfield_gc(p1, descr=nextdescr)
+        guard_class(p2, ConstClass(node_vtable))
+            fail()
+        jump(p2)
+        """
+        self.find_bridge(ops, 'Not', 'Not')
+        self.find_bridge(ops, 'Not', 'Fixed(node_vtable)')
+        self.find_bridge(ops, 'Virtual(node_vtable2, nextdescr=Not)',
+                              'Fixed(node_vtable)')
+        self.find_bridge(ops,
+            '''Virtual(node_vtable,
+                       nextdescr=Virtual(node_vtable,
+                                         nextdescr=Fixed(node_vtable2)))''',
+            '''Virtual(node_vtable,
+                       nextdescr=Fixed(node_vtable2))''')
+        #
+        self.find_bridge(ops, 'Not', 'Virtual(node_vtable)',
+                         mismatch=True)
+
+    def test_bridge_unused(self):
+        ops = """
+        []
+        p1 = new_with_vtable(ConstClass(node_vtable), descr=nodesize)
+        p2 = new_with_vtable(ConstClass(node_vtable), descr=nodesize)
+        p3 = new_with_vtable(ConstClass(node_vtable), descr=nodesize)
+        setfield_gc(p1, p2, descr=nextdescr)
+        setfield_gc(p2, p3, descr=nextdescr)
+        jump(p1)
+        """
+        self.find_bridge(ops, '',
+            '''Not''')
+        self.find_bridge(ops, '',
+            '''Virtual(node_vtable,
+                       nextdescr=Not)''')
+        self.find_bridge(ops, '',
+            '''Virtual(node_vtable,
+                       nextdescr=Virtual(node_vtable,
+                                         nextdescr=Not))''')
+        self.find_bridge(ops, '',
+            '''Virtual(node_vtable,
+                       nextdescr=Virtual(node_vtable,
+                                         nextdescr=Virtual(node_vtable)))''')
+        self.find_bridge(ops, '',
+            '''Virtual(node_vtable,
+                       nextdescr=Virtual(node_vtable,
+                                         nextdescr=Virtual(node_vtable,
+                                                           nextdescr=Not)))''')
+
 
 class TestLLtype(BaseTestOptimize, LLtypeMixin):
     pass



More information about the Pypy-commit mailing list