Jlm
Loading...
Searching...
No Matches
graph.hpp
Go to the documentation of this file.
1/*
2 * Copyright 2010 2011 2012 2013 2014 Helge Bahmann <hcb@chaoticmind.net>
3 * Copyright 2011 2012 2013 2014 2015 2016 Nico Reißmann <nico.reissmann@gmail.com>
4 * See COPYING for terms of redistribution.
5 */
6
7#ifndef JLM_RVSDG_GRAPH_HPP
8#define JLM_RVSDG_GRAPH_HPP
9
10#include <jlm/rvsdg/node.hpp>
11#include <jlm/rvsdg/region.hpp>
12
13namespace jlm::rvsdg
14{
15
20{
21public:
22 GraphImport(Graph & graph, std::shared_ptr<const rvsdg::Type> type, std::string name);
23
24 [[nodiscard]] const std::string &
26 {
27 return Name_;
28 }
29
30 [[nodiscard]] std::string
31 debug_string() const override;
32
34 Copy(Region & region, StructuralInput * input) const override;
35
36 static GraphImport &
37 Create(Graph & graph, std::shared_ptr<const rvsdg::Type> type, std::string name);
38
39private:
40 std::string Name_;
41};
42
47{
48protected:
49 GraphExport(Output & origin, std::string name);
50
51public:
52 [[nodiscard]] const std::string &
54 {
55 return Name_;
56 }
57
58 [[nodiscard]] std::string
59 debug_string() const override;
60
62 Copy(Output & origin, StructuralOutput * output) const override;
63
64 static GraphExport &
65 Create(Output & origin, std::string name);
66
67private:
68 std::string Name_;
69};
70
75{
76public:
78
79 Graph();
80
87 [[nodiscard]] Region::Id
89 {
90 const auto regionId = nextRegionId_;
92 return regionId;
93 }
94
98 [[nodiscard]] Region &
100 {
101 return *RootRegion_;
102 }
103
107 [[nodiscard]] std::unique_ptr<Graph>
108 Copy() const;
109
115 void
117 {
118 GetRootRegion().prune(true);
119 }
120
130 static std::vector<Node *>
131 ExtractTailNodes(const Graph & rvsdg);
132
133private:
135 std::unique_ptr<Region> RootRegion_;
136};
137
138}
139
140#endif
std::string Name_
Definition graph.hpp:68
std::string debug_string() const override
Definition graph.cpp:49
const std::string & Name() const noexcept
Definition graph.hpp:53
static GraphExport & Create(Output &origin, std::string name)
Definition graph.cpp:62
GraphExport & Copy(Output &origin, StructuralOutput *output) const override
Definition graph.cpp:55
GraphImport & Copy(Region &region, StructuralInput *input) const override
Definition graph.cpp:28
static GraphImport & Create(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
Definition graph.cpp:36
std::string Name_
Definition graph.hpp:40
std::string debug_string() const override
Definition graph.cpp:22
const std::string & Name() const noexcept
Definition graph.hpp:25
Region::Id nextRegionId_
Definition graph.hpp:134
static std::vector< Node * > ExtractTailNodes(const Graph &rvsdg)
Definition graph.cpp:105
std::unique_ptr< Region > RootRegion_
Definition graph.hpp:135
Region::Id generateRegionId() noexcept
Definition graph.hpp:88
Region & GetRootRegion() const noexcept
Definition graph.hpp:99
void PruneNodes()
Definition graph.hpp:116
~Graph() noexcept
std::unique_ptr< Graph > Copy() const
Definition graph.cpp:79
Output * origin() const noexcept
Definition node.hpp:58
rvsdg::Region * region() const noexcept
Definition node.cpp:151
Represents the argument of a region.
Definition region.hpp:41
StructuralInput * input() const noexcept
Definition region.hpp:69
Represents the result of a region.
Definition region.hpp:120
StructuralOutput * output() const noexcept
Definition region.hpp:149
Represent acyclic RVSDG subgraphs.
Definition region.hpp:213
void prune(bool recursive)
Definition region.cpp:326
NodeType * TryGetOwnerNode(const rvsdg::Input &input) noexcept
Checks if this is an input to a node of specified type.
Definition node.hpp:872