Chromium Code Reviews| Index: src/compiler/visualizer.cc |
| diff --git a/src/compiler/graph-visualizer.cc b/src/compiler/visualizer.cc |
| similarity index 93% |
| rename from src/compiler/graph-visualizer.cc |
| rename to src/compiler/visualizer.cc |
| index 6157b76900118ce49107d39b5de98f2ed43ae84c..b3468734f771b3f08a91bb7cbbec7c84315c7b5f 100644 |
| --- a/src/compiler/graph-visualizer.cc |
| +++ b/src/compiler/visualizer.cc |
| @@ -2,7 +2,7 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -#include "src/compiler/graph-visualizer.h" |
| +#include "src/compiler/visualizer.h" |
| #include <sstream> |
| #include <string> |
| @@ -193,7 +193,7 @@ class JSONGraphEdgeWriter { |
| }; |
| -std::ostream& operator<<(std::ostream& os, const AsJSON& ad) { |
| +std::ostream& operator<<(std::ostream& os, const GraphAsJSON& ad) { |
| Zone tmp_zone; |
| os << "{\n\"nodes\":["; |
| JSONGraphNodeWriter(os, &tmp_zone, &ad.graph, ad.positions).Print(); |
| @@ -819,6 +819,64 @@ std::ostream& operator<<(std::ostream& os, const AsRPO& ar) { |
| } |
| return os; |
| } |
| + |
| + |
| +std::ostream& operator<<(std::ostream& os, const ScheduleAsJSON& aj) { |
|
Michael Starzinger
2015/03/06 17:51:55
Why is this called ScheduleAsJSON, there doesn't s
danno
2015/04/09 13:50:33
Done.
|
| + for (const BasicBlock* block : *(aj.schedule.rpo_order())) { |
| + os << "--- BLOCK B" << block->id(); |
| + if (block->deferred()) os << " (deferred)"; |
| + if (block->PredecessorCount() != 0) os << " <- "; |
| + bool comma = false; |
| + for (BasicBlock const* predecessor : block->predecessors()) { |
| + if (comma) os << ", "; |
| + comma = true; |
| + os << "B" << predecessor->id(); |
| + } |
| + os << " ---\n"; |
| + int previous_pos = -1; |
| + for (Node* node : *block) { |
| + os << " " << *node; |
| + if (NodeProperties::IsTyped(node)) { |
| + Bounds bounds = NodeProperties::GetBounds(node); |
| + os << " : "; |
| + bounds.lower->PrintTo(os); |
| + if (!bounds.upper->Is(bounds.lower)) { |
| + os << ".."; |
| + bounds.upper->PrintTo(os); |
| + } |
| + } |
| + if (aj.positions != NULL) { |
| + SourcePosition p = aj.positions->GetSourcePosition(node); |
|
Michael Starzinger
2015/03/06 17:51:55
I assume the visualizer parses these source positi
danno
2015/04/09 13:50:33
Done.
|
| + int current_pos = p.raw(); |
| + if (current_pos != -1) { |
| + if (current_pos != previous_pos) { |
| + os << " ;; position " << current_pos; |
| + previous_pos = current_pos; |
| + } |
| + } |
| + } |
| + os << "\n"; |
| + } |
| + BasicBlock::Control control = block->control(); |
| + if (control != BasicBlock::kNone) { |
| + os << " "; |
| + if (block->control_input() != NULL) { |
| + os << *block->control_input(); |
| + } else { |
| + os << "Goto"; |
| + } |
| + os << " -> "; |
| + comma = false; |
| + for (BasicBlock const* successor : block->successors()) { |
| + if (comma) os << ", "; |
| + comma = true; |
| + os << "B" << successor->id(); |
| + } |
| + os << "\n"; |
| + } |
| + } |
| + return os; |
| +} |
| } |
| } |
| } // namespace v8::internal::compiler |