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