Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r78479:ab1fed37b3d6 Date: 2015-07-06 18:35 +0200 http://bitbucket.org/pypy/pypy/changeset/ab1fed37b3d6/
Log: hopefully a better fix diff --git a/rpython/jit/metainterp/optimizeopt/optimizer.py b/rpython/jit/metainterp/optimizeopt/optimizer.py --- a/rpython/jit/metainterp/optimizeopt/optimizer.py +++ b/rpython/jit/metainterp/optimizeopt/optimizer.py @@ -466,11 +466,8 @@ assert not op.is_call_pure() orig_op = op op = self.replace_op_with(op, op.getopnum()) - # XXX look in C and maybe specialize on number of args for i in range(op.numargs()): arg = self.force_box(op.getarg(i)) - #self.ensure_imported(value) - # newbox = value.force_box(self) op.setarg(i, arg) self.metainterp_sd.profiler.count(jitprof.Counters.OPT_OPS) if op.is_guard(): 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 @@ -177,6 +177,9 @@ """ % expected_value self.optimize_loop(ops, expected) + #def test_cast_1(self): + # xxx + def test_reverse_of_cast_1(self): ops = """ [i0] @@ -3332,6 +3335,7 @@ self.optimize_loop(ops, expected) def test_int_and_or_with_zero(self): + xxx ops = """ [i0, i1] i2 = int_and(i0, 0) @@ -5341,6 +5345,7 @@ self.optimize_loop(ops, expected) def test_lshift_rshift(self): + xxx ops = """ [i1, i2, i2b, i1b] i3 = int_lshift(i1, i2) @@ -6214,6 +6219,7 @@ self.optimize_strunicode_loop(ops, expected, expected) def test_newstr_2(self): + xxx ops = """ [i0, i1] p1 = newstr(2) diff --git a/rpython/jit/metainterp/optimizeopt/test/test_util.py b/rpython/jit/metainterp/optimizeopt/test/test_util.py --- a/rpython/jit/metainterp/optimizeopt/test/test_util.py +++ b/rpython/jit/metainterp/optimizeopt/test/test_util.py @@ -443,6 +443,7 @@ start_state, preamble_ops = self._do_optimize_loop(preamble_data, call_pure_results) preamble_data.forget_optimization_info() + end_label = ResOperation(rop.LABEL, start_state.end_args) loop_data = compile.UnrolledLoopData(end_label, jump_op, ops + [jump_op], start_state) _, ops = self._do_optimize_loop(loop_data, call_pure_results) 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 @@ -71,14 +71,14 @@ def optimize_preamble(self, start_label, end_label, ops): self._check_no_forwarding([[start_label, end_label], ops]) - self.optimizer.propagate_all_forward(start_label.getarglist(), ops) + self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops) exported_state = self.export_state(start_label, end_label) return exported_state, self.optimizer._newoperations def optimize_peeled_loop(self, start_label, end_jump, ops, state): self._check_no_forwarding([[start_label, end_jump], ops]) self.import_state(start_label, state) - self.optimizer.propagate_all_forward(start_label.getarglist(), ops) + self.optimizer.propagate_all_forward(start_label.getarglist()[:], ops) return None, self.optimizer._newoperations def random_garbage(self): @@ -186,7 +186,7 @@ infos = {} for arg in end_args: infos[arg] = self.optimizer.getinfo(arg) - return ExportedState(inparg_mapping, virtual_state, infos, + return ExportedState(end_args, inparg_mapping, virtual_state, infos, sb.short_boxes) @@ -696,8 +696,9 @@ * short boxes - a mapping op -> preamble_op """ - def __init__(self, inputarg_mapping, virtual_state, exported_infos, - short_boxes): + def __init__(self, end_args, inputarg_mapping, virtual_state, + exported_infos, short_boxes): + self.end_args = end_args self.inputarg_mapping = inputarg_mapping self.virtual_state = virtual_state self.exported_infos = exported_infos diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py --- a/rpython/jit/metainterp/resoperation.py +++ b/rpython/jit/metainterp/resoperation.py @@ -92,6 +92,9 @@ def getarglist(self): raise NotImplementedError + def getarglist_copy(self): + return self.getarglist() + def getarg(self, i): raise NotImplementedError @@ -131,7 +134,7 @@ from rpython.jit.metainterp.history import DONT_CHANGE if args is None: - args = self.getarglist() + args = self.getarglist_copy() if descr is None: descr = self.getdescr() if descr is DONT_CHANGE: @@ -591,6 +594,9 @@ def getarglist(self): return self._args + def getarglist_copy(self): + return self._args[:] + def numargs(self): return len(self._args) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit