Title: [160407] trunk/Source/_javascript_Core
Revision
160407
Author
fpi...@apple.com
Date
2013-12-10 18:10:46 -0800 (Tue, 10 Dec 2013)

Log Message

Simplify CSE's treatment of NodeRelevantToOSR
https://bugs.webkit.org/show_bug.cgi?id=125538

Reviewed by Oliver Hunt.
        
Make the NodeRelevantToOSR thing obvious: if there is any MovHint on a node then the
node is relevant to OSR.

* dfg/DFGCSEPhase.cpp:
(JSC::DFG::CSEPhase::run):
(JSC::DFG::CSEPhase::performNodeCSE):
(JSC::DFG::CSEPhase::performBlockCSE):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (160406 => 160407)


--- trunk/Source/_javascript_Core/ChangeLog	2013-12-11 02:08:32 UTC (rev 160406)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-12-11 02:10:46 UTC (rev 160407)
@@ -1,5 +1,20 @@
 2013-12-10  Filip Pizlo  <fpi...@apple.com>
 
+        Simplify CSE's treatment of NodeRelevantToOSR
+        https://bugs.webkit.org/show_bug.cgi?id=125538
+
+        Reviewed by Oliver Hunt.
+        
+        Make the NodeRelevantToOSR thing obvious: if there is any MovHint on a node then the
+        node is relevant to OSR.
+
+        * dfg/DFGCSEPhase.cpp:
+        (JSC::DFG::CSEPhase::run):
+        (JSC::DFG::CSEPhase::performNodeCSE):
+        (JSC::DFG::CSEPhase::performBlockCSE):
+
+2013-12-10  Filip Pizlo  <fpi...@apple.com>
+
         Get rid of forward exit in GetByVal on Uint32Array
         https://bugs.webkit.org/show_bug.cgi?id=125543
 

Modified: trunk/Source/_javascript_Core/dfg/DFGCSEPhase.cpp (160406 => 160407)


--- trunk/Source/_javascript_Core/dfg/DFGCSEPhase.cpp	2013-12-11 02:08:32 UTC (rev 160406)
+++ trunk/Source/_javascript_Core/dfg/DFGCSEPhase.cpp	2013-12-11 02:10:46 UTC (rev 160407)
@@ -55,6 +55,47 @@
         
         m_graph.clearReplacements();
         
+        for (BlockIndex blockIndex = m_graph.numBlocks(); blockIndex--;) {
+            BasicBlock* block = m_graph.block(blockIndex);
+            if (!block)
+                continue;
+            
+            // All Phis need to already be marked as relevant to OSR.
+            if (!ASSERT_DISABLED) {
+                for (unsigned i = 0; i < block->phis.size(); ++i)
+                    ASSERT(block->phis[i]->flags() & NodeRelevantToOSR);
+            }
+            
+            for (unsigned i = block->size(); i--;) {
+                Node* node = block->at(i);
+                
+                switch (node->op()) {
+                case SetLocal:
+                case GetLocal: // FIXME: The GetLocal case is only necessary until we do https://bugs.webkit.org/show_bug.cgi?id=106707.
+                    node->mergeFlags(NodeRelevantToOSR);
+                    break;
+                default:
+                    node->clearFlags(NodeRelevantToOSR);
+                    break;
+                }
+            }
+        }
+        
+        for (BlockIndex blockIndex = m_graph.numBlocks(); blockIndex--;) {
+            BasicBlock* block = m_graph.block(blockIndex);
+            if (!block)
+                continue;
+            
+            for (unsigned i = block->size(); i--;) {
+                Node* node = block->at(i);
+                if (!node->containsMovHint())
+                    continue;
+                
+                ASSERT(node->op() != ZombieHint);
+                node->child1()->mergeFlags(NodeRelevantToOSR);
+            }
+        }
+        
         if (m_graph.m_form == SSA) {
             Vector<BasicBlock*> depthFirst;
             m_graph.getBlocksInDepthFirstOrder(depthFirst);
@@ -1022,11 +1063,6 @@
         if (cseMode == NormalCSE)
             m_graph.performSubstitution(node);
         
-        if (node->containsMovHint()) {
-            ASSERT(node->op() != ZombieHint);
-            node->child1()->mergeFlags(NodeRelevantToOSR);
-        }
-        
         switch (node->op()) {
         
         case Identity:
@@ -1374,28 +1410,6 @@
         for (unsigned i = 0; i < LastNodeType; ++i)
             m_lastSeen[i] = UINT_MAX;
         
-        // All Phis need to already be marked as relevant to OSR.
-        if (!ASSERT_DISABLED) {
-            for (unsigned i = 0; i < block->phis.size(); ++i)
-                ASSERT(block->phis[i]->flags() & NodeRelevantToOSR);
-        }
-        
-        // Make all of my SetLocal and GetLocal nodes relevant to OSR, and do some other
-        // necessary bookkeeping.
-        for (unsigned i = 0; i < block->size(); ++i) {
-            Node* node = block->at(i);
-            
-            switch (node->op()) {
-            case SetLocal:
-            case GetLocal: // FIXME: The GetLocal case is only necessary until we do https://bugs.webkit.org/show_bug.cgi?id=106707.
-                node->mergeFlags(NodeRelevantToOSR);
-                break;
-            default:
-                node->clearFlags(NodeRelevantToOSR);
-                break;
-            }
-        }
-
         for (m_indexInBlock = 0; m_indexInBlock < block->size(); ++m_indexInBlock) {
             m_currentNode = block->at(m_indexInBlock);
             performNodeCSE(m_currentNode);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to