-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[mono] Add unchecked version of stelem_ref interpreter opcode #99829
Merged
+49
−4
Conversation
This file contains 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
Tagging subscribers to this area: @BrzVlad, @kotlarmilos |
kg
requested review from
lewing,
pavelsavara,
BrzVlad,
vargaz and
kotlarmilos
as code owners
March 18, 2024 23:42
BrzVlad
reviewed
Mar 21, 2024
This was referenced Apr 10, 2024
BrzVlad
approved these changes
Apr 24, 2024
This was referenced Apr 25, 2024
Closed
Closed
Closed
@kg this looks like it might have regressed the Vector128 numbers a bit in https://radekdoulik.github.io/WasmPerformanceMeasurements |
Ruihan-Yin
pushed a commit
to Ruihan-Yin/runtime
that referenced
this pull request
May 30, 2024
…#99829) * Introduce mint_stelem_ref_unchecked * Inline most of stelem_ref_unchecked in jiterpreter traces * Add more complete type check for stelem_ref_unchecked * Correctness fix and simplification for stelem_ref_unchecked
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
The generic opcode for storing reference types into arrays has to perform a full type check for the new element to make sure it's compatible with the destination array, due to array variance. In many cases however, if the element type of the array is sealed, we can theoretically skip this check and do the assignment safely in all cases. My understanding is that ryujit already does a form of this optimization, so I added a basic version of it to the mono interpreter.
The jiterpreter is also updated to exploit this opcode, because with the removal of the type-check it's now possible to inline most of the opcode into traces instead of calling a more expensive helper to do the array store. This will enable other existing jiterpreter optimizations like null check fusion to apply to stelem_ref that couldn't before.
My initial testing shows that this hits many uses of
string[]
during a run of System.Runtime.Tests, and according to some quick jiterpreter instrumentation the new opcode appears in some hot paths during the test run as well, so I'm hoping this will be profitable for some real-world code. (It's hard for me to measure locally.)