Description
From @jkotas #109087 (comment)
The extra call frame introduced by the changes in this PR is where the overhead is.
main: managed method -> FCall (with argument checks that require HMF) -> internal C-runtime div helper
PR (notice the extra frame): managed method -> managed helper call (argument checks) -> FCall (without argument checks) -> internal C-runtime div helper
Inlined checks: managed method (with argument checks) -> FCall (without argument checks) -> internal C-runtime div helper
On 32 bit platforms such as x86 and arm32, JIT uses software fallback CORINFO_HELP_{,U,L,UL}{DIV,MOD}
to handle DivideByZero
and Overflow
exceptions in div/mod arithmetic ops via FCThrow
in jithelpers.cpp. FCThrow
uses HELPER_METHOD_FRAME
which we are trying to remove from runtime (#95695).
JIT can handle inserting the software fallback using the existing CORINFO_HELP_OVERFLOW
and CORINFO_HELP_THROWDIVZERO
helpers on 32 bit platforms. This will remove 8 (out of 9) remaining FCThrow
calls from jithelpers.cpp.