15 std::unique_ptr<SDFG> sdfg_;
30 for (
auto& entry : sdfg_->states_) {
31 if (entry.second.get() == state) {
32 return entry.second.get();
38 std::unique_ptr<SDFG>
move();
40 void rename_container(
const std::string& old_name,
const std::string& new_name)
const override;
66 const std::string& data,
98 std::tuple<control_flow::State&, control_flow::State&, control_flow::State&>
add_loop(
114 const std::string& data,
122 const std::string& output,
123 const std::vector<std::string>& inputs,
130 const std::string& src_conn,
132 const std::string& dst_conn,
142 const std::string& dst_conn,
151 const std::string& src_conn,
162 const std::string& dst_conn,
170 const std::string& src_conn,
180 const std::string& dst_conn,
189 const std::string& src_conn,
214 template<
typename T,
typename... Args>
216 static_assert(std::is_base_of<data_flow::LibraryNode, T>::value,
"T must be a subclass of data_flow::LibraryNode");
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)});
Definition function_builder.h:12
size_t new_element_id() const
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
StringEnum FunctionType
Definition function.h:37
Symbolic system for integer-based symbol analysis.