Jlm
DotWriter.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2025 Nico Reißmann <nico.reissmann@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #ifndef JLM_RVSDG_DOTWRITER_HPP
7 #define JLM_RVSDG_DOTWRITER_HPP
8 
9 #include <jlm/rvsdg/region.hpp>
10 #include <jlm/util/GraphWriter.hpp>
11 
12 namespace jlm::rvsdg
13 {
14 
15 class DotWriter
16 {
17 public:
18  virtual ~DotWriter() noexcept;
19 
30  util::graph::Graph &
31  WriteGraph(util::graph::Writer & writer, const Region & region);
32 
44  util::graph::Graph &
45  WriteGraphs(util::graph::Writer & writer, const Region & region, bool emitTypeGraph);
46 
47 protected:
48  util::graph::Node &
49  GetOrCreateTypeGraphNode(const Type & type, util::graph::Graph & typeGraph);
50 
51  virtual void
52  AnnotateTypeGraphNode(const Type & type, util::graph::Node & node);
53 
54  virtual void
56  const Node & rvsdgNode,
57  util::graph::Node & node,
58  util::graph::Graph * typeGraph);
59 
60  virtual void
61  AnnotateEdge(const Input & rvsdgInput, util::graph::Edge & edge);
62 
63  virtual void
65  const RegionArgument & regionArgument,
66  util::graph::Node & node,
67  util::graph::Graph * typeGraph);
68 
69 private:
70  void
72  util::graph::Graph & graph,
73  const Region & region,
74  util::graph::Graph * typeGraph,
75  bool traverseRecursively);
76 
77  void
78  AttachNodeInput(util::graph::Port & inputPort, const Input & rvsdgInput);
79 
80  void
82  util::graph::Port & outputPort,
83  const Output & rvsdgOutput,
84  util::graph::Graph * typeGraph);
85 };
86 
87 }
88 
89 #endif
void AttachNodeOutput(util::graph::Port &outputPort, const Output &rvsdgOutput, util::graph::Graph *typeGraph)
Definition: DotWriter.cpp:92
virtual void AnnotateGraphNode(const Node &rvsdgNode, util::graph::Node &node, util::graph::Graph *typeGraph)
Definition: DotWriter.cpp:21
virtual ~DotWriter() noexcept
virtual void AnnotateTypeGraphNode(const Type &type, util::graph::Node &node)
Definition: DotWriter.cpp:17
util::graph::Graph & WriteGraphs(util::graph::Writer &writer, const Region &region, bool emitTypeGraph)
Definition: DotWriter.cpp:198
util::graph::Graph & WriteGraph(util::graph::Writer &writer, const Region &region)
Definition: DotWriter.cpp:217
void AttachNodeInput(util::graph::Port &inputPort, const Input &rvsdgInput)
Definition: DotWriter.cpp:69
virtual void AnnotateRegionArgument(const RegionArgument &regionArgument, util::graph::Node &node, util::graph::Graph *typeGraph)
Definition: DotWriter.cpp:32
virtual void AnnotateEdge(const Input &rvsdgInput, util::graph::Edge &edge)
Definition: DotWriter.cpp:28
void CreateGraphNodes(util::graph::Graph &graph, const Region &region, util::graph::Graph *typeGraph, bool traverseRecursively)
Definition: DotWriter.cpp:112
util::graph::Node & GetOrCreateTypeGraphNode(const Type &type, util::graph::Graph &typeGraph)
Definition: DotWriter.cpp:43
Represents the argument of a region.
Definition: region.hpp:41
Represent acyclic RVSDG subgraphs.
Definition: region.hpp:213
std::string Edge(jlm::rvsdg::Output *output, jlm::rvsdg::Input *input, std::unordered_map< rvsdg::Output *, ViewColors > &tailLabel, bool back_edge=false)
Definition: view.cpp:172
static std::string type(const Node *n)
Definition: view.cpp:255