JIT: pgo/devirt diagnostic improvements (#53247)
authorAndy Ayers <andya@microsoft.com>
Wed, 26 May 2021 15:56:09 +0000 (08:56 -0700)
committerGitHub <noreply@github.com>
Wed, 26 May 2021 15:56:09 +0000 (08:56 -0700)
commit7f090c346afbedcfbff93c4002b577bab1988ecb
tree89a036378ac4d5212f02e6c69253ad30fb3b5ec2
parentdc5a1c8f221ff3c38d61021e517719ac1aa24356
JIT: pgo/devirt diagnostic improvements (#53247)

Several changes to help better diagnose PGO and devirtualization issues:
* Report the source of the PGO data to the jit
* Report the reason for a devirtualization failure to the jit
* Add checking mode that compares result of devirtualization to class profile
* Add reporting mode to assess overall rates of devirtualization failure
  when the jit has exact type information.

Also fix a loophole where in some case we'd still devirtualize if not
optimizing.

Note crossgen2 does not yet set devirtualization failure reasons.
29 files changed:
src/coreclr/ToolBox/superpmi/mcs/verbdumpmap.cpp
src/coreclr/ToolBox/superpmi/mcs/verbjitflags.cpp
src/coreclr/ToolBox/superpmi/superpmi-shared/agnostic.h
src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h
src/coreclr/ToolBox/superpmi/superpmi-shim-collector/icorjitinfo.cpp
src/coreclr/ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp
src/coreclr/ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp
src/coreclr/ToolBox/superpmi/superpmi/icorjitinfo.cpp
src/coreclr/inc/corinfo.h
src/coreclr/inc/corjit.h
src/coreclr/inc/icorjitinfoimpl_generated.h
src/coreclr/inc/jiteeversionguid.h
src/coreclr/jit/ICorJitInfo_API_wrapper.hpp
src/coreclr/jit/compiler.cpp
src/coreclr/jit/compiler.h
src/coreclr/jit/fgprofile.cpp
src/coreclr/jit/importer.cpp
src/coreclr/jit/jitconfigvalues.h
src/coreclr/tools/Common/JitInterface/CorInfoBase.cs
src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs
src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs
src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt
src/coreclr/tools/aot/jitinterface/jitinterface.h
src/coreclr/vm/jitinterface.cpp
src/coreclr/vm/jitinterface.h
src/coreclr/vm/pgo.cpp
src/coreclr/vm/pgo.h
src/coreclr/zap/zapinfo.cpp