Jlm
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 
13 namespace jlm::rvsdg
14 {
15 
20 {
21 public:
22  GraphImport(Graph & graph, std::shared_ptr<const rvsdg::Type> type, std::string name);
23 
24  [[nodiscard]] const std::string &
25  Name() const noexcept
26  {
27  return Name_;
28  }
29 
30  [[nodiscard]] std::string
31  debug_string() const override;
32 
33  GraphImport &
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 
39 private:
40  std::string Name_;
41 };
42 
46 class GraphExport : public RegionResult
47 {
48 protected:
49  GraphExport(Output & origin, std::string name);
50 
51 public:
52  [[nodiscard]] const std::string &
53  Name() const noexcept
54  {
55  return Name_;
56  }
57 
58  [[nodiscard]] std::string
59  debug_string() const override;
60 
61  GraphExport &
62  Copy(Output & origin, StructuralOutput * output) const override;
63 
64  static GraphExport &
65  Create(Output & origin, std::string name);
66 
67 private:
68  std::string Name_;
69 };
70 
74 class Graph final
75 {
76 public:
77  ~Graph() noexcept;
78 
79  Graph();
80 
87  [[nodiscard]] Region::Id
88  generateRegionId() noexcept
89  {
90  const auto regionId = nextRegionId_;
91  nextRegionId_++;
92  return regionId;
93  }
94 
98  [[nodiscard]] Region &
99  GetRootRegion() const noexcept
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 
133 private:
135  std::unique_ptr<Region> RootRegion_;
136 };
137 
138 }
139 
140 #endif
const std::string & Name() const noexcept
Definition: graph.hpp:53
std::string Name_
Definition: graph.hpp:68
std::string debug_string() const override
Definition: graph.cpp:49
static GraphExport & Create(Output &origin, std::string name)
Definition: graph.cpp:62
GraphExport & Copy(Output &origin, StructuralOutput *output) const override
Definition: graph.cpp:55
GraphExport(Output &origin, std::string name)
Definition: graph.cpp:43
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
const std::string & Name() const noexcept
Definition: graph.hpp:25
std::string debug_string() const override
Definition: graph.cpp:22
GraphImport(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
Definition: graph.cpp:16
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
void PruneNodes()
Definition: graph.hpp:116
~Graph() noexcept
std::unique_ptr< Graph > Copy() const
Definition: graph.cpp:79
Region & GetRootRegion() const noexcept
Definition: graph.hpp:99
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:323
static std::string type(const Node *n)
Definition: view.cpp:255