diff options
Diffstat (limited to 'Python/ceval.c')
-rw-r--r-- | Python/ceval.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 1e4f1f3af20..c6a7a0f841f 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -764,6 +764,23 @@ _PyObjectArray_Free(PyObject **array, PyObject **scratch) #define PY_EVAL_C_STACK_UNITS 2 +/* _PyEval_EvalFrameDefault is too large to optimize for speed with PGO on MSVC + when the JIT is enabled or GIL is disabled. Disable that optimization around + this function only. If this is fixed upstream, we should gate this on the + 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) +/* This setting is reversed below following _PyEval_EvalFrameDefault */ +#endif + #ifdef Py_TAIL_CALL_INTERP #include "opcode_targets.h" #include "generated_cases.c.h" @@ -986,6 +1003,10 @@ early_exit: return NULL; } +#ifdef DO_NOT_OPTIMIZE_INTERP_LOOP +# pragma optimize("", on) +#endif + #if defined(__GNUC__) # pragma GCC diagnostic pop #elif defined(_MSC_VER) /* MS_WINDOWS */ |