-
Notifications
You must be signed in to change notification settings - Fork 4.7k
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
Enable more intrinsics for Tier0 #83002
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch, @kunalspathak Issue DetailsThis PR extends the list of intrinsics we now expand in Tier0 (except explicit minopts and debug-friendly code). The reasons are:
Previous round of adding intrinsics in Tier0 demonstrated nice TP wins in TE benchmarks: Jit-diffs (-f --tier0):
Example of a size "regression": https://www.diffchecker.com/qaKdHKwT/
|
cc @MichalStrehovsky do you want me to mark Unsafe intrinsics as "always expand no matter what" as part of this PR for NativeAOT? |
@dotnet/jit-contrib PTAL, spmi diffs - only 3 collections have Tier0 contexts |
We would only really take advantage of it if we merged #82589 as well. The improvement from that is marginal and not worth duplicating some of the logic from RyuJIT to the C# side. We'll eventually get that "for free" if/when we start using RyuJIT as a IL scanner to build the whole program view. The scanner is currently written in C# and cannot assume RyuJIT's optimizations. |
/azp run runtime-coreclr outerloop |
Azure Pipelines successfully started running 1 pipeline(s). |
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.
LGTM if outerloop passes. Note that Pri0/innerloop doesn't run any (coreclr) tests with tiering enabled.
/azp run runtime-coreclr pgo, runtime-coreclr libraries-pgo |
Azure Pipelines successfully started running 2 pipeline(s). |
there is a single assert in PGO outerloop pipeline but it's not related (it's Tier1) - will file an issue for it as part of Test Monitor duty |
This PR extends the list of intrinsics we now expand in Tier0 (except explicit minopts and debug-friendly code). The reasons are:
get_IsValueType
lead to early dead code removal in Tier0 - it means we don't waste time resolving tokens inside dead branchescall
and we don't have to call all those expensive VM APIs such as getCallInfoInterlocked.Add()
function is now never compiled.Previous round of adding intrinsics in Tier0 demonstrated nice rps/latency wins in TE benchmarks:
Jit-diffs (-f --tier0):
Example of a size "regression": https://www.diffchecker.com/qaKdHKwT/