summaryrefslogtreecommitdiff
path: root/src/jit/compiler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/jit/compiler.cpp')
-rw-r--r--src/jit/compiler.cpp311
1 files changed, 100 insertions, 211 deletions
diff --git a/src/jit/compiler.cpp b/src/jit/compiler.cpp
index 8146f3aa2b..9eebae880d 100644
--- a/src/jit/compiler.cpp
+++ b/src/jit/compiler.cpp
@@ -59,6 +59,7 @@ LONG Compiler::jitNestingLevel = 0;
#ifdef ALT_JIT
// static
+bool Compiler::s_pAltJitExcludeAssembliesListInitialized = false;
AssemblyNamesList2* Compiler::s_pAltJitExcludeAssembliesList = nullptr;
#endif // ALT_JIT
@@ -744,8 +745,7 @@ void Compiler::compShutdown()
#if defined(DEBUG) || MEASURE_INLINING
#ifdef DEBUG
- static ConfigDWORD fJitInlinePrintStats;
- if ((unsigned)fJitInlinePrintStats.val(CLRConfig::INTERNAL_JitInlinePrintStats) == 1)
+ if ((unsigned)JitConfig.JitInlinePrintStats() == 1)
#endif // DEBUG
{
fprintf(fout, "\n");
@@ -1009,8 +1009,7 @@ void Compiler::compShutdown()
#if LOOP_HOIST_STATS
#ifdef DEBUG // Always display loop stats in retail
- static ConfigDWORD fDisplayLoopHoistStats;
- if (fDisplayLoopHoistStats.val(CLRConfig::INTERNAL_JitLoopHoistStats) != 0)
+ if (JitConfig.DisplayLoopHoistStats() != 0)
#endif // DEBUG
{
PrintAggregateLoopHoistStats(stdout);
@@ -1511,8 +1510,7 @@ static bool DidComponentUnitTests = false;
void Compiler::compDoComponentUnitTestsOnce()
{
- static ConfigDWORD fRunComponentUnitTests;
- if (!fRunComponentUnitTests.val(CLRConfig::INTERNAL_JitComponentUnitTests))
+ if (!JitConfig.RunComponentUnitTests())
return;
if (!DidComponentUnitTests)
@@ -1838,8 +1836,7 @@ void Compiler::compSetProcessor()
if (((compileFlags & CORJIT_FLG_PREJIT) == 0) &&
((compileFlags & CORJIT_FLG_USE_AVX2) != 0))
{
- static ConfigDWORD fEnableAVX;
- if (fEnableAVX.val(CLRConfig::EXTERNAL_EnableAVX) != 0)
+ if (JitConfig.EnableAVX() != 0)
{
opts.compCanUseAVX = true;
if (!compIsForInlining())
@@ -1870,11 +1867,9 @@ void Compiler::compSetProcessor()
SSE2_FORCE_INVALID = -1
};
- static ConfigDWORD fJitCanUseSSE2;
-
- if (fJitCanUseSSE2.val_DontUse_(CLRConfig::INTERNAL_JitCanUseSSE2, (unsigned) SSE2_FORCE_INVALID) == SSE2_FORCE_DISABLE)
+ if (JitConfig.JitCanUseSSE2() == SSE2_FORCE_DISABLE)
opts.compCanUseSSE2 = false;
- else if (fJitCanUseSSE2.val_DontUse_(CLRConfig::INTERNAL_JitCanUseSSE2, (unsigned) SSE2_FORCE_INVALID) == SSE2_FORCE_USE)
+ else if (JitConfig.JitCanUseSSE2() == SSE2_FORCE_USE)
opts.compCanUseSSE2 = true;
else if (opts.compCanUseSSE2)
opts.compCanUseSSE2 = !compStressCompile(STRESS_GENERIC_VARN, 50);
@@ -1923,8 +1918,8 @@ bool Compiler::compShouldThrowOnNoway(
return !opts.MinOpts() || !compIsFullTrust();
}
-// ConfigDWORD does not offer an option for decimal flags. Any numbers are interpreted as hex.
-// I could add the decimal option to ConfigDWORD or I could write a function to reinterpret this
+// ConfigInteger does not offer an option for decimal flags. Any numbers are interpreted as hex.
+// I could add the decimal option to ConfigInteger or I could write a function to reinterpret this
// value as the user intended.
unsigned ReinterpretHexAsDecimal(unsigned in)
{
@@ -2043,20 +2038,14 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
#ifdef DEBUG
- ConfigMethodSet* pfAltJit;
+ const JitConfigValues::MethodSet* pfAltJit;
if (opts.eeFlags & CORJIT_FLG_PREJIT)
{
- static ConfigMethodSet fAltJitNgen;
- fAltJitNgen.ensureInit(CLRConfig::INTERNAL_AltJitNgen);
-
- pfAltJit = &fAltJitNgen;
+ pfAltJit = &JitConfig.AltJitNgen();
}
else
{
- static ConfigMethodSet fAltJit;
- fAltJit.ensureInit(CLRConfig::EXTERNAL_AltJit);
-
- pfAltJit = &fAltJit;
+ pfAltJit = &JitConfig.AltJit();
}
#ifdef ALT_JIT
@@ -2065,8 +2054,7 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
opts.altJit = true;
}
- static ConfigDWORD fAltJitLimit;
- unsigned altJitLimit = ReinterpretHexAsDecimal(fAltJitLimit.val(CLRConfig::INTERNAL_AltJitLimit));
+ unsigned altJitLimit = ReinterpretHexAsDecimal(JitConfig.AltJitLimit());
if (altJitLimit > 0 && Compiler::jitTotalMethodCompiled >= altJitLimit)
{
opts.altJit = false;
@@ -2075,16 +2063,14 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
#else // !DEBUG
- LPWSTR altJitVal;
+ const char* altJitVal;
if (opts.eeFlags & CORJIT_FLG_PREJIT)
{
- static ConfigString fAltJitNgen;
- altJitVal = fAltJitNgen.val(CLRConfig::INTERNAL_AltJitNgen);
+ altJitVal = JitConfig.AltJitNgen().list();
}
else
{
- static ConfigString fAltJit;
- altJitVal = fAltJit.val(CLRConfig::EXTERNAL_AltJit);
+ altJitVal = JitConfig.AltJit().list();
}
#ifdef ALT_JIT
@@ -2092,7 +2078,7 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
// You don't get to give a regular expression of methods to match.
// (Partially, this is because we haven't computed and stored the method and class name except in debug, and it
// might be expensive to do so.)
- if ((altJitVal != NULL) && (wcscmp(altJitVal, W("*")) == 0))
+ if ((altJitVal != nullptr) && (strcmp(altJitVal, "*") == 0))
{
opts.altJit = true;
}
@@ -2105,16 +2091,16 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
if (opts.altJit)
{
// First, initialize the AltJitExcludeAssemblies list, but only do it once.
- static ConfigString fAltJitExcludeAssemblies;
- if (!fAltJitExcludeAssemblies.isInitialized())
+ if (!s_pAltJitExcludeAssembliesListInitialized)
{
- LPWSTR wszAltJitExcludeAssemblyList = fAltJitExcludeAssemblies.val(CLRConfig::EXTERNAL_AltJitExcludeAssemblies);
+ const wchar_t* wszAltJitExcludeAssemblyList = JitConfig.AltJitExcludeAssemblies();
if (wszAltJitExcludeAssemblyList != nullptr)
{
// NOTE: The Assembly name list is allocated in the process heap, not in the no-release heap, which is reclaimed
// for every compilation. This is ok because we only allocate once, due to the static.
s_pAltJitExcludeAssembliesList = new (HostAllocator::getHostAllocator()) AssemblyNamesList2(wszAltJitExcludeAssemblyList, HostAllocator::getHostAllocator());
}
+ s_pAltJitExcludeAssembliesListInitialized = true;
}
if (s_pAltJitExcludeAssembliesList != nullptr)
@@ -2142,9 +2128,7 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
//
if (compIsForImportOnly() && (!altJitConfig || opts.altJit))
{
- static ConfigMethodSet fJitImportBreak;
- fJitImportBreak.ensureInit(CLRConfig::INTERNAL_JitImportBreak);
- if (fJitImportBreak.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitImportBreak().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
assert(!"JitImportBreak reached");
}
@@ -2176,63 +2160,41 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
if (opts.eeFlags & CORJIT_FLG_PREJIT)
{
- static ConfigMethodSet fNgenDump;
- fNgenDump.ensureInit(CLRConfig::INTERNAL_NgenDump);
-
- if (fNgenDump.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.NgenDump().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
verboseDump = true;
- static ConfigDWORD fNgenHashDump;
- unsigned ngenHashDumpVal = (unsigned) fNgenHashDump.val(CLRConfig::INTERNAL_NgenHashDump);
+ unsigned ngenHashDumpVal = (unsigned) JitConfig.NgenHashDump();
if ((ngenHashDumpVal != (DWORD)-1) && (ngenHashDumpVal == info.compMethodHash()))
verboseDump = true;
- static ConfigMethodSet fNgenDumpIR;
- fNgenDumpIR.ensureInit(CLRConfig::INTERNAL_NgenDumpIR);
-
- if (fNgenDumpIR.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.NgenDumpIR().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
dumpIR = true;
- static ConfigDWORD fNgenHashDumpIR;
- unsigned ngenHashDumpIRVal = (unsigned) fNgenHashDumpIR.val(CLRConfig::INTERNAL_NgenHashDumpIR);
+ unsigned ngenHashDumpIRVal = (unsigned) JitConfig.NgenHashDumpIR();
if ((ngenHashDumpIRVal != (DWORD)-1) && (ngenHashDumpIRVal == info.compMethodHash()))
dumpIR = true;
- static ConfigString ngenDumpIRFormat;
- dumpIRFormat = ngenDumpIRFormat.val(CLRConfig::INTERNAL_NgenDumpIRFormat);
-
- static ConfigString ngenDumpIRPhase;
- dumpIRPhase = ngenDumpIRPhase.val(CLRConfig::INTERNAL_NgenDumpIRPhase);
+ dumpIRFormat = JitConfig.NgenDumpIRFormat();
+ dumpIRPhase = JitConfig.NgenDumpIRPhase();
}
else
{
- static ConfigMethodSet fJitDump;
- fJitDump.ensureInit(CLRConfig::INTERNAL_JitDump);
-
- if (fJitDump.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitDump().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
verboseDump = true;
- static ConfigDWORD fJitHashDump;
- unsigned jitHashDumpVal = (unsigned) fJitHashDump.val(CLRConfig::INTERNAL_JitHashDump);
+ unsigned jitHashDumpVal = (unsigned) JitConfig.JitHashDump();
if ((jitHashDumpVal != (DWORD)-1) && (jitHashDumpVal == info.compMethodHash()))
verboseDump = true;
- static ConfigMethodSet fJitDumpIR;
- fJitDumpIR.ensureInit(CLRConfig::INTERNAL_JitDumpIR);
-
- if (fJitDumpIR.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitDumpIR().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
dumpIR = true;
- static ConfigDWORD fJitHashDumpIR;
- unsigned jitHashDumpIRVal = (unsigned) fJitHashDumpIR.val(CLRConfig::INTERNAL_JitHashDumpIR);
+ unsigned jitHashDumpIRVal = (unsigned) JitConfig.JitHashDumpIR();
if ((jitHashDumpIRVal != (DWORD)-1) && (jitHashDumpIRVal == info.compMethodHash()))
dumpIR = true;
- static ConfigString jitDumpIRFormat;
- dumpIRFormat = jitDumpIRFormat.val(CLRConfig::INTERNAL_JitDumpIRFormat);
-
- static ConfigString jitDumpIRPhase;
- dumpIRPhase = jitDumpIRPhase.val(CLRConfig::INTERNAL_JitDumpIRPhase);
+ dumpIRFormat = JitConfig.JitDumpIRFormat();
+ dumpIRPhase = JitConfig.JitDumpIRPhase();
}
if (dumpIRPhase == nullptr)
@@ -2591,83 +2553,60 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
{
if (opts.eeFlags & CORJIT_FLG_PREJIT)
{
- static ConfigDWORD fNgenOrder;
- if ((fNgenOrder.val(CLRConfig::INTERNAL_NgenOrder) & 1) == 1)
+ if ((JitConfig.NgenOrder() & 1) == 1)
opts.dspOrder = true;
- static ConfigMethodSet fNgenGCDump;
- fNgenGCDump.ensureInit(CLRConfig::INTERNAL_NgenGCDump);
- if (fNgenGCDump.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.NgenGCDump().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.dspGCtbls = true;
- static ConfigMethodSet fNgenDisasm;
- fNgenDisasm.ensureInit(CLRConfig::INTERNAL_NgenDisasm);
- if (fNgenDisasm.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.NgenDisasm().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.disAsm = true;
- if (fNgenDisasm.contains("SPILLED", NULL))
+ if (JitConfig.NgenDisasm().contains("SPILLED", NULL, NULL))
opts.disAsmSpilled = true;
- static ConfigMethodSet fNgenUnwindDump;
- fNgenUnwindDump.ensureInit(CLRConfig::INTERNAL_NgenUnwindDump);
- if (fNgenUnwindDump.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.NgenUnwindDump().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.dspUnwind = true;
- static ConfigMethodSet fNgenEHDump;
- fNgenEHDump.ensureInit(CLRConfig::INTERNAL_NgenEHDump);
- if (fNgenEHDump.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.NgenEHDump().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.dspEHTable = true;
}
else
{
- static ConfigDWORD fJitOrder;
- if ((fJitOrder.val(CLRConfig::INTERNAL_JitOrder) & 1) == 1)
+ if ((JitConfig.JitOrder() & 1) == 1)
opts.dspOrder = true;
- static ConfigMethodSet fJitGCDump;
- fJitGCDump.ensureInit(CLRConfig::INTERNAL_JitGCDump);
- if (fJitGCDump.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitGCDump().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.dspGCtbls = true;
- static ConfigMethodSet fJitDisasm;
- fJitDisasm.ensureInit(CLRConfig::INTERNAL_JitDisasm);
- if (fJitDisasm.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitDisasm().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.disAsm = true;
- if (fJitDisasm.contains("SPILLED", NULL))
+ if (JitConfig.JitDisasm().contains("SPILLED", NULL, NULL))
opts.disAsmSpilled = true;
- static ConfigMethodSet fJitUnwindDump;
- fJitUnwindDump.ensureInit(CLRConfig::INTERNAL_JitUnwindDump);
- if (fJitUnwindDump.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitUnwindDump().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.dspUnwind = true;
- static ConfigMethodSet fJitEHDump;
- fJitEHDump.ensureInit(CLRConfig::INTERNAL_JitEHDump);
- if (fJitEHDump.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitEHDump().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.dspEHTable = true;
}
#ifdef LATE_DISASM
- static ConfigMethodSet fJitLateDisasm;
- fJitLateDisasm.ensureInit(CLRConfig::INTERNAL_JitLateDisasm);
- if (fJitLateDisasm.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitLateDisasm().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.doLateDisasm = true;
#endif // LATE_DISASM
// This one applies to both Ngen/Jit Disasm output: COMPLUS_JitDiffableDasm=1
- static ConfigDWORD fDiffableDasm;
- if (fDiffableDasm.val(CLRConfig::INTERNAL_JitDiffableDasm) != 0)
+ if (JitConfig.DiffableDasm() != 0)
{
opts.disDiffable = true;
opts.dspDiffable = true;
}
- static ConfigDWORD fDisplayMemStats;
- if (fDisplayMemStats.val(CLRConfig::INTERNAL_JitMemStats) != 0)
+ if (JitConfig.DisplayMemStats() != 0)
s_dspMemStats = true;
- static ConfigDWORD fJitLargeBranches;
- if (fJitLargeBranches.val(CLRConfig::INTERNAL_JitLargeBranches) != 0)
+ if (JitConfig.JitLargeBranches() != 0)
opts.compLargeBranches = true;
}
@@ -2684,12 +2623,10 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
codeGen->setVerbose(true);
}
- static ConfigDWORD fTreesBeforeAfterMorph;
- treesBeforeAfterMorph = (fTreesBeforeAfterMorph.val(CLRConfig::INTERNAL_JitDumpBeforeAfterMorph) == 1);
+ treesBeforeAfterMorph = (JitConfig.TreesBeforeAfterMorph() == 1);
morphNum = 0; // Initialize the morphed-trees counting.
- static ConfigDWORD fJitExpensiveDebugCheckLevel;
- expensiveDebugCheckLevel = fJitExpensiveDebugCheckLevel.val(CLRConfig::INTERNAL_JitExpensiveDebugCheckLevel);
+ expensiveDebugCheckLevel = JitConfig.JitExpensiveDebugCheckLevel();
if (expensiveDebugCheckLevel == 0)
{
// If we're in a stress mode that modifies the flowgraph, make 1 the default.
@@ -2706,21 +2643,16 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
printf(""); // in our logic this causes a flush
}
- static ConfigMethodSet fJitBreak;
- fJitBreak.ensureInit(CLRConfig::INTERNAL_JitBreak);
- if (fJitBreak.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitBreak().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
assert(!"JitBreak reached");
- static ConfigDWORD fJitHashBreak;
- unsigned jitHashBreakVal = (unsigned)fJitHashBreak.val(CLRConfig::INTERNAL_JitHashBreak);
+ unsigned jitHashBreakVal = (unsigned)JitConfig.JitHashBreak();
if ((jitHashBreakVal != (DWORD)-1) && (jitHashBreakVal == info.compMethodHash()))
assert(!"JitHashBreak reached");
- static ConfigMethodSet fJitDebugBreak;
- fJitDebugBreak.ensureInit(CLRConfig::INTERNAL_JitDebugBreak);
if (verbose ||
- fJitDebugBreak.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args) ||
- fJitBreak.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ JitConfig.JitDebugBreak().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args) ||
+ JitConfig.JitBreak().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
{
compDebugBreak = true;
}
@@ -2734,8 +2666,7 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
#ifdef DEBUGGING_SUPPORT
#ifdef DEBUG
assert(!codeGen->isGCTypeFixed());
- static ConfigDWORD fJitGCChecks;
- opts.compGcChecks = (fJitGCChecks.val_DontUse_(CLRConfig::INTERNAL_JitGCChecks) != 0) ||
+ opts.compGcChecks = (JitConfig.JitGCChecks() != 0) ||
compStressCompile(STRESS_GENERIC_VARN, 5);
enum
@@ -2745,8 +2676,7 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
STACK_CHECK_ALL = 0x3,
};
- static ConfigDWORD fJitStackChecks;
- DWORD dwJitStackChecks = fJitStackChecks.val_DontUse_(CLRConfig::INTERNAL_JitStackChecks);
+ DWORD dwJitStackChecks = JitConfig.JitStackChecks();
if (compStressCompile(STRESS_GENERIC_VARN, 5)) dwJitStackChecks = STACK_CHECK_ALL;
opts.compStackCheckOnRet = (dwJitStackChecks & DWORD(STACK_CHECK_ON_RETURN)) != 0;
opts.compStackCheckOnCall = (dwJitStackChecks & DWORD(STACK_CHECK_ON_CALL)) != 0;
@@ -2777,8 +2707,7 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
// Honour complus_JitELTHookEnabled only if VM has not asked us to generate profiler
// hooks in the first place. That is, Override VM only if it hasn't asked for a
// profiler callback for this method.
- static ConfigDWORD fJitELTHookEnabled;
- if (!compProfilerHookNeeded && (fJitELTHookEnabled.val(CLRConfig::INTERNAL_JitELTHookEnabled) != 0))
+ if (!compProfilerHookNeeded && (JitConfig.JitELTHookEnabled() != 0))
{
opts.compJitELTHookEnabled = true;
}
@@ -2794,14 +2723,13 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
#endif // PROFILING_SUPPORTED
#if FEATURE_TAILCALL_OPT
- static ConfigString fTailCallOpt;
- LPWSTR strTailCallOpt = fTailCallOpt.val(CLRConfig::EXTERNAL_TailCallOpt);
+ const wchar_t* strTailCallOpt = JitConfig.TailCallOpt();
if (strTailCallOpt != nullptr)
{
opts.compTailCallOpt = (UINT)_wtoi(strTailCallOpt) != 0;
}
- static ConfigDWORD fTailCallLoopOpt;
- if (fTailCallLoopOpt.val(CLRConfig::EXTERNAL_TailCallLoopOpt) == 0)
+
+ if (JitConfig.TailCallLoopOpt() == 0)
{
opts.compTailCallLoopOpt = false;
}
@@ -2825,8 +2753,7 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
#ifdef DEBUG
#if defined(_TARGET_XARCH_) && !defined(LEGACY_BACKEND)
// Whether encoding of absolute addr as PC-rel offset is enabled in RyuJIT
- static ConfigDWORD fEnablePCRelAddr;
- opts.compEnablePCRelAddr = (fEnablePCRelAddr.val(CLRConfig::INTERNAL_JitEnablePCRelAddr) != 0);
+ opts.compEnablePCRelAddr = (JitConfig.EnablePCRelAddr() != 0);
#endif
#endif //DEBUG
@@ -2850,21 +2777,15 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
// JitForceProcedureSplitting is used to force procedure splitting on checked assemblies.
// This is useful for debugging on a checked build. Note that we still only do procedure
// splitting in the zapper.
- static ConfigMethodSet fJitForceProcedureSplitting;
- fJitForceProcedureSplitting.ensureInit(CLRConfig::INTERNAL_JitForceProcedureSplitting);
- if (fJitForceProcedureSplitting.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitForceProcedureSplitting().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.compProcedureSplitting = true;
// JitNoProcedureSplitting will always disable procedure splitting.
- static ConfigMethodSet fJitNoProcedureSplitting;
- fJitNoProcedureSplitting.ensureInit(CLRConfig::INTERNAL_JitNoProcedureSplitting);
- if (fJitNoProcedureSplitting.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitNoProcedureSplitting().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.compProcedureSplitting = false;
//
// JitNoProcedureSplittingEH will disable procedure splitting in functions with EH.
- static ConfigMethodSet fJitNoProcedureSplittingEH;
- fJitNoProcedureSplittingEH.ensureInit(CLRConfig::INTERNAL_JitNoProcedureSplittingEH);
- if (fJitNoProcedureSplittingEH.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitNoProcedureSplittingEH().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
opts.compProcedureSplittingEH = false;
#endif
}
@@ -2910,8 +2831,7 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
opts.compNeedStackProbes = false;
#ifdef DEBUG
- static ConfigDWORD fStackProbesOverride;
- if (fStackProbesOverride.val_DontUse_(CLRConfig::INTERNAL_JitStackProbes) != 0 ||
+ if (JitConfig.StackProbesOverride() != 0 ||
compStressCompile(STRESS_GENERIC_VARN, 5))
{
opts.compNeedStackProbes = true;
@@ -2922,9 +2842,8 @@ void Compiler::compInitOptions(CORJIT_FLAGS* jitFlags)
// Now, set compMaxUncheckedOffsetForNullObject for STRESS_NULL_OBJECT_CHECK
if (compStressCompile(STRESS_NULL_OBJECT_CHECK, 30))
{
- static ConfigDWORD fJitMaxUncheckedOffset;
compMaxUncheckedOffsetForNullObject =
- (unsigned) fJitMaxUncheckedOffset.val(CLRConfig::INTERNAL_JitMaxUncheckedOffset);
+ (unsigned) JitConfig.JitMaxUncheckedOffset();
if (verbose) {
printf("STRESS_NULL_OBJECT_CHECK: compMaxUncheckedOffsetForNullObject=0x%X\n", compMaxUncheckedOffsetForNullObject);
}
@@ -2988,17 +2907,14 @@ bool Compiler::compJitHaltMethod()
/* This method returns true when we use an INS_BREAKPOINT to allow us to step into the generated native code */
/* Note that this these two "Jit" environment variables also work for ngen images */
- static ConfigMethodSet fJitHalt;
- fJitHalt.ensureInit(CLRConfig::INTERNAL_JitHalt);
- if (fJitHalt.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitHalt().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
{
return true;
}
/* Use this Hash variant when there are a lot of method with the same name and different signatures */
- static ConfigDWORD fJitHashHalt;
- unsigned fJitHashHaltVal = (unsigned)fJitHashHalt.val(CLRConfig::INTERNAL_JitHashHalt);
+ unsigned fJitHashHaltVal = (unsigned)JitConfig.JitHashHalt();
if ((fJitHashHaltVal != (unsigned)-1) && (fJitHashHaltVal == info.compMethodHash()))
{
return true;
@@ -3033,21 +2949,17 @@ bool Compiler::compStressCompile(compStressArea stressArea,
return false;
}
- static ConfigMethodSet fJitStressOnly;
- fJitStressOnly.ensureInit(CLRConfig::INTERNAL_JitStressOnly);
- if (!fJitStressOnly.isEmpty() &&
- !fJitStressOnly.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (!JitConfig.JitStressOnly().isEmpty() &&
+ !JitConfig.JitStressOnly().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
{
return false;
}
bool doStress = false;
- static ConfigString fJitStressModeNames;
- LPWSTR strStressModeNames;
+ const wchar_t* strStressModeNames;
// Does user explicitly prevent using this STRESS_MODE through the command line?
- static ConfigString fJitStressModeNamesNot;
- LPWSTR strStressModeNamesNot = fJitStressModeNamesNot.val(CLRConfig::INTERNAL_JitStressModeNamesNot);
+ const wchar_t* strStressModeNamesNot = JitConfig.JitStressModeNamesNot();
if ((strStressModeNamesNot != NULL) &&
(wcsstr(strStressModeNamesNot, s_compStressModeNames[stressArea]) != NULL))
{
@@ -3060,7 +2972,7 @@ bool Compiler::compStressCompile(compStressArea stressArea,
}
// Does user explicitly set this STRESS_MODE through the command line?
- strStressModeNames = fJitStressModeNames.val(CLRConfig::INTERNAL_JitStressModeNames);
+ strStressModeNames = JitConfig.JitStressModeNames();
if ((strStressModeNames != NULL) &&
(wcsstr(strStressModeNames, s_compStressModeNames[stressArea]) != NULL))
{
@@ -3235,9 +3147,7 @@ void Compiler::compSetOptimizationLevel()
}
#ifdef DEBUG
- static ConfigDWORD fJitMinOpts;
-
- jitMinOpts = fJitMinOpts.val_DontUse_(CLRConfig::UNSUPPORTED_JITMinOpts, 0);
+ jitMinOpts = JitConfig.JitMinOpts();
if (!theMinOptsValue && (jitMinOpts > 0))
{
@@ -3301,10 +3211,7 @@ void Compiler::compSetOptimizationLevel()
if (!theMinOptsValue)
{
- static ConfigMethodSet jitMinOptsName;
- jitMinOptsName.ensureInit(CLRConfig::INTERNAL_JITMinOptsName);
-
- if (jitMinOptsName.contains(info.compMethodName, info.compClassName, info.compMethodInfo->args.pSig))
+ if (JitConfig.JitMinOptsName().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
theMinOptsValue = true;
}
@@ -3316,34 +3223,27 @@ void Compiler::compSetOptimizationLevel()
// unless unless CLFLG_MINOPT is set
else if (!(compileFlags & CORJIT_FLG_PREJIT))
{
- static ConfigDWORD fJitMinOptsCodeSize;
- static ConfigDWORD fJitMinOptsInstrCount;
- static ConfigDWORD fJitMinOptsBbCount;
- static ConfigDWORD fJitMinOptsLvNumCount;
- static ConfigDWORD fJitMinOptsLvRefCount;
- static ConfigDWORD fJitBreakOnMinOpts;
-
- if (fJitMinOptsCodeSize.val_DontUse_(CLRConfig::INTERNAL_JITMinOptsCodeSize, DEFAULT_MIN_OPTS_CODE_SIZE) < info.compILCodeSize)
+ if ((unsigned)JitConfig.JitMinOptsCodeSize() < info.compILCodeSize)
{
JITLOG((LL_INFO10, "IL Code Size exceeded, using MinOpts for method %s\n", info.compFullName));
theMinOptsValue = true;
}
- else if (fJitMinOptsInstrCount.val_DontUse_(CLRConfig::INTERNAL_JITMinOptsInstrCount, DEFAULT_MIN_OPTS_INSTR_COUNT) < opts.instrCount)
+ else if ((unsigned)JitConfig.JitMinOptsInstrCount() < opts.instrCount)
{
JITLOG((LL_INFO10, "IL instruction count exceeded, using MinOpts for method %s\n", info.compFullName));
theMinOptsValue = true;
}
- else if (fJitMinOptsBbCount.val_DontUse_(CLRConfig::INTERNAL_JITMinOptsBbCount, DEFAULT_MIN_OPTS_BB_COUNT) < fgBBcount)
+ else if ((unsigned)JitConfig.JitMinOptsBbCount() < fgBBcount)
{
JITLOG((LL_INFO10, "Basic Block count exceeded, using MinOpts for method %s\n", info.compFullName));
theMinOptsValue = true;
}
- else if (fJitMinOptsLvNumCount.val_DontUse_(CLRConfig::INTERNAL_JITMinOptsLvNumcount, DEFAULT_MIN_OPTS_LV_NUM_COUNT) < lvaCount)
+ else if ((unsigned)JitConfig.JitMinOptsLvNumCount() < lvaCount)
{
JITLOG((LL_INFO10, "Local Variable Num count exceeded, using MinOpts for method %s\n", info.compFullName));
theMinOptsValue = true;
}
- else if (fJitMinOptsLvRefCount.val_DontUse_(CLRConfig::INTERNAL_JITMinOptsLvRefcount, DEFAULT_MIN_OPTS_LV_REF_COUNT) < opts.lvRefCount)
+ else if ((unsigned)JitConfig.JitMinOptsLvRefCount() < opts.lvRefCount)
{
JITLOG((LL_INFO10, "Local Variable Ref count exceeded, using MinOpts for method %s\n", info.compFullName));
theMinOptsValue = true;
@@ -3352,7 +3252,7 @@ void Compiler::compSetOptimizationLevel()
{
JITLOG((LL_INFO10000, "IL Code Size,Instr %4d,%4d, Basic Block count %3d, Local Variable Num,Ref count %3d,%3d for method %s\n",
info.compILCodeSize, opts.instrCount, fgBBcount, lvaCount, opts.lvRefCount, info.compFullName));
- if (fJitBreakOnMinOpts.val_DontUse_(CLRConfig::INTERNAL_JITBreakOnMinOpts, 0) != 0)
+ if (JitConfig.JitBreakOnMinOpts() != 0)
{
assert(!"MinOpts enabled");
}
@@ -3601,7 +3501,7 @@ void Compiler::compCompile(void * * methodCodePtr,
EndPhase(PHASE_PRE_IMPORT);
#ifdef DEBUG
- bool funcTrace = (CLRConfig::GetConfigValue(CLRConfig::INTERNAL_JitFunctionTrace) != 0);
+ bool funcTrace = JitConfig.JitFunctionTrace() != 0;
if (!compIsForInlining())
{
@@ -3841,14 +3741,13 @@ void Compiler::compCompile(void * * methodCodePtr,
bool doRangeAnalysis = true;
#ifdef DEBUG
- static ConfigDWORD fJitDoOptConfig[7];
- doSsa = (fJitDoOptConfig[0].val(CLRConfig::INTERNAL_JitDoSsa) != 0);
- doEarlyProp = doSsa && (fJitDoOptConfig[1].val(CLRConfig::INTERNAL_JitDoEarlyProp) != 0);
- doValueNum = doSsa && (fJitDoOptConfig[2].val(CLRConfig::INTERNAL_JitDoValueNumber) != 0);
- doLoopHoisting = doValueNum && (fJitDoOptConfig[3].val(CLRConfig::INTERNAL_JitDoLoopHoisting) != 0);
- doCopyProp = doValueNum && (fJitDoOptConfig[4].val(CLRConfig::INTERNAL_JitDoCopyProp) != 0);
- doAssertionProp = doValueNum && (fJitDoOptConfig[5].val(CLRConfig::INTERNAL_JitDoAssertionProp) != 0);
- doRangeAnalysis = doAssertionProp && (fJitDoOptConfig[6].val(CLRConfig::INTERNAL_JitDoRangeAnalysis) != 0);
+ doSsa = (JitConfig.JitDoSsa() != 0);
+ doEarlyProp = doSsa && (JitConfig.JitDoEarlyProp() != 0);
+ doValueNum = doSsa && (JitConfig.JitDoValueNumber() != 0);
+ doLoopHoisting = doValueNum && (JitConfig.JitDoLoopHoisting() != 0);
+ doCopyProp = doValueNum && (JitConfig.JitDoCopyProp() != 0);
+ doAssertionProp = doValueNum && (JitConfig.JitDoAssertionProp() != 0);
+ doRangeAnalysis = doAssertionProp && (JitConfig.JitDoRangeAnalysis() != 0);
#endif
if (doSsa)
@@ -4176,18 +4075,14 @@ void* forceFrameJIT; // used to force to frame &useful for fastchecked deb
bool Compiler::skipMethod()
{
static ConfigMethodRange fJitRange;
- fJitRange.ensureInit(CLRConfig::INTERNAL_JitRange);
+ fJitRange.ensureInit(JitConfig.JitRange());
if (!fJitRange.contains(info.compCompHnd, info.compMethodHnd))
return true;
- static ConfigMethodSet fJitExclude;
- fJitExclude.ensureInit(CLRConfig::INTERNAL_JitExclude);
- if (fJitExclude.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (JitConfig.JitExclude().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
return true;
- static ConfigMethodSet fJitInclude;
- fJitInclude.ensureInit(CLRConfig::INTERNAL_JitInclude);
- if (!fJitInclude.isEmpty() && !fJitInclude.contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
+ if (!JitConfig.JitInclude().isEmpty() && !JitConfig.JitInclude().contains(info.compMethodName, info.compClassName, &info.compMethodInfo->args))
return true;
return false;
@@ -4262,8 +4157,7 @@ int Compiler::compCompile(CORINFO_METHOD_HANDLE methodHnd,
#endif
#if FUNC_INFO_LOGGING
- static ConfigString jitFuncInfoFile;
- LPCWSTR tmpJitFuncInfoFilename = jitFuncInfoFile.val(CLRConfig::INTERNAL_JitFuncInfoLogFile);
+ LPCWSTR tmpJitFuncInfoFilename = JitConfig.JitFuncInfoFile();
if (tmpJitFuncInfoFilename != NULL)
{
@@ -4345,7 +4239,7 @@ int Compiler::compCompile(CORINFO_METHOD_HANDLE methodHnd,
}
static ConfigMethodRange fJitStressRange;
- fJitStressRange.ensureInit(CLRConfig::INTERNAL_JitStressRange);
+ fJitStressRange.ensureInit(JitConfig.JitStressRange());
if (fJitStressRange.contains(info.compCompHnd, info.compMethodHnd))
{
bRangeAllowStress = true;
@@ -4807,8 +4701,7 @@ int Compiler::compCompileHelper (CORINFO_MODULE_HANDLE clas
#endif
// Check for COMPLUS_AgressiveInlining
- static ConfigDWORD fJitAggressiveInlining;
- if (fJitAggressiveInlining.val(CLRConfig::INTERNAL_JitAggressiveInlining))
+ if (JitConfig.JitAggressiveInlining())
{
compDoAggressiveInlining = true;
}
@@ -4834,8 +4727,7 @@ int Compiler::compCompileHelper (CORINFO_MODULE_HANDLE clas
}
// Force verification if asked to do so
- static ConfigDWORD fJitForceVer;
- if (fJitForceVer.val(CLRConfig::INTERNAL_JitForceVer))
+ if (JitConfig.JitForceVer())
tiVerificationNeeded = (instVerInfo == INSTVER_NOT_INSTANTIATION);
if (tiVerificationNeeded)
@@ -5073,8 +4965,7 @@ int Compiler::compCompileHelper (CORINFO_MODULE_HANDLE clas
}
#ifdef DEBUG
- static ConfigDWORD fDumpJittedMethods;
- if (fDumpJittedMethods.val(CLRConfig::INTERNAL_DumpJittedMethods) == 1 && !compIsForInlining())
+ if (JitConfig.DumpJittedMethods() == 1 && !compIsForInlining())
{
printf("Compiling %4d %s::%s, IL size = %u, hsh=0x%x\n",
Compiler::jitTotalMethodCompiled,
@@ -5121,8 +5012,7 @@ _Next:
#ifdef ALT_JIT
#ifdef DEBUG
- static ConfigDWORD fRunAltJitCode;
- if (fRunAltJitCode.val(CLRConfig::INTERNAL_RunAltJitCode) == 0)
+ if (JitConfig.RunAltJitCode() == 0)
{
return CORJIT_SKIPPED;
}
@@ -6684,8 +6574,7 @@ CritSecObject JitTimer::s_csvLock;
LPCWSTR Compiler::JitTimeLogCsv()
{
- static ConfigString jitConfigTimeLogCsv;
- LPCWSTR jitTimeLogCsv = jitConfigTimeLogCsv.val(CLRConfig::INTERNAL_JitTimeLogCsv);
+ LPCWSTR jitTimeLogCsv = JitConfig.JitTimeLogCsv();
return jitTimeLogCsv;
}