-
Notifications
You must be signed in to change notification settings - Fork 5.2k
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.