@@ -826,8 +826,7 @@ _PyJit_translate_single_bytecode_to_trace(
826826 _Py_FALLTHROUGH ;
827827 case JUMP_BACKWARD_NO_INTERRUPT :
828828 {
829- if ((next_instr != tracer -> initial_state .close_loop_instr ) &&
830- (next_instr != tracer -> initial_state .start_instr ) &&
829+ if ((next_instr != tracer -> initial_state .start_instr ) &&
831830 uop_buffer_length (& tracer -> code_buffer ) > CODE_SIZE_NO_PROGRESS &&
832831 // For side exits, we don't want to terminate them early.
833832 tracer -> initial_state .exit == NULL &&
@@ -840,8 +839,8 @@ _PyJit_translate_single_bytecode_to_trace(
840839 OPT_STAT_INC (inner_loop );
841840 ADD_TO_TRACE (_EXIT_TRACE , 0 , 0 , target );
842841 uop_buffer_last (trace )-> operand1 = true; // is_control_flow
843- DPRINTF (2 , "JUMP_BACKWARD not to top ends trace %p %p %p \n" , next_instr ,
844- tracer -> initial_state .close_loop_instr , tracer -> initial_state . start_instr );
842+ DPRINTF (2 , "JUMP_BACKWARD not to top ends trace %p %p\n" , next_instr ,
843+ tracer -> initial_state .start_instr );
845844 goto done ;
846845 }
847846 break ;
@@ -977,8 +976,7 @@ _PyJit_translate_single_bytecode_to_trace(
977976 }
978977 }
979978 // Loop back to the start
980- int is_first_instr = tracer -> initial_state .close_loop_instr == next_instr ||
981- tracer -> initial_state .start_instr == next_instr ;
979+ int is_first_instr = tracer -> initial_state .start_instr == next_instr ;
982980 if (is_first_instr && uop_buffer_length (trace ) > CODE_SIZE_NO_PROGRESS ) {
983981 if (needs_guard_ip ) {
984982 ADD_TO_TRACE (_SET_IP , 0 , (uintptr_t )next_instr , 0 );
@@ -1002,7 +1000,7 @@ _PyJit_translate_single_bytecode_to_trace(
10021000Py_NO_INLINE int
10031001_PyJit_TryInitializeTracing (
10041002 PyThreadState * tstate , _PyInterpreterFrame * frame , _Py_CODEUNIT * curr_instr ,
1005- _Py_CODEUNIT * start_instr , _Py_CODEUNIT * close_loop_instr , _PyStackRef * stack_pointer , int chain_depth ,
1003+ _PyStackRef * stack_pointer , int chain_depth ,
10061004 _PyExitData * exit , int oparg , _PyExecutorObject * current_executor )
10071005{
10081006 _PyThreadStateImpl * _tstate = (_PyThreadStateImpl * )tstate ;
@@ -1022,6 +1020,7 @@ _PyJit_TryInitializeTracing(
10221020 if (oparg > 0xFFFF ) {
10231021 return 0 ;
10241022 }
1023+ _Py_CODEUNIT * start_instr = curr_instr - (oparg > 0xFF );
10251024 PyObject * func = PyStackRef_AsPyObjectBorrow (frame -> f_funcobj );
10261025 if (func == NULL || !PyFunction_Check (func )) {
10271026 return 0 ;
@@ -1038,7 +1037,7 @@ _PyJit_TryInitializeTracing(
10381037 PyUnicode_AsUTF8 (code -> co_qualname ),
10391038 PyUnicode_AsUTF8 (code -> co_filename ),
10401039 code -> co_firstlineno ,
1041- 2 * INSTR_IP (close_loop_instr , code ),
1040+ 2 * INSTR_IP (curr_instr , code ),
10421041 chain_depth );
10431042#endif
10441043 /* Set up tracing buffer*/
@@ -1048,7 +1047,6 @@ _PyJit_TryInitializeTracing(
10481047 ADD_TO_TRACE (_MAKE_WARM , 0 , 0 , 0 );
10491048
10501049 tracer -> initial_state .start_instr = start_instr ;
1051- tracer -> initial_state .close_loop_instr = close_loop_instr ;
10521050 tracer -> initial_state .code = (PyCodeObject * )Py_NewRef (code );
10531051 tracer -> initial_state .func = (PyFunctionObject * )Py_NewRef (func );
10541052 tracer -> initial_state .executor = (_PyExecutorObject * )Py_XNewRef (current_executor );
0 commit comments