diff options
author | Noah Falk <noahfalk@users.noreply.github.com> | 2018-04-10 20:35:33 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-10 20:35:33 -0700 |
commit | 6854a3ea1f0946a115de208dbb2371896c3ca23a (patch) | |
tree | 00b5265d1edd7efb60fddfd7656a329318ff8322 /src/vm/method.cpp | |
parent | 2ffcdd00249fd37e3c0d823df79ff19579028d66 (diff) | |
download | coreclr-6854a3ea1f0946a115de208dbb2371896c3ca23a.tar.gz coreclr-6854a3ea1f0946a115de208dbb2371896c3ca23a.tar.bz2 coreclr-6854a3ea1f0946a115de208dbb2371896c3ca23a.zip |
Fix x86 steady state tiered compilation performance (#17476)
* Fix x86 steady state tiered compilation performance
Also included - a few tiered compilation only test hooks + small logging fix for JitBench
Tiered compilation wasn't correctly implementing the MayHavePrecode and RequiresStableEntryPoint policy functions. On x64 this was a non-issue, but due to compact entrypoints on x86 it lead to methods allocating both FuncPtrStubs and Precodes. The FuncPtrStubs would never get backpatched which caused never ending invocations of the Prestub for some methods. Although such code still runs correctly, it is much slower than it needs to be. On MusicStore x86 I am seeing a 20% improvement in steady state RPS after this fix, bringing us inline with what I've seen on x64.
Diffstat (limited to 'src/vm/method.cpp')
-rw-r--r-- | src/vm/method.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/vm/method.cpp b/src/vm/method.cpp index d323ef0f40..e1bd021bc7 100644 --- a/src/vm/method.cpp +++ b/src/vm/method.cpp @@ -2414,7 +2414,11 @@ BOOL MethodDesc::RequiresMethodDescCallingConvention(BOOL fEstimateForChunk /*=F BOOL MethodDesc::RequiresStableEntryPoint(BOOL fEstimateForChunk /*=FALSE*/) { LIMITED_METHOD_CONTRACT; - + + // Create precodes for versionable methods + if (IsVersionableWithPrecode()) + return TRUE; + // Create precodes for edit and continue to make methods updateable if (IsEnCMethod() || IsEnCAddedMethod()) return TRUE; |