Changeset 208367 in webkit for trunk/Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp
- Timestamp:
- Nov 3, 2016, 9:38:58 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp
r208364 r208367 42 42 InPlaceAbstractState::InPlaceAbstractState(Graph& graph) 43 43 : m_graph(graph) 44 , m_abstractValues( *graph.m_abstractValuesCache)44 , m_abstractValues(graph.abstractValuesCache()) 45 45 , m_variables(m_graph.m_codeBlock->numParameters(), graph.m_localVars) 46 46 , m_block(0) … … 58 58 ASSERT(basicBlock->variablesAtHead.numberOfLocals() == basicBlock->variablesAtTail.numberOfLocals()); 59 59 60 m_abstractValues.resize(); 61 62 for (size_t i = 0; i < basicBlock->size(); i++) { 63 NodeFlowProjection::forEach( 64 basicBlock->at(i), [&] (NodeFlowProjection nodeProjection) { 65 forNode(nodeProjection).clear(); 66 }); 67 } 60 // Certain phases insert nodes in a block after running through it. 61 // We cannot reserve the space for AbstractValues when initializing AbstractState because the number of values 62 // can increase as we execute. Instead, we increase the size as needed before processing each block. 63 m_abstractValues.resize(m_graph.maxNodeCount()); 64 65 for (size_t i = 0; i < basicBlock->size(); i++) 66 forNode(basicBlock->at(i)).clear(); 68 67 69 68 m_variables = basicBlock->valuesAtHead; 70 69 71 70 if (m_graph.m_form == SSA) { 72 for (NodeAbstractValuePair& entry : basicBlock->ssa->valuesAtHead) { 73 if (entry.node.isStillValid()) 74 forNode(entry.node) = entry.value; 75 } 71 for (auto& entry : basicBlock->ssa->valuesAtHead) 72 forNode(entry.node) = entry.value; 76 73 } 77 74 basicBlock->cfaShouldRevisit = false; … … 84 81 } 85 82 86 static void setLiveValues(Vector< NodeAbstractValuePair>& values, const Vector<NodeFlowProjection>& live)83 static void setLiveValues(Vector<BasicBlock::SSAData::NodeAbstractValuePair>& values, const Vector<Node*>& live) 87 84 { 88 85 values.resize(0); 89 86 values.reserveCapacity(live.size()); 90 for (Node FlowProjectionnode : live)91 values.uncheckedAppend( NodeAbstractValuePair { node, AbstractValue() });87 for (Node* node : live) 88 values.uncheckedAppend(BasicBlock::SSAData::NodeAbstractValuePair { node, AbstractValue() }); 92 89 } 93 90 … … 203 200 block->valuesAtTail[i].merge(m_variables[i]); 204 201 205 for ( NodeAbstractValuePair& valueAtTail : block->ssa->valuesAtTail) {202 for (auto& valueAtTail : block->ssa->valuesAtTail) { 206 203 AbstractValue& valueAtNode = forNode(valueAtTail.node); 207 204 valueAtTail.value.merge(valueAtNode); … … 295 292 changed |= to->valuesAtHead[i].merge(from->valuesAtTail[i]); 296 293 297 for ( NodeAbstractValuePair& entry : to->ssa->valuesAtHead) {298 Node FlowProjectionnode = entry.node;294 for (auto& entry : to->ssa->valuesAtHead) { 295 Node* node = entry.node; 299 296 if (verbose) 300 297 dataLog(" Merging for ", node, ": from ", forNode(node), " to ", entry.value, "\n"); 301 298 #ifndef NDEBUG 302 299 unsigned valueCountInFromBlock = 0; 303 for ( NodeAbstractValuePair& fromBlockValueAtTail : from->ssa->valuesAtTail) {300 for (auto& fromBlockValueAtTail : from->ssa->valuesAtTail) { 304 301 if (fromBlockValueAtTail.node == node) { 305 302 ASSERT(fromBlockValueAtTail.value == forNode(node));
Note:
See TracChangeset
for help on using the changeset viewer.