Modified: trunk/Source/_javascript_Core/ChangeLog (211547 => 211548)
--- trunk/Source/_javascript_Core/ChangeLog 2017-02-02 01:54:46 UTC (rev 211547)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-02-02 01:57:00 UTC (rev 211548)
@@ -1,3 +1,16 @@
+2017-02-01 Commit Queue <commit-qu...@webkit.org>
+
+ Unreviewed, rolling out r211461.
+ https://bugs.webkit.org/show_bug.cgi?id=167721
+
+ Big regression on kraken (Requested by jfbastien on #webkit).
+
+ Reverted changeset:
+
+ "OSR entry: delay outer-loop compilation when at inner-loop"
+ https://bugs.webkit.org/show_bug.cgi?id=167149
+ http://trac.webkit.org/changeset/211461
+
2017-02-01 Keith Miller <keith_mil...@apple.com>
Unreviewed, fix unintended change.
Modified: trunk/Source/_javascript_Core/dfg/DFGOperations.cpp (211547 => 211548)
--- trunk/Source/_javascript_Core/dfg/DFGOperations.cpp 2017-02-02 01:54:46 UTC (rev 211547)
+++ trunk/Source/_javascript_Core/dfg/DFGOperations.cpp 2017-02-02 01:57:00 UTC (rev 211548)
@@ -2351,19 +2351,6 @@
worklistState = Worklist::NotKnown;
JITCode* jitCode = codeBlock->jitCode()->dfg();
-
- bool triggeredSlowPath = false;
- auto tierUpEntryTriggers = jitCode->tierUpEntryTriggers.find(osrEntryBytecodeIndex);
- if (tierUpEntryTriggers != jitCode->tierUpEntryTriggers.end()) {
- if (tierUpEntryTriggers->value == 1) {
- // We were asked to enter as soon as possible. Unset this trigger so we don't continually enter.
- if (Options::verboseOSR())
- dataLog("EntryTrigger for ", *codeBlock, " forced slow-path.\n");
- triggeredSlowPath = true;
- tierUpEntryTriggers->value = 0;
- }
- }
-
if (worklistState == Worklist::Compiling) {
CODEBLOCK_LOG_EVENT(codeBlock, "delayFTLCompile", ("still compiling"));
jitCode->setOptimizationThresholdBasedOnCompilationResult(
@@ -2379,12 +2366,8 @@
return nullptr;
}
- // The following is only true for triggerTierUpNowInLoop, which can never
- // be an OSR entry.
- bool canOSRFromHere = originBytecodeIndex == osrEntryBytecodeIndex;
-
// If we can OSR Enter, do it right away.
- if (canOSRFromHere) {
+ if (originBytecodeIndex == osrEntryBytecodeIndex) {
unsigned streamIndex = jitCode->bytecodeIndexToStreamIndex.get(originBytecodeIndex);
if (CodeBlock* entryBlock = jitCode->osrEntryBlock()) {
if (void* address = FTL::prepareOSREntry(exec, codeBlock, entryBlock, originBytecodeIndex, streamIndex)) {
@@ -2398,10 +2381,10 @@
// - If we do have an FTL code block, then try to enter for a while.
// - If we couldn't enter for a while, then trigger OSR entry.
- if (!shouldTriggerFTLCompile(codeBlock, jitCode) && !triggeredSlowPath)
+ if (!shouldTriggerFTLCompile(codeBlock, jitCode))
return nullptr;
- if (!jitCode->neverExecutedEntry && !triggeredSlowPath) {
+ if (!jitCode->neverExecutedEntry) {
triggerFTLReplacementCompile(vm, codeBlock, jitCode);
if (!codeBlock->hasOptimizedReplacement())
@@ -2447,28 +2430,13 @@
return nullptr;
}
- if (!canOSRFromHere) {
- // We can't OSR from here, or even start a compilation because doing so
- // calls jitCode->reconstruct which would get the wrong state.
- if (Options::verboseOSR())
- dataLog("Non-OSR-able bc#", originBytecodeIndex, " in ", *codeBlock, " setting parent loop's trigger and backing off.\n");
- jitCode->tierUpEntryTriggers.set(osrEntryBytecodeIndex, 1);
- jitCode->dontOptimizeAnytimeSoon(codeBlock);
- return nullptr;
- }
-
unsigned streamIndex = jitCode->bytecodeIndexToStreamIndex.get(osrEntryBytecodeIndex);
-
- if (!triggeredSlowPath) {
- auto tierUpHierarchyEntry = jitCode->tierUpInLoopHierarchy.find(osrEntryBytecodeIndex);
- if (tierUpHierarchyEntry != jitCode->tierUpInLoopHierarchy.end()) {
- for (unsigned osrEntryCandidate : tierUpHierarchyEntry->value) {
- if (jitCode->tierUpEntrySeen.contains(osrEntryCandidate)) {
- // Ask an enclosing loop to compile, instead of doing so here.
- jitCode->tierUpEntryTriggers.set(osrEntryCandidate, 1);
- jitCode->dontOptimizeAnytimeSoon(codeBlock);
- return nullptr;
- }
+ auto tierUpHierarchyEntry = jitCode->tierUpInLoopHierarchy.find(osrEntryBytecodeIndex);
+ if (tierUpHierarchyEntry != jitCode->tierUpInLoopHierarchy.end()) {
+ for (unsigned osrEntryCandidate : tierUpHierarchyEntry->value) {
+ if (jitCode->tierUpEntrySeen.contains(osrEntryCandidate)) {
+ osrEntryBytecodeIndex = osrEntryCandidate;
+ streamIndex = jitCode->bytecodeIndexToStreamIndex.get(osrEntryBytecodeIndex);
}
}
}