docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
base_user_visitor.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace sdfg::users {
6
8public:
9 constexpr static int LOC_LOOP_READ_INIT = 0;
10 constexpr static int LOC_LOOP_READ_CONDITION = 1;
11 constexpr static int LOC_LOOP_READ_UPDATE = 2;
12
13 enum class SymbolReadLocation {
14 Assignment, // user will be the Transition, loc_index the sequence-idx
15 LoopHeader, // user will be the StructuredLoop
16 IfHeader, // user will be the if, loc_index the branch-idx
17 MemletSubset, // user will be the memlet, loc_index the dimension-idx
18 LibraryNode, // user will be libNode
19 };
20
22 Assignment, // user will be the transition
23 LoopHeader // user will be the StructuredLoop. indvar is written multiple times (init, update) with this one
24 // call!
25 };
26
27 virtual ~BaseUserAnalyzer() = default;
28
29 virtual void use_as_symbol_read(
30 const std::string& container,
31 const ControlFlowNode* node,
32 const Element* user,
34 int loc_index,
36 ) = 0;
37 virtual void use_as_symbol_write(
38 const symbolic::Symbol& container, const ControlFlowNode* node, const Element* user, SymbolWriteLocation loc
39 ) = 0;
40 virtual void use_as_src_node(
41 const std::string& container,
42 const data_flow::AccessNode& node,
43 const data_flow::Memlet& edge,
44 const Block& block
45 ) = 0;
46 virtual void use_as_dst_node(
47 const std::string& container,
48 const data_flow::AccessNode& node,
49 const data_flow::Memlet& edge,
50 const Block& block
51 ) = 0;
52 virtual void use_as_return_src(const std::string& container, const Return& ret) = 0;
53};
54
74
75
76} // namespace sdfg::users
Definition element.h:159
Node representing access to a data container in the dataflow graph.
Definition access_node.h:84
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
A control flow node representing a basic block with dataflow computations.
Definition block.h:42
Base class for all structured control flow nodes in a StructuredSDFG.
Definition control_flow_node.h:44
Represents a conditional if-else control flow node with multiple cases.
Definition if_else.h:47
Represents a return statement that exits the function with a value.
Definition return.h:32
A sequential container of control flow nodes.
Definition sequence.h:52
Base class for structured loop constructs.
Definition structured_loop.h:244
Definition base_user_visitor.h:7
virtual void use_as_dst_node(const std::string &container, const data_flow::AccessNode &node, const data_flow::Memlet &edge, const Block &block)=0
static constexpr int LOC_LOOP_READ_INIT
Definition base_user_visitor.h:9
static constexpr int LOC_LOOP_READ_CONDITION
Definition base_user_visitor.h:10
virtual void use_as_symbol_write(const symbolic::Symbol &container, const ControlFlowNode *node, const Element *user, SymbolWriteLocation loc)=0
SymbolReadLocation
Definition base_user_visitor.h:13
@ IfHeader
Definition base_user_visitor.h:16
@ MemletSubset
Definition base_user_visitor.h:17
@ LoopHeader
Definition base_user_visitor.h:15
@ LibraryNode
Definition base_user_visitor.h:18
@ Assignment
Definition base_user_visitor.h:14
virtual void use_as_src_node(const std::string &container, const data_flow::AccessNode &node, const data_flow::Memlet &edge, const Block &block)=0
SymbolWriteLocation
Definition base_user_visitor.h:21
virtual void use_as_symbol_read(const std::string &container, const ControlFlowNode *node, const Element *user, SymbolReadLocation loc, int loc_index, symbolic::Expression expr)=0
static constexpr int LOC_LOOP_READ_UPDATE
Definition base_user_visitor.h:11
virtual void use_as_return_src(const std::string &container, const Return &ret)=0
virtual ~BaseUserAnalyzer()=default
Finds uses of containers.
Definition base_user_visitor.h:58
bool visit(sdfg::structured_control_flow::AssignmentBlock &node) override
virtual void handle_structured_loop_after_body(StructuredLoop &loop)
bool visit(sdfg::structured_control_flow::Sequence &node) override
virtual void handle_structured_loop_before_body(StructuredLoop &loop)
virtual void handle_lib_node(Block &, data_flow::LibraryNode &libnode)
bool handleStructuredLoop(StructuredLoop &loop) override
bool visit(sdfg::structured_control_flow::Block &node) override
bool visit(sdfg::structured_control_flow::Return &node) override
bool visit(sdfg::structured_control_flow::IfElse &node) override
Visitor for Structured SDFG (not a builder).
Definition structured_sdfg_visitor.h:71
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
Definition base_user_visitor.h:5