Title: [232856] trunk/Source/_javascript_Core
Revision
232856
Author
msab...@apple.com
Date
2018-06-14 14:48:02 -0700 (Thu, 14 Jun 2018)

Log Message

REGRESSION(232741): Crash running ARES-6
https://bugs.webkit.org/show_bug.cgi?id=186630

Reviewed by Saam Barati.

The de-duplicating work in r232741 caused a bug in breakCriticalEdge() where it
treated edges between identical predecessor->successor pairs independently.
This fixes the issue by handling such edges once, using the added intermediate
pad for all instances of the edges between the same pairs.

* dfg/DFGCriticalEdgeBreakingPhase.cpp:
(JSC::DFG::CriticalEdgeBreakingPhase::run):
(JSC::DFG::CriticalEdgeBreakingPhase::breakCriticalEdge): Deleted.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (232855 => 232856)


--- trunk/Source/_javascript_Core/ChangeLog	2018-06-14 21:44:01 UTC (rev 232855)
+++ trunk/Source/_javascript_Core/ChangeLog	2018-06-14 21:48:02 UTC (rev 232856)
@@ -1,3 +1,19 @@
+2018-06-14  Michael Saboff  <msab...@apple.com>
+
+        REGRESSION(232741): Crash running ARES-6
+        https://bugs.webkit.org/show_bug.cgi?id=186630
+
+        Reviewed by Saam Barati.
+
+        The de-duplicating work in r232741 caused a bug in breakCriticalEdge() where it
+        treated edges between identical predecessor->successor pairs independently.
+        This fixes the issue by handling such edges once, using the added intermediate
+        pad for all instances of the edges between the same pairs.
+
+        * dfg/DFGCriticalEdgeBreakingPhase.cpp:
+        (JSC::DFG::CriticalEdgeBreakingPhase::run):
+        (JSC::DFG::CriticalEdgeBreakingPhase::breakCriticalEdge): Deleted.
+
 2018-06-14  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [GTK][WPE] WebDriver: handle acceptInsecureCertificates capability

Modified: trunk/Source/_javascript_Core/dfg/DFGCriticalEdgeBreakingPhase.cpp (232855 => 232856)


--- trunk/Source/_javascript_Core/dfg/DFGCriticalEdgeBreakingPhase.cpp	2018-06-14 21:44:01 UTC (rev 232855)
+++ trunk/Source/_javascript_Core/dfg/DFGCriticalEdgeBreakingPhase.cpp	2018-06-14 21:48:02 UTC (rev 232856)
@@ -56,13 +56,30 @@
             
             if (block->numSuccessors() <= 1)
                 continue;
-            
+
+            // Break critical edges by inserting a "Jump" pad block in place of each
+            // unique A->B critical edge.
+            HashMap<BasicBlock*, BasicBlock*> successorPads;
+
             for (unsigned i = block->numSuccessors(); i--;) {
                 BasicBlock** successor = &block->successor(i);
                 if ((*successor)->predecessors.size() <= 1)
                     continue;
-                
-                breakCriticalEdge(block, successor); 
+
+                BasicBlock* pad = nullptr;
+                auto iter = successorPads.find(*successor);
+
+                if (iter == successorPads.end()) {
+                    pad = m_insertionSet.insertBefore(*successor, (*successor)->executionCount);
+                    pad->appendNode(
+                        m_graph, SpecNone, Jump, (*successor)->at(0)->origin, OpInfo(*successor));
+                    pad->predecessors.append(block);
+                    (*successor)->replacePredecessor(block, pad);
+                    successorPads.set(*successor, pad);
+                } else
+                    pad = iter->value;
+
+                *successor = pad;
             }
         }
         
@@ -70,17 +87,6 @@
     }
 
 private:
-    void breakCriticalEdge(BasicBlock* predecessor, BasicBlock** successor)
-    {
-        BasicBlock* pad = m_insertionSet.insertBefore(*successor, (*successor)->executionCount);
-        pad->appendNode(
-            m_graph, SpecNone, Jump, (*successor)->at(0)->origin, OpInfo(*successor));
-        pad->predecessors.append(predecessor);
-        (*successor)->replacePredecessor(predecessor, pad);
-        
-        *successor = pad;
-    }
-    
     BlockInsertionSet m_insertionSet;
 };
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to