From 46655f31f204643352c6562f8d939d84fac8379c Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Wed, 9 Oct 2024 17:24:15 -0400 Subject: [PATCH 1/4] gh-125217: Turn off optimization are _PyEval_EvalFrameDefault to avoid MSVC crash --- Python/ceval.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Python/ceval.c b/Python/ceval.c index f4e0add3034707..0f81fe3221af02 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -761,6 +761,16 @@ _PyObjectArray_Free(PyObject **array, PyObject **scratch) * so consume 3 units of C stack */ #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 + PGO on MSVC when the JIT is enabled. Disable that optimization + around this function only. If this is fixed upstream, we should + gate this on the version of MSVC. + */ +# pragma optimize("t", off) +/* This setting is reversed below following _PyEval_EvalFrameDefault */ +#endif + PyObject* _Py_HOT_FUNCTION _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int throwflag) { @@ -1136,6 +1146,10 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int } +#if defined(_MSC_VER) && defined(_Py_USING_PGO) && defined(Py_JIT) +# pragma optimize("", on) +#endif + #if defined(__GNUC__) # pragma GCC diagnostic pop #elif defined(_MSC_VER) /* MS_WINDOWS */ From 4293665e05652a36da9b5a5006d4a4ba402ba4ed Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Thu, 10 Oct 2024 11:49:52 -0400 Subject: [PATCH 2/4] Whitespace-only change --- Python/jit.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Python/jit.c b/Python/jit.c index 234fc7dda83231..a7954730c2c372 100644 --- a/Python/jit.c +++ b/Python/jit.c @@ -461,6 +461,7 @@ combine_symbol_mask(const symbol_mask src, symbol_mask dest) } } + // Compiles executor in-place. Don't forget to call _PyJIT_Free later! int _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], size_t length) From 946ab27e6f51e15b8769e429802af4752571785b Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Thu, 10 Oct 2024 12:59:04 -0400 Subject: [PATCH 3/4] Another whitespace change --- Python/jit.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Python/jit.c b/Python/jit.c index a7954730c2c372..b6864e240f5c16 100644 --- a/Python/jit.c +++ b/Python/jit.c @@ -462,6 +462,7 @@ combine_symbol_mask(const symbol_mask src, symbol_mask dest) } + // Compiles executor in-place. Don't forget to call _PyJIT_Free later! int _PyJIT_Compile(_PyExecutorObject *executor, const _PyUOpInstruction trace[], size_t length) From 74c6c21ca973c47221fc49ce3d4e63b9ebeaede3 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Thu, 10 Oct 2024 13:53:16 -0400 Subject: [PATCH 4/4] HACK: Don't require interpreter to pass first --- .github/workflows/jit.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 754f179f105591..f7ca69e3414c99 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -41,7 +41,6 @@ jobs: ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 jit: name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) - needs: interpreter runs-on: ${{ matrix.runner }} timeout-minutes: 90 strategy: @@ -163,7 +162,6 @@ jobs: jit-with-disabled-gil: name: Free-Threaded (Debug) - needs: interpreter runs-on: ubuntu-latest steps: - uses: actions/checkout@v4