gh-123153: Fix PGO builds with free-threading on Windows (#125607)

* gh-123153: Fix PGO builds with free-threading

* Redo how the #define works
This commit is contained in:
Michael Droettboom 2024-10-17 08:20:30 -04:00 committed by GitHub
parent dbcc5ac470
commit 37986e830b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -761,12 +761,20 @@ _PyObjectArray_Free(PyObject **array, PyObject **scratch)
* so consume 3 units of C stack */ * so consume 3 units of C stack */
#define PY_EVAL_C_STACK_UNITS 2 #define PY_EVAL_C_STACK_UNITS 2
#if defined(_MSC_VER) && defined(_Py_USING_PGO) && defined(_Py_JIT)
/* _PyEval_EvalFrameDefault is too large to optimize for speed with /* _PyEval_EvalFrameDefault is too large to optimize for speed with PGO on MSVC
PGO on MSVC when the JIT is enabled. Disable that optimization when the JIT is enabled or GIL is disabled. Disable that optimization around
around this function only. If this is fixed upstream, we should this function only. If this is fixed upstream, we should gate this on the
gate this on the version of MSVC. version of MSVC.
*/ */
#if (defined(_MSC_VER) && \
defined(_Py_USING_PGO) && \
(defined(_Py_JIT) || \
defined(Py_GIL_DISABLED)))
#define DO_NOT_OPTIMIZE_INTERP_LOOP
#endif
#ifdef DO_NOT_OPTIMIZE_INTERP_LOOP
# pragma optimize("t", off) # pragma optimize("t", off)
/* This setting is reversed below following _PyEval_EvalFrameDefault */ /* This setting is reversed below following _PyEval_EvalFrameDefault */
#endif #endif
@ -1146,7 +1154,7 @@ goto_to_tier1:
} }
#if defined(_MSC_VER) && defined(_Py_USING_PGO) && defined(_Py_JIT) #ifdef DO_NOT_OPTIMIZE_INTERP_LOOP
# pragma optimize("", on) # pragma optimize("", on)
#endif #endif