Title: [119526] trunk/Source/_javascript_Core
Revision
119526
Author
[email protected]
Date
2012-06-05 14:32:18 -0700 (Tue, 05 Jun 2012)

Log Message

DFG CFG simplification should not attempt to deref nodes inside of an unreachable subgraph
https://bugs.webkit.org/show_bug.cgi?id=88362

Reviewed by Gavin Barraclough.

* dfg/DFGCFGSimplificationPhase.cpp:
(JSC::DFG::CFGSimplificationPhase::fixPhis):
(JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (119525 => 119526)


--- trunk/Source/_javascript_Core/ChangeLog	2012-06-05 21:31:40 UTC (rev 119525)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-06-05 21:32:18 UTC (rev 119526)
@@ -1,3 +1,14 @@
+2012-06-05  Filip Pizlo  <[email protected]>
+
+        DFG CFG simplification should not attempt to deref nodes inside of an unreachable subgraph
+        https://bugs.webkit.org/show_bug.cgi?id=88362
+
+        Reviewed by Gavin Barraclough.
+
+        * dfg/DFGCFGSimplificationPhase.cpp:
+        (JSC::DFG::CFGSimplificationPhase::fixPhis):
+        (JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference):
+
 2012-06-05  Mark Hahnenberg  <[email protected]>
 
         Entry into JSC should CRASH() if the Heap is busy

Modified: trunk/Source/_javascript_Core/dfg/DFGCFGSimplificationPhase.cpp (119525 => 119526)


--- trunk/Source/_javascript_Core/dfg/DFGCFGSimplificationPhase.cpp	2012-06-05 21:31:40 UTC (rev 119525)
+++ trunk/Source/_javascript_Core/dfg/DFGCFGSimplificationPhase.cpp	2012-06-05 21:32:18 UTC (rev 119526)
@@ -389,7 +389,7 @@
             if (myNode.op() == GetLocal)
                 myNodeIndex = myNode.child1().index();
             for (unsigned j = 0; j < AdjacencyList::Size; ++j)
-                removePotentiallyDeadPhiReference(myNodeIndex, phiNode, j);
+                removePotentiallyDeadPhiReference(myNodeIndex, phiNode, j, sourceBlock->isReachable);
 #if DFG_ENABLE(DEBUG_PROPAGATION_VERBOSE)
             dataLog("\n");
 #endif
@@ -414,14 +414,14 @@
         fixPhis(blockIndex, jettisonedBlockIndex);
     }
     
-    void removePotentiallyDeadPhiReference(NodeIndex myNodeIndex, Node& phiNode, unsigned edgeIndex)
+    void removePotentiallyDeadPhiReference(NodeIndex myNodeIndex, Node& phiNode, unsigned edgeIndex, bool changeRef)
     {
         if (phiNode.children.child(edgeIndex).indexUnchecked() != myNodeIndex)
             return;
 #if DFG_ENABLE(DEBUG_PROPAGATION_VERBOSE)
         dataLog(" Removing reference at child %u.", edgeIndex);
 #endif
-        if (phiNode.shouldGenerate())
+        if (changeRef && phiNode.shouldGenerate())
             m_graph.deref(myNodeIndex);
         phiNode.children.removeEdgeFromBag(edgeIndex);
     }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to