17 const rvsdg::Region * region,
19 std::unordered_map<const Output *, std::string> &);
24 return std::string(depth * 2,
' ');
30 std::unordered_map<const Output *, std::string> & map)
41 std::unordered_map<const Output *, std::string> & map)
43 std::string s(
indent(depth));
44 for (
size_t n = 0; n < node->
noutputs(); n++)
47 map[node->
output(n)] = name;
53 for (
size_t n = 0; n < node->
ninputs(); n++)
63 for (
size_t n = 0; n < snode->nsubregions(); n++)
73 std::string header(
"[");
74 for (
size_t n = 0; n < region->
narguments(); n++)
78 map[argument] = pname;
81 if (argument->input())
84 if (n < region->narguments() - 1)
96 std::unordered_map<const Output *, std::string> & map)
110 std::string footer(
"}[");
111 for (
size_t n = 0; n < region->
nresults(); n++)
113 auto result = region->
result(n);
114 auto pname = map[result->origin()];
116 if (result->output())
117 footer += map[result->output()] +
" <= ";
120 if (n < region->nresults() - 1)
132 std::unordered_map<const Output *, std::string> & map)
144 std::unordered_map<const Output *, std::string> map;
145 return view(region, map);
157 fputs(
view(region).c_str(), out);
163 static inline std::string
166 return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
170 static inline std::string
176 static inline std::string
182 static inline std::string
188 static inline std::string
194 static inline std::string
200 static inline std::string
203 return "<argument id=\"" +
id +
"\"/>\n";
206 static inline std::string
209 return "<result id=\"" +
id +
"\"/>\n";
212 static inline std::string
215 return "<input id=\"" +
id +
"\"/>\n";
218 static inline std::string
221 return "<output id=\"" +
id +
"\"/>\n";
224 static inline std::string
227 return "<node id=\"" +
id +
"\" name=\"" + name +
"\" type=\"" +
type +
"\">\n";
230 static inline std::string
236 static inline std::string
239 return "<region id=\"" +
id +
"\">\n";
242 static inline std::string
245 return "</region>\n";
248 static inline std::string
249 edge_tag(
const std::string & srcid,
const std::string & dstid)
251 return "<edge source=\"" + srcid +
"\" target=\"" + dstid +
"\"/>\n";
254 static inline std::string
269 static inline std::string
275 for (
size_t n = 0; n < node->
ninputs(); n++)
277 for (
size_t n = 0; n < node->
noutputs(); n++)
281 for (
size_t n = 0; n < node->
noutputs(); n++)
283 auto output = node->
output(n);
284 for (
const auto & user : output->Users())
285 s +=
edge_tag(
id(output),
id(&user));
291 static inline std::string
297 for (
size_t n = 0; n < node->
ninputs(); n++)
299 for (
size_t n = 0; n < node->
noutputs(); n++)
306 for (
size_t n = 0; n < node->
noutputs(); n++)
308 auto output = node->
output(n);
309 for (
const auto & user : output->Users())
310 s +=
edge_tag(
id(output),
id(&user));
316 static inline std::string
319 if (
auto n =
dynamic_cast<const SimpleNode *
>(node))
329 static inline std::string
335 for (
size_t n = 0; n < region->
narguments(); n++)
338 for (
const auto & node : region->
Nodes())
341 for (
size_t n = 0; n < region->
nresults(); n++)
344 for (
size_t n = 0; n < region->
narguments(); n++)
346 auto argument = region->
argument(n);
347 for (
const auto & user : argument->Users())
348 s +=
edge_tag(
id(argument),
id(&user));
371 fputs(
to_xml(region).c_str(), out);
Conditional operator / pattern matching.
virtual std::string DebugString() const =0
NodeInput * input(size_t index) const noexcept
NodeOutput * output(size_t index) const noexcept
size_t ninputs() const noexcept
size_t noutputs() const noexcept
Represents the argument of a region.
Represent acyclic RVSDG subgraphs.
RegionResult * result(size_t index) const noexcept
size_t nresults() const noexcept
RegionArgument * argument(size_t index) const noexcept
NodeRange Nodes() noexcept
size_t narguments() const noexcept
std::string DebugString() const override
NodeInput * input(size_t index) const noexcept
NodeOutput * output(size_t index) const noexcept
size_t nsubregions() const noexcept
StructuralOutput * output(size_t index) const noexcept
StructuralInput * input(size_t index) const noexcept
rvsdg::Region * subregion(size_t index) const noexcept
static std::string convert_node(const Node *node)
static std::string region_header(const rvsdg::Region *region, std::unordered_map< const Output *, std::string > &map)
static std::string indent(size_t depth)
static std::string node_endtag()
static std::string node_to_string(const Node *node, size_t depth, std::unordered_map< const Output *, std::string > &map)
static std::string region_starttag(const std::string &id)
static std::string region_footer(const rvsdg::Region *region, std::unordered_map< const Output *, std::string > &map)
static std::string output_tag(const std::string &id)
static std::string region_to_string(const rvsdg::Region *region, size_t depth, std::unordered_map< const Output *, std::string > &)
static std::string input_tag(const std::string &id)
static std::string type(const Node *n)
detail::TopDownTraverserGeneric< true > TopDownConstTraverser
Traverser for visiting every node in a const region in a top down order.
std::string view(const rvsdg::Region *region)
static std::string node_starttag(const std::string &id, const std::string &name, const std::string &type)
static std::string region_body(const Region *region, const size_t depth, std::unordered_map< const Output *, std::string > &map)
static std::string id(const jlm::rvsdg::Output *port)
static std::string convert_simple_node(const jlm::rvsdg::SimpleNode *node)
static std::string convert_region(const jlm::rvsdg::Region *region)
std::string to_xml(const rvsdg::Region *region)
static std::string argument_tag(const std::string &id)
static std::string xml_header()
static std::string result_tag(const std::string &id)
static std::string region_endtag(const std::string &)
size_t ninputs(const rvsdg::Region *region) noexcept
static std::string edge_tag(const std::string &srcid, const std::string &dstid)
static std::string xml_footer()
static std::string convert_structural_node(const rvsdg::StructuralNode *node)
void view_xml(const rvsdg::Region *region, FILE *out)
static std::string create_port_name(const jlm::rvsdg::Output *port, std::unordered_map< const Output *, std::string > &map)
static std::string strfmt(Args... args)