diff options
author | Andy Ayers <andya@microsoft.com> | 2017-11-08 08:48:49 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-08 08:48:49 -0800 |
commit | 176dfc8fac4821086607fb322b685c73c49554b4 (patch) | |
tree | 7581caa576f9e79bee59edc03cd17377596001b7 /src/jit/inlinepolicy.h | |
parent | 661ee8f407deec5a36011fdcce8f68cf68266823 (diff) | |
download | coreclr-176dfc8fac4821086607fb322b685c73c49554b4.tar.gz coreclr-176dfc8fac4821086607fb322b685c73c49554b4.tar.bz2 coreclr-176dfc8fac4821086607fb322b685c73c49554b4.zip |
JIT: make suitably optimistic prejit inline assessments (#14850)
When prejitting, the jit assesses whether each root method is a potential
inline candidate for any possible caller. Methods deemed un-inlinable in any
caller are marked in the runtime as "noinline" to save the jit some work
later on when it sees calls to these methods.
This assessment was too conservative and led to prejit-ordering dependences
for inlines. It also meant that prejitting was missing some inlines that
would have happened had we not done the prejit root assessment.
This change removes some of the prejit observation blockers. These mostly
will enable more prejit methods to become candidates. We also now track when
a method argument reaches a test.
When we are assessing profitability for a prejit root, assume the call site
best possible case.
Also, update the inline XML to capture the prejit assessments.
This increases the number of inlines considered and performed when prejitting
and will also lead to slightly more inlining when jitting. However we do not
expect a large througput impact when jitting -- the main impact of this change
is that inlining when prejitting is now just as aggressive as inlining when
jitting, and the decisions no longer depend on the order in which methods are
prejitted.
Closes #14441.
Closes #3482.
Diffstat (limited to 'src/jit/inlinepolicy.h')
-rw-r--r-- | src/jit/inlinepolicy.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/jit/inlinepolicy.h b/src/jit/inlinepolicy.h index 0ff0b33279..b1094bbaaa 100644 --- a/src/jit/inlinepolicy.h +++ b/src/jit/inlinepolicy.h @@ -84,6 +84,7 @@ public: , m_CallsiteFrequency(InlineCallsiteFrequency::UNUSED) , m_InstructionCount(0) , m_LoadStoreCount(0) + , m_ArgFeedsTest(0) , m_ArgFeedsConstantTest(0) , m_ArgFeedsRangeCheck(0) , m_ConstantArgFeedsConstantTest(0) @@ -148,6 +149,7 @@ protected: InlineCallsiteFrequency m_CallsiteFrequency; unsigned m_InstructionCount; unsigned m_LoadStoreCount; + unsigned m_ArgFeedsTest; unsigned m_ArgFeedsConstantTest; unsigned m_ArgFeedsRangeCheck; unsigned m_ConstantArgFeedsConstantTest; |