[pypy-svn] r66457 - in pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp: . test
arigo at codespeak.net
arigo at codespeak.net
Mon Jul 20 20:18:45 CEST 2009
Author: arigo
Date: Mon Jul 20 20:18:45 2009
New Revision: 66457
Modified:
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/history.py
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py
Log:
Pass the next test.
Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/history.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/history.py (original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/history.py Mon Jul 20 20:18:45 2009
@@ -317,6 +317,8 @@
def repr_rpython(self):
return repr_rpython(self, 'cp')
+CONST_NULL = ConstPtr(ConstPtr.value)
+
class ConstObj(Const):
type = OBJ
value = ootype.NULL
@@ -360,6 +362,8 @@
def repr_rpython(self):
return repr_rpython(self, 'co')
+CONST_NULL_OBJ = ConstObj(ConstObj.value)
+
class Box(AbstractValue):
__slots__ = ()
_extended_display = True
Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py (original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizeopt.py Mon Jul 20 20:18:45 2009
@@ -1,5 +1,5 @@
from pypy.jit.metainterp.history import Const, Box, BoxInt, BoxPtr, BoxObj
-from pypy.jit.metainterp.history import AbstractValue
+from pypy.jit.metainterp import history
from pypy.jit.metainterp.resoperation import rop
from pypy.jit.metainterp.specnode import SpecNode
from pypy.jit.metainterp.specnode import VirtualInstanceSpecNode
@@ -19,7 +19,7 @@
# ____________________________________________________________
-class VirtualBox(AbstractValue):
+class VirtualBox(history.AbstractValue):
def __init__(self):
self.fields = av_newdict() # ofs -> Box
@@ -30,7 +30,7 @@
class __extend__(SpecNode):
def setup_virtual_node(self, optimizer, box, newinputargs):
newinputargs.append(box)
- def teardown_virtual_node(self, box, newexitargs):
+ def teardown_virtual_node(self, optimizer, box, newexitargs):
newexitargs.append(box)
class __extend__(VirtualInstanceSpecNode):
@@ -40,11 +40,14 @@
subbox = optimizer.make_box(ofs)
vbox.fields[ofs] = subbox
subspecnode.setup_virtual_node(optimizer, subbox, newinputargs)
- def teardown_virtual_node(self, box, newexitargs):
+ def teardown_virtual_node(self, optimizer, box, newexitargs):
assert isinstance(box, VirtualBox)
for ofs, subspecnode in self.fields:
- # XXX if ofs not in box.fields:...
- subspecnode.teardown_virtual_node(box.fields[ofs], newexitargs)
+ try:
+ subbox = box.fields[ofs]
+ except KeyError:
+ subbox = optimizer.make_const(ofs)
+ subspecnode.teardown_virtual_node(optimizer, subbox, newexitargs)
class Optimizer(object):
@@ -107,6 +110,15 @@
else:
return BoxInt()
+ def make_const(self, fieldofs):
+ if fieldofs.is_pointer_field():
+ if not self.cpu.is_oo:
+ return history.CONST_NULL
+ else:
+ return history.CONST_NULL_OBJ
+ else:
+ return history.CONST_FALSE
+
def known_nonnull(self, box):
if isinstance(box, Box):
return box in self._known_classes
@@ -163,7 +175,7 @@
specnodes = orgop.jump_target.specnodes
assert len(op.args) == len(specnodes)
for i in range(len(specnodes)):
- specnodes[i].teardown_virtual_node(op.args[i], exitargs)
+ specnodes[i].teardown_virtual_node(self, op.args[i], exitargs)
op.args = exitargs
self.emit_operation(op)
Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py (original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizeopt.py Mon Jul 20 20:18:45 2009
@@ -380,7 +380,6 @@
self.optimize_loop(ops, 'Not, Not, Not', expected2)
def test_virtual_default_field(self):
- py.test.skip("in-progress")
ops = """
[p0]
i0 = getfield_gc(p0, descr=valuedescr)
More information about the Pypy-commit
mailing list