зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1382650 part 4 - Split Ion warmup threshold JitOption in 'normal' and 'full' options. r=nbp
Also adds a javascript.options.ion.full.threshold browser pref and similar shell flags. This doesn't rename the existing prefs yet. Differential Revision: https://phabricator.services.mozilla.com/D24156 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
094a569b9d
Коммит
3ad6efea42
|
@ -158,6 +158,11 @@ DefaultJitOptions::DefaultJitOptions() {
|
|||
// Duplicated in all.js - ensure both match.
|
||||
SET_DEFAULT(normalIonWarmUpThreshold, 1000);
|
||||
|
||||
// How many invocations or loop iterations are needed before functions
|
||||
// are compiled with the Ion compiler at OptimizationLevel::Full.
|
||||
// Duplicated in all.js - ensure both match.
|
||||
SET_DEFAULT(fullIonWarmUpThreshold, 100'000);
|
||||
|
||||
// Number of exception bailouts (resuming into catch/finally block) before
|
||||
// we invalidate and forbid Ion compilation.
|
||||
SET_DEFAULT(exceptionBailoutThreshold, 10);
|
||||
|
@ -264,15 +269,33 @@ void DefaultJitOptions::enableGvn(bool enable) { disableGvn = !enable; }
|
|||
void DefaultJitOptions::setEagerIonCompilation() {
|
||||
baselineWarmUpThreshold = 0;
|
||||
normalIonWarmUpThreshold = 0;
|
||||
fullIonWarmUpThreshold = 0;
|
||||
}
|
||||
|
||||
void DefaultJitOptions::setCompilerWarmUpThreshold(uint32_t warmUpThreshold) {
|
||||
void DefaultJitOptions::setNormalIonWarmUpThreshold(uint32_t warmUpThreshold) {
|
||||
normalIonWarmUpThreshold = warmUpThreshold;
|
||||
|
||||
if (fullIonWarmUpThreshold < normalIonWarmUpThreshold) {
|
||||
fullIonWarmUpThreshold = normalIonWarmUpThreshold;
|
||||
}
|
||||
}
|
||||
|
||||
void DefaultJitOptions::resetCompilerWarmUpThreshold() {
|
||||
void DefaultJitOptions::setFullIonWarmUpThreshold(uint32_t warmUpThreshold) {
|
||||
fullIonWarmUpThreshold = warmUpThreshold;
|
||||
|
||||
if (normalIonWarmUpThreshold > fullIonWarmUpThreshold) {
|
||||
setNormalIonWarmUpThreshold(fullIonWarmUpThreshold);
|
||||
}
|
||||
}
|
||||
|
||||
void DefaultJitOptions::resetNormalIonWarmUpThreshold() {
|
||||
jit::DefaultJitOptions defaultValues;
|
||||
normalIonWarmUpThreshold = defaultValues.normalIonWarmUpThreshold;
|
||||
setNormalIonWarmUpThreshold(defaultValues.normalIonWarmUpThreshold);
|
||||
}
|
||||
|
||||
void DefaultJitOptions::resetFullIonWarmUpThreshold() {
|
||||
jit::DefaultJitOptions defaultValues;
|
||||
setFullIonWarmUpThreshold(defaultValues.fullIonWarmUpThreshold);
|
||||
}
|
||||
|
||||
} // namespace jit
|
||||
|
|
|
@ -83,6 +83,7 @@ struct DefaultJitOptions {
|
|||
#endif
|
||||
uint32_t baselineWarmUpThreshold;
|
||||
uint32_t normalIonWarmUpThreshold;
|
||||
uint32_t fullIonWarmUpThreshold;
|
||||
uint32_t exceptionBailoutThreshold;
|
||||
uint32_t frequentBailoutThreshold;
|
||||
uint32_t maxStackArgs;
|
||||
|
@ -111,8 +112,10 @@ struct DefaultJitOptions {
|
|||
DefaultJitOptions();
|
||||
bool isSmallFunction(JSScript* script) const;
|
||||
void setEagerIonCompilation();
|
||||
void setCompilerWarmUpThreshold(uint32_t warmUpThreshold);
|
||||
void resetCompilerWarmUpThreshold();
|
||||
void setNormalIonWarmUpThreshold(uint32_t warmUpThreshold);
|
||||
void setFullIonWarmUpThreshold(uint32_t warmUpThreshold);
|
||||
void resetNormalIonWarmUpThreshold();
|
||||
void resetFullIonWarmUpThreshold();
|
||||
void enableGvn(bool val);
|
||||
|
||||
bool eagerIonCompilation() const {
|
||||
|
|
|
@ -5340,12 +5340,19 @@ JS_PUBLIC_API void JS_SetGlobalJitCompilerOption(JSContext* cx,
|
|||
}
|
||||
jit::JitOptions.baselineWarmUpThreshold = value;
|
||||
break;
|
||||
case JSJITCOMPILER_ION_WARMUP_TRIGGER:
|
||||
case JSJITCOMPILER_ION_NORMAL_WARMUP_TRIGGER:
|
||||
if (value == uint32_t(-1)) {
|
||||
jit::JitOptions.resetCompilerWarmUpThreshold();
|
||||
jit::JitOptions.resetNormalIonWarmUpThreshold();
|
||||
break;
|
||||
}
|
||||
jit::JitOptions.setCompilerWarmUpThreshold(value);
|
||||
jit::JitOptions.setNormalIonWarmUpThreshold(value);
|
||||
break;
|
||||
case JSJITCOMPILER_ION_FULL_WARMUP_TRIGGER:
|
||||
if (value == uint32_t(-1)) {
|
||||
jit::JitOptions.resetFullIonWarmUpThreshold();
|
||||
break;
|
||||
}
|
||||
jit::JitOptions.setFullIonWarmUpThreshold(value);
|
||||
break;
|
||||
case JSJITCOMPILER_ION_GVN_ENABLE:
|
||||
if (value == 0) {
|
||||
|
@ -5468,9 +5475,12 @@ JS_PUBLIC_API bool JS_GetGlobalJitCompilerOption(JSContext* cx,
|
|||
case JSJITCOMPILER_BASELINE_WARMUP_TRIGGER:
|
||||
*valueOut = jit::JitOptions.baselineWarmUpThreshold;
|
||||
break;
|
||||
case JSJITCOMPILER_ION_WARMUP_TRIGGER:
|
||||
case JSJITCOMPILER_ION_NORMAL_WARMUP_TRIGGER:
|
||||
*valueOut = jit::JitOptions.normalIonWarmUpThreshold;
|
||||
break;
|
||||
case JSJITCOMPILER_ION_FULL_WARMUP_TRIGGER:
|
||||
*valueOut = jit::JitOptions.fullIonWarmUpThreshold;
|
||||
break;
|
||||
case JSJITCOMPILER_ION_FORCE_IC:
|
||||
*valueOut = jit::JitOptions.forceInlineCaches;
|
||||
break;
|
||||
|
|
|
@ -2973,7 +2973,8 @@ extern JS_PUBLIC_API void JS_SetOffthreadIonCompilationEnabled(JSContext* cx,
|
|||
// clang-format off
|
||||
#define JIT_COMPILER_OPTIONS(Register) \
|
||||
Register(BASELINE_WARMUP_TRIGGER, "baseline.warmup.trigger") \
|
||||
Register(ION_WARMUP_TRIGGER, "ion.warmup.trigger") \
|
||||
Register(ION_NORMAL_WARMUP_TRIGGER, "ion.warmup.trigger") \
|
||||
Register(ION_FULL_WARMUP_TRIGGER, "ion.full.warmup.trigger") \
|
||||
Register(ION_GVN_ENABLE, "ion.gvn.enable") \
|
||||
Register(ION_FORCE_IC, "ion.forceinlineCaches") \
|
||||
Register(ION_ENABLE, "ion.enable") \
|
||||
|
|
|
@ -36,6 +36,12 @@
|
|||
--ion-warmup-threshold=0
|
||||
--ion-warmup-threshold=10
|
||||
--ion-warmup-threshold=100
|
||||
--ion-full-warmup-threshold=0
|
||||
--ion-full-warmup-threshold=10
|
||||
--ion-full-warmup-threshold=100
|
||||
--ion-full-warmup-threshold=1000
|
||||
--ion-full-warmup-threshold=1500
|
||||
--ion-full-warmup-threshold=5000
|
||||
--no-native-regexp
|
||||
--nursery-strings=off
|
||||
--nursery-strings=on
|
||||
|
|
|
@ -10354,7 +10354,12 @@ static bool SetContextOptions(JSContext* cx, const OptionParser& op) {
|
|||
|
||||
int32_t warmUpThreshold = op.getIntOption("ion-warmup-threshold");
|
||||
if (warmUpThreshold >= 0) {
|
||||
jit::JitOptions.setCompilerWarmUpThreshold(warmUpThreshold);
|
||||
jit::JitOptions.setNormalIonWarmUpThreshold(warmUpThreshold);
|
||||
}
|
||||
|
||||
warmUpThreshold = op.getIntOption("ion-full-warmup-threshold");
|
||||
if (warmUpThreshold >= 0) {
|
||||
jit::JitOptions.setFullIonWarmUpThreshold(warmUpThreshold);
|
||||
}
|
||||
|
||||
warmUpThreshold = op.getIntOption("baseline-warmup-threshold");
|
||||
|
@ -10946,7 +10951,11 @@ int main(int argc, char** argv, char** envp) {
|
|||
"Don't compile very large scripts (default: on, off to disable)") ||
|
||||
!op.addIntOption('\0', "ion-warmup-threshold", "COUNT",
|
||||
"Wait for COUNT calls or iterations before compiling "
|
||||
"(default: 1000)",
|
||||
"at the normal optimization level (default: 1000)",
|
||||
-1) ||
|
||||
!op.addIntOption('\0', "ion-full-warmup-threshold", "COUNT",
|
||||
"Wait for COUNT calls or iterations before compiling "
|
||||
"at the 'full' optimization level (default: 100,000)",
|
||||
-1) ||
|
||||
!op.addStringOption(
|
||||
'\0', "ion-regalloc", "[mode]",
|
||||
|
|
|
@ -812,8 +812,10 @@ static void ReloadPrefsCallback(const char* pref, XPCJSContext* xpccx) {
|
|||
|
||||
int32_t baselineThreshold =
|
||||
Preferences::GetInt(JS_OPTIONS_DOT_STR "baselinejit.threshold", -1);
|
||||
int32_t ionThreshold =
|
||||
int32_t normalIonThreshold =
|
||||
Preferences::GetInt(JS_OPTIONS_DOT_STR "ion.threshold", -1);
|
||||
int32_t fullIonThreshold =
|
||||
Preferences::GetInt(JS_OPTIONS_DOT_STR "ion.full.threshold", -1);
|
||||
int32_t ionFrequentBailoutThreshold = Preferences::GetInt(
|
||||
JS_OPTIONS_DOT_STR "ion.frequent_bailout_threshold", -1);
|
||||
|
||||
|
@ -911,8 +913,10 @@ static void ReloadPrefsCallback(const char* pref, XPCJSContext* xpccx) {
|
|||
JS_SetOffthreadIonCompilationEnabled(cx, offthreadIonCompilation);
|
||||
JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_BASELINE_WARMUP_TRIGGER,
|
||||
useBaselineEager ? 0 : baselineThreshold);
|
||||
JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_ION_WARMUP_TRIGGER,
|
||||
useIonEager ? 0 : ionThreshold);
|
||||
JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_ION_NORMAL_WARMUP_TRIGGER,
|
||||
useIonEager ? 0 : normalIonThreshold);
|
||||
JS_SetGlobalJitCompilerOption(cx, JSJITCOMPILER_ION_FULL_WARMUP_TRIGGER,
|
||||
useIonEager ? 0 : fullIonThreshold);
|
||||
JS_SetGlobalJitCompilerOption(cx,
|
||||
JSJITCOMPILER_ION_FREQUENT_BAILOUT_THRESHOLD,
|
||||
ionFrequentBailoutThreshold);
|
||||
|
|
|
@ -1456,6 +1456,7 @@ pref("javascript.options.baselinejit.threshold", 10);
|
|||
pref("javascript.options.ion", true);
|
||||
//Duplicated in JitOptions - ensure both match.
|
||||
pref("javascript.options.ion.threshold", 1000);
|
||||
pref("javascript.options.ion.full.threshold", 100000);
|
||||
//Duplicated in JitOptions - ensure both match.
|
||||
pref("javascript.options.ion.frequent_bailout_threshold", 10);
|
||||
pref("javascript.options.asmjs", true);
|
||||
|
|
Загрузка…
Ссылка в новой задаче