-
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
NativeAOT: avoid helper calls for static fields #79709
Conversation
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch, @kunalspathak Issue DetailsBased on #63620 for non-gc fields for now (looking into gc now) static int s;
static int GetS() => s; Was: 4883EC28 sub rsp, 40
E800000000 call CORINFO_HELP_READYTORUN_NONGCSTATIC_BASE
8B00 mov eax, dword ptr [rax]
4883C428 add rsp, 40
C3 ret
; Total bytes of code 16 Now: 8B0500000000 mov eax, dword ptr [(reloc 0x4000000000425290)]
C3 ret
; Total bytes of code 7
|
/azp list |
This comment was marked as outdated.
This comment was marked as outdated.
/azp run runtime-extra-platforms |
Azure Pipelines successfully started running 1 pipeline(s). |
Nice! Does it help property initializers in R2R as well: https://godbolt.org/z/EvTjxcG9a ( |
This is optimized to just |
…ativeaot # Conflicts: # src/coreclr/inc/jiteeversionguid.h
@jakobbotsch @dotnet/jit-contrib PTAL the JIT side, I'll handle statics of GC types separately due to additional complexity (double indirect + new type of const handle in jit for it). @MichalStrehovsky PTAL NAOT side, it's copied from your PR 🙂 |
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.
The AOT side looks good!
I think we'd also be able to do the case when the bases are accessed from shared code if we changed pResult->fieldLookup
from CORINFO_CONST_LOOKUP
to CORINFO_LOOKUP
.
The compiler side can compute the lookup with ComputeLookup(ref pResolvedToken, field.OwningType, ReadyToRunHelperId.GetNonGCStaticBase, ref pResult->fieldLookup)
.
It can also be done separately, just want to make sure the JIT side doesn't make assumptions that would make it more difficult.
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
… into static-fields-nativeaot
@SingleAccretion thanks for the review, can you look again please? |
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
/azp run runtime-extra-platforms |
Azure Pipelines successfully started running 1 pipeline(s). |
@SingleAccretion can you please take another look? Failures in |
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
Based on #63620 for non-gc fields for now (looking into gc now)
Was:
Now: