Author: Hakan Ardo <ha...@debian.org> Branch: jit-usable_retrace_3 Changeset: r58716:9e1fa569c5dd Date: 2012-10-24 04:54 +0200 http://bitbucket.org/pypy/pypy/changeset/9e1fa569c5dd/
Log: VirtualValues diff --git a/pypy/jit/metainterp/test/test_virtualstate.py b/pypy/jit/metainterp/test/test_virtualstate.py --- a/pypy/jit/metainterp/test/test_virtualstate.py +++ b/pypy/jit/metainterp/test/test_virtualstate.py @@ -3,6 +3,7 @@ from pypy.jit.metainterp.optimize import InvalidLoop from pypy.jit.metainterp.optimizeopt.virtualstate import VirtualStateInfo, VStructStateInfo, \ VArrayStateInfo, NotVirtualStateInfo, VirtualState, ShortBoxes, VirtualStateAdder +from pypy.jit.metainterp.optimizeopt.virtualize import VirtualValue from pypy.jit.metainterp.optimizeopt.optimizer import OptValue from pypy.jit.metainterp.history import BoxInt, BoxFloat, BoxPtr, ConstInt, ConstPtr, AbstractValue from pypy.rpython.lltypesystem import lltype, llmemory @@ -1167,17 +1168,24 @@ class FakeCPU(object): pass +class FakeDescr(object): + pass class FakeOptimizer(object): unknown_ptr1, unknown_ptr2 = BoxPtr(), BoxPtr() unknown_int1, unknown_int2 = BoxInt(1), BoxInt(2) - const_int0, const_int1 = ConstInt(0), ConstInt(1) + const_int0, const_int1, const_int2 = ConstInt(0), ConstInt(1), ConstInt(2) + node_class = ConstInt(42) + node1, node2 = BoxPtr(), BoxPtr() + descr1, descr2 = FakeDescr(), FakeDescr() def __init__(self): self.values = {} + self.values[self.node1] = VirtualValue(self.cpu, self.node_class, self.node1) + self.values[self.node2] = VirtualValue(self.cpu, self.node_class, self.node2) for n in dir(self): box = getattr(self, n) - if isinstance(box, AbstractValue): + if isinstance(box, AbstractValue) and box not in self.values: self.values[box] = OptValue(box) def getvalue(self, box): @@ -1207,6 +1215,16 @@ return isinstance(other, NotVirtualStateInfo) and other.level == LEVEL_CONSTANT and \ other.constbox.same_constant(self.value) +class Virtual(object): + def __init__(self, known_class, fields): + self.known_class = known_class + self.fields = fields + + def __eq__(self, other): + return isinstance(other, VirtualStateInfo) and \ + other.known_class.same_constant(self.known_class) and \ + {k:v for k,v in zip(other.fielddescrs, other.fieldstate)} == self.fields + class TestGuardedGenerlaization: def setup_method(self, m): self.optimizer = FakeOptimizer() @@ -1239,6 +1257,17 @@ [o.unknown_ptr2, o.const_int1], [Unknown, Unknown]) + def test_virtual_simple(self): + o = self.optimizer + o.getvalue(o.node1).setfield(o.descr2, o.getvalue(o.const_int1)) + o.getvalue(o.node2).setfield(o.descr2, o.getvalue(o.const_int2)) + self.combine([o.node1, o.node2], + [o.node1, o.node2], + [Virtual(o.node_class, {o.descr2: Const(1)}), + Virtual(o.node_class, {o.descr2: Const(2)})]) + self.combine([o.node1], [o.node2], [Virtual(o.node_class, {o.descr2: Unknown})]) + + _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit