New submission from Hubert Hesse <[email protected]>:
Hello,
we are building an stm-enabled lang-smalltalk (see bitbucket's stmgc-c7 branch
in lang-smalltalk) with the pypy commit 4169f1423e3d (on pypy's stmgc-c7
branch).
We have encountered a KeyError in the bridge optimization of the JIT in several
parts of the code. We assume a common root cause.
First, we encountered this error:
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
##################RPython traceback:
File "spyvm_interpreter.c", line 22899, in Interpreter_c_loop_stm
File "rpython_jit_metainterp_warmstate.c", line 499, in
maybe_compile_and_run__star_4
File "rpython_jit_metainterp_warmstate.c", line 830, in
execute_assembler__star_1
File "rpython_jit_metainterp_compile.c", line 11956, in
ResumeGuardDescr_handle_fail
File "rpython_jit_metainterp_compile.c", line 12646, in
ResumeGuardDescr__trace_and_compile_from_bridge
File "rpython_jit_metainterp_pyjitpl.c", line 55090, in
MetaInterp_handle_guard_failure
File "rpython_jit_metainterp_pyjitpl.c", line 55606, in
MetaInterp__handle_guard_failure
File "rpython_jit_metainterp_pyjitpl.c", line 1475, in MetaInterp_interpret
File "rpython_jit_metainterp_pyjitpl.c", line 2516, in MetaInterp__interpret
File "rpython_jit_metainterp_pyjitpl.c", line 3686, in MIFrame_run_one_step
File "rpython_jit_metainterp_pyjitpl.c", line 26298, in
MIFrame_opimpl_jit_merge_point
File "rpython_jit_metainterp_pyjitpl.c", line 38787, in
MetaInterp_reached_loop_header
File "rpython_jit_metainterp_pyjitpl.c", line 48282, in
MetaInterp_compile_loop
File "rpython_jit_metainterp_compile.c", line 7021, in compile_retrace
File "rpython_jit_metainterp_optimizeopt___init__.c", line 196, in
optimize_trace
File "rpython_jit_metainterp_optimizeopt_unroll.c", line 11521, in
UnrollOptimizer_close_loop
File "rpython_jit_metainterp_optimizeopt_unroll.c", line 13907, in
UnrollOptimizer__import_op
File "rpython_jit_metainterp_optimizeopt_unroll.c", line 14971, in
UnrollOptimizer_import_box
File "rpython_rtyper_lltypesystem_rdict.c", line 23396, in
ll_dict_getitem__dicttablePtr_objectPtr_2
~~~ Crash in JIT! <KeyError object at 0x61c02e0>
then we applied the following changes:
--- a/rpython/jit/metainterp/optimizeopt/unroll.py Wed May 07 14:33:16 2014
+0200
+++ b/rpython/jit/metainterp/optimizeopt/unroll.py Mon May 12 13:43:43 2014
+0200
@@ -481,6 +481,8 @@
if box in self.boxes_created_this_iteration:
return
+ if not self.short_boxes.has_producer(box):
+ return
short_op = self.short_boxes.producer(box)
newresult = self.add_op_to_short(short_op)
Next we saw another error through the bridge optimization:
###########################RPython traceback:
File "spyvm_interpreter.c", line 22892, in Interpreter_c_loop_stm
File "rpython_jit_metainterp_warmstate.c", line 499, in
maybe_compile_and_run__star_4
File "rpython_jit_metainterp_warmstate.c", line 830, in
execute_assembler__star_1
File "rpython_jit_metainterp_compile.c", line 11951, in
ResumeGuardDescr_handle_fail
File "rpython_jit_metainterp_compile.c", line 12641, in
ResumeGuardDescr__trace_and_compile_from_bridge
File "rpython_jit_metainterp_pyjitpl.c", line 55085, in
MetaInterp_handle_guard_failure
File "rpython_jit_metainterp_pyjitpl.c", line 55601, in
MetaInterp__handle_guard_failure
File "rpython_jit_metainterp_pyjitpl.c", line 1475, in MetaInterp_interpret
File "rpython_jit_metainterp_pyjitpl.c", line 2517, in MetaInterp__interpret
File "rpython_jit_metainterp_pyjitpl.c", line 3687, in MIFrame_run_one_step
File "rpython_jit_metainterp_pyjitpl.c", line 26295, in
MIFrame_opimpl_jit_merge_point
File "rpython_jit_metainterp_pyjitpl.c", line 38783, in
MetaInterp_reached_loop_header
File "rpython_jit_metainterp_pyjitpl.c", line 48008, in
MetaInterp_compile_loop
File "rpython_jit_metainterp_compile.c", line 3247, in compile_loop
File "rpython_jit_metainterp_inliner.c", line 1004, in Inliner_inline_op
File "rpython_jit_metainterp_inliner.c", line 1821, in Inliner_inline_snapshot
File "rpython_jit_metainterp_inliner.c", line 1733, in Inliner_inline_snapshot
File "rpython_rtyper_lltypesystem_rdict.c", line 23438, in
ll_dict_getitem__dicttablePtr_objectPtr_2
~~~ Crash in JIT! <KeyError object at 0x61c02e0>
After this we disabled the inliner:
@@ -154,5 +155,4 @@
part.operations = [part.operations[-1]] + \
- [inliner.inline_op(h_ops[i]) for i in range(start,
len(h_ops))] + \
[ResOperation(rop.JUMP, [inliner.inline_arg(a) for a
in jumpargs],
None, descr=jitcell_token)]
target_token = part.operations[0].getdescr()
... we encountered a similar error in the compile loop:
###########################RPython traceback:
File "spyvm_interpreter.c", line 3638, in portal
File "rpython_jit_metainterp_warmstate.c", line 619, in
maybe_compile_and_run__star_4
File "rpython_jit_metainterp_warmstate.c", line 1004, in bound_reached__star_4
File "rpython_jit_metainterp_pyjitpl.c", line 532, in
compile_and_run_once___rpython_jit_metainterp_ji
File "rpython_jit_metainterp_pyjitpl.c", line 1004, in
MetaInterp__compile_and_run_once
File "rpython_jit_metainterp_pyjitpl.c", line 1475, in MetaInterp_interpret
File "rpython_jit_metainterp_pyjitpl.c", line 2516, in MetaInterp__interpret
File "rpython_jit_metainterp_pyjitpl.c", line 3687, in MIFrame_run_one_step
File "rpython_jit_metainterp_pyjitpl.c", line 26293, in
MIFrame_opimpl_jit_merge_point
File "rpython_jit_metainterp_pyjitpl.c", line 38781, in
MetaInterp_reached_loop_header
File "rpython_jit_metainterp_pyjitpl.c", line 48005, in
MetaInterp_compile_loop
File "rpython_jit_metainterp_compile.c", line 3255, in compile_loop
File "rpython_rtyper_lltypesystem_rdict.c", line 23476, in
ll_dict_getitem__dicttablePtr_objectPtr_2
~~~ Crash in JIT! <KeyError object at 0x61c02e0>
----------
messages: 6884
nosy: hubx, pypy-issue
priority: bug
status: unread
title: stm - KeyError in JIT's bridge optimization
________________________________________
PyPy bug tracker <[email protected]>
<https://bugs.pypy.org/issue1767>
________________________________________
_______________________________________________
pypy-issue mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-issue