Author: Maciej Fijalkowski <[email protected]>
Branch: optresult-unroll
Changeset: r78548:3a0e074cc535
Date: 2015-07-13 20:00 +0200
http://bitbucket.org/pypy/pypy/changeset/3a0e074cc535/
Log: improve the situation somewhat, despite failing tests
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
@@ -9,12 +9,12 @@
def __init__(self):
self.potential_ops = []
self.produced_short_boxes = {}
- self.ops_used = {}
self.extra_same_as = []
def create_short_boxes(self, optimizer, inputargs):
for box in inputargs:
- self.ops_used[box] = None
+ self.produced_short_boxes[box] = None
+
optimizer.produce_potential_short_preamble_ops(self)
self.short_boxes = []
@@ -33,19 +33,13 @@
self.produced_short_boxes[op] = None
def produce_short_preamble_op(self, op, preamble_op):
- if isinstance(op, Const):
- pass
- elif isinstance(op, AbstractInputArg):
- if op not in self.ops_used:
- return
- else:
- for arg in op.getarglist():
- if isinstance(arg, Const):
- pass
- elif arg in self.ops_used:
- pass
- else:
- return # can't produce
+ for arg in preamble_op.getarglist():
+ if isinstance(arg, Const):
+ pass
+ elif arg in self.produced_short_boxes:
+ pass
+ else:
+ return # can't produce
if op in self.produced_short_boxes:
opnum = OpHelpers.same_as_for_type(op.type)
same_as_op = ResOperation(opnum, [op])
@@ -59,4 +53,3 @@
self.potential_ops.append((op, op))
else:
self.potential_ops.append((op, short_preamble_op))
- self.ops_used[op] = None
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
@@ -867,21 +867,21 @@
def test_dont_delay_setfields(self):
ops = """
[p1, p2]
- i1 = getfield_gc_i(p1, descr=nextdescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = int_sub(i1, 1)
i2b = int_is_true(i2)
guard_true(i2b) []
- setfield_gc(p2, i2, descr=nextdescr)
+ setfield_gc(p2, i2, descr=valuedescr)
p3 = new_with_vtable(descr=nodesize)
jump(p2, p3)
"""
preamble = """
[p1, p2]
- i1 = getfield_gc_i(p1, descr=nextdescr)
+ i1 = getfield_gc_i(p1, descr=valuedescr)
i2 = int_sub(i1, 1)
i2b = int_is_true(i2)
guard_true(i2b) []
- setfield_gc(p2, i2, descr=nextdescr)
+ setfield_gc(p2, i2, descr=valuedescr)
jump(p2, i2)
"""
expected = """
@@ -890,7 +890,7 @@
i2b = int_is_true(i2)
guard_true(i2b) []
p3 = new_with_vtable(descr=nodesize)
- setfield_gc(p3, i2, descr=nextdescr)
+ setfield_gc(p3, i2, descr=valuedescr)
jump(p3, i2)
"""
self.optimize_loop(ops, expected, preamble)
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
@@ -228,7 +228,8 @@
end_args = [self.get_box_replacement(a) for a in original_label_args]
virtual_state = self.get_virtual_state(end_args)
sb = ShortBoxes()
- sb.create_short_boxes(self.optimizer, end_args)
+ sb.create_short_boxes(self.optimizer, [self.get_box_replacement(a)
+ for a in start_label.getarglist()])
inparg_mapping = [(start_label.getarg(i), end_args[i])
for i in range(len(end_args)) if
start_label.getarg(i) is not end_args[i]]
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit