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:
authorAndy Ayers <andya@microsoft.com>2021-04-21 03:19:38 +0300
committerGitHub <noreply@github.com>2021-04-21 03:19:38 +0300
commitd7e2b8f3c17891120d4bda287324d2098060b7d8 (patch)
treea4190c230e6a81c2554d491672ee4f6e761f8db1 /src/coreclr/ToolBox
parent79fdeb863aa023dbf8c3152b5bbc799e27684099 (diff)
Add MCS jitflags support for the new GetLikelyClass PGO record type (#51578)
Records of this type are created when class profile histograms in dynamic PGO data are summarized by the static PGO tooling. These records can appear in both prejit and jit schemas when the static PGO data is passed back to the jit.
Diffstat (limited to 'src/coreclr/ToolBox')
-rw-r--r--src/coreclr/ToolBox/superpmi/mcs/verbjitflags.cpp8
-rw-r--r--src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp5
-rw-r--r--src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h6
-rw-r--r--src/coreclr/ToolBox/superpmi/superpmi-shared/spmidumphelper.cpp1
4 files changed, 15 insertions, 5 deletions
diff --git a/src/coreclr/ToolBox/superpmi/mcs/verbjitflags.cpp b/src/coreclr/ToolBox/superpmi/mcs/verbjitflags.cpp
index a4070784688..8c0f855d5c5 100644
--- a/src/coreclr/ToolBox/superpmi/mcs/verbjitflags.cpp
+++ b/src/coreclr/ToolBox/superpmi/mcs/verbjitflags.cpp
@@ -29,7 +29,8 @@ int verbJitFlags::DoWork(const char* nameOfInput)
//
bool hasEdgeProfile = false;
bool hasClassProfile = false;
- if (mc->hasPgoData(hasEdgeProfile, hasClassProfile))
+ bool hasLikelyClass = false;
+ if (mc->hasPgoData(hasEdgeProfile, hasClassProfile, hasLikelyClass))
{
rawFlags |= 1ULL << (EXTRA_JIT_FLAGS::HAS_PGO);
@@ -42,6 +43,11 @@ int verbJitFlags::DoWork(const char* nameOfInput)
{
rawFlags |= 1ULL << (EXTRA_JIT_FLAGS::HAS_CLASS_PROFILE);
}
+
+ if (hasLikelyClass)
+ {
+ rawFlags |= 1ULL << (EXTRA_JIT_FLAGS::HAS_LIKELY_CLASS);
+ }
}
int index = flagMap.GetIndex(rawFlags);
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp b/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
index b72d9d7173c..f46cde27804 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.cpp
@@ -6784,7 +6784,7 @@ int MethodContext::dumpMD5HashToBuffer(BYTE* pBuffer, int bufLen, char* hash, in
return m_hash.HashBuffer(pBuffer, bufLen, hash, hashLen);
}
-bool MethodContext::hasPgoData(bool& hasEdgeProfile, bool& hasClassProfile)
+bool MethodContext::hasPgoData(bool& hasEdgeProfile, bool& hasClassProfile, bool& hasLikelyClass)
{
hasEdgeProfile = false;
hasClassProfile = false;
@@ -6808,8 +6808,9 @@ bool MethodContext::hasPgoData(bool& hasEdgeProfile, bool& hasClassProfile)
{
hasEdgeProfile |= (schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::EdgeIntCount);
hasClassProfile |= (schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramCount);
+ hasLikelyClass |= (schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::GetLikelyClass);
- if (hasEdgeProfile && hasClassProfile)
+ if (hasEdgeProfile && hasClassProfile && hasLikelyClass)
{
break;
}
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h b/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h
index 1fe4c95fc05..b6a1e4bbbbc 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shared/methodcontext.h
@@ -49,7 +49,8 @@ enum EXTRA_JIT_FLAGS
{
HAS_PGO = 63,
HAS_EDGE_PROFILE = 62,
- HAS_CLASS_PROFILE = 61
+ HAS_CLASS_PROFILE = 61,
+ HAS_LIKELY_CLASS = 60
};
// Asserts to catch changes in corjit flags definitions.
@@ -57,6 +58,7 @@ enum EXTRA_JIT_FLAGS
static_assert((int)EXTRA_JIT_FLAGS::HAS_PGO == (int)CORJIT_FLAGS::CorJitFlag::CORJIT_FLAG_UNUSED36, "Jit Flags Mismatch");
static_assert((int)EXTRA_JIT_FLAGS::HAS_EDGE_PROFILE == (int)CORJIT_FLAGS::CorJitFlag::CORJIT_FLAG_UNUSED35, "Jit Flags Mismatch");
static_assert((int)EXTRA_JIT_FLAGS::HAS_CLASS_PROFILE == (int)CORJIT_FLAGS::CorJitFlag::CORJIT_FLAG_UNUSED34, "Jit Flags Mismatch");
+static_assert((int)EXTRA_JIT_FLAGS::HAS_LIKELY_CLASS == (int)CORJIT_FLAGS::CorJitFlag::CORJIT_FLAG_UNUSED33, "Jit Flags Mismatch");
class MethodContext
{
@@ -97,7 +99,7 @@ public:
int dumpMethodIdentityInfoToBuffer(char* buff, int len, bool ignoreMethodName = false, CORINFO_METHOD_INFO* optInfo = nullptr, unsigned optFlags = 0);
int dumpMethodMD5HashToBuffer(char* buff, int len, bool ignoreMethodName = false, CORINFO_METHOD_INFO* optInfo = nullptr, unsigned optFlags = 0);
- bool hasPgoData(bool& hasEdgeProfile, bool& hasClassProfile);
+ bool hasPgoData(bool& hasEdgeProfile, bool& hasClassProfile, bool& hasLikelyClass);
void recGlobalContext(const MethodContext& other);
diff --git a/src/coreclr/ToolBox/superpmi/superpmi-shared/spmidumphelper.cpp b/src/coreclr/ToolBox/superpmi/superpmi-shared/spmidumphelper.cpp
index da63826e750..5fedda99fd9 100644
--- a/src/coreclr/ToolBox/superpmi/superpmi-shared/spmidumphelper.cpp
+++ b/src/coreclr/ToolBox/superpmi/superpmi-shared/spmidumphelper.cpp
@@ -284,6 +284,7 @@ std::string SpmiDumpHelper::DumpJitFlags(unsigned long long flags)
AddFlagNumeric(HAS_PGO, EXTRA_JIT_FLAGS::HAS_PGO);
AddFlagNumeric(HAS_EDGE_PROFILE, EXTRA_JIT_FLAGS::HAS_EDGE_PROFILE);
AddFlagNumeric(HAS_CLASS_PROFILE, EXTRA_JIT_FLAGS::HAS_CLASS_PROFILE);
+ AddFlagNumeric(HAS_LIKELY_CLASS, EXTRA_JIT_FLAGS::HAS_LIKELY_CLASS);
#undef AddFlag
#undef AddFlagNumeric