Author: Maciej Fijalkowski <fij...@gmail.com> Branch: optresult-unroll Changeset: r79356:ff9c92e75aa6 Date: 2015-09-01 17:28 +0200 http://bitbucket.org/pypy/pypy/changeset/ff9c92e75aa6/
Log: replace raise Exception with also invalid code, but slightly better diff --git a/rpython/jit/metainterp/compile.py b/rpython/jit/metainterp/compile.py --- a/rpython/jit/metainterp/compile.py +++ b/rpython/jit/metainterp/compile.py @@ -326,9 +326,9 @@ loop_jitcell_token = metainterp.get_procedure_token(greenkey) assert loop_jitcell_token - end_label = ResOperation(rop.LABEL, inputargs, + end_label = ResOperation(rop.LABEL, inputargs[:], descr=loop_jitcell_token) - jump_op = ResOperation(rop.JUMP, jumpargs, descr=loop_jitcell_token) + jump_op = ResOperation(rop.JUMP, jumpargs[:], descr=loop_jitcell_token) enable_opts = jitdriver_sd.warmstate.enable_opts ops = history.operations[start:] call_pure_results = metainterp.call_pure_results @@ -339,23 +339,37 @@ loop_info, loop_ops = optimize_trace(metainterp_sd, jitdriver_sd, loop_data) except InvalidLoop: - # Fall back on jumping to preamble - raise Exception("think about it") - return None + xxx + # Fall back on jumping directly to preamble + jump_op = ResOperation(rop.JUMP, inputargs[:], + descr=loop_jitcell_token.target_tokens[0]) + loop_data = SimpleCompileData(end_label, [jump_op], call_pure_results, + enable_opts) + try: + loop_info, loop_ops = optimize_trace(metainterp_sd, jitdriver_sd, + loop_data) + except InvalidLoop: + return None + loop = partial_trace + loop.original_jitcell_token = loop_jitcell_token + loop.operations = loop_ops[:] + loop.inputargs = loop_info.inputargs[:] + loop.check_consistency() + else: - loop = partial_trace - loop.original_jitcell_token = loop_jitcell_token - loop.operations = (loop.operations + loop_info.extra_same_as + - [loop_info.label_op] - + loop_ops) + loop = partial_trace + loop.original_jitcell_token = loop_jitcell_token + loop.operations = (loop.operations + loop_info.extra_same_as + + [loop_info.label_op] + + loop_ops) - quasi_immutable_deps = {} - if loop_info.quasi_immutable_deps: - quasi_immutable_deps.update(loop_info.quasi_immutable_deps) - if start_state.quasi_immutable_deps: - quasi_immutable_deps.update(start_state.quasi_immutable_deps) - if quasi_immutable_deps: - loop.quasi_immutable_deps = quasi_immutable_deps + quasi_immutable_deps = {} + if loop_info.quasi_immutable_deps: + quasi_immutable_deps.update(loop_info.quasi_immutable_deps) + if start_state.quasi_immutable_deps: + quasi_immutable_deps.update(start_state.quasi_immutable_deps) + if quasi_immutable_deps: + loop.quasi_immutable_deps = quasi_immutable_deps target_token = loop.operations[-1].getdescr() resumekey.compile_and_attach(metainterp, loop, inputargs) _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit