Skip to content

Removal of Helper Method Frames (HMF) #110767

@AaronRobinsonMSFT

Description

@AaronRobinsonMSFT

Background

Over the past several releases, there has been a slow, but intentional, effort to move more runtime code from C++ into C#. A consequence of this effort has meant the removal of Helper Method Frames (HMF). Removal of HMFs simplifies the runtime for efforts like cDAC, reduces opportunities for GC holes, and in some cases can result in improved performance when the JIT can see more of the code that is can optimize.

Prior work

Below is a list of various PRs that can be referenced that demonstrate that effort across multiple authors and releases.

#70000, #70055, #71873, #87166, #95038, #96926, #97590, #100116, #101353, #106793, #107058, #107218, #107648, #108167, #109135, #109996, #110064, #110211, #110377, #110481, #110627, #110766

Remaining work

List of JIT helpers that need the removal of explicit HMFs:

  • JIT_GetFieldAddr_Framed
  • JIT_New
  • JIT_NewMaybeFrozen
  • FramedAllocateString
  • JIT_StrCns
  • JIT_NewArr1
  • JIT_NewArr1MaybeFrozen
  • JIT_NewMDArr
  • JIT_Box
  • JIT_GetRuntimeFieldStub
  • JIT_GetRuntimeMethodStub
  • JIT_GetRuntimeType_Framed
  • JIT_MonEnter_Helper
  • JIT_MonTryEnter_Helper
  • JIT_MonExit_Helper
  • JIT_MonExit_Signal
  • IL_Throw
  • IL_Rethrow
  • JIT_ThrowMethodAccessException
  • JIT_ThrowFieldAccessException
  • JIT_ThrowClassAccessException
  • JIT_UserBreakpoint
  • JIT_PollGC_Framed
  • JIT_PInvokeEndRarePath
  • JIT_RareDisableHelper/JIT_RareDisableHelperWorker
  • JIT_StressGC
  • JIT_Patchpoint_Framed
  • JIT_PartialCompilationPatchpoint

List of JIT helpers with implicit HMFs through a use of FCThrow.

The following clean-up can occur after all the above is complete:

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions