4#include <unordered_map>
79 std::unordered_map<structured_control_flow::ControlFlowNode*, std::map<std::string, RegionArgument>> node_arguments_;
80 std::unordered_map<structured_control_flow::ControlFlowNode*, std::unordered_set<std::string>> node_locals_;
81 std::unordered_map<structured_control_flow::ControlFlowNode*, bool> node_inferred_types_;
82 std::unordered_map<structured_control_flow::ControlFlowNode*, std::unordered_map<std::string, symbolic::Expression>>
84 std::unordered_map<structured_control_flow::ControlFlowNode*, std::unordered_map<std::string, symbolic::Expression>>
85 argument_element_sizes_;
86 std::unordered_map<structured_control_flow::ControlFlowNode*, bool> known_sizes_;
87 std::unordered_map<structured_control_flow::ControlFlowNode*, std::unique_ptr<TypeAnalysis>> node_type_analyses_;
89 void find_arguments_and_locals(
93 void collect_arg_sizes(
96 bool allow_dynamic_sizes_,
103 std::string
name()
const override {
104 return "ArgumentsAnalysis";
109 const std::map<std::string, RegionArgument>&
112 const std::unordered_set<std::string>&
124 bool allow_dynamic_sizes_
130 bool allow_dynamic_sizes_
136 bool allow_dynamic_sizes_
Definition structured_sdfg.h:30
Analysis(StructuredSDFG &sdfg)
const std::unordered_map< std::string, symbolic::Expression > & argument_element_sizes(analysis::AnalysisManager &analysis_manager, structured_control_flow::ControlFlowNode &node, bool allow_dynamic_sizes_)
const std::unordered_map< std::string, symbolic::Expression > & argument_sizes(analysis::AnalysisManager &analysis_manager, structured_control_flow::ControlFlowNode &node, bool allow_dynamic_sizes_)
void run(analysis::AnalysisManager &analysis_manager) override
bool argument_size_known(analysis::AnalysisManager &analysis_manager, structured_control_flow::ControlFlowNode &node, bool allow_dynamic_sizes_)
const TypeAnalysis & type_analysis(analysis::AnalysisManager &analysis_manager, structured_control_flow::ControlFlowNode &node)
Type analysis restricted to the uses inside node.
const std::unordered_set< std::string > & locals(analysis::AnalysisManager &analysis_manager, structured_control_flow::ControlFlowNode &node)
bool inferred_types(analysis::AnalysisManager &analysis_manager, structured_control_flow::ControlFlowNode &node)
std::string name() const override
Definition arguments_analysis.h:103
ArgumentsAnalysis(StructuredSDFG &sdfg)
const std::map< std::string, RegionArgument > & arguments(analysis::AnalysisManager &analysis_manager, structured_control_flow::ControlFlowNode &node)
Definition type_analysis.h:10
Base class for all structured control flow nodes in a StructuredSDFG.
Definition control_flow_node.h:44
void merge(DataRwFlags &other)
Definition arguments_analysis.h:44
bool is_output
Definition arguments_analysis.h:17
DataRwFlags(bool is_explicit_input, bool is_input, bool is_output)
Definition arguments_analysis.h:19
DataRwFlags()
Definition arguments_analysis.h:22
void found_explicit_read()
Definition arguments_analysis.h:28
bool is_input
Definition arguments_analysis.h:16
DataRwFlags & operator=(const DataRwFlags &other)=default
void found_explicit_write()
Definition arguments_analysis.h:33
void found_analysis_escape()
Definition arguments_analysis.h:38
bool is_explicit_input
Definition arguments_analysis.h:15
DataRwFlags(const DataRwFlags ©)=default
RegionArgument()
Definition arguments_analysis.h:61
bool is_ptr
Definition arguments_analysis.h:53
~RegionArgument()=default
RegionArgument & operator=(const RegionArgument &other)=default
void merge(RegionArgument &other)
Definition arguments_analysis.h:70
RegionArgument(bool is_explicit_input, bool is_input, bool is_output, bool scalar, bool ptr)
Definition arguments_analysis.h:55
RegionArgument(DataRwFlags rwFlags, bool scalar, bool ptr)
Definition arguments_analysis.h:58
bool is_scalar
Definition arguments_analysis.h:52
RegionArgument(const RegionArgument ©)=default
Symbolic system for integer-based symbol analysis.