Changeset 221176 in webkit for trunk/Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.cpp
- Timestamp:
- Aug 24, 2017, 6:55:53 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGLoopPreHeaderCreationPhase.cpp
r221119 r221176 42 42 BasicBlock* createPreHeader(Graph& graph, BlockInsertionSet& insertionSet, BasicBlock* block) 43 43 { 44 ASSERT_WITH_MESSAGE(!graph.isEntrypoint(block), "An entrypoint should not be in a loop");45 46 44 // FIXME: If we run this utility on SSA IR, then we may end up with a bizarre arrangement of 47 45 // Upsilons and Phis, like: … … 72 70 float frequency = 0; 73 71 for (BasicBlock* predecessor : block->predecessors) { 74 ASSERT(graph.m_form != SSA); 75 if (graph.m_cpsDominators->dominates(block, predecessor)) 72 if (graph.m_dominators->dominates(block, predecessor)) 76 73 continue; 77 74 frequency = std::max(frequency, predecessor->executionCount); … … 107 104 for (unsigned predecessorIndex = 0; predecessorIndex < block->predecessors.size(); predecessorIndex++) { 108 105 BasicBlock* predecessor = block->predecessors[predecessorIndex]; 109 if (graph.m_ cpsDominators->dominates(block, predecessor))106 if (graph.m_dominators->dominates(block, predecessor)) 110 107 continue; 111 108 block->predecessors[predecessorIndex--] = block->predecessors.last(); … … 134 131 bool run() 135 132 { 136 m_graph.ensure CPSDominators();137 m_graph.ensure CPSNaturalLoops();133 m_graph.ensureDominators(); 134 m_graph.ensureNaturalLoops(); 138 135 139 for (unsigned loopIndex = m_graph.m_ cpsNaturalLoops->numLoops(); loopIndex--;) {140 const CPSNaturalLoop& loop = m_graph.m_cpsNaturalLoops->loop(loopIndex);141 BasicBlock* existingPreHeader = nullptr;136 for (unsigned loopIndex = m_graph.m_naturalLoops->numLoops(); loopIndex--;) { 137 const NaturalLoop& loop = m_graph.m_naturalLoops->loop(loopIndex); 138 BasicBlock* existingPreHeader = 0; 142 139 bool needsNewPreHeader = false; 143 for (unsigned predecessorIndex = loop.header() .node()->predecessors.size(); predecessorIndex--;) {144 BasicBlock* predecessor = loop.header() .node()->predecessors[predecessorIndex];145 if (m_graph.m_ cpsDominators->dominates(loop.header().node(), predecessor))140 for (unsigned predecessorIndex = loop.header()->predecessors.size(); predecessorIndex--;) { 141 BasicBlock* predecessor = loop.header()->predecessors[predecessorIndex]; 142 if (m_graph.m_dominators->dominates(loop.header(), predecessor)) 146 143 continue; 147 144 if (!existingPreHeader) { … … 169 166 // if the terminal of the existing pre-header doesn't allow for exit, but the first 170 167 // origin of the loop header does, then we should create a new pre-header. 171 if (!needsNewPreHeader && loop.header() .node()->at(0)->origin.exitOK168 if (!needsNewPreHeader && loop.header()->at(0)->origin.exitOK 172 169 && !existingPreHeader->terminal()->origin.exitOK) 173 170 needsNewPreHeader = true; … … 176 173 continue; 177 174 178 createPreHeader(m_graph, m_insertionSet, loop.header() .node());175 createPreHeader(m_graph, m_insertionSet, loop.header()); 179 176 } 180 177
Note:
See TracChangeset
for help on using the changeset viewer.