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 |