static void recomputeDependentOptions() { #if !ENABLE(JIT) Options::useLLInt() = true; Options::useJIT() = false; Options::useDFGJIT() = false; Options::useFTLJIT() = false; #endif #if !ENABLE(YARR_JIT) Options::useRegExpJIT() = false; #endif #if !ENABLE(CONCURRENT_JIT) Options::enableConcurrentJIT() = false; #endif #if !ENABLE(DFG_JIT) Options::useDFGJIT() = false; Options::useFTLJIT() = false; #endif #if !ENABLE(FTL_JIT) Options::useFTLJIT() = false; #endif #if OS(WINDOWS) && CPU(X86) // Disable JIT on Windows if SSE2 is not present if (!MacroAssemblerX86::supportsFloatingPoint()) Options::useJIT() = false; #endif if (Options::showDisassembly() || Options::showDFGDisassembly() || Options::showFTLDisassembly() || Options::dumpBytecodeAtDFGTime() || Options::dumpGraphAtEachPhase() || Options::verboseCompilation() || Options::verboseFTLCompilation() || Options::logCompilationChanges() || Options::validateGraph() || Options::validateGraphAtEachPhase() || Options::verboseOSR() || Options::verboseCompilationQueue() || Options::reportCompileTimes() || Options::reportFTLCompileTimes() || Options::verboseCFA() || Options::verboseFTLFailure()) Options::alwaysComputeHash() = true; if (Option(Options::jitPolicyScaleID).isOverridden()) scaleJITPolicy(); if (Options::forceEagerCompilation()) { Options::thresholdForJITAfterWarmUp() = 10; Options::thresholdForJITSoon() = 10; Options::thresholdForOptimizeAfterWarmUp() = 20; Options::thresholdForOptimizeAfterLongWarmUp() = 20; Options::thresholdForOptimizeSoon() = 20; Options::thresholdForFTLOptimizeAfterWarmUp() = 20; Options::thresholdForFTLOptimizeSoon() = 20; Options::maximumEvalCacheableSourceLength() = 150000; Options::enableConcurrentJIT() = false; } // Compute the maximum value of the reoptimization retry counter. This is simply // the largest value at which we don't overflow the execute counter, when using it // to left-shift the execution counter by this amount. Currently the value ends // up being 18, so this loop is not so terrible; it probably takes up ~100 cycles // total on a 32-bit processor. Options::reoptimizationRetryCounterMax() = 0; while ((static_cast<int64_t>(Options::thresholdForOptimizeAfterLongWarmUp()) << (Options::reoptimizationRetryCounterMax() + 1)) <= static_cast<int64_t>(std::numeric_limits<int32_t>::max())) Options::reoptimizationRetryCounterMax()++; ASSERT((static_cast<int64_t>(Options::thresholdForOptimizeAfterLongWarmUp()) << Options::reoptimizationRetryCounterMax()) > 0); ASSERT((static_cast<int64_t>(Options::thresholdForOptimizeAfterLongWarmUp()) << Options::reoptimizationRetryCounterMax()) <= static_cast<int64_t>(std::numeric_limits<int32_t>::max())); }
static void recomputeDependentOptions() { #if !defined(NDEBUG) Options::validateDFGExceptionHandling() = true; #endif #if !ENABLE(JIT) Options::useLLInt() = true; Options::useJIT() = false; Options::useDFGJIT() = false; Options::useFTLJIT() = false; Options::useDOMJIT() = false; #endif #if !ENABLE(YARR_JIT) Options::useRegExpJIT() = false; #endif #if !ENABLE(CONCURRENT_JS) Options::useConcurrentJIT() = false; #endif #if !ENABLE(DFG_JIT) Options::useDFGJIT() = false; Options::useFTLJIT() = false; #endif #if !ENABLE(FTL_JIT) Options::useFTLJIT() = false; #endif #if !CPU(X86_64) && !CPU(ARM64) Options::useConcurrentGC() = false; #endif #if OS(WINDOWS) && CPU(X86) // Disable JIT on Windows if SSE2 is not present if (!MacroAssemblerX86::supportsFloatingPoint()) Options::useJIT() = false; #endif if (Options::dumpDisassembly() || Options::dumpDFGDisassembly() || Options::dumpFTLDisassembly() || Options::dumpBytecodeAtDFGTime() || Options::dumpGraphAtEachPhase() || Options::dumpDFGGraphAtEachPhase() || Options::dumpDFGFTLGraphAtEachPhase() || Options::dumpB3GraphAtEachPhase() || Options::dumpAirGraphAtEachPhase() || Options::verboseCompilation() || Options::verboseFTLCompilation() || Options::logCompilationChanges() || Options::validateGraph() || Options::validateGraphAtEachPhase() || Options::verboseOSR() || Options::verboseCompilationQueue() || Options::reportCompileTimes() || Options::reportBaselineCompileTimes() || Options::reportDFGCompileTimes() || Options::reportFTLCompileTimes() || Options::reportDFGPhaseTimes() || Options::verboseCFA() || Options::verboseFTLFailure()) Options::alwaysComputeHash() = true; if (!Options::useConcurrentGC()) Options::collectContinuously() = false; if (Option(Options::jitPolicyScaleID).isOverridden()) scaleJITPolicy(); if (Options::forceEagerCompilation()) { Options::thresholdForJITAfterWarmUp() = 10; Options::thresholdForJITSoon() = 10; Options::thresholdForOptimizeAfterWarmUp() = 20; Options::thresholdForOptimizeAfterLongWarmUp() = 20; Options::thresholdForOptimizeSoon() = 20; Options::thresholdForFTLOptimizeAfterWarmUp() = 20; Options::thresholdForFTLOptimizeSoon() = 20; Options::maximumEvalCacheableSourceLength() = 150000; Options::useConcurrentJIT() = false; } if (Options::useMaximalFlushInsertionPhase()) { Options::useOSREntryToDFG() = false; Options::useOSREntryToFTL() = false; } #if PLATFORM(IOS) && !PLATFORM(IOS_SIMULATOR) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 100000 // Override globally for now. Longer term we'll just make the default // be to have this option enabled, and have platforms that don't support // it just silently use a single mapping. Options::useSeparatedWXHeap() = true; #endif if (Options::alwaysUseShadowChicken()) Options::maximumInliningDepth() = 1; // Compute the maximum value of the reoptimization retry counter. This is simply // the largest value at which we don't overflow the execute counter, when using it // to left-shift the execution counter by this amount. Currently the value ends // up being 18, so this loop is not so terrible; it probably takes up ~100 cycles // total on a 32-bit processor. Options::reoptimizationRetryCounterMax() = 0; while ((static_cast<int64_t>(Options::thresholdForOptimizeAfterLongWarmUp()) << (Options::reoptimizationRetryCounterMax() + 1)) <= static_cast<int64_t>(std::numeric_limits<int32_t>::max())) Options::reoptimizationRetryCounterMax()++; ASSERT((static_cast<int64_t>(Options::thresholdForOptimizeAfterLongWarmUp()) << Options::reoptimizationRetryCounterMax()) > 0); ASSERT((static_cast<int64_t>(Options::thresholdForOptimizeAfterLongWarmUp()) << Options::reoptimizationRetryCounterMax()) <= static_cast<int64_t>(std::numeric_limits<int32_t>::max())); #if ENABLE(LLINT_STATS) LLInt::Data::loadStats(); #endif #if !defined(NDEBUG) if (Options::maxSingleAllocationSize()) fastSetMaxSingleAllocationSize(Options::maxSingleAllocationSize()); else fastSetMaxSingleAllocationSize(std::numeric_limits<size_t>::max()); #endif }