diff options
author | Andy Ayers <andya@microsoft.com> | 2017-10-23 17:46:41 -0700 |
---|---|---|
committer | Andy Ayers <andya@microsoft.com> | 2017-10-30 14:36:24 -0700 |
commit | 215ee89756e612bcdd7e9bd61ea500eacaf4973f (patch) | |
tree | 1ba04645996fd4c04db80c1975a1fbd3ef791568 /src/zap/zapinfo.h | |
parent | 274c961fa23d3dcd38cbb5736dcbf7b908d0cf99 (diff) | |
download | coreclr-215ee89756e612bcdd7e9bd61ea500eacaf4973f.tar.gz coreclr-215ee89756e612bcdd7e9bd61ea500eacaf4973f.tar.bz2 coreclr-215ee89756e612bcdd7e9bd61ea500eacaf4973f.zip |
JIT: optimize calls on boxed objects
For calls with boxed this objects, invoke the unboxed entry point if available
and modify the box to copy the original value or struct to a local. Pass the
address of this local as the first argument to the unboxed entry point.
Defer for cases where the unboxed entry point requires an extra type parameter.
This may enable subsequent inlining of the method, and if the method has other
boxed parameters, may enable undoing those boxes as well.
The jit is not yet as proficient at eliminating the struct copies, but they
are present with or without this change, and some may even be required when the
methods mutate the fields of `this`.
Closes #14213.
Diffstat (limited to 'src/zap/zapinfo.h')
-rw-r--r-- | src/zap/zapinfo.h | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/zap/zapinfo.h b/src/zap/zapinfo.h index f401cbaf9d..1c73d4a0f5 100644 --- a/src/zap/zapinfo.h +++ b/src/zap/zapinfo.h @@ -675,12 +675,14 @@ public: CORINFO_METHOD_HANDLE resolveVirtualMethod( CORINFO_METHOD_HANDLE virtualMethod, CORINFO_CLASS_HANDLE implementingClass, - CORINFO_CONTEXT_HANDLE ownerType - ); + CORINFO_CONTEXT_HANDLE ownerType); + + CORINFO_METHOD_HANDLE getUnboxedEntry( + CORINFO_METHOD_HANDLE ftn, + bool* requiresInstMethodTableArg); CORINFO_CLASS_HANDLE getDefaultEqualityComparerClass( - CORINFO_CLASS_HANDLE elemType - ); + CORINFO_CLASS_HANDLE elemType); void expandRawHandleIntrinsic( CORINFO_RESOLVED_TOKEN * pResolvedToken, |