[pypy-commit] pypy optresult-unroll: (arigo, fijal) fix const handling in the short preamble
fijal
noreply at buildbot.pypy.org
Wed Aug 12 18:56:07 CEST 2015
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: optresult-unroll
Changeset: r78943:57b9a085d148
Date: 2015-08-12 17:56 +0200
http://bitbucket.org/pypy/pypy/changeset/57b9a085d148/
Log: (arigo, fijal) fix const handling in the short preamble
diff --git a/rpython/jit/metainterp/optimizeopt/shortpreamble.py b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
--- a/rpython/jit/metainterp/optimizeopt/shortpreamble.py
+++ b/rpython/jit/metainterp/optimizeopt/shortpreamble.py
@@ -323,14 +323,12 @@
class ShortPreambleBuilder(object):
def __init__(self, short_boxes, short_inputargs, exported_infos,
optimizer=None):
- self.producable_ops = {}
for produced_op in short_boxes:
op = produced_op.short_op.res
preamble_op = produced_op.preamble_op
if isinstance(op, Const):
info = optimizer.getinfo(op)
else:
- self.producable_ops[op] = produced_op.preamble_op
info = exported_infos[op]
if info is None:
info = empty_info
@@ -340,11 +338,7 @@
self.short_preamble_jump = []
self.short_inputargs = short_inputargs
- def use_box(self, box, optimizer=None):
- preamble_op = self.producable_ops.get(box, None)
- if preamble_op is None:
- return
- del self.producable_ops[box]
+ def use_box(self, box, preamble_op, optimizer=None):
for arg in preamble_op.getarglist():
if isinstance(arg, Const):
pass
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_optimizeopt.py
@@ -7912,12 +7912,18 @@
setfield_gc(p5, 1, descr=valuedescr)
jump(p5)
"""
+ short = """
+ [p0]
+ i0 = getfield_gc_i(p0, descr=valuedescr)
+ guard_value(i0, 1) []
+ jump()
+ """
expected = """
[p5]
call_n(1, descr=nonwritedescr)
jump(p5)
"""
- self.optimize_loop(ops, expected, preamble)
+ self.optimize_loop(ops, expected, preamble, expected_short=short)
def test_dont_mixup_equal_boxes(self):
ops = """
diff --git a/rpython/jit/metainterp/optimizeopt/unroll.py b/rpython/jit/metainterp/optimizeopt/unroll.py
--- a/rpython/jit/metainterp/optimizeopt/unroll.py
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py
@@ -22,8 +22,11 @@
if isinstance(preamble_op, PreambleOp):
op = preamble_op.op
self.optimizer.inparg_dict[op] = None # XXX ARGH
- self.optunroll.short_preamble_producer.use_box(op, self)
- self.optunroll.potential_extra_ops[op] = preamble_op
+ # special hack for int_add(x, accumulator-const) optimization
+ self.optunroll.short_preamble_producer.use_box(op,
+ preamble_op.preamble_op, self)
+ if not preamble_op.op.is_constant():
+ self.optunroll.potential_extra_ops[op] = preamble_op
return op
return preamble_op
More information about the pypy-commit
mailing list