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 |