[pypy-commit] pypy jit-duplicated_short_boxes: ensure values are imported when accessed from optimizer.values
hakanardo
noreply at buildbot.pypy.org
Tue Aug 30 09:48:46 CEST 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: jit-duplicated_short_boxes
Changeset: r46916:d8a4678476e8
Date: 2011-08-30 09:23 +0200
http://bitbucket.org/pypy/pypy/changeset/d8a4678476e8/
Log: ensure values are imported when accessed from optimizer.values
diff --git a/pypy/jit/metainterp/optimizeopt/heap.py b/pypy/jit/metainterp/optimizeopt/heap.py
--- a/pypy/jit/metainterp/optimizeopt/heap.py
+++ b/pypy/jit/metainterp/optimizeopt/heap.py
@@ -40,7 +40,7 @@
# Hack to ensure constants are imported from the preamble
if cached_fieldvalue and fieldvalue.is_constant():
- optheap.getvalue(cached_fieldvalue.get_key_box())
+ optheap.optimizer.ensure_imported(cached_fieldvalue)
cached_fieldvalue = self._cached_fields.get(structvalue, None)
if cached_fieldvalue is not fieldvalue:
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
@@ -415,17 +415,21 @@
value = self.values[box]
except KeyError:
value = self.values[box] = OptValue(box)
+ self.ensure_imported(value)
+ return value
+
+ def ensure_imported(self, value):
if not self.emitting_dissabled and value in self.importable_values:
imp = self.importable_values[value]
del self.importable_values[value]
- imp.import_value(box, value)
- return value
+ imp.import_value(value)
def get_constant_box(self, box):
if isinstance(box, Const):
return box
try:
value = self.values[box]
+ self.ensure_imported(value)
except KeyError:
return None
if value.is_constant():
@@ -561,7 +565,7 @@
for i in range(n):
arg = op.getarg(i)
try:
- value = self.values[arg]
+ value = self.getvalue(arg)
except KeyError:
pass
else:
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
@@ -7111,7 +7111,21 @@
"""
self.optimize_loop(ops, expected)
-
+ def test_import_constants_when_folding_pure_operations(self):
+ ops = """
+ [p0]
+ f1 = getfield_gc(p0, descr=valuedescr)
+ f2 = float_abs(f1)
+ call(7.0, descr=nonwritedescr)
+ setfield_gc(p0, -7.0, descr=valuedescr)
+ jump(p0)
+ """
+ expected = """
+ [p0]
+ call(7.0, descr=nonwritedescr)
+ jump(p0)
+ """
+ self.optimize_loop(ops, expected)
class TestLLtype(OptimizeOptTest, LLtypeMixin):
pass
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
@@ -425,7 +425,7 @@
inputargs.append(box)
box = newresult
if box in self.optimizer.values:
- box = self.optimizer.values[box].force_box()
+ box = self.optimizer.getvalue(box).force_box()
jumpargs.append(box)
@@ -531,7 +531,7 @@
self.preamble_value = value
self.op = op
- def import_value(self, box, value):
+ def import_value(self, value):
value.import_from(self.preamble_value, self.unroll.optimizer)
self.unroll.add_op_to_short(self.op, self.unroll.short, self.unroll.short_seen, False, True)
More information about the pypy-commit
mailing list