5#include <unordered_map>
21 p.on_escape(container, node, user);
34 const std::string& container,
40 p.on_ptr_input_into_lib_node(container, node, lib_node, access_type);
41 p.on_ptr_returned(container, return_node);
60template<EscapePolicy Policy,
bool ForceDetailed = false>
72 policy_.on_ptr_returned(container, ret);
74 policy_.on_escape(container, &ret, &ret);
80 const std::string& container,
87 auto& type = sdfg_.type(container);
89 policy_.on_escape(container, node, user);
94 const std::string& container,
99 auto& type = sdfg_.type(container);
104 auto& target_node = edge.
dst();
106 auto meta = lib_node->pointer_access_type(edge);
107 policy_.on_ptr_input_into_lib_node(container, &block, *lib_node, meta);
111 policy_.on_escape(container, &block, &edge);
114 policy_.on_escape(container, &block, &edge);
122 const std::string& container,
137 p.on_overwrite(container, node, user);
152template<OverwritePolicy Policy>
162 const std::string& container,
168 auto& type = sdfg_.type(container);
170 policy_.on_overwrite(container, &block, &edge);
178 auto name = container->get_name();
180 policy_.on_overwrite(name, node, user);
187 const std::string& container,
194 const std::string& container,
207 p.on_write_via(container, node, user);
208 p.on_read_via(container, node, user);
214template<Po
interUsedPolicy Policy>
224 const std::string& container,
230 policy_.on_read_via(container, &block, &edge);
235 const std::string& container,
241 policy_.on_write_via(container, &block, &edge);
254 const std::string& container,
Definition structured_sdfg.h:30
PointerEscapeAnalyzer(const StructuredSDFG &sdfg, Policy &policy)
Definition pointer_analyzers.h:66
void use_as_symbol_read(const std::string &container, const ControlFlowNode *node, const Element *user, SymbolReadLocation loc, int loc_index, symbolic::Expression expr) override
Definition pointer_analyzers.h:79
void use_as_symbol_write(const symbolic::Symbol &container, const ControlFlowNode *node, const Element *user, SymbolWriteLocation loc) override
Definition pointer_analyzers.h:128
void use_as_src_node(const std::string &container, const data_flow::AccessNode &node, const data_flow::Memlet &edge, const Block &block) override
Definition pointer_analyzers.h:93
void use_as_dst_node(const std::string &container, const data_flow::AccessNode &node, const data_flow::Memlet &edge, const Block &block) override
Definition pointer_analyzers.h:121
void use_as_return_src(const std::string &container, const Return &ret) override
Definition pointer_analyzers.h:69
void use_as_src_node(const std::string &container, const data_flow::AccessNode &node, const data_flow::Memlet &edge, const Block &block) override
Definition pointer_analyzers.h:186
void use_as_dst_node(const std::string &container, const data_flow::AccessNode &node, const data_flow::Memlet &edge, const Block &block) override
Definition pointer_analyzers.h:161
void use_as_return_src(const std::string &container, const Return &ret) override
Definition pointer_analyzers.h:184
void use_as_symbol_read(const std::string &container, const ControlFlowNode *node, const Element *user, SymbolReadLocation loc, int loc_index, symbolic::Expression expr) override
Definition pointer_analyzers.h:193
PointerOverwriteAnalyzer(const StructuredSDFG &sdfg, Policy &policy)
Definition pointer_analyzers.h:158
void use_as_symbol_write(const symbolic::Symbol &container, const ControlFlowNode *node, const Element *user, SymbolWriteLocation loc) override
Definition pointer_analyzers.h:175
void use_as_return_src(const std::string &container, const Return &ret) override
Definition pointer_analyzers.h:250
PointerUsedAnalyzer(const StructuredSDFG &sdfg, Policy &policy)
Definition pointer_analyzers.h:220
void use_as_src_node(const std::string &container, const data_flow::AccessNode &node, const data_flow::Memlet &edge, const Block &block) override
Definition pointer_analyzers.h:223
void use_as_symbol_write(const symbolic::Symbol &container, const ControlFlowNode *node, const Element *user, SymbolWriteLocation loc) override
Definition pointer_analyzers.h:245
void use_as_symbol_read(const std::string &container, const ControlFlowNode *node, const Element *user, SymbolReadLocation loc, int loc_index, symbolic::Expression expr) override
Definition pointer_analyzers.h:253
void use_as_dst_node(const std::string &container, const data_flow::AccessNode &node, const data_flow::Memlet &edge, const Block &block) override
Definition pointer_analyzers.h:234
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
bool is_dst_write() const
makes a memory write to dst (itself).
bool is_src_pointed_to_address_leak(const types::IType &src_type) const
Leaks address of what src points to.
const DataFlowNode & dst() const
Get the destination node (const).
bool is_src_pointed_to_read() const
Makes a memory read with src-contents as (partial) address.
bool is_src_address_leak() const
Leaks the address of src or uses it in an address calculation that is returned.
bool is_dst_pointed_to_write() const
Contents of dst are used in the address calculation of a memory write.
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 return statement that exits the function with a value.
Definition return.h:32
Definition base_user_visitor.h:7
SymbolReadLocation
Definition base_user_visitor.h:13
SymbolWriteLocation
Definition base_user_visitor.h:21
A more detailed variant of EscapePolicy that aims to distinguish between different types of pointer e...
Definition pointer_analyzers.h:32
Concept for policies that handle pointer usages.
Definition pointer_analyzers.h:20
Definition pointer_analyzers.h:135
Definition pointer_analyzers.h:205
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
std::unique_ptr< PointerAccessMeta, PtrAccessDeleter > PointerAccessType
Definition pointer_metadata.h:32
@ Pointer
Pointer type.
Definition type.h:611
element_cast_target_t< T > * dyn_cast(Element *element)
Efficient down-cast to T, or nullptr if element is not a T.
Definition element.h:246