Devirtualize calls in some simple cases
authorAndy Ayers <andya@microsoft.com>
Thu, 2 Mar 2017 03:47:18 +0000 (19:47 -0800)
committerAndy Ayers <andya@microsoft.com>
Thu, 2 Mar 2017 15:49:33 +0000 (07:49 -0800)
commit53d2bfd9d7d4a83651ce5c03680ef6d2444b7cc9
tree9452f3a32cbce7df2eade5aafda440536032d840
parent3aa993e630922bb7f2e59065625949962029fa58
Devirtualize calls in some simple cases

Devirtualize calls where the this object type at a call site
is a subtype of the type described at the call site. Currently learns
types from local and arg references and a subset of other operators.

Will devirtualize if either the class or method is final (sealed in C#),
or if the type is known exactly (eg from a newobj).

Devirtualization is run twice, once during importation, and again in a
limited way after inlinining. Calls devirtualized during importation are
are subsequently eligible for inlining. Calls devirtualized during inlining
currently cannot be inlined.

Commit migrated from https://github.com/dotnet/coreclr/commit/e0637eaa3eecb62e8df2a1fbb50b0130d2ad40a5
src/coreclr/src/jit/compiler.h
src/coreclr/src/jit/flowgraph.cpp
src/coreclr/src/jit/importer.cpp
src/coreclr/src/jit/jitconfigvalues.h
src/coreclr/src/jit/lclvars.cpp