]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-141504: Move PYTHON_UOPS_OPTIMIZE to policy object (GH-144082)
authorDonghee Na <donghee.na@python.org>
Tue, 20 Jan 2026 18:47:38 +0000 (03:47 +0900)
committerGitHub <noreply@github.com>
Tue, 20 Jan 2026 18:47:38 +0000 (18:47 +0000)
Include/internal/pycore_interp_structs.h
Python/optimizer.c
Python/pystate.c

index f11448b06696ad18f63fb87d928de8f564ad6d8d..723657e4cef10db99d0e088793550a10c4377ebb 100644 (file)
@@ -411,6 +411,7 @@ typedef struct _PyOptimizationConfig {
 
     // Optimization flags
     bool specialization_enabled;
+    bool uops_optimize_enabled;
 } _PyOptimizationConfig;
 
 struct
index ab0ef3db4e4882e8a30c76da44ed851fd287e564..15a1eb5a17745ba01eeed2c25283fc63a6c252ab 100644 (file)
@@ -1514,11 +1514,7 @@ uop_optimize(
     _PyBloomFilter *dependencies = &_tstate->jit_tracer_state->prev_state.dependencies;
     _PyUOpInstruction *buffer = _tstate->jit_tracer_state->code_buffer;
     OPT_STAT_INC(attempts);
-    char *env_var = Py_GETENV("PYTHON_UOPS_OPTIMIZE");
-    bool is_noopt = true;
-    if (env_var == NULL || *env_var == '\0' || *env_var > '0') {
-        is_noopt = false;
-    }
+    bool is_noopt = !tstate->interp->opt_config.uops_optimize_enabled;
     int curr_stackentries = _tstate->jit_tracer_state->initial_state.stack_depth;
     int length = _tstate->jit_tracer_state->prev_state.code_curr_size;
     if (length <= CODE_SIZE_NO_PROGRESS) {
index 86dee70734a097a5d3dae280d7914a31dbdb96c3..89374e16722494cae4ababf85fa2850fbdd8fbd9 100644 (file)
@@ -522,6 +522,13 @@ is_env_enabled(const char *env_name)
     return env && *env != '\0' && *env != '0';
 }
 
+static inline bool
+is_env_disabled(const char *env_name)
+{
+    char *env = Py_GETENV(env_name);
+    return env != NULL && *env == '0';
+}
+
 static inline void
 init_policy(uint16_t *target, const char *env_name, uint16_t default_value,
             long min_value, long max_value)
@@ -619,6 +626,7 @@ init_interpreter(PyInterpreterState *interp,
                 SIDE_EXIT_INITIAL_BACKOFF, 0, MAX_BACKOFF);
 
     interp->opt_config.specialization_enabled = !is_env_enabled("PYTHON_SPECIALIZATION_OFF");
+    interp->opt_config.uops_optimize_enabled = !is_env_disabled("PYTHON_UOPS_OPTIMIZE");
     if (interp != &runtime->_main_interpreter) {
         /* Fix the self-referential, statically initialized fields. */
         interp->dtoa = (struct _dtoa_state)_dtoa_state_INIT(interp);