Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "src/compiler/graph-visualizer.h" | 5 #include "src/compiler/graph-visualizer.h" | 
| 6 | 6 | 
| 7 #include <sstream> | 7 #include <sstream> | 
| 8 #include <string> | 8 #include <string> | 
| 9 | 9 | 
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" | 
| (...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 611 return os; | 611 return os; | 
| 612 } | 612 } | 
| 613 | 613 | 
| 614 const int kUnvisited = 0; | 614 const int kUnvisited = 0; | 
| 615 const int kOnStack = 1; | 615 const int kOnStack = 1; | 
| 616 const int kVisited = 2; | 616 const int kVisited = 2; | 
| 617 | 617 | 
| 618 std::ostream& operator<<(std::ostream& os, const AsRPO& ar) { | 618 std::ostream& operator<<(std::ostream& os, const AsRPO& ar) { | 
| 619 base::AccountingAllocator allocator; | 619 base::AccountingAllocator allocator; | 
| 620 Zone local_zone(&allocator); | 620 Zone local_zone(&allocator); | 
| 621 | |
| 622 // Do a post-order depth-first search on the RPO graph. For every node, | |
| 623 // print: | |
| 624 // | |
| 625 // - the node id | |
| 626 // - the operator mnemonic | |
| 627 // - in square brackets its parameter (if present) | |
| 628 // - in parentheses the list of argument ids and their mnemonics | |
| 629 // - the node type (if it is typed) | |
| 630 | |
| 631 // Post-order guarantees that all inputs of a node will be printed before | |
| 632 // the node itself. | |
| 
 
Jarin
2016/06/07 19:35:31
Maybe you should hedge with "(if possible, cycles
 
bgeron
2016/06/08 12:04:56
Done.
 
 | |
| 633 | |
| 621 ZoneVector<byte> state(ar.graph.NodeCount(), kUnvisited, &local_zone); | 634 ZoneVector<byte> state(ar.graph.NodeCount(), kUnvisited, &local_zone); | 
| 622 ZoneStack<Node*> stack(&local_zone); | 635 ZoneStack<Node*> stack(&local_zone); | 
| 623 | 636 | 
| 624 stack.push(ar.graph.end()); | 637 stack.push(ar.graph.end()); | 
| 625 state[ar.graph.end()->id()] = kOnStack; | 638 state[ar.graph.end()->id()] = kOnStack; | 
| 626 while (!stack.empty()) { | 639 while (!stack.empty()) { | 
| 627 Node* n = stack.top(); | 640 Node* n = stack.top(); | 
| 628 bool pop = true; | 641 bool pop = true; | 
| 629 for (Node* const i : n->inputs()) { | 642 for (Node* const i : n->inputs()) { | 
| 630 if (state[i->id()] == kUnvisited) { | 643 if (state[i->id()] == kUnvisited) { | 
| 631 state[i->id()] = kOnStack; | 644 state[i->id()] = kOnStack; | 
| 632 stack.push(i); | 645 stack.push(i); | 
| 633 pop = false; | 646 pop = false; | 
| 634 break; | 647 break; | 
| 635 } | 648 } | 
| 636 } | 649 } | 
| 637 if (pop) { | 650 if (pop) { | 
| 638 state[n->id()] = kVisited; | 651 state[n->id()] = kVisited; | 
| 639 stack.pop(); | 652 stack.pop(); | 
| 640 os << "#" << n->id() << ":" << *n->op() << "("; | 653 os << "#" << n->id() << ":" << *n->op() << "("; | 
| 654 // Print the arguments | |
| 
 
Jarin
2016/06/07 19:35:31
arguments -> inputs.
Please end sentences in comm
 
bgeron
2016/06/08 12:04:56
Done.
 
 | |
| 641 int j = 0; | 655 int j = 0; | 
| 642 for (Node* const i : n->inputs()) { | 656 for (Node* const i : n->inputs()) { | 
| 643 if (j++ > 0) os << ", "; | 657 if (j++ > 0) os << ", "; | 
| 644 os << "#" << SafeId(i) << ":" << SafeMnemonic(i); | 658 os << "#" << SafeId(i) << ":" << SafeMnemonic(i); | 
| 645 } | 659 } | 
| 646 os << ")"; | 660 os << ")"; | 
| 661 // Print the node type, if any | |
| 647 if (NodeProperties::IsTyped(n)) { | 662 if (NodeProperties::IsTyped(n)) { | 
| 648 os << " [Type: "; | 663 os << " [Type: "; | 
| 649 NodeProperties::GetType(n)->PrintTo(os); | 664 NodeProperties::GetType(n)->PrintTo(os); | 
| 650 os << "]"; | 665 os << "]"; | 
| 651 } | 666 } | 
| 652 os << std::endl; | 667 os << std::endl; | 
| 653 } | 668 } | 
| 654 } | 669 } | 
| 655 return os; | 670 return os; | 
| 656 } | 671 } | 
| 657 } // namespace compiler | 672 } // namespace compiler | 
| 658 } // namespace internal | 673 } // namespace internal | 
| 659 } // namespace v8 | 674 } // namespace v8 | 
| OLD | NEW |