#if defined(_TARGET_ARM_)
info.genCPU = CPU_ARM;
#elif defined(_TARGET_ARM64_)
- info.genCPU = CPU_ARM64;
+ info.genCPU = CPU_ARM64;
#elif defined(_TARGET_AMD64_)
info.genCPU = CPU_X64;
#elif defined(_TARGET_X86_)
CLANG_FORMAT_COMMENT_ANCHOR;
#ifdef _TARGET_AMD64_
- opts.compUseFCOMI = false;
- opts.compUseCMOV = true;
+ opts.compUseCMOV = true;
#elif defined(_TARGET_X86_)
- opts.compUseFCOMI = jitFlags.IsSet(JitFlags::JIT_FLAG_USE_FCOMI);
- opts.compUseCMOV = jitFlags.IsSet(JitFlags::JIT_FLAG_USE_CMOV);
-
+ opts.compUseCMOV = jitFlags.IsSet(JitFlags::JIT_FLAG_USE_CMOV);
#ifdef DEBUG
- if (opts.compUseFCOMI)
- opts.compUseFCOMI = !compStressCompile(STRESS_USE_FCOMI, 50);
if (opts.compUseCMOV)
opts.compUseCMOV = !compStressCompile(STRESS_USE_CMOV, 50);
#endif // DEBUG
{
printf("OPTIONS: Tier-1 compilation\n");
}
+ if (compSwitchedToOptimized)
+ {
+ printf("OPTIONS: Tier-0 compilation, switched to FullOpts");
+ }
+ if (compSwitchedToMinOpts)
+ {
+ printf("OPTIONS: Tier-1/FullOpts compilation, switched to MinOpts");
+ }
printf("OPTIONS: compCodeOpt = %s\n",
(opts.compCodeOpt == BLENDED_CODE)
!opts.jitFlags->IsSet(JitFlags::JIT_FLAG_MIN_OPT) && !opts.compDbgCode)
{
info.compCompHnd->setMethodAttribs(info.compMethodHnd, CORINFO_FLG_SWITCHED_TO_MIN_OPT);
+ compSwitchedToMinOpts = true;
}
#ifdef DEBUG
{
return "Tier-1";
}
+ else if (opts.OptimizationEnabled())
+ {
+ if (compSwitchedToOptimized)
+ {
+ return "Tier-0 switched to FullOpts";
+ }
+ else
+ {
+ return "FullOpts";
+ }
+ }
+ else if (opts.MinOpts())
+ {
+ if (compSwitchedToMinOpts)
+ {
+ if (compSwitchedToOptimized)
+ {
+ return "Tier-0 switched to FullOpts, then to MinOpts";
+ }
+ else
+ {
+ return "Tier-1/FullOpts switched to MinOpts";
+ }
+ }
+ else
+ {
+ return "MinOpts";
+ }
+ }
+ else if (opts.compDbgCode)
+ {
+ return "Debug";
+ }
else
{
- return "No-Tier";
+ return "Unknown optimization level";
}
}
info.compTotalHotCodeSize = 0;
info.compTotalColdCodeSize = 0;
- compHasBackwardJump = false;
+ compHasBackwardJump = false;
+ compSwitchedToOptimized = false;
+ compSwitchedToMinOpts = false;
#ifdef DEBUG
compCurBB = nullptr;
bool compQmarkRationalized; // Is it allowed to use a GT_QMARK/GT_COLON node.
bool compUnsafeCastUsed; // Does the method use LDIND/STIND to cast between scalar/refernce types
bool compHasBackwardJump; // Does the method (or some inlinee) have a lexically backwards jump?
+ bool compSwitchedToOptimized; // Codegen initially was Tier0 but jit switched to FullOpts
+ bool compSwitchedToMinOpts; // Codegen initially was Tier1/FullOpts but jit switched to MinOpts
// NOTE: These values are only reliable after
// the importing is completely finished.
struct Options
{
- JitFlags* jitFlags; // all flags passed from the EE
- unsigned compFlags; // method attributes
-
- codeOptimize compCodeOpt; // what type of code optimizations
-
- bool compUseFCOMI;
- bool compUseCMOV;
+ JitFlags* jitFlags; // all flags passed from the EE
#if defined(_TARGET_XARCH_) || defined(_TARGET_ARM64_)
uint64_t compSupportsISA;
}
#endif
+ unsigned compFlags; // method attributes
+ unsigned instrCount;
+ unsigned lvRefCount;
+
+ codeOptimize compCodeOpt; // what type of code optimizations
+
+ bool compUseCMOV;
+
// optimize maximally and/or favor speed over size?
#define DEFAULT_MIN_OPTS_CODE_SIZE 60000
// Maximun number of locals before turning off the inlining
#define MAX_LV_NUM_COUNT_FOR_INLINING 512
- bool compMinOpts;
- unsigned instrCount;
- unsigned lvRefCount;
- bool compMinOptsIsSet;
+ bool compMinOpts;
+ bool compMinOptsIsSet;
#ifdef DEBUG
- bool compMinOptsIsUsed;
+ mutable bool compMinOptsIsUsed;
- bool MinOpts()
+ bool MinOpts() const
{
assert(compMinOptsIsSet);
compMinOptsIsUsed = true;
return compMinOptsIsSet;
}
#else // !DEBUG
- bool MinOpts()
+ bool MinOpts() const
{
return compMinOpts;
}
}
#endif // !DEBUG
- bool OptimizationDisabled()
+ bool OptimizationDisabled() const
{
return MinOpts() || compDbgCode;
}
- bool OptimizationEnabled()
+ bool OptimizationEnabled() const
{
return !OptimizationDisabled();
}
STRESS_MODE(MAKE_CSE) \
STRESS_MODE(LEGACY_INLINE) \
STRESS_MODE(CLONE_EXPR) \
- STRESS_MODE(USE_FCOMI) \
STRESS_MODE(USE_CMOV) \
STRESS_MODE(FOLD) \
STRESS_MODE(BB_PROFILE) \