Title: [184128] trunk/Source/_javascript_Core
- Revision
- 184128
- Author
- [email protected]
- Date
- 2015-05-11 15:42:49 -0700 (Mon, 11 May 2015)
Log Message
CPS rethreading phase's flush detector flushes way too many SetLocals
https://bugs.webkit.org/show_bug.cgi?id=144819
Reviewed by Geoffrey Garen.
After probably unrelated changes, this eventually caused some arguments elimination to stop
working because it would cause more SetLocals to turn into PutStacks. But it was a bug for
a long time. Basically, we don't want the children of a SetLocal to be flushed. Flushing is
meant to only affect the SetLocal itself.
This is a speed-up on Octane/earley.
* dfg/DFGCPSRethreadingPhase.cpp:
(JSC::DFG::CPSRethreadingPhase::computeIsFlushed):
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (184127 => 184128)
--- trunk/Source/_javascript_Core/ChangeLog 2015-05-11 22:41:36 UTC (rev 184127)
+++ trunk/Source/_javascript_Core/ChangeLog 2015-05-11 22:42:49 UTC (rev 184128)
@@ -1,3 +1,20 @@
+2015-05-08 Filip Pizlo <[email protected]>
+
+ CPS rethreading phase's flush detector flushes way too many SetLocals
+ https://bugs.webkit.org/show_bug.cgi?id=144819
+
+ Reviewed by Geoffrey Garen.
+
+ After probably unrelated changes, this eventually caused some arguments elimination to stop
+ working because it would cause more SetLocals to turn into PutStacks. But it was a bug for
+ a long time. Basically, we don't want the children of a SetLocal to be flushed. Flushing is
+ meant to only affect the SetLocal itself.
+
+ This is a speed-up on Octane/earley.
+
+ * dfg/DFGCPSRethreadingPhase.cpp:
+ (JSC::DFG::CPSRethreadingPhase::computeIsFlushed):
+
2015-05-11 Filip Pizlo <[email protected]>
gmail and google maps fail to load with eager compilation: Failed to insert inline cache for varargs call (specifically, CallForwardVarargs) because we thought the size would be 250 but it ended up being 262 prior to compaction.
Modified: trunk/Source/_javascript_Core/dfg/DFGCPSRethreadingPhase.cpp (184127 => 184128)
--- trunk/Source/_javascript_Core/dfg/DFGCPSRethreadingPhase.cpp 2015-05-11 22:41:36 UTC (rev 184127)
+++ trunk/Source/_javascript_Core/dfg/DFGCPSRethreadingPhase.cpp 2015-05-11 22:42:49 UTC (rev 184128)
@@ -483,8 +483,21 @@
}
while (!m_flushedLocalOpWorklist.isEmpty()) {
Node* node = m_flushedLocalOpWorklist.takeLast();
- ASSERT(node->flags() & NodeIsFlushed);
- DFG_NODE_DO_TO_CHILDREN(m_graph, node, addFlushedLocalEdge);
+ switch (node->op()) {
+ case SetLocal:
+ case SetArgument:
+ break;
+
+ case Flush:
+ case Phi:
+ ASSERT(node->flags() & NodeIsFlushed);
+ DFG_NODE_DO_TO_CHILDREN(m_graph, node, addFlushedLocalEdge);
+ break;
+
+ default:
+ DFG_CRASH(m_graph, node, "Invalid node in flush graph");
+ break;
+ }
}
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes