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