mirror of
https://github.com/python/cpython
synced 2024-09-05 00:05:39 +00:00
gh-111786: Optimize for space for _PyEval_EvalFrameDefault on MSVC for PGO (#111794)
In PGO mode, this function caused a compiler error in MSVC. It turns out that optimizing for space only save the day, and is even faster. However, without PGO, this is neither necessary nor slower.
This commit is contained in:
parent
6f09f69b7f
commit
bc12f79112
|
@ -41,6 +41,7 @@
|
|||
<AdditionalIncludeDirectories>$(PySourcePath)Include;$(PySourcePath)Include\internal;$(PySourcePath)Include\internal\mimalloc;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;$(_Py3NamePreprocessorDefinition);$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(DisableGil)' == 'true'">Py_NOGIL=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions Condition="'$(SupportPGO)' and ($(Configuration) == 'PGInstrument' or $(Configuration) == 'PGUpdate')">_Py_USING_PGO=1;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
|
|
|
@ -664,6 +664,15 @@ extern const struct _PyCode_DEF(8) _Py_InitCleanup;
|
|||
* so consume 3 units of C stack */
|
||||
#define PY_EVAL_C_STACK_UNITS 2
|
||||
|
||||
#if defined(_MSC_VER) && defined(_Py_USING_PGO)
|
||||
/* gh-111786: _PyEval_EvalFrameDefault is too large to optimize for speed with
|
||||
PGO on MSVC. Disable that optimization temporarily. 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)
|
||||
{
|
||||
|
@ -1080,6 +1089,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
|
|||
# pragma GCC diagnostic pop
|
||||
#elif defined(_MSC_VER) /* MS_WINDOWS */
|
||||
# pragma warning(pop)
|
||||
# pragma optimize("", on)
|
||||
#endif
|
||||
|
||||
static void
|
||||
|
|
Loading…
Reference in a new issue