Inliner: use time budget to avoid excessive inlining
authorAndy Ayers <andya@microsoft.com>
Fri, 15 Apr 2016 18:24:25 +0000 (11:24 -0700)
committerAndy Ayers <andya@microsoft.com>
Fri, 15 Apr 2016 22:12:19 +0000 (15:12 -0700)
commit8eee40a562ff4d6bbb2e70b2cf5eaa3ff5a99e07
tree67f833c7d201263db59c6d8a8a2dbb9206ff5f8b
parent9c82a1d2da34fcad25513bf30ca50fca1c42c7ca
Inliner: use time budget to avoid excessive inlining

Use the time budget and time estimates to stop inlining once the
overall jit time increase estimate for the method is 10x the initial
jit time estimate.

This is implemented as part of `LegacyPolicy` and so can impact
the current inline behavior.

The budget is intentionally set quite high so that it only kicks in
for very rare cases where the call tree below the root is deep and wide
with many small methods. In extended testing on desktop this limit
fires in exactly two cases, both HFA tests.

In CoreCLR tests 12 of the HFA tests hit this limit. I've added
a directed test case here that came from the original bug report.

Closes dotnet/coreclr#2472.

Commit migrated from https://github.com/dotnet/coreclr/commit/597f78e55cc77dc75f25c5aa2471ea0e82e988cd
src/coreclr/src/jit/inline.cpp
src/coreclr/src/jit/inline.def
src/coreclr/src/jit/inline.h
src/coreclr/src/jit/inlinepolicy.cpp
src/coreclr/tests/src/JIT/opt/Inline/tests/LotsOfInlines.cs [new file with mode: 0644]
src/coreclr/tests/src/JIT/opt/Inline/tests/LotsOfInlines.csproj [new file with mode: 0644]