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 16Now: 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 🙂 |
MichalStrehovsky
left a comment
There was a problem hiding this comment.
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: