Skip to content

Conversation

markshannon
Copy link
Member

@markshannon markshannon commented Aug 12, 2025

@Fidget-Spinner
Copy link
Member

Just so I'm clear: you plan to move this to the thread state later but only on main right? So that we don't change the struct layout in an rc for 3.14?

markshannon and others added 2 commits August 13, 2025 11:44
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
@Fidget-Spinner
Copy link
Member

Can you please add a Py_NO_INLINE to the _PyOptimizer_Optimize function too? I don't think this will fix it as if it's inlined, the alloca might be hoisted out to the main interpreter loop by the compiler.

@markshannon
Copy link
Member Author

Can you please add a Py_NO_INLINE to the _PyOptimizer_Optimize function too? I don't think this will fix it as if it's inlined, the alloca might be hoisted out to the main interpreter loop by the compiler.

Yes, but not in this PR as it seems unrelated

@markshannon
Copy link
Member Author

Just so I'm clear: you plan to move this to the thread state later but only on main right? So that we don't change the struct layout in an rc for 3.14?

Yes, that's the plan.

@markshannon markshannon added the needs backport to 3.14 bugs and security fixes label Aug 13, 2025
@@ -695,6 +695,11 @@ _Py_uop_analyze_and_optimize(
)
{
OPT_STAT_INC(optimizer_attempts);
/* Make sure we have enough C stack space for the optimizer */
int margin = 1 + sizeof(JitOptContext)/_PyOS_STACK_MARGIN_BYTES;
if (_Py_ReachedRecursionLimitWithMargin(_PyThreadState_GET(), margin)) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To work properly, the optimize_uops function or this function must be marked Py_NO_INLINE as well.

Otherwise, the compiler can just inline the functions and hoist the alloca above the check, making the check useless.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants