18 turboshaft_graph_(turboshaft_graph),
22 os_ <<
"{\n\"nodes\":[";
24 os_ <<
"\n],\n\"edges\":[";
26 os_ <<
"\n],\n\"blocks\":[";
36 if (!first)
os_ <<
",\n";
38 os_ <<
"{\"id\":" << index.id() <<
",";
40 os_ <<
"\"block_id\":" << block.index().id() <<
",";
41 os_ <<
"\"op_effects\":\"" << op.Effects() <<
"\"";
65 if (
auto* store = op.TryCast<
StoreOp>()) {
66 if (store->index().valid()) {
68 inputs = {store->base(), store->index().value_or_invalid(),
73 if (!first)
os_ <<
",\n";
75 os_ <<
"{\"source\":" << input.id() <<
",";
76 os_ <<
"\"target\":" << target_id <<
"}";
83 bool first_block =
true;
85 if (!first_block)
os_ <<
",\n";
87 os_ <<
"{\"id\":" << block.index().id() <<
",";
88 os_ <<
"\"type\":\"" << block.kind() <<
"\",";
89 os_ <<
"\"predecessors\":[";
90 bool first_predecessor =
true;
92 if (!first_predecessor)
os_ <<
", ";
93 first_predecessor =
false;
94 os_ << pred->index().id();
108 std::ofstream& stream,
const char* data_name,
const Graph& graph,
109 std::function<
bool(std::ostream&,
const Graph&,
OpIndex)> printer) {
111 stream <<
"{\"name\":\"" << data_name
112 <<
"\", \"type\":\"turboshaft_custom_data\", "
113 "\"data_target\":\"operations\", \"data\":[";
115 for (
auto index : graph.AllOperationIndices()) {
116 std::stringstream sstream;
117 if (printer(sstream, graph, index)) {
118 stream << (first ?
"\n" :
",\n") <<
"{\"key\":" << index.id()
119 <<
", \"value\":\"" << sstream.str() <<
"\"}";
127 std::ofstream& stream,
const char* data_name,
const Graph& graph,
128 std::function<
bool(std::ostream&,
const Graph&,
BlockIndex)> printer) {
130 stream <<
"{\"name\":\"" << data_name
131 <<
"\", \"type\":\"turboshaft_custom_data\", "
132 "\"data_target\":\"blocks\", \"data\":[";
134 for (
const Block& block : graph.blocks()) {
135 std::stringstream sstream;
137 if (printer(sstream, graph, index)) {
138 stream << (first ?
"\n" :
",\n") <<
"{\"key\":" << index.id()
139 <<
", \"value\":\"" << sstream.str() <<
"\"}";
NodeOrigin GetNodeOrigin(Node *node) const
base::SmallVector< Block *, 8 > Predecessors() const
NodeOriginTable * origins_
JSONTurboshaftGraphWriter(std::ostream &os, const Graph &turboshaft_graph, NodeOriginTable *origins, Zone *zone)
const Graph & turboshaft_graph_
NodeOriginTable * origins
std::ostream & operator<<(std::ostream &os, PaddingSpace padding)
const char * OpcodeName(Opcode opcode)
V8_INLINE V8_EXPORT_PRIVATE TurboshaftGraphAsJSON AsJSON(const Graph &graph, NodeOriginTable *origins, Zone *temp_zone)
void PrintTurboshaftCustomDataPerBlock(std::ofstream &stream, const char *data_name, const Graph &graph, std::function< bool(std::ostream &, const Graph &, BlockIndex)> printer)
void PrintTurboshaftCustomDataPerOperation(std::ofstream &stream, const char *data_name, const Graph &graph, std::function< bool(std::ostream &, const Graph &, OpIndex)> printer)
V8_INLINE V8_EXPORT_PRIVATE SourcePositionAsJSON AsJSON(const SourcePosition &sp)
#define DCHECK(condition)
#define DCHECK_EQ(v1, v2)
const Graph & turboshaft_graph
NodeOriginTable * origins