Make type comparisons more general purpose (#20940)
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>
Mon, 19 Nov 2018 08:23:22 +0000 (09:23 +0100)
committerGitHub <noreply@github.com>
Mon, 19 Nov 2018 08:23:22 +0000 (09:23 +0100)
commit497419bf8f19c649d821295da7e225e55581cce9
tree5f2813fefef41417a102627277db2fb01b76d7d3
parentd76d97ffc9ba23e6eec30536c6f07756e08151f2
Make type comparisons more general purpose (#20940)

This has two parts:

## Part 1
CoreRT represents native type handles differently from CoreCLR - on CoreCLR, `RuntimeTypeHandle` is a wrapper over `RuntimeType` and RyuJIT is aware of that. On CoreRT, `RuntimeTypeHandle` wraps the native type handle, not a `RuntimeType`.

The knowledge is hardcoded in importer when importing the sequence "ldtoken foo / call Type.GetTypeFromHandle" - importer just removes the call and bashes the result of ldtoken to be a reference type. CoreRT had to avoid reporting `Type.GetTypeFromHandle` as an intrinsic because of that.

I'm adding another helper that lets RyuJIT avoid hardcoding that knowledge. Instead of just bashing the return type, we swap the helper call.

## Part 2

Native type handle equality checks need to go through a helper, unless the EE side says it's okay to compare native type handles directly.
22 files changed:
src/ToolBox/superpmi/superpmi-shared/icorjitinfoimpl.h
src/ToolBox/superpmi/superpmi-shared/lwmlist.h
src/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
src/ToolBox/superpmi/superpmi-shared/methodcontext.h
src/ToolBox/superpmi/superpmi-shim-collector/icorjitinfo.cpp
src/ToolBox/superpmi/superpmi-shim-counter/icorjitinfo.cpp
src/ToolBox/superpmi/superpmi-shim-simple/icorjitinfo.cpp
src/ToolBox/superpmi/superpmi/icorjitinfo.cpp
src/inc/corinfo.h
src/inc/jithelpers.h
src/jit/ICorJitInfo_API_names.h
src/jit/ICorJitInfo_API_wrapper.hpp
src/jit/compiler.h
src/jit/gentree.cpp
src/jit/importer.cpp
src/jit/utils.cpp
src/jit/valuenum.cpp
src/jit/valuenumfuncs.h
src/vm/jitinterface.cpp
src/vm/jitinterface.h
src/zap/zapinfo.cpp
src/zap/zapinfo.h