[pypy-svn] r66440 - in pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp: . test
arigo at codespeak.net
arigo at codespeak.net
Mon Jul 20 17:08:10 CEST 2009
Author: arigo
Date: Mon Jul 20 17:08:09 2009
New Revision: 66440
Modified:
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/optimizefindnode.py
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/resoperation.py
pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/test/test_optimizefindnode.py
Log:
Fix optimizefindnode: a CALL_PURE operation has no side-effect,
but it must still force its arguments to be non-virtual.
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 Mon Jul 20 17:08:09 2009
@@ -89,7 +89,7 @@
self.find_nodes_default(op)
def find_nodes_default(self, op):
- if not op.has_no_side_effect():
+ if not op.has_no_side_effect_ptr():
# default case: mark the arguments as escaping
for box in op.args:
self.getnode(box).mark_escaped()
Modified: pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/resoperation.py
==============================================================================
--- pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/resoperation.py (original)
+++ pypy/branch/pyjitpl5-optimize4/pypy/jit/metainterp/resoperation.py Mon Jul 20 17:08:09 2009
@@ -81,6 +81,10 @@
def has_no_side_effect(self):
return rop._NOSIDEEFFECT_FIRST <= self.opnum <= rop._NOSIDEEFFECT_LAST
+ def has_no_side_effect_ptr(self):
+ return (rop._NOSIDEEFFECT_PTR_FIRST <= self.opnum <=
+ rop._NOSIDEEFFECT_PTR_LAST)
+
def can_raise(self):
return rop._CANRAISE_FIRST <= self.opnum <= rop._CANRAISE_LAST
@@ -151,6 +155,7 @@
INT_INVERT = 62
BOOL_NOT = 63
#
+ _NOSIDEEFFECT_PTR_FIRST = 70 # -- start of no_side_effect_ptr operations --
OONONNULL = 70
OOISNULL = 71
OOIS = 72
@@ -176,6 +181,7 @@
GETARRAYITEM_GC = 120
GETFIELD_GC = 121
GETFIELD_RAW = 122
+ _NOSIDEEFFECT_PTR_LAST = 129 # -- end of no_side_effect_ptr operations --
_NOSIDEEFFECT_LAST = 129 # ----- end of no_side_effect operations -----
NEW = 130
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 Mon Jul 20 17:08:09 2009
@@ -358,6 +358,62 @@
nextdescr=Virtual(node_vtable,
nextdescr=Virtual(node_vtable)))''')
+ def test_find_nodes_oois(self):
+ ops = """
+ [p3, p4, p2]
+ p0 = new_with_vtable(ConstClass(node_vtable), descr=nodesize)
+ p1 = new_with_vtable(ConstClass(node_vtable), descr=nodesize)
+ i1 = oononnull(p0)
+ guard_true(i1)
+ fail()
+ i2 = ooisnull(p0)
+ guard_false(i2)
+ fail()
+ i3 = ooisnot(p0, NULL)
+ guard_true(i3)
+ fail()
+ i4 = oois(p0, NULL)
+ guard_false(i4)
+ fail()
+ i5 = ooisnot(NULL, p0)
+ guard_true(i5)
+ fail()
+ i6 = oois(NULL, p0)
+ guard_false(i6)
+ fail()
+ i7 = ooisnot(p0, p1)
+ guard_true(i7)
+ fail()
+ i8 = oois(p0, p1)
+ guard_false(i8)
+ fail()
+ i9 = ooisnot(p0, p2)
+ guard_true(i9)
+ fail()
+ i10 = oois(p0, p2)
+ guard_false(i10)
+ fail()
+ i11 = ooisnot(p2, p1)
+ guard_true(i11)
+ fail()
+ i12 = oois(p2, p1)
+ guard_false(i12)
+ fail()
+ jump(p0, p1, p2)
+ """
+ self.find_nodes(ops, '''Virtual(node_vtable),
+ Virtual(node_vtable),
+ Not''')
+
+ def test_find_nodes_call(self):
+ ops = """
+ [i0, p2]
+ p0 = new_with_vtable(ConstClass(node_vtable), descr=nodesize)
+ i1 = call_pure(i0, p0) # forces p0 to not be virtual
+ jump(i1, p0)
+ """
+ self.find_nodes(ops, 'Not, Not')
+
# ------------------------------
# Bridge tests
More information about the Pypy-commit
mailing list