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
3 // found in the LICENSE file.
4 
5 #ifndef V8_COMPILER_GRAPH_VISUALIZER_H_
6 #define V8_COMPILER_GRAPH_VISUALIZER_H_
7 
8 #include <stdio.h>
9 #include <iosfwd>
10 
11 namespace v8 {
12 namespace internal {
13 
14 class CompilationInfo;
15 
16 namespace compiler {
17 
18 class Graph;
19 class InstructionSequence;
20 class RegisterAllocationData;
21 class Schedule;
22 class SourcePositionTable;
23 
24 FILE* OpenVisualizerLogFile(CompilationInfo* info, const char* phase,
25                             const char* suffix, const char* mode);
26 
27 struct AsJSON {
AsJSONAsJSON28   AsJSON(const Graph& g, SourcePositionTable* p) : graph(g), positions(p) {}
29   const Graph& graph;
30   const SourcePositionTable* positions;
31 };
32 
33 std::ostream& operator<<(std::ostream& os, const AsJSON& ad);
34 
35 struct AsRPO {
AsRPOAsRPO36   explicit AsRPO(const Graph& g) : graph(g) {}
37   const Graph& graph;
38 };
39 
40 std::ostream& operator<<(std::ostream& os, const AsRPO& ad);
41 
42 
43 struct AsC1VCompilation {
AsC1VCompilationAsC1VCompilation44   explicit AsC1VCompilation(const CompilationInfo* info) : info_(info) {}
45   const CompilationInfo* info_;
46 };
47 
48 
49 struct AsC1V {
50   AsC1V(const char* phase, const Schedule* schedule,
51         const SourcePositionTable* positions = nullptr,
52         const InstructionSequence* instructions = nullptr)
schedule_AsC1V53       : schedule_(schedule),
54         instructions_(instructions),
55         positions_(positions),
56         phase_(phase) {}
57   const Schedule* schedule_;
58   const InstructionSequence* instructions_;
59   const SourcePositionTable* positions_;
60   const char* phase_;
61 };
62 
63 struct AsC1VRegisterAllocationData {
64   explicit AsC1VRegisterAllocationData(
65       const char* phase, const RegisterAllocationData* data = nullptr)
phase_AsC1VRegisterAllocationData66       : phase_(phase), data_(data) {}
67   const char* phase_;
68   const RegisterAllocationData* data_;
69 };
70 
71 std::ostream& operator<<(std::ostream& os, const AsC1VCompilation& ac);
72 std::ostream& operator<<(std::ostream& os, const AsC1V& ac);
73 std::ostream& operator<<(std::ostream& os,
74                          const AsC1VRegisterAllocationData& ac);
75 
76 }  // namespace compiler
77 }  // namespace internal
78 }  // namespace v8
79 
80 #endif  // V8_COMPILER_GRAPH_VISUALIZER_H_
81