Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgor Bogatov <egorbo@gmail.com>2021-07-05 14:17:48 +0300
committerGitHub <noreply@github.com>2021-07-05 14:17:48 +0300
commitefd818b90d61a81b73b20f3d1720279f993faa2c (patch)
treef76c47fd765ab671694c58962be7da4f86d75b12 /src/coreclr/jit
parent5065d3b7a7d4cdf964ac7774a926acfa5cafe16f (diff)
JIT: don't report profile for methods with insufficient samples during prejitting (#55096)
* Don't report profile for methods with insufficient samples for PREJIT
Diffstat (limited to 'src/coreclr/jit')
-rw-r--r--src/coreclr/jit/importer.cpp23
-rw-r--r--src/coreclr/jit/jitconfigvalues.h2
2 files changed, 19 insertions, 6 deletions
diff --git a/src/coreclr/jit/importer.cpp b/src/coreclr/jit/importer.cpp
index f65eb39fddc..e2a4257897d 100644
--- a/src/coreclr/jit/importer.cpp
+++ b/src/coreclr/jit/importer.cpp
@@ -19073,17 +19073,30 @@ void Compiler::impMakeDiscretionaryInlineObservations(InlineInfo* pInlineInfo, I
// If the call site has profile data, report the relative frequency of the site.
//
- if ((pInlineInfo != nullptr) && pInlineInfo->iciBlock->hasProfileWeight())
+ if ((pInlineInfo != nullptr) && rootCompiler->fgHaveProfileData() && pInlineInfo->iciBlock->hasProfileWeight())
{
- double callSiteWeight = (double)pInlineInfo->iciBlock->bbWeight;
- double entryWeight = (double)impInlineRoot()->fgFirstBB->bbWeight;
+ BasicBlock::weight_t callSiteWeight = pInlineInfo->iciBlock->bbWeight;
+ BasicBlock::weight_t entryWeight = rootCompiler->fgFirstBB->bbWeight;
+ BasicBlock::weight_t profileFreq = entryWeight == 0.0f ? 0.0f : callSiteWeight / entryWeight;
assert(callSiteWeight >= 0);
assert(entryWeight >= 0);
+ BasicBlock::weight_t sufficientSamples = 1000.0f;
+
+ if (!rootCompiler->opts.jitFlags->IsSet(JitFlags::JIT_FLAG_PREJIT) ||
+ ((callSiteWeight + entryWeight) > sufficientSamples))
+ {
+ // Let's not report profiles for methods with insufficient samples during prejitting.
+ inlineResult->NoteBool(InlineObservation::CALLSITE_HAS_PROFILE, true);
+ inlineResult->NoteDouble(InlineObservation::CALLSITE_PROFILE_FREQUENCY, profileFreq);
+ }
+ }
+ else if ((pInlineInfo == nullptr) && rootCompiler->fgHaveProfileData())
+ {
+ // Simulate a hot callsite for PrejitRoot mode.
inlineResult->NoteBool(InlineObservation::CALLSITE_HAS_PROFILE, true);
- double frequency = entryWeight == 0.0 ? 0.0 : callSiteWeight / entryWeight;
- inlineResult->NoteDouble(InlineObservation::CALLSITE_PROFILE_FREQUENCY, frequency);
+ inlineResult->NoteDouble(InlineObservation::CALLSITE_PROFILE_FREQUENCY, 1.0);
}
}
diff --git a/src/coreclr/jit/jitconfigvalues.h b/src/coreclr/jit/jitconfigvalues.h
index d55fe9be97f..7527fd49221 100644
--- a/src/coreclr/jit/jitconfigvalues.h
+++ b/src/coreclr/jit/jitconfigvalues.h
@@ -462,7 +462,7 @@ CONFIG_STRING(JitInlineReplayFile, W("JitInlineReplayFile"))
CONFIG_INTEGER(JitExtDefaultPolicy, W("JitExtDefaultPolicy"), 1)
CONFIG_INTEGER(JitExtDefaultPolicyMaxIL, W("JitExtDefaultPolicyMaxIL"), 0x64)
CONFIG_INTEGER(JitExtDefaultPolicyMaxBB, W("JitExtDefaultPolicyMaxBB"), 7)
-CONFIG_INTEGER(JitExtDefaultPolicyProfScale, W("JitExtDefaultPolicyProfScale"), 0x22)
+CONFIG_INTEGER(JitExtDefaultPolicyProfScale, W("JitExtDefaultPolicyProfScale"), 0x2A)
CONFIG_INTEGER(JitExtDefaultPolicyProfTrust, W("JitExtDefaultPolicyProfTrust"), 0x7)
CONFIG_INTEGER(JitInlinePolicyModel, W("JitInlinePolicyModel"), 0)