18 std::vector<std::pair<symbolic::Symbol, symbolic::Expression>>
index_mappings;
41 const std::optional<data_flow::Subset>& subset,
55 const std::optional<data_flow::Subset>& subset,
96 std::unordered_map<RegId, FusionArg>
args;
137 const std::unordered_set<RegId>& skipped_containers
Definition fusion_types.h:118
virtual bool check_no_overlap(const structured_control_flow::StructuredLoop &first, const structured_control_flow::StructuredLoop &second, const std::unordered_set< RegId > &skipped_containers)=0
virtual ~PatternHandler()=default
virtual MatchResult match(structured_control_flow::StructuredLoop &first, structured_control_flow::StructuredLoop &second, bool no_uses_between)=0
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
Base class for structured loop constructs.
Definition structured_loop.h:244
Represents assumptions about a symbol's properties and behavior.
Definition assumptions.h:61
Map from symbols to their assumptions.
Definition assumptions.h:313
SymEngine::map_basic_basic ExpressionMapping
Definition symbolic.h:109
Edges in the dataflow graph representing data movement.
symbolic::MultiExpression Subset
Type alias for a subset specification (array of symbolic expressions).
Definition memlet.h:103
Definition fusion_types.h:7
std::string RegId
Definition fusion_types.h:22
Definition arguments_analysis.h:51
Definition fusion_types.h:141
bool fused
Definition fusion_types.h:143
int64_t copied_redundant_writes
Definition fusion_types.h:144
PatternHandler::MatchResult pattern_result
Definition fusion_types.h:142
Definition fusion_types.h:33
std::optional< data_flow::Subset > common_subset
Definition fusion_types.h:35
bool merge_subset(const std::optional< data_flow::Subset > &subset, bool not_understood, const symbolic::ExpressionMapping *lower_indvars)
bool subset_conflicts_with(const FusionArgCommonAccesses &other_common_acceses, symbolic::ExpressionMapping &lower_indvars) const
FusionArgCommonBlock wr_block
Definition fusion_types.h:36
bool merge_into(structured_control_flow::Block *block, const std::optional< data_flow::Subset > &subset, bool not_understood, bool write_not_read, const symbolic::ExpressionMapping *lower_indvars=nullptr)
bool merge_into(const FusionArgCommonAccesses &other, const symbolic::ExpressionMapping *lower_indvars=nullptr)
FusionArgCommonBlock rd_block
Definition fusion_types.h:37
bool subsets_conflict
Definition fusion_types.h:34
Definition fusion_types.h:24
bool block_conflict
Definition fusion_types.h:26
bool merge_into(const FusionArgCommonBlock &other)
bool merge_into(structured_control_flow::Block *other_block, bool write_not_read)
structured_control_flow::Block * common_block
Definition fusion_types.h:25
analysis::RegionArgument arg
Definition fusion_types.h:68
FusionArg(const FusionArg &arg)
Definition fusion_types.h:74
bool saw_access_locally() const
FusionArgCommonAccesses local_access
Definition fusion_types.h:69
FusionArg(const analysis::RegionArgument &arg)
Definition fusion_types.h:72
FusionArgCommonAccesses nested_access
Definition fusion_types.h:70
std::unordered_map< RegId, FusionArg > args
Definition fusion_types.h:96
const symbolic::Assumption * indvar_boundaries
Definition fusion_types.h:92
void aliasing_encountered()
void replace(const symbolic::ExpressionMapping &mapping)
symbolic::Assumptions assumptions
Definition fusion_types.h:93
bool is_by_domain_candidate
Definition fusion_types.h:95
FusionLoopCandidate(structured_control_flow::StructuredLoop *loop, const symbolic::Assumption *indvar_boundaries, symbolic::Assumptions assumptions, bool is_map=false, bool is_by_domain_candidate=false)
Definition fusion_types.h:100
bool is_map
Definition fusion_types.h:94
bool incompatible
Definition fusion_types.h:97
bool nested_incompatible
Definition fusion_types.h:98
structured_control_flow::StructuredLoop * loop
Definition fusion_types.h:91
Definition fusion_types.h:15
bool integrated_rle
Definition fusion_types.h:19
std::string container
Definition fusion_types.h:16
std::vector< std::pair< symbolic::Symbol, symbolic::Expression > > index_mappings
Definition fusion_types.h:18
data_flow::Subset consumer_subset
Definition fusion_types.h:17
Definition fusion_types.h:9
bool map_fusion_by_access
Definition fusion_types.h:12
bool map_fusion_by_domain
Definition fusion_types.h:11
bool allow_init_hoist
Definition fusion_types.h:10
Definition fusion_types.h:122
bool visit_second_body
Definition fusion_types.h:124
bool removed_first
Definition fusion_types.h:123
structured_control_flow::ControlFlowNode * second_root_replacement
Definition fusion_types.h:125
Symbolic system for integer-based symbol analysis.