Changeset 232856 in webkit for trunk/Source/JavaScriptCore/dfg/DFGCriticalEdgeBreakingPhase.cpp
- Timestamp:
- Jun 14, 2018, 2:48:02 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGCriticalEdgeBreakingPhase.cpp
r204466 r232856 57 57 if (block->numSuccessors() <= 1) 58 58 continue; 59 59 60 // Break critical edges by inserting a "Jump" pad block in place of each 61 // unique A->B critical edge. 62 HashMap<BasicBlock*, BasicBlock*> successorPads; 63 60 64 for (unsigned i = block->numSuccessors(); i--;) { 61 65 BasicBlock** successor = &block->successor(i); 62 66 if ((*successor)->predecessors.size() <= 1) 63 67 continue; 64 65 breakCriticalEdge(block, successor); 68 69 BasicBlock* pad = nullptr; 70 auto iter = successorPads.find(*successor); 71 72 if (iter == successorPads.end()) { 73 pad = m_insertionSet.insertBefore(*successor, (*successor)->executionCount); 74 pad->appendNode( 75 m_graph, SpecNone, Jump, (*successor)->at(0)->origin, OpInfo(*successor)); 76 pad->predecessors.append(block); 77 (*successor)->replacePredecessor(block, pad); 78 successorPads.set(*successor, pad); 79 } else 80 pad = iter->value; 81 82 *successor = pad; 66 83 } 67 84 } … … 71 88 72 89 private: 73 void breakCriticalEdge(BasicBlock* predecessor, BasicBlock** successor)74 {75 BasicBlock* pad = m_insertionSet.insertBefore(*successor, (*successor)->executionCount);76 pad->appendNode(77 m_graph, SpecNone, Jump, (*successor)->at(0)->origin, OpInfo(*successor));78 pad->predecessors.append(predecessor);79 (*successor)->replacePredecessor(predecessor, pad);80 81 *successor = pad;82 }83 84 90 BlockInsertionSet m_insertionSet; 85 91 };
Note:
See TracChangeset
for help on using the changeset viewer.