From 64243bbf5e9ee53c0c4c5678f2cd8c7f1c9b4f6f Mon Sep 17 00:00:00 2001 From: Egor Bogatov Date: Thu, 17 Aug 2023 22:30:03 +0200 Subject: [PATCH] Improve profiled casts #2 (#90735) --- src/coreclr/jit/importer.cpp | 43 +++++++++++++++++---------- src/tests/Common/testenvironment.proj | 5 ++-- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/coreclr/jit/importer.cpp b/src/coreclr/jit/importer.cpp index 8eaecad3c2f10..278f386b41045 100644 --- a/src/coreclr/jit/importer.cpp +++ b/src/coreclr/jit/importer.cpp @@ -1381,18 +1381,26 @@ GenTree* Compiler::impReadyToRunLookupToTree(CORINFO_CONST_LOOKUP* pLookup, // bool Compiler::impIsCastHelperEligibleForClassProbe(GenTree* tree) { - if (!opts.jitFlags->IsSet(JitFlags::JIT_FLAG_BBINSTR) || (JitConfig.JitProfileCasts() != 1)) + if (!opts.IsInstrumented() || (JitConfig.JitProfileCasts() != 1)) { return false; } - if (tree->IsCall() && tree->AsCall()->gtCallType == CT_HELPER) + if (tree->IsHelperCall()) { - const CorInfoHelpFunc helper = eeGetHelperNum(tree->AsCall()->gtCallMethHnd); - if ((helper == CORINFO_HELP_ISINSTANCEOFINTERFACE) || (helper == CORINFO_HELP_ISINSTANCEOFCLASS) || - (helper == CORINFO_HELP_CHKCASTCLASS) || (helper == CORINFO_HELP_CHKCASTINTERFACE)) + switch (eeGetHelperNum(tree->AsCall()->gtCallMethHnd)) { - return true; + case CORINFO_HELP_ISINSTANCEOFINTERFACE: + case CORINFO_HELP_ISINSTANCEOFARRAY: + case CORINFO_HELP_ISINSTANCEOFCLASS: + case CORINFO_HELP_ISINSTANCEOFANY: + case CORINFO_HELP_CHKCASTINTERFACE: + case CORINFO_HELP_CHKCASTARRAY: + case CORINFO_HELP_CHKCASTCLASS: + case CORINFO_HELP_CHKCASTANY: + return true; + default: + break; } } return false; @@ -1410,22 +1418,25 @@ bool Compiler::impIsCastHelperEligibleForClassProbe(GenTree* tree) // bool Compiler::impIsCastHelperMayHaveProfileData(CorInfoHelpFunc helper) { - if (JitConfig.JitConsumeProfileForCasts() == 0) + if ((JitConfig.JitConsumeProfileForCasts() != 1) || !opts.jitFlags->IsSet(JitFlags::JIT_FLAG_BBOPT)) { return false; } - if (!opts.jitFlags->IsSet(JitFlags::JIT_FLAG_BBOPT)) + switch (helper) { - return false; - } - - if ((helper == CORINFO_HELP_ISINSTANCEOFINTERFACE) || (helper == CORINFO_HELP_ISINSTANCEOFCLASS) || - (helper == CORINFO_HELP_CHKCASTCLASS) || (helper == CORINFO_HELP_CHKCASTINTERFACE)) - { - return true; + case CORINFO_HELP_ISINSTANCEOFINTERFACE: + case CORINFO_HELP_ISINSTANCEOFARRAY: + case CORINFO_HELP_ISINSTANCEOFCLASS: + case CORINFO_HELP_ISINSTANCEOFANY: + case CORINFO_HELP_CHKCASTINTERFACE: + case CORINFO_HELP_CHKCASTARRAY: + case CORINFO_HELP_CHKCASTCLASS: + case CORINFO_HELP_CHKCASTANY: + return true; + default: + return false; } - return false; } GenTreeCall* Compiler::impReadyToRunHelperToTree(CORINFO_RESOLVED_TOKEN* pResolvedToken, diff --git a/src/tests/Common/testenvironment.proj b/src/tests/Common/testenvironment.proj index 54ce0165d222d..bf70dac353e88 100644 --- a/src/tests/Common/testenvironment.proj +++ b/src/tests/Common/testenvironment.proj @@ -73,6 +73,7 @@ DOTNET_JitRandomlyCollect64BitCounts; DOTNET_JitStressModeNames; DOTNET_JitGuardedDevirtualizationMaxTypeChecks; + DOTNET_JitProfileCasts; DOTNET_TieredPGO_InstrumentedTierAlwaysOptimized; DOTNET_JitForceControlFlowGuard; DOTNET_JitCFGUseDispatcher; @@ -226,9 +227,9 @@ - + - +