FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

GH-137573: Check C stack depth before stack allocating JIT optimizer struct by markshannon · Pull Request #137676 · python/cpython · GitHub

/ cpython Public

GH-137573: Check C stack depth before stack allocating JIT optimizer struct - #137676

Closed
markshannon wants to merge 4 commits into
python:mainfrom
faster-cpython:check-stack-in-jit
Closed

GH-137573: Check C stack depth before stack allocating JIT optimizer struct#137676
markshannon wants to merge 4 commits into
python:mainfrom
faster-cpython:check-stack-in-jit

Conversation

markshannon commented Aug 12, 2025
edited by bedevere-app Bot
Loading

Copy link
Copy Markdown
Member

Comment thread Lib/test/test_call.py Outdated

Copy link
Copy Markdown
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>

Copy link
Copy Markdown
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.

Copy link
Copy Markdown
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

Copy link
Copy Markdown
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 added the needs backport to 3.14 bugs and security fixes label Aug 13, 2025
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
Copy Markdown
Member

Choose a reason for hiding this comment

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

Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Quality

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.

Copy link
Copy Markdown
Member Author

We've already started moving the buffers to the heap, so this won't be needed.

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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


Back | FazBrowse Home | New Git URL