Get exact class during devirtualization (#45526)
authorAndy Ayers <andya@microsoft.com>
Sat, 5 Dec 2020 16:33:21 +0000 (08:33 -0800)
committerGitHub <noreply@github.com>
Sat, 5 Dec 2020 16:33:21 +0000 (08:33 -0800)
commitea35f6aae9e1aac0e0c5de6df97e05bd992a7528
treea3f71a8380310f93299801560383f7865d289077
parentdc0e11d2e681659fc20feebf4c092082e75706af
Get exact class during devirtualization (#45526)

If we devirtualize to a method on a generic class, try and obtain the
exact class. Pass this back to the jit to unblock some types of inlines.

Also refactor how information is passed during devirtualization in
anticipation of follow on work to devirtualize default interface methods.
Because there are now multiple inputs and outputs, convey everything
using a struct.

Resolves #38477.
25 files changed:
src/coreclr/src/ToolBox/superpmi/superpmi-shared/icorjitinfoimpl.h
src/coreclr/src/ToolBox/superpmi/superpmi-shared/lwmlist.h
src/coreclr/src/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
src/coreclr/src/ToolBox/superpmi/superpmi-shared/methodcontext.h
src/coreclr/src/ToolBox/superpmi/superpmi-shim-collector/icorjitinfo.cpp
src/coreclr/src/ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp
src/coreclr/src/ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp
src/coreclr/src/ToolBox/superpmi/superpmi/icorjitinfo.cpp
src/coreclr/src/inc/corinfo.h
src/coreclr/src/inc/jiteeversionguid.h
src/coreclr/src/jit/ICorJitInfo_API_wrapper.hpp
src/coreclr/src/jit/importer.cpp
src/coreclr/src/tools/Common/JitInterface/CorInfoBase.cs
src/coreclr/src/tools/Common/JitInterface/CorInfoImpl.cs
src/coreclr/src/tools/Common/JitInterface/CorInfoTypes.cs
src/coreclr/src/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt
src/coreclr/src/tools/aot/jitinterface/jitinterface.h
src/coreclr/src/vm/jitinterface.cpp
src/coreclr/src/vm/jitinterface.h
src/coreclr/src/zap/zapinfo.cpp
src/coreclr/src/zap/zapinfo.h
src/tests/JIT/opt/Devirtualization/exact1.cs [new file with mode: 0644]
src/tests/JIT/opt/Devirtualization/exact1.csproj [new file with mode: 0644]
src/tests/JIT/opt/Devirtualization/exact2.cs [new file with mode: 0644]
src/tests/JIT/opt/Devirtualization/exact2.csproj [new file with mode: 0644]