[pypy-svn] r65377 - in pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp: . test

fijal at codespeak.net fijal at codespeak.net
Sun May 24 03:06:55 CEST 2009


Author: fijal
Date: Sun May 24 03:06:55 2009
New Revision: 65377

Modified:
   pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp/optimize2.py
   pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp/test/test_optimize2.py
Log:
Add a guard_class removal


Modified: pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp/optimize2.py
==============================================================================
--- pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp/optimize2.py	(original)
+++ pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp/optimize2.py	Sun May 24 03:06:55 2009
@@ -31,8 +31,8 @@
         # NOT_RPYTHON
         self.optimizations = [[] for i in range(rop._LAST)]
         for opt in opts:
-            for name, opnum in opname.iteritems():
-                meth = getattr(opt, 'optimize_' + name, None)
+            for opnum, name in opname.iteritems():
+                meth = getattr(opt, 'optimize_' + name.lower(), None)
                 if meth is not None:
                     self.optimizations[opnum].append(meth)
 
@@ -127,6 +127,14 @@
         self.find_nodes()
         self.optimize_operations()
 
+class ConsecutiveGuardClassRemoval(object):
+    def optimize_guard_class(self, op, spec):
+        instnode = spec.getnode(op.args[0])
+        if instnode.cls is not None:
+            return None
+        instnode.cls = op.args[1]
+        return op
+
 specializer = Specializer([])
 
 def optimize_loop(options, old_loops, loop, cpu=None, spec=specializer):

Modified: pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp/test/test_optimize2.py
==============================================================================
--- pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp/test/test_optimize2.py	(original)
+++ pypy/branch/pyjitpl5-experiments/pypy/jit/metainterp/test/test_optimize2.py	Sun May 24 03:06:55 2009
@@ -8,7 +8,8 @@
      ConstInt, BoxInt, BoxObj, ConstObj
 from pypy.jit.backend.llgraph import runner
 
-from pypy.jit.metainterp.optimize2 import optimize_loop
+from pypy.jit.metainterp.optimize2 import (optimize_loop,
+     ConsecutiveGuardClassRemoval, Specializer)
 from pypy.jit.metainterp.test.test_optimize import equaloplists, ANY
 
 from pypy.jit.metainterp.test.oparser import parse
@@ -28,6 +29,8 @@
     nodebox = BoxPtr(lltype.cast_opaque_ptr(llmemory.GCREF, node))
     nodedescr = cpu.fielddescrof(NODE, 'value')
 
+    namespace = locals()
+
 class OOtypeMixin(object):
     cpu = runner.OOtypeCPU(None)
 
@@ -42,18 +45,19 @@
     nodebox = BoxObj(ootype.cast_to_object(node))
     nodedescr = cpu.fielddescrof(NODE, 'value')
 
-
+    namespace = locals()
 
 class BaseTestOptimize2(object):
 
-    def optimize(self, lst):
-        loop = parse(lst, self.cpu, self.__dict__)
-        optimize_loop(None, [], loop)
+    def optimize(self, lst, optimizations_enabled=[]):
+        loop = parse(lst, self.cpu, self.namespace)
+        optimize_loop(None, [], loop, self.cpu,
+                      spec=Specializer(optimizations_enabled))
         return loop.operations
 
     def assert_equal(self, optimized, expected):
         equaloplists(optimized,
-                     parse(expected, self.cpu, self.__dict__).operations)
+                     parse(expected, self.cpu, self.namespace).operations)
 
     def test_basic_constant_folding(self):
         pre_op = """
@@ -64,20 +68,21 @@
         self.assert_equal(self.optimize(pre_op), expected)
     
     def test_remove_guard_class(self):
-        py.test.skip("not yet")
         pre_op = """
         [p0]
-        guard_class(p0, Const(vtable))
+        guard_class(p0, ConstAddr(node_vtable))
           fail()
-        guard_class(p0, Const(vtable))
+        guard_class(p0, ConstAddr(node_vtable))
           fail()
         """
         expected = """
         [p0]
-        guard_class(p0, Const(vtable))
+        guard_class(p0, ConstAddr(node_vtable))
           fail()
         """
-        self.equal(self.optimize(pre_op, []), expected)
+        self.assert_equal(self.optimize(pre_op,
+                                        [ConsecutiveGuardClassRemoval()]),
+                          expected)
 
     def test_remove_consecutive_guard_value_constfold(self):
         py.test.skip("not yet")
@@ -139,4 +144,5 @@
     pass
 
 class TestOOtype(OOtypeMixin, BaseTestOptimize2):
-    pass
+    def setup_class(cls):
+        py.test.skip("XXX Fix me")



More information about the Pypy-commit mailing list