GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GH-135904: Improve the JIT's performance on macOS by brandtbucher · Pull Request #136528 · python/cpython

Conversation

@brandtbucher

@brandtbucher brandtbucher commented Jul 11, 2025 •
edited by bedevere-app Bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

This PR makes a couple of minor tweaks to the JIT that result in 1.7% faster performance on macOS overall:

  • Our AArch64 code doesn't need to be 8-byte aligned, just the data. Currently, we guarantee this by aligning all code anyways, since the data follows immediately after it. This is wasteful, since it means about half of all stencils end in a nop. Instead, don't pad any stencils, and just align the data when it's compiled. 🤦🏼
  • The textual assembly "optimizer" pass has a bug where it interprets lines that are commented with ; as instructions. By recognizing these commented lines, we can remove more zero-length jumps at the end of stencils. 🤦🏼
  • During this same pass, we can represent the address of the next instruction (the end of the template, or the _JIT_CONTINUE label) as a "local" label, which allows the assembler to resolve it at compile time and encode it more efficiently. There's a special (platform-dependent) prefix to signal this.
  • Finally, instead of declaring jump targets (_JIT_CONTINUE, _JIT_ERROR_TARGET, and _JIT_JUMP_TARGET) as extern symbols, just declare them as local functions. This results in more efficient jumps (and also allows us to remove a somewhat hacky pre-processing step for the textual assembly on Windows to force these efficient jumps).
  • Issue: Optimize the JIT's low-level assembly control flow #135904

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Fidget-Spinner, Genarito, Sacul0457, and CarlosEduR reacted with rocket emoji
All reactions
  • 🚀 4 reactions
brandtbucher and others added 7 commits July 7, 2025 15:40
@brandtbucher
Make jump targets local instead of extern
aa2b0df
@brandtbucher
Add __attribute__((visibility("hidden")))
3a6c20d
@brandtbucher
Rework AArch64 alignment
3ff9ee7
@brandtbucher
fixup
d66cc85
@brandtbucher
fixup
1f6bdfc
@brandtbucher
Detect ";" comments
cff0f09
@brandtbucher
Handle symbol and label prefixes in a principled way
997a858
@brandtbucher
brandtbucher requested a review from diegorusso July 11, 2025 02:01
@brandtbucher brandtbucher self-assigned this Jul 11, 2025
@brandtbucher
brandtbucher requested a review from savannahostrowski as a code owner July 11, 2025 02:01
@brandtbucher brandtbucher added performance Performance or resource usage skip news interpreter-core (Objects, Python, Grammar, and Parser dirs) topic-JIT labels Jul 11, 2025
@bedevere-app bedevere-app Bot added the awaiting core review label Jul 11, 2025
@bedevere-app bedevere-app Bot mentioned this pull request Jul 11, 2025
Optimize the JIT's low-level assembly control flow #135904
Closed
@brandtbucher
Fix mypy
9544d5d
@Fidget-Spinner

Fidget-Spinner commented Jul 11, 2025

Copy link
Copy Markdown
Member

This is amazing! I can't review it, but thanks for all your assembler wizardry on this.

brandtbucher reacted with heart emoji
All reactions
  • ❤️ 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

diegorusso
diegorusso approved these changes Jul 14, 2025
View reviewed changes

@diegorusso diegorusso left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Thanks. The PR looks great, thanks for making the JIT so much clearer to reason about.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

brandtbucher reacted with heart emoji
All reactions
  • ❤️ 1 reaction
@bedevere-app bedevere-app Bot added awaiting merge and removed awaiting core review labels Jul 14, 2025
@brandtbucher
brandtbucher merged commit 3d8c38f into python:main Jul 14, 2025
@bedevere-app bedevere-app Bot removed the awaiting merge label Jul 14, 2025
taegyunkim pushed a commit to taegyunkim/cpython that referenced this pull request Aug 4, 2025
@brandtbucher @taegyunkim
pythonGH-135904: Improve the JIT's performance on macOS (pythonGH-136528
d645168
)
Agent-Hellboy pushed a commit to Agent-Hellboy/cpython that referenced this pull request Aug 19, 2025
@brandtbucher @Agent-Hellboy
pythonGH-135904: Improve the JIT's performance on macOS (pythonGH-136528
bfbbdc9
)
@savannahostrowski savannahostrowski mentioned this pull request Oct 12, 2025
JIT: Fix compiler warning from visibility attribute in typedef #139981
Merged
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@diegorusso diegorusso diegorusso approved these changes
@savannahostrowski savannahostrowski Awaiting requested review from savannahostrowski

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@brandtbucher brandtbucher

Labels

interpreter-core (Objects, Python, Grammar, and Parser dirs) performance Performance or resource usage skip news topic-JIT

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@brandtbucher @Fidget-Spinner @diegorusso
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.