Changeset 204393 in webkit for trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp
- Timestamp:
- Aug 11, 2016, 5:22:20 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp
r204130 r204393 67 67 }; 68 68 69 Graph::Graph(VM& vm, Plan& plan )69 Graph::Graph(VM& vm, Plan& plan, LongLivedState& longLivedState) 70 70 : m_vm(vm) 71 71 , m_plan(plan) 72 72 , m_codeBlock(m_plan.codeBlock) 73 73 , m_profiledBlock(m_codeBlock->alternative()) 74 , m_allocator(longLivedState.m_allocator) 74 75 , m_cfg(std::make_unique<CFG>(*this)) 75 76 , m_nextMachineLocal(0) … … 87 88 Graph::~Graph() 88 89 { 90 for (BlockIndex blockIndex = numBlocks(); blockIndex--;) { 91 BasicBlock* block = this->block(blockIndex); 92 if (!block) 93 continue; 94 95 for (unsigned phiIndex = block->phis.size(); phiIndex--;) 96 m_allocator.free(block->phis[phiIndex]); 97 for (unsigned nodeIndex = block->size(); nodeIndex--;) 98 m_allocator.free(block->at(nodeIndex)); 99 } 100 m_allocator.freeAll(); 89 101 } 90 102 … … 568 580 } 569 581 582 void Graph::addNodeToMapByIndex(Node* node) 583 { 584 if (m_nodeIndexFreeList.isEmpty()) { 585 node->m_index = m_nodesByIndex.size(); 586 m_nodesByIndex.append(node); 587 return; 588 } 589 unsigned index = m_nodeIndexFreeList.takeLast(); 590 node->m_index = index; 591 ASSERT(!m_nodesByIndex[index]); 592 m_nodesByIndex[index] = node; 593 } 594 570 595 void Graph::deleteNode(Node* node) 571 596 { … … 576 601 } 577 602 } 578 m_nodes.remove(node); 603 604 RELEASE_ASSERT(m_nodesByIndex[node->m_index] == node); 605 unsigned nodeIndex = node->m_index; 606 m_nodesByIndex[nodeIndex] = nullptr; 607 m_nodeIndexFreeList.append(nodeIndex); 608 609 m_allocator.free(node); 579 610 } 580 611 581 612 void Graph::packNodeIndices() 582 613 { 583 m_nodes.packIndices(); 614 if (m_nodeIndexFreeList.isEmpty()) 615 return; 616 617 unsigned holeIndex = 0; 618 unsigned endIndex = m_nodesByIndex.size(); 619 620 while (true) { 621 while (holeIndex < endIndex && m_nodesByIndex[holeIndex]) 622 ++holeIndex; 623 624 if (holeIndex == endIndex) 625 break; 626 ASSERT(holeIndex < m_nodesByIndex.size()); 627 ASSERT(!m_nodesByIndex[holeIndex]); 628 629 do { 630 --endIndex; 631 } while (!m_nodesByIndex[endIndex] && endIndex > holeIndex); 632 633 if (holeIndex == endIndex) 634 break; 635 ASSERT(endIndex > holeIndex); 636 ASSERT(m_nodesByIndex[endIndex]); 637 638 auto& value = m_nodesByIndex[endIndex]; 639 value->m_index = holeIndex; 640 m_nodesByIndex[holeIndex] = WTFMove(value); 641 ++holeIndex; 642 } 643 644 m_nodeIndexFreeList.resize(0); 645 m_nodesByIndex.resize(endIndex); 584 646 } 585 647
Note:
See TracChangeset
for help on using the changeset viewer.