JIT: modify box/unbox/isinst/castclass expansions for fast jitting (dotnet/coreclr...
authorAndy Ayers <andya@microsoft.com>
Thu, 10 Aug 2017 22:17:31 +0000 (15:17 -0700)
committerGitHub <noreply@github.com>
Thu, 10 Aug 2017 22:17:31 +0000 (15:17 -0700)
commit00a696c530ec49bc48054a525c4d7c6df32795ef
treee2269dfd85dbbc7a95b597def407612d10299be5
parentc8602d701277adc731b78c472a0a250a45f76ead
JIT: modify box/unbox/isinst/castclass expansions for fast jitting (dotnet/coreclr#13188)

When the jit is generating code in debug/minopts/rare-block modes,
we'd prefer it to generate code more quickly and worry less about overall
generated code performance.

Generally speaking smaller intermediate and final code should correlate
well with faster jitting.

This change alters the expansions of box, unbox, isinst, and castclass when
generating code for minopts, debug, or in rarely run blocks. In such modes
the jit estimates whether an inline sequence or general helper call would
result in more compact code, and then chooses the smaller sequence.

This reduces generated code size around 2.5% in a variety of scenarios,
and roughly translates to a 1.5% improvement in time spent jitting.

Similar strategies can be applied to other complex operations during
importation. That work is forthcoming.

Commit migrated from https://github.com/dotnet/coreclr/commit/47b38daad7d9e0cc754e9a663b211d262ee499d7
src/coreclr/src/jit/importer.cpp
src/coreclr/src/jit/valuenum.cpp
src/coreclr/src/jit/valuenumfuncs.h