]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-138050: Use cold flag instead of warm flag in `MAKE_WARM` (GH-143827)
authorHai Zhu <35182391+cocolato@users.noreply.github.com>
Wed, 14 Jan 2026 10:27:33 +0000 (18:27 +0800)
committerGitHub <noreply@github.com>
Wed, 14 Jan 2026 10:27:33 +0000 (10:27 +0000)
Include/internal/pycore_optimizer.h
Python/bytecodes.c
Python/executor_cases.c.h
Python/optimizer.c
Python/pystate.c

index a2d9d2d4dfc86f3d75a6c8ab210f45994058c306..80a22e6bd12c649d16fc2c9eb4ffa0576f7686ee 100644 (file)
@@ -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;
index fda97dc07932fbb3607831b245ca43f6f975b2f9..273865bd366935dd677fe0847e8620d4e282dc64 100644 (file)
@@ -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, (--)) {
index 26385e3a32f47201ded38ccbaeb02926111e8dae..42cca042022fc195e277713aaf2dd470f27c061b 100644 (file)
         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;
             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());
             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);
             _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;
index 79ac179d0b710ab32d696dcb7a486b7bf346e6fd..5ef4a5c4fa513ceea456faa9378201e2b75298c5 100644 (file)
@@ -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;
index b3d375a7feabb03525a9be4df4216c93a6f6c808..ebe56b8f32c06bbe8eba9e72387b87e2b9e8b334 100644 (file)
@@ -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.