perf(semantic): mark checker::check as inline(always)#17459
perf(semantic): mark checker::check as inline(always)#17459graphite-app[bot] merged 1 commit intomainfrom
checker::check as inline(always)#17459Conversation
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
CodSpeed Performance ReportMerging #17459 will improve performance by 10.13%Comparing Summary
Benchmarks breakdown
Footnotes
|
Boshen
left a comment
There was a problem hiding this comment.
Add two inline comments to these two #[inline(always)] and we should be good to go!
checker::check as inline(always)
8d811b5 to
91383cc
Compare
There was a problem hiding this comment.
Pull request overview
This PR applies a performance optimization by marking two functions with #[inline(always)] to enable compile-time match arm elimination. The strategy relies on inlining both checker::check and SemanticBuilder::leave_node so that when each visit_* method calls leave_node with a statically known AstKind variant, the compiler can constant-fold the large match statement in checker::check, eliminating all non-matching arms and reducing both execution time and potentially binary size.
- Adds
#[inline(always)]tochecker::checkwith comprehensive documentation - Adds
#[inline(always)]toSemanticBuilder::leave_nodewith explanatory comments - Both use
#[expect(clippy::inline_always)]with clear reasoning for the optimization
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| crates/oxc_semantic/src/checker/mod.rs | Adds documentation and #[inline(always)] attribute to the check function to enable compile-time match elimination |
| crates/oxc_semantic/src/builder.rs | Adds documentation and #[inline(always)] attribute to the leave_node method to complete the inlining chain |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
b53f449 to
f448e31
Compare
Merge activity
|
the reasoning here is: 1. `check` is a big function with a big match arm 2. if we inline it into leave_node 3. and inline leave_node into it's caller 4. the match will be flattened, as the compiler knows what varient of the kind it is, this means all the other match arms can be dropped, as well as the match it's self, just leaving the call into the check fn (if needed) <- if this works correctly, it also means this change will hardly have any impact on binary size
f448e31 to
d968e51
Compare
### 🚀 Features - 659c23e linter: Init note field boilerplate (#17589) (Shrey Sudhir) - 6870b64 parser: Add TS1363 error code (#17609) (Sysix) - 23680a3 mangler: Skip mangling only in scopes affected by direct eval (#17612) (camc314) - a7e1643 parser: Add TS2528 error code to duplicate_default_export diagnostic (#17558) (camc314) ### 🐛 Bug Fixes - 1044116 ecmascript: Mark `new Symbol` as non side-effect free (#17568) (camc314) - ab5e4ca isolated-declarations: Strip default values from rest parameter binding patterns (#17602) (camc314) - 68b2e54 minifier: Prevent incorrect ??= transformation when member base is mutated (#17472) (copilot-swe-agent) ### ⚡ Performance - 6067143 semantic: Remove hash when checking identifier (#17564) (camchenry) - a28ab3d semantic: Avoid bounds check when checking string literal (#17545) (camc314) - 04809d1 semantic: Use SIMD for finding backslashes in `check_string_literal` (#17534) (camchenry) - 49ad2f0 semantic: Mark all diagnostic functions as `#[cold]` (#17487) (camc314) - ea82b50 transformer: Mark all diagnostic functions as `#[cold]` (#17486) (camc314) - d968e51 semantic: Mark `checker::check` as `inline(always)` (#17459) (camc314)

the reasoning here is:
checkis a big function with a big match arm