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

Reply via email to