Author: Hakan Ardo <[email protected]>
Branch: jit-short_from_state
Changeset: r44372:71ffca3657a7
Date: 2011-05-23 08:14 +0200
http://bitbucket.org/pypy/pypy/changeset/71ffca3657a7/
Log: better propataging of interned refs
diff --git a/pypy/jit/metainterp/optimizeopt/optimizer.py
b/pypy/jit/metainterp/optimizeopt/optimizer.py
--- a/pypy/jit/metainterp/optimizeopt/optimizer.py
+++ b/pypy/jit/metainterp/optimizeopt/optimizer.py
@@ -363,9 +363,9 @@
for ref, box in self.interned_refs.items():
value = self.getvalue(box)
- if isinstance(value, ConstantValue): # These are the only values
surviving without being cloned
- new.interned_refs[ref] = box
- new.values[box] = value
+ assert value.is_constant()
+ new.interned_refs[ref] = box
+ new.values[box] = value.get_cloned(new, valuemap)
new.pure_operations = args_dict()
for key, op in self.pure_operations.items():
@@ -389,6 +389,7 @@
for value in valuemap.values():
box = value.get_key_box()
+ box = new.getinterned(box)
if box not in new.values:
new.values[box] = value
@@ -407,7 +408,7 @@
short_boxes = {}
for box in inputargs:
short_boxes[box] = None
-
+
for box in potential_ops.keys():
try:
self.produce_short_preamble_box(box, short_boxes,
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
@@ -169,7 +169,7 @@
loop.preamble.quasi_immutable_deps = (
self.optimizer.quasi_immutable_deps)
self.optimizer = self.optimizer.reconstruct_for_next_iteration(sb,
jump_args)
-
+
self.constant_inputargs = {}
loop.quasi_immutable_deps = self.optimizer.quasi_immutable_deps
for box in jump_args:
diff --git a/pypy/jit/metainterp/test/test_optimizeopt.py
b/pypy/jit/metainterp/test/test_optimizeopt.py
--- a/pypy/jit/metainterp/test/test_optimizeopt.py
+++ b/pypy/jit/metainterp/test/test_optimizeopt.py
@@ -6255,3 +6255,18 @@
jump(i3, i4)
"""
self.optimize_loop(ops, expected)
+
+ def test_constant_getfield(self):
+ ops = """
+ [p1, p187, i184]
+ p188 = getarrayitem_gc(p187, i184, descr=<GcPtrArrayDescr>)
+ guard_value(p188, ConstPtr(myptr)) []
+ p25 = getfield_gc(ConstPtr(myptr), descr=otherdescr)
+ jump(p25, p187, i184)
+ """
+ expected = """
+ [p25, p187, i184]
+ jump(p25, p187, i184)
+ """
+ self.optimize_loop(ops, expected, ops)
+ # FIXME: check jumparg 0 == getfield_gc()
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit