From 1be901d6863cc6ca88bb76712b01bbb5daa641ad Mon Sep 17 00:00:00 2001 From: LloydZ <35182391+cocolato@users.noreply.github.com> Date: Wed, 14 Jan 2026 07:20:41 +0000 Subject: [PATCH] global cooling --- Include/internal/pycore_optimizer.h | 2 +- Python/bytecodes.c | 2 +- Python/executor_cases.c.h | 8 ++++---- Python/optimizer.c | 12 ++++++------ Python/pystate.c | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Include/internal/pycore_optimizer.h b/Include/internal/pycore_optimizer.h index a2d9d2d4dfc86f..80a22e6bd12c64 100644 --- a/Include/internal/pycore_optimizer.h +++ b/Include/internal/pycore_optimizer.h @@ -27,7 +27,7 @@ typedef struct { uint8_t oparg; uint8_t valid; uint8_t chain_depth; // Must be big enough for MAX_CHAIN_DEPTH - 1. - bool warm; + bool cold; uint8_t pending_deletion; int32_t index; // Index of ENTER_EXECUTOR (if code isn't NULL, below). _PyBloomFilter bloom; diff --git a/Python/bytecodes.c b/Python/bytecodes.c index fda97dc07932fb..273865bd366935 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -5474,7 +5474,7 @@ dummy_func( } tier2 op(_MAKE_WARM, (--)) { - current_executor->vm_data.warm = true; + current_executor->vm_data.cold = false; } tier2 op(_FATAL_ERROR, (--)) { diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h index 26385e3a32f472..42cca042022fc1 100644 --- a/Python/executor_cases.c.h +++ b/Python/executor_cases.c.h @@ -18511,7 +18511,7 @@ case _MAKE_WARM_r00: { CHECK_CURRENT_CACHED_VALUES(0); assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); - current_executor->vm_data.warm = true; + current_executor->vm_data.cold = false; SET_CURRENT_CACHED_VALUES(0); assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); break; @@ -18521,7 +18521,7 @@ CHECK_CURRENT_CACHED_VALUES(1); assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); _PyStackRef _stack_item_0 = _tos_cache0; - current_executor->vm_data.warm = true; + current_executor->vm_data.cold = false; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(1); assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); @@ -18533,7 +18533,7 @@ assert(WITHIN_STACK_BOUNDS_IGNORING_CACHE()); _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; - current_executor->vm_data.warm = true; + current_executor->vm_data.cold = false; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; SET_CURRENT_CACHED_VALUES(2); @@ -18547,7 +18547,7 @@ _PyStackRef _stack_item_0 = _tos_cache0; _PyStackRef _stack_item_1 = _tos_cache1; _PyStackRef _stack_item_2 = _tos_cache2; - current_executor->vm_data.warm = true; + current_executor->vm_data.cold = false; _tos_cache2 = _stack_item_2; _tos_cache1 = _stack_item_1; _tos_cache0 = _stack_item_0; diff --git a/Python/optimizer.c b/Python/optimizer.c index 79ac179d0b710a..5ef4a5c4fa513c 100644 --- a/Python/optimizer.c +++ b/Python/optimizer.c @@ -1408,9 +1408,9 @@ make_executor_from_uops(_PyThreadStateImpl *tstate, _PyUOpInstruction *buffer, i #ifdef _Py_JIT executor->jit_code = NULL; executor->jit_size = 0; - // This is initialized to true so we can prevent the executor + // This is initialized to false so we can prevent the executor // from being immediately detected as cold and invalidated. - executor->vm_data.warm = true; + executor->vm_data.cold = false; if (_PyJIT_Compile(executor, executor->trace, length)) { Py_DECREF(executor); return NULL; @@ -1698,9 +1698,9 @@ make_cold_executor(uint16_t opcode) Py_FatalError("Cannot allocate core JIT code"); } ((_PyUOpInstruction *)cold->trace)->opcode = opcode; - // This is initialized to true so we can prevent the executor + // This is initialized to false so we can prevent the executor // from being immediately detected as cold and invalidated. - cold->vm_data.warm = true; + cold->vm_data.cold = false; #ifdef _Py_JIT cold->jit_code = NULL; cold->jit_size = 0; @@ -1895,11 +1895,11 @@ _Py_Executors_InvalidateCold(PyInterpreterState *interp) assert(exec->vm_data.valid); _PyExecutorObject *next = exec->vm_data.links.next; - if (!exec->vm_data.warm && PyList_Append(invalidate, (PyObject *)exec) < 0) { + if (exec->vm_data.cold && PyList_Append(invalidate, (PyObject *)exec) < 0) { goto error; } else { - exec->vm_data.warm = false; + exec->vm_data.cold = true; } exec = next; diff --git a/Python/pystate.c b/Python/pystate.c index b3d375a7feabb0..ebe56b8f32c06b 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -820,7 +820,7 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate) if (cold != NULL) { interp->cold_executor = NULL; assert(cold->vm_data.valid); - assert(cold->vm_data.warm); + assert(!cold->vm_data.cold); _PyExecutor_Free(cold); } @@ -828,7 +828,7 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate) if (cold_dynamic != NULL) { interp->cold_dynamic_executor = NULL; assert(cold_dynamic->vm_data.valid); - assert(cold_dynamic->vm_data.warm); + assert(!cold_dynamic->vm_data.cold); _PyExecutor_Free(cold_dynamic); } /* We don't clear sysdict and builtins until the end of this function.