54 node.SetProgramObject(type);
77 graph.GetElementFromProgramObject(*
rvsdgInput.origin())))
128 node.SetAttribute(
"index", std::to_string(
n));
131 node.SetLabel(argument.debug_string());
134 if (argument.input())
136 node.SetAttributeObject(
"input", *argument.input());
138 node.AppendToLabel(
util::strfmt(
"<- ", argument.input()->debug_string()),
" ");
165 auto &
subGraph = node.CreateSubgraph();
178 auto & result = *region.
result(
n);
182 node.SetAttribute(
"index", std::to_string(
n));
185 node.SetLabel(result.debug_string());
190 node.SetAttributeObject(
"output", *result.output());
192 node.AppendToLabel(
util::strfmt(
"-> ", result.output()->debug_string()),
" ");
void AttachNodeOutput(util::graph::Port &outputPort, const Output &rvsdgOutput, util::graph::Graph *typeGraph)
virtual void AnnotateGraphNode(const Node &rvsdgNode, util::graph::Node &node, util::graph::Graph *typeGraph)
virtual ~DotWriter() noexcept
virtual void AnnotateTypeGraphNode(const Type &type, util::graph::Node &node)
util::graph::Graph & WriteGraphs(util::graph::Writer &writer, const Region ®ion, bool emitTypeGraph)
util::graph::Graph & WriteGraph(util::graph::Writer &writer, const Region ®ion)
void AttachNodeInput(util::graph::Port &inputPort, const Input &rvsdgInput)
virtual void AnnotateRegionArgument(const RegionArgument ®ionArgument, util::graph::Node &node, util::graph::Graph *typeGraph)
virtual void AnnotateEdge(const Input &rvsdgInput, util::graph::Edge &edge)
void CreateGraphNodes(util::graph::Graph &graph, const Region ®ion, util::graph::Graph *typeGraph, bool traverseRecursively)
util::graph::Node & GetOrCreateTypeGraphNode(const Type &type, util::graph::Graph &typeGraph)
Represents the argument of a region.
Represent acyclic RVSDG subgraphs.
RegionArgument * argument(size_t index) const noexcept
size_t nresults() const noexcept
Id getRegionId() const noexcept
RegionResult * result(size_t index) const noexcept
size_t narguments() const noexcept
virtual std::string debug_string() const =0
void SetProgramObject(const T &object)
void SetLabel(std::string label)
ArgumentNode & CreateArgumentNode()
ResultNode & CreateResultNode()
InOutNode & CreateInOutNode(size_t inputPorts, size_t outputPorts)
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
static std::string strfmt(Args... args)