I don't know about statement types, but there's been a lot of research over the decades about CPU instruction frequency and how it impacts ISA design, IR design, and VM design... but it's all for languages like C. See, for example, loads/stores/branch frequencies for the SPEC2017 benchmarks.
If your language is C-like, there are basically only two reasons to compile to a virtual machine:
- The goal is portability and/or optimisation convenience, in which case it is an intermediate representation on the way to generating code for a real machine.
- The goal is some unusual performance constraint, such as extremely fast compilation, or for the generated code to be as tiny as possible.
In managed/interpreted languages, the main considerations are:
- If the VM code is also a distribution format (e.g. JVM or DotNET), size may be a factor.
- When interpreting, maximising the amount of "actual computation" (as opposed to interpreter overhead) performed for each interpreted instruction.
- When compiling (whether AoT or JIT), preserve as much of the relevant semantics of the source language as is needed for efficient optimisation, and discard (as far as possible) as much of the irrelevant semantics as possible.
Examples of that last point: Preserving basic types (integers, floats) is much more important than preserving non-basic types (structs, objects). Preserving the distinction between static calls and dynamic calls in OO languages is also extremely important.
I suspect that a reason why there isn't as much general research on object-oriented, managed, non-C-like languages (calling them "modern" is arguably misleading!) is because specific libraries and frameworks tend to dictate the style of programming that programmers do.
For C# specifically, if such information has been collected, it seems unlikely that Microsoft is telling anyone.