Changeset 208364 in webkit for trunk/Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp
- Timestamp:
- Nov 3, 2016, 7:37:45 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.cpp
r207475 r208364 42 42 InPlaceAbstractState::InPlaceAbstractState(Graph& graph) 43 43 : m_graph(graph) 44 , m_abstractValues( graph.abstractValuesCache())44 , m_abstractValues(*graph.m_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 // 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(); 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 } 67 68 68 69 m_variables = basicBlock->valuesAtHead; 69 70 70 71 if (m_graph.m_form == SSA) { 71 for (auto& entry : basicBlock->ssa->valuesAtHead) 72 forNode(entry.node) = entry.value; 72 for (NodeAbstractValuePair& entry : basicBlock->ssa->valuesAtHead) { 73 if (entry.node.isStillValid()) 74 forNode(entry.node) = entry.value; 75 } 73 76 } 74 77 basicBlock->cfaShouldRevisit = false; … … 81 84 } 82 85 83 static void setLiveValues(Vector< BasicBlock::SSAData::NodeAbstractValuePair>& values, const Vector<Node*>& live)86 static void setLiveValues(Vector<NodeAbstractValuePair>& values, const Vector<NodeFlowProjection>& live) 84 87 { 85 88 values.resize(0); 86 89 values.reserveCapacity(live.size()); 87 for (Node *node : live)88 values.uncheckedAppend( BasicBlock::SSAData::NodeAbstractValuePair { node, AbstractValue() });90 for (NodeFlowProjection node : live) 91 values.uncheckedAppend(NodeAbstractValuePair { node, AbstractValue() }); 89 92 } 90 93 … … 200 203 block->valuesAtTail[i].merge(m_variables[i]); 201 204 202 for ( auto& valueAtTail : block->ssa->valuesAtTail) {205 for (NodeAbstractValuePair& valueAtTail : block->ssa->valuesAtTail) { 203 206 AbstractValue& valueAtNode = forNode(valueAtTail.node); 204 207 valueAtTail.value.merge(valueAtNode); … … 292 295 changed |= to->valuesAtHead[i].merge(from->valuesAtTail[i]); 293 296 294 for ( auto& entry : to->ssa->valuesAtHead) {295 Node *node = entry.node;297 for (NodeAbstractValuePair& entry : to->ssa->valuesAtHead) { 298 NodeFlowProjection node = entry.node; 296 299 if (verbose) 297 300 dataLog(" Merging for ", node, ": from ", forNode(node), " to ", entry.value, "\n"); 298 301 #ifndef NDEBUG 299 302 unsigned valueCountInFromBlock = 0; 300 for ( auto& fromBlockValueAtTail : from->ssa->valuesAtTail) {303 for (NodeAbstractValuePair& fromBlockValueAtTail : from->ssa->valuesAtTail) { 301 304 if (fromBlockValueAtTail.node == node) { 302 305 ASSERT(fromBlockValueAtTail.value == forNode(node));
Note:
See TracChangeset
for help on using the changeset viewer.