Jlm
RvsdgModule.hpp
Go to the documentation of this file.
1 /*
2  * Copyright 2017 Nico Reißmann <nico.reissmann@gmail.com>
3  * See COPYING for terms of redistribution.
4  */
5 
6 #ifndef JLM_LLVM_IR_RVSDGMODULE_HPP
7 #define JLM_LLVM_IR_RVSDGMODULE_HPP
8 
10 #include <jlm/llvm/ir/types.hpp>
12 #include <jlm/util/file.hpp>
13 
14 namespace jlm::llvm
15 {
16 
21 class LlvmGraphImport final : public rvsdg::GraphImport
22 {
24  rvsdg::Graph & graph,
25  std::shared_ptr<const rvsdg::Type> valueType,
26  std::shared_ptr<const rvsdg::Type> importedType,
27  std::string name,
29  bool isConstant)
30  : rvsdg::GraphImport(graph, importedType, std::move(name)),
31  ValueType_(std::move(valueType)),
32  ImportedType_(std::move(importedType)),
33  Linkage_(std::move(linkage)),
35  {}
36 
37 public:
38  [[nodiscard]] const Linkage &
39  linkage() const noexcept
40  {
41  return Linkage_;
42  }
43 
44  [[nodiscard]] bool
45  isConstant() const noexcept
46  {
47  return isConstant_;
48  }
49 
57  [[nodiscard]] const std::shared_ptr<const jlm::rvsdg::Type> &
58  ValueType() const noexcept
59  {
60  return ValueType_;
61  }
62 
71  [[nodiscard]] const std::shared_ptr<const jlm::rvsdg::Type> &
72  ImportedType() const noexcept
73  {
74  return ImportedType_;
75  }
76 
79 
80  static LlvmGraphImport &
82  rvsdg::Graph & graph,
83  std::shared_ptr<const rvsdg::Type> valueType,
84  std::shared_ptr<const rvsdg::Type> importedType,
85  std::string name,
87  bool isConstant = false)
88  {
89  auto graphImport = new LlvmGraphImport(
90  graph,
91  std::move(valueType),
92  std::move(importedType),
93  std::move(name),
94  std::move(linkage),
95  isConstant);
96  graph.GetRootRegion().addArgument(std::unique_ptr<RegionArgument>(graphImport));
97  return *graphImport;
98  }
99 
100 private:
101  std::shared_ptr<const rvsdg::Type> ValueType_;
102  std::shared_ptr<const rvsdg::Type> ImportedType_;
105 };
106 
111 {
112 public:
113  ~LlvmRvsdgModule() noexcept override = default;
114 
115  LlvmRvsdgModule(util::FilePath sourceFileName, std::string targetTriple, std::string dataLayout)
116  : RvsdgModule(std::move(sourceFileName)),
117  DataLayout_(std::move(dataLayout)),
118  TargetTriple_(std::move(targetTriple))
119  {}
120 
122  util::FilePath sourceFileName,
123  std::string targetTriple,
124  std::string dataLayout,
125  std::unique_ptr<rvsdg::Graph> rvsdg)
126  : RvsdgModule(std::move(sourceFileName), std::move(rvsdg)),
127  DataLayout_(std::move(dataLayout)),
128  TargetTriple_(std::move(targetTriple))
129  {}
130 
131  LlvmRvsdgModule(const LlvmRvsdgModule &) = delete;
132 
134 
136  operator=(const LlvmRvsdgModule &) = delete;
137 
140 
141  std::unique_ptr<RvsdgModule>
142  copy() const override;
143 
144  [[nodiscard]] const util::FilePath &
145  SourceFileName() const noexcept
146  {
147  return SourceFilePath().value();
148  }
149 
150  [[nodiscard]] const std::string &
151  TargetTriple() const noexcept
152  {
153  return TargetTriple_;
154  }
155 
156  [[nodiscard]] const std::string &
157  DataLayout() const noexcept
158  {
159  return DataLayout_;
160  }
161 
162  static std::unique_ptr<LlvmRvsdgModule>
164  const util::FilePath & sourceFileName,
165  const std::string & targetTriple,
166  const std::string & dataLayout)
167  {
168  return std::make_unique<LlvmRvsdgModule>(sourceFileName, targetTriple, dataLayout);
169  }
170 
171 private:
172  std::string DataLayout_;
173  std::string TargetTriple_;
174 };
175 
176 }
177 
178 #endif
const std::shared_ptr< const jlm::rvsdg::Type > & ImportedType() const noexcept
Definition: RvsdgModule.hpp:72
const std::shared_ptr< const jlm::rvsdg::Type > & ValueType() const noexcept
Definition: RvsdgModule.hpp:58
bool isConstant() const noexcept
Definition: RvsdgModule.hpp:45
std::shared_ptr< const rvsdg::Type > ValueType_
const Linkage & linkage() const noexcept
Definition: RvsdgModule.hpp:39
std::shared_ptr< const rvsdg::Type > ImportedType_
static LlvmGraphImport & Create(rvsdg::Graph &graph, std::shared_ptr< const rvsdg::Type > valueType, std::shared_ptr< const rvsdg::Type > importedType, std::string name, Linkage linkage, bool isConstant=false)
Definition: RvsdgModule.hpp:81
LlvmGraphImport & Copy(rvsdg::Region &region, rvsdg::StructuralInput *input) const override
Definition: RvsdgModule.cpp:12
LlvmGraphImport(rvsdg::Graph &graph, std::shared_ptr< const rvsdg::Type > valueType, std::shared_ptr< const rvsdg::Type > importedType, std::string name, Linkage linkage, bool isConstant)
Definition: RvsdgModule.hpp:23
const util::FilePath & SourceFileName() const noexcept
const std::string & TargetTriple() const noexcept
~LlvmRvsdgModule() noexcept override=default
LlvmRvsdgModule & operator=(const LlvmRvsdgModule &)=delete
static std::unique_ptr< LlvmRvsdgModule > Create(const util::FilePath &sourceFileName, const std::string &targetTriple, const std::string &dataLayout)
LlvmRvsdgModule(LlvmRvsdgModule &&)=delete
LlvmRvsdgModule & operator=(LlvmRvsdgModule &&)=delete
LlvmRvsdgModule(const LlvmRvsdgModule &)=delete
std::unique_ptr< RvsdgModule > copy() const override
Definition: RvsdgModule.cpp:18
const std::string & DataLayout() const noexcept
LlvmRvsdgModule(util::FilePath sourceFileName, std::string targetTriple, std::string dataLayout, std::unique_ptr< rvsdg::Graph > rvsdg)
GraphImport(Graph &graph, std::shared_ptr< const rvsdg::Type > type, std::string name)
Definition: graph.cpp:16
Region & GetRootRegion() const noexcept
Definition: graph.hpp:99
rvsdg::Region * region() const noexcept
Definition: node.cpp:151
StructuralInput * input() const noexcept
Definition: region.hpp:69
Represent acyclic RVSDG subgraphs.
Definition: region.hpp:213
RegionArgument & addArgument(std::unique_ptr< RegionArgument > argument)
Definition: region.cpp:176
const std::optional< util::FilePath > & SourceFilePath() const noexcept
Definition: RvsdgModule.hpp:73
Global memory state passed between functions.