mirror of
https://github.com/python/cpython.git
synced 2025-08-29 21:25:01 +00:00
GH-104584: Miscellaneous fixes for -Xuops (GH-106908)
This commit is contained in:
parent
009e8f084c
commit
214a25dd81
10 changed files with 67 additions and 18 deletions
|
@ -2182,7 +2182,14 @@ dummy_func(
|
|||
JUMPBY(1-oparg);
|
||||
#if ENABLE_SPECIALIZATION
|
||||
here[1].cache += (1 << OPTIMIZER_BITS_IN_COUNTER);
|
||||
if (here[1].cache > tstate->interp->optimizer_backedge_threshold) {
|
||||
if (here[1].cache > tstate->interp->optimizer_backedge_threshold &&
|
||||
// Double-check that the opcode isn't instrumented or something:
|
||||
here->op.code == JUMP_BACKWARD &&
|
||||
// _PyOptimizer_BackEdge is going to change frame->prev_instr,
|
||||
// which breaks line event calculations:
|
||||
next_instr->op.code != INSTRUMENTED_LINE
|
||||
)
|
||||
{
|
||||
OBJECT_STAT_INC(optimization_attempts);
|
||||
frame = _PyOptimizer_BackEdge(frame, here, next_instr, stack_pointer);
|
||||
if (frame == NULL) {
|
||||
|
|
8
Python/executor_cases.c.h
generated
8
Python/executor_cases.c.h
generated
|
@ -2017,6 +2017,7 @@
|
|||
STACK_SHRINK(oparg);
|
||||
STACK_SHRINK(1);
|
||||
stack_pointer[-1] = res;
|
||||
CHECK_EVAL_BREAKER();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2038,6 +2039,7 @@
|
|||
STACK_SHRINK(oparg);
|
||||
STACK_SHRINK(1);
|
||||
stack_pointer[-1] = res;
|
||||
CHECK_EVAL_BREAKER();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2089,6 +2091,7 @@
|
|||
STACK_SHRINK(oparg);
|
||||
STACK_SHRINK(1);
|
||||
stack_pointer[-1] = res;
|
||||
CHECK_EVAL_BREAKER();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2131,6 +2134,7 @@
|
|||
STACK_SHRINK(oparg);
|
||||
STACK_SHRINK(1);
|
||||
stack_pointer[-1] = res;
|
||||
CHECK_EVAL_BREAKER();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2243,6 +2247,7 @@
|
|||
STACK_SHRINK(oparg);
|
||||
STACK_SHRINK(1);
|
||||
stack_pointer[-1] = res;
|
||||
CHECK_EVAL_BREAKER();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2281,6 +2286,7 @@
|
|||
STACK_SHRINK(oparg);
|
||||
STACK_SHRINK(1);
|
||||
stack_pointer[-1] = res;
|
||||
CHECK_EVAL_BREAKER();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2318,6 +2324,7 @@
|
|||
STACK_SHRINK(oparg);
|
||||
STACK_SHRINK(1);
|
||||
stack_pointer[-1] = res;
|
||||
CHECK_EVAL_BREAKER();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -2496,6 +2503,7 @@
|
|||
|
||||
case JUMP_TO_TOP: {
|
||||
pc = 0;
|
||||
CHECK_EVAL_BREAKER();
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
9
Python/generated_cases.c.h
generated
9
Python/generated_cases.c.h
generated
|
@ -2758,7 +2758,14 @@
|
|||
JUMPBY(1-oparg);
|
||||
#if ENABLE_SPECIALIZATION
|
||||
here[1].cache += (1 << OPTIMIZER_BITS_IN_COUNTER);
|
||||
if (here[1].cache > tstate->interp->optimizer_backedge_threshold) {
|
||||
if (here[1].cache > tstate->interp->optimizer_backedge_threshold &&
|
||||
// Double-check that the opcode isn't instrumented or something:
|
||||
here->op.code == JUMP_BACKWARD &&
|
||||
// _PyOptimizer_BackEdge is going to change frame->prev_instr,
|
||||
// which breaks line event calculations:
|
||||
next_instr->op.code != INSTRUMENTED_LINE
|
||||
)
|
||||
{
|
||||
OBJECT_STAT_INC(optimization_attempts);
|
||||
frame = _PyOptimizer_BackEdge(frame, here, next_instr, stack_pointer);
|
||||
if (frame == NULL) {
|
||||
|
|
|
@ -155,6 +155,7 @@ PyUnstable_SetOptimizer(_PyOptimizerObject *optimizer)
|
|||
_PyInterpreterFrame *
|
||||
_PyOptimizer_BackEdge(_PyInterpreterFrame *frame, _Py_CODEUNIT *src, _Py_CODEUNIT *dest, PyObject **stack_pointer)
|
||||
{
|
||||
assert(src->op.code == JUMP_BACKWARD);
|
||||
PyCodeObject *code = (PyCodeObject *)frame->f_executable;
|
||||
assert(PyCode_Check(code));
|
||||
PyInterpreterState *interp = _PyInterpreterState_GET();
|
||||
|
|
|
@ -1192,7 +1192,11 @@ init_interp_main(PyThreadState *tstate)
|
|||
}
|
||||
if (enabled) {
|
||||
PyObject *opt = PyUnstable_Optimizer_NewUOpOptimizer();
|
||||
if (opt == NULL) {
|
||||
return _PyStatus_ERR("can't initialize optimizer");
|
||||
}
|
||||
PyUnstable_SetOptimizer((_PyOptimizerObject *)opt);
|
||||
Py_DECREF(opt);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue