[pypy-commit] pypy jit-short_from_state: produce guards before forcing virtuals as one force might lead to another
hakanardo
noreply at buildbot.pypy.org
Thu Jul 21 20:55:41 CEST 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-short_from_state
Changeset: r45837:3c2afbf75c4a
Date: 2011-07-21 20:37 +0200
http://bitbucket.org/pypy/pypy/changeset/3c2afbf75c4a/
Log: produce guards before forcing virtuals as one force might lead to
another
diff --git a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -6579,6 +6579,20 @@
"""
self.optimize_loop(ops, expected)
+ def test_chained_virtuals(self):
+ ops = """
+ [p0, p1]
+ p2 = new_with_vtable(ConstClass(node_vtable))
+ p3 = new_with_vtable(ConstClass(node_vtable))
+ setfield_gc(p2, p3, descr=nextdescr)
+ jump(p2, p3)
+ """
+ expected = """
+ []
+ jump()
+ """
+ self.optimize_loop(ops, expected)
+
def test_arraylen_bound(self):
ops = """
[p1, i]
diff --git a/pypy/jit/metainterp/optimizeopt/unroll.py b/pypy/jit/metainterp/optimizeopt/unroll.py
--- a/pypy/jit/metainterp/optimizeopt/unroll.py
+++ b/pypy/jit/metainterp/optimizeopt/unroll.py
@@ -217,15 +217,18 @@
inputarg_setup_ops = []
preamble_optimizer.newoperations = []
seen = {}
+ for box in inputargs:
+ if box in seen:
+ continue
+ seen[box] = True
+ value = preamble_optimizer.getvalue(box)
+ inputarg_setup_ops.extend(value.make_guards(box))
for box in short_inputargs:
if box in seen:
continue
seen[box] = True
value = preamble_optimizer.getvalue(box)
- if value.is_virtual():
value.force_box()
- else:
- inputarg_setup_ops.extend(value.make_guards(box))
preamble_optimizer.flush()
inputarg_setup_ops += preamble_optimizer.newoperations
More information about the pypy-commit
mailing list