docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
sdfg_builder.h
Go to the documentation of this file.
1#pragma once
2
3#include <utility>
4
7#include "sdfg/sdfg.h"
9
10namespace sdfg {
11namespace builder {
12
14private:
15 std::unique_ptr<SDFG> sdfg_;
16
17protected:
18 Function& function() const override;
19
20public:
21 SDFGBuilder(std::unique_ptr<SDFG>& sdfg);
22
23 SDFGBuilder(const std::string& name, FunctionType type);
24
25 SDFGBuilder(const std::string& name, FunctionType type, const types::IType& return_type);
26
27 SDFG& subject() const;
28
30 for (auto& entry : sdfg_->states_) {
31 if (entry.second.get() == state) {
32 return entry.second.get();
33 }
34 }
35 return nullptr;
36 }
37
38 std::unique_ptr<SDFG> move();
39
40 void rename_container(const std::string& old_name, const std::string& new_name) const override;
41
42 /***** Section: Control-Flow Graph *****/
43
44 control_flow::State& add_state(bool is_start_state = false, const DebugInfo& debug_info = DebugInfo());
45
47 const control_flow::State& state, bool is_start_state = false, const DebugInfo& debug_info = DebugInfo()
48 );
49
51 const control_flow::State& state, bool connect_states = true, const DebugInfo& debug_info = DebugInfo()
52 );
53
54 control_flow::ReturnState& add_return_state(const std::string& data, const DebugInfo& debug_info = DebugInfo());
55
57 const control_flow::State& state, const std::string& data, const DebugInfo& debug_info = DebugInfo()
58 );
59
61 const std::string& data, const types::IType& type, const DebugInfo& debug_info = DebugInfo()
62 );
63
65 const control_flow::State& state,
66 const std::string& data,
67 const types::IType& type,
68 const DebugInfo& debug_info = DebugInfo()
69 );
70
72 add_edge(const control_flow::State& src, const control_flow::State& dst, const DebugInfo& debug_info = DebugInfo());
73
75 const control_flow::State& src,
76 const control_flow::State& dst,
77 const symbolic::Condition condition,
78 const DebugInfo& debug_info = DebugInfo()
79 );
80
82 const control_flow::State& src,
83 const control_flow::State& dst,
84 const control_flow::Assignments& assignments,
85 const DebugInfo& debug_info = DebugInfo()
86 );
87
89 const control_flow::State& src,
90 const control_flow::State& dst,
91 const control_flow::Assignments& assignments,
92 const symbolic::Condition condition,
93 const DebugInfo& debug_info = DebugInfo()
94 );
95
97
98 std::tuple<control_flow::State&, control_flow::State&, control_flow::State&> add_loop(
99 const control_flow::State& state,
100 sdfg::symbolic::Symbol iterator,
104 const DebugInfo& debug_info = DebugInfo()
105 );
106
107 /***** Section: Dataflow Graph *****/
108
110 add_access(control_flow::State& state, const std::string& data, const DebugInfo& debug_info = DebugInfo());
111
113 control_flow::State& state,
114 const std::string& data,
115 const types::IType& type,
116 const DebugInfo& debug_info = DebugInfo()
117 );
118
120 control_flow::State& state,
121 const data_flow::TaskletCode code,
122 const std::string& output,
123 const std::vector<std::string>& inputs,
124 const DebugInfo& debug_info = DebugInfo()
125 );
126
128 control_flow::State& state,
130 const std::string& src_conn,
132 const std::string& dst_conn,
133 const data_flow::Subset& subset,
134 const types::IType& base_type,
135 const DebugInfo& debug_info
136 );
137
139 control_flow::State& state,
142 const std::string& dst_conn,
143 const data_flow::Subset& subset,
144 const types::IType& base_type,
145 const DebugInfo& debug_info = DebugInfo()
146 );
147
149 control_flow::State& state,
151 const std::string& src_conn,
153 const data_flow::Subset& subset,
154 const types::IType& base_type,
155 const DebugInfo& debug_info = DebugInfo()
156 );
157
159 control_flow::State& state,
162 const std::string& dst_conn,
163 const data_flow::Subset& subset,
164 const DebugInfo& debug_info = DebugInfo()
165 );
166
168 control_flow::State& state,
170 const std::string& src_conn,
172 const data_flow::Subset& subset,
173 const DebugInfo& debug_info = DebugInfo()
174 );
175
177 control_flow::State& state,
180 const std::string& dst_conn,
181 const data_flow::Subset& subset,
182 const types::IType& base_type,
183 const DebugInfo& debug_info = DebugInfo()
184 );
185
187 control_flow::State& state,
189 const std::string& src_conn,
191 const data_flow::Subset& subset,
192 const types::IType& base_type,
193 const DebugInfo& debug_info = DebugInfo()
194 );
195
197 control_flow::State& state,
200 const data_flow::Subset& subset,
201 const types::IType& base_type,
202 const DebugInfo& debug_info = DebugInfo()
203 );
204
206 control_flow::State& state,
209 bool derefs_src,
210 const types::IType& base_type,
211 const DebugInfo& debug_info = DebugInfo()
212 );
213
214 template<typename T, typename... Args>
215 data_flow::LibraryNode& add_library_node(control_flow::State& state, const DebugInfo& debug_info, Args... arguments) {
216 static_assert(std::is_base_of<data_flow::LibraryNode, T>::value, "T must be a subclass of data_flow::LibraryNode");
217
218 auto& dataflow = state.dataflow();
219 auto vertex = boost::add_vertex(dataflow.graph_);
220 dataflow.invalidate_topological_order();
221 auto node = std::unique_ptr<T>(new T(this->new_element_id(), debug_info, vertex, dataflow, arguments...));
222 auto res = dataflow.nodes_.insert({vertex, std::move(node)});
223
224 return static_cast<data_flow::LibraryNode&>(*(res.first->second));
225 };
226};
227
228} // namespace builder
229} // namespace sdfg
Definition element.h:30
Definition function.h:43
Definition sdfg.h:34
Definition function_builder.h:12
control_flow::ReturnState & add_constant_return_state_after(const control_flow::State &state, const std::string &data, const types::IType &type, const DebugInfo &debug_info=DebugInfo())
data_flow::Tasklet & add_tasklet(control_flow::State &state, const data_flow::TaskletCode code, const std::string &output, const std::vector< std::string > &inputs, const DebugInfo &debug_info=DebugInfo())
data_flow::Memlet & add_computational_memlet(control_flow::State &state, data_flow::LibraryNode &src, const std::string &src_conn, data_flow::AccessNode &dst, const data_flow::Subset &subset, const types::IType &base_type, const DebugInfo &debug_info=DebugInfo())
data_flow::Memlet & add_reference_memlet(control_flow::State &state, data_flow::AccessNode &src, data_flow::AccessNode &dst, const data_flow::Subset &subset, const types::IType &base_type, const DebugInfo &debug_info=DebugInfo())
data_flow::Memlet & add_dereference_memlet(control_flow::State &state, data_flow::AccessNode &src, data_flow::AccessNode &dst, bool derefs_src, const types::IType &base_type, const DebugInfo &debug_info=DebugInfo())
control_flow::InterstateEdge & add_edge(const control_flow::State &src, const control_flow::State &dst, const symbolic::Condition condition, const DebugInfo &debug_info=DebugInfo())
control_flow::State & add_state(bool is_start_state=false, const DebugInfo &debug_info=DebugInfo())
control_flow::InterstateEdge & add_edge(const control_flow::State &src, const control_flow::State &dst, const DebugInfo &debug_info=DebugInfo())
data_flow::Memlet & add_computational_memlet(control_flow::State &state, data_flow::Tasklet &src, const std::string &src_conn, data_flow::AccessNode &dst, const data_flow::Subset &subset, const DebugInfo &debug_info=DebugInfo())
control_flow::InterstateEdge & add_edge(const control_flow::State &src, const control_flow::State &dst, const control_flow::Assignments &assignments, const DebugInfo &debug_info=DebugInfo())
control_flow::ReturnState & add_return_state_after(const control_flow::State &state, const std::string &data, const DebugInfo &debug_info=DebugInfo())
data_flow::AccessNode & add_access(control_flow::State &state, const std::string &data, const DebugInfo &debug_info=DebugInfo())
control_flow::ReturnState & add_return_state(const std::string &data, const DebugInfo &debug_info=DebugInfo())
void remove_edge(const control_flow::InterstateEdge &edge)
control_flow::ReturnState & add_constant_return_state(const std::string &data, const types::IType &type, const DebugInfo &debug_info=DebugInfo())
data_flow::Memlet & add_computational_memlet(control_flow::State &state, data_flow::AccessNode &src, data_flow::LibraryNode &dst, const std::string &dst_conn, const data_flow::Subset &subset, const types::IType &base_type, const DebugInfo &debug_info=DebugInfo())
SDFGBuilder(std::unique_ptr< SDFG > &sdfg)
SDFGBuilder(const std::string &name, FunctionType type)
data_flow::Memlet & add_memlet(control_flow::State &state, data_flow::DataFlowNode &src, const std::string &src_conn, data_flow::DataFlowNode &dst, const std::string &dst_conn, const data_flow::Subset &subset, const types::IType &base_type, const DebugInfo &debug_info)
data_flow::Memlet & add_computational_memlet(control_flow::State &state, data_flow::Tasklet &src, const std::string &src_conn, data_flow::AccessNode &dst, const data_flow::Subset &subset, const types::IType &base_type, const DebugInfo &debug_info=DebugInfo())
data_flow::Memlet & add_computational_memlet(control_flow::State &state, data_flow::AccessNode &src, data_flow::Tasklet &dst, const std::string &dst_conn, const data_flow::Subset &subset, const DebugInfo &debug_info=DebugInfo())
control_flow::InterstateEdge & add_edge(const control_flow::State &src, const control_flow::State &dst, const control_flow::Assignments &assignments, const symbolic::Condition condition, const DebugInfo &debug_info=DebugInfo())
std::unique_ptr< SDFG > move()
sdfg::control_flow::State * get_non_const_state(const sdfg::control_flow::State *state) const
Definition sdfg_builder.h:29
control_flow::State & add_state_before(const control_flow::State &state, bool is_start_state=false, const DebugInfo &debug_info=DebugInfo())
control_flow::State & add_state_after(const control_flow::State &state, bool connect_states=true, const DebugInfo &debug_info=DebugInfo())
Function & function() const override
data_flow::Memlet & add_computational_memlet(control_flow::State &state, data_flow::AccessNode &src, data_flow::Tasklet &dst, const std::string &dst_conn, const data_flow::Subset &subset, const types::IType &base_type, const DebugInfo &debug_info=DebugInfo())
data_flow::LibraryNode & add_library_node(control_flow::State &state, const DebugInfo &debug_info, Args... arguments)
Definition sdfg_builder.h:215
data_flow::ConstantNode & add_constant(control_flow::State &state, const std::string &data, const types::IType &type, const DebugInfo &debug_info=DebugInfo())
std::tuple< control_flow::State &, control_flow::State &, control_flow::State & > add_loop(const control_flow::State &state, sdfg::symbolic::Symbol iterator, sdfg::symbolic::Expression init, sdfg::symbolic::Condition cond, sdfg::symbolic::Expression update, const DebugInfo &debug_info=DebugInfo())
void rename_container(const std::string &old_name, const std::string &new_name) const override
SDFGBuilder(const std::string &name, FunctionType type, const types::IType &return_type)
An edge connecting two states in an SDFG control-flow graph.
Definition interstate_edge.h:71
A special state that returns a value from the SDFG.
Definition state.h:107
A state in a Stateful DataFlow Graph (SDFG).
Definition state.h:38
const data_flow::DataFlowGraph & dataflow() const
Returns the data-flow graph of this state (const version).
Node representing access to a data container in the dataflow graph.
Definition access_node.h:84
Node representing a constant literal value in the dataflow graph.
Definition access_node.h:205
Abstract base class for all dataflow graph nodes.
Definition data_flow_node.h:106
Base class for all library nodes in the dataflow graph.
Definition library_node.h:106
Edge in the dataflow graph representing data movement.
Definition memlet.h:131
Simple computational operation in the dataflow graph.
Definition tasklet.h:348
Abstract base interface for all types in the sdfglib type system.
Definition type.h:625
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
SymEngine::RCP< const SymEngine::Symbol > Symbol
Reference-counted pointer to a SymEngine Symbol.
Definition symbolic.h:71
SymEngine::RCP< const SymEngine::Boolean > Condition
Reference-counted pointer to a boolean condition expression.
Definition symbolic.h:86
Library node definitions for calling functions beyond simple instructions.
Definition function_builder.h:10
symbolic::SymbolMap Assignments
Type alias for symbol assignments on interstate edges.
Definition interstate_edge.h:30
symbolic::MultiExpression Subset
Type alias for a subset specification (array of symbolic expressions).
Definition memlet.h:103
TaskletCode
Operation codes for tasklet computations.
Definition tasklet.h:94
Definition analysis.h:7
StringEnum FunctionType
Definition function.h:37
Symbolic system for integer-based symbol analysis.