[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