Changeset 120834 in webkit for trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp
- Timestamp:
- Jun 20, 2012, 10:48:23 AM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGGraph.cpp
r120499 r120834 90 90 } 91 91 92 void Graph::dumpCodeOrigin( NodeIndex prevNodeIndex, NodeIndex nodeIndex)92 void Graph::dumpCodeOrigin(const char* prefix, NodeIndex prevNodeIndex, NodeIndex nodeIndex) 93 93 { 94 94 if (prevNodeIndex == NoNode) … … 113 113 // Print the pops. 114 114 for (unsigned i = previousInlineStack.size(); i-- > indexOfDivergence;) { 115 dataLog("%s", prefix); 115 116 printWhiteSpace(i * 2); 116 117 dataLog("<-- %p\n", previousInlineStack[i].inlineCallFrame->executable.get()); … … 119 120 // Print the pushes. 120 121 for (unsigned i = indexOfDivergence; i < currentInlineStack.size(); ++i) { 122 dataLog("%s", prefix); 121 123 printWhiteSpace(i * 2); 122 124 dataLog("--> %p\n", currentInlineStack[i].inlineCallFrame->executable.get()); … … 124 126 } 125 127 126 void Graph::dump(NodeIndex nodeIndex) 128 int Graph::amountOfNodeWhiteSpace(Node& node) 129 { 130 return (node.codeOrigin.inlineDepth() - 1) * 2; 131 } 132 133 void Graph::printNodeWhiteSpace(Node& node) 134 { 135 printWhiteSpace(amountOfNodeWhiteSpace(node)); 136 } 137 138 void Graph::dump(const char* prefix, NodeIndex nodeIndex) 127 139 { 128 140 Node& node = at(nodeIndex); … … 135 147 --refCount; 136 148 137 printWhiteSpace((node.codeOrigin.inlineDepth() - 1) * 2); 149 dataLog("%s", prefix); 150 printNodeWhiteSpace(node); 138 151 139 152 // Example/explanation of dataflow dump output … … 289 302 } 290 303 304 void Graph::dumpBlockHeader(const char* prefix, BlockIndex blockIndex, PhiNodeDumpMode phiNodeDumpMode) 305 { 306 BasicBlock* block = m_blocks[blockIndex].get(); 307 308 dataLog("%sBlock #%u (bc#%u): %s%s\n", prefix, (int)blockIndex, block->bytecodeBegin, block->isReachable ? "" : " (skipped)", block->isOSRTarget ? " (OSR target)" : ""); 309 dataLog("%s Predecessors:", prefix); 310 for (size_t i = 0; i < block->m_predecessors.size(); ++i) 311 dataLog(" #%u", block->m_predecessors[i]); 312 dataLog("\n"); 313 if (m_dominators.isValid()) { 314 dataLog("%s Dominated by:", prefix); 315 for (size_t i = 0; i < m_blocks.size(); ++i) { 316 if (!m_dominators.dominates(i, blockIndex)) 317 continue; 318 dataLog(" #%lu", static_cast<unsigned long>(i)); 319 } 320 dataLog("\n"); 321 dataLog("%s Dominates:", prefix); 322 for (size_t i = 0; i < m_blocks.size(); ++i) { 323 if (!m_dominators.dominates(blockIndex, i)) 324 continue; 325 dataLog(" #%lu", static_cast<unsigned long>(i)); 326 } 327 dataLog("\n"); 328 } 329 dataLog("%s Phi Nodes:", prefix); 330 unsigned count = 0; 331 for (size_t i = 0; i < block->phis.size(); ++i) { 332 NodeIndex phiNodeIndex = block->phis[i]; 333 Node& phiNode = at(phiNodeIndex); 334 if (!phiNode.shouldGenerate() && phiNodeDumpMode == DumpLivePhisOnly) 335 continue; 336 if (!((++count) % 4)) 337 dataLog("\n%s ", prefix); 338 dataLog(" @%u->(", phiNodeIndex); 339 if (phiNode.child1()) { 340 dataLog("@%u", phiNode.child1().index()); 341 if (phiNode.child2()) { 342 dataLog(", @%u", phiNode.child2().index()); 343 if (phiNode.child3()) 344 dataLog(", @%u", phiNode.child3().index()); 345 } 346 } 347 dataLog(")%s", i + 1 < block->phis.size() ? "," : ""); 348 } 349 dataLog("\n"); 350 } 351 291 352 void Graph::dump() 292 353 { … … 296 357 if (!block) 297 358 continue; 298 dataLog("Block #%u (bc#%u): %s%s\n", (int)b, block->bytecodeBegin, block->isReachable ? "" : " (skipped)", block->isOSRTarget ? " (OSR target)" : ""); 299 dataLog(" Predecessors:"); 300 for (size_t i = 0; i < block->m_predecessors.size(); ++i) 301 dataLog(" #%u", block->m_predecessors[i]); 302 dataLog("\n"); 303 if (m_dominators.isValid()) { 304 dataLog(" Dominated by:"); 305 for (size_t i = 0; i < m_blocks.size(); ++i) { 306 if (!m_dominators.dominates(i, b)) 307 continue; 308 dataLog(" #%lu", static_cast<unsigned long>(i)); 309 } 310 dataLog("\n"); 311 dataLog(" Dominates:"); 312 for (size_t i = 0; i < m_blocks.size(); ++i) { 313 if (!m_dominators.dominates(b, i)) 314 continue; 315 dataLog(" #%lu", static_cast<unsigned long>(i)); 316 } 317 dataLog("\n"); 318 } 319 dataLog(" Phi Nodes:\n"); 320 for (size_t i = 0; i < block->phis.size(); ++i) { 321 dumpCodeOrigin(lastNodeIndex, block->phis[i]); 322 dump(block->phis[i]); 323 lastNodeIndex = block->phis[i]; 324 } 359 dumpBlockHeader("", b, DumpAllPhis); 325 360 dataLog(" vars before: "); 326 361 if (block->cfaHasVisited) … … 333 368 dataLog("\n"); 334 369 for (size_t i = 0; i < block->size(); ++i) { 335 dumpCodeOrigin( lastNodeIndex, block->at(i));336 dump( block->at(i));370 dumpCodeOrigin("", lastNodeIndex, block->at(i)); 371 dump("", block->at(i)); 337 372 lastNodeIndex = block->at(i); 338 373 }
Note:
See TracChangeset
for help on using the changeset viewer.