docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
sdfg::passes::loop_fusion::LoopFusionHandler Class Reference

#include <sdfg/passes/loop_fusion/loop_fusion_pass.h>

Inheritance diagram for sdfg::passes::loop_fusion::LoopFusionHandler:
[legend]

Classes

struct  InOutCheckResult

Public Member Functions

 LoopFusionHandler (const LoopFusionConfig &config, LoopFusionPass::State &state)
loop_fusion::PatternHandler::MatchResult match (StructuredLoop &first, StructuredLoop &second, bool no_uses_between) override
loop_fusion::PatternHandler::MatchResult try_complex_fuse_producer_into_consumer (FusionLoopCandidate &first, FusionLoopCandidate &second, bool no_uses_between, bool domains_match)
bool check_no_overlap (const StructuredLoop &map, const StructuredLoop &second, const std::unordered_set< loop_fusion::RegId > &skipped_containers) override
Public Member Functions inherited from sdfg::passes::loop_fusion::PatternHandler
virtual ~PatternHandler ()=default

Protected Member Functions

InOutCheckResult check_ins_outs (const loop_fusion::FusionLoopCandidate &first_candidate, const loop_fusion::FusionLoopCandidate &second_candidate, symbolic::ExpressionMapping &canonical_indvars, bool local_not_nested=true, bool only_no_overlap=false)
InOutCheckResult check_ins_outs (const std::unordered_map< loop_fusion::RegId, loop_fusion::FusionArg > &first_args, const std::unordered_map< loop_fusion::RegId, loop_fusion::FusionArg > &second_args, symbolic::ExpressionMapping &canonical_indvars, bool local_not_nested=true, bool only_no_overlap=false)
void update_fused_seq (Sequence &sequence, const symbolic::ExpressionMapping &replacements)
bool loop_match (loop_fusion::FusionLoopCandidate &first, loop_fusion::FusionLoopCandidate &second, SymEngine::map_basic_basic &canonical_indvars)
void update_moved_candidate_states (loop_fusion::FusionLoopCandidate *top, const symbolic::ExpressionMapping &replace)
void update_candidate_state (ControlFlowNode *first_top, loop_fusion::FusionLoopCandidate *first_current, loop_fusion::FusionLoopCandidate *second_current, const symbolic::ExpressionMapping &canonical_indvars)
void update_candidate_args_up (ControlFlowNode *first_top, loop_fusion::FusionLoopCandidate *first_current, loop_fusion::FusionLoopCandidate *second_current, const std::function< void(const std::string &name, loop_fusion::FusionArg &source_arg, std::unordered_map< std::string, loop_fusion::FusionArg > &target_args)> &action)
 Helper that walks up from the innermost loops fused (first_current & second_current) until reaching top.
loop_fusion::PatternHandler::MatchResult fuse_contents (ControlFlowNode *first_top, loop_fusion::FusionLoopCandidate *first_innermost, loop_fusion::FusionLoopCandidate *second_innermost, const symbolic::ExpressionMapping &indvar_mapping, Sequence &target_root, bool can_remove_original)
analysis::LoopAnalysis & get_loop_analysis () override
loop_fusion::FusionLoopCandidate * get_fuse_candidate (StructuredLoop &loop) override
builder::StructuredSDFGBuilder & builder () override
void update_copied_leaf_contents_from_first_to_second (const Plan &plan, FusionLoopCandidate *first_current, FusionLoopCandidate *second_current) override
 Moved non-loop contents from first_current to second_current.

Constructor & Destructor Documentation

◆ LoopFusionHandler()

sdfg::passes::loop_fusion::LoopFusionHandler::LoopFusionHandler ( const LoopFusionConfig & config,
LoopFusionPass::State & state )

Member Function Documentation

◆ builder()

builder::StructuredSDFGBuilder & sdfg::passes::loop_fusion::LoopFusionHandler::builder ( )
overrideprotectedvirtual

◆ check_ins_outs() [1/2]

InOutCheckResult sdfg::passes::loop_fusion::LoopFusionHandler::check_ins_outs ( const loop_fusion::FusionLoopCandidate & first_candidate,
const loop_fusion::FusionLoopCandidate & second_candidate,
symbolic::ExpressionMapping & canonical_indvars,
bool local_not_nested = true,
bool only_no_overlap = false )
protected

◆ check_ins_outs() [2/2]

InOutCheckResult sdfg::passes::loop_fusion::LoopFusionHandler::check_ins_outs ( const std::unordered_map< loop_fusion::RegId, loop_fusion::FusionArg > & first_args,
const std::unordered_map< loop_fusion::RegId, loop_fusion::FusionArg > & second_args,
symbolic::ExpressionMapping & canonical_indvars,
bool local_not_nested = true,
bool only_no_overlap = false )
protected

◆ check_no_overlap()

bool sdfg::passes::loop_fusion::LoopFusionHandler::check_no_overlap ( const StructuredLoop & map,
const StructuredLoop & second,
const std::unordered_set< loop_fusion::RegId > & skipped_containers )
overridevirtual

◆ fuse_contents()

loop_fusion::PatternHandler::MatchResult sdfg::passes::loop_fusion::LoopFusionHandler::fuse_contents ( ControlFlowNode * first_top,
loop_fusion::FusionLoopCandidate * first_innermost,
loop_fusion::FusionLoopCandidate * second_innermost,
const symbolic::ExpressionMapping & indvar_mapping,
Sequence & target_root,
bool can_remove_original )
protected

◆ get_fuse_candidate()

loop_fusion::FusionLoopCandidate * sdfg::passes::loop_fusion::LoopFusionHandler::get_fuse_candidate ( StructuredLoop & loop)
overrideprotectedvirtual

◆ get_loop_analysis()

analysis::LoopAnalysis & sdfg::passes::loop_fusion::LoopFusionHandler::get_loop_analysis ( )
overrideprotectedvirtual

◆ loop_match()

bool sdfg::passes::loop_fusion::LoopFusionHandler::loop_match ( loop_fusion::FusionLoopCandidate & first,
loop_fusion::FusionLoopCandidate & second,
SymEngine::map_basic_basic & canonical_indvars )
protected

◆ match()

loop_fusion::PatternHandler::MatchResult sdfg::passes::loop_fusion::LoopFusionHandler::match ( StructuredLoop & first,
StructuredLoop & second,
bool no_uses_between )
overridevirtual

◆ try_complex_fuse_producer_into_consumer()

loop_fusion::PatternHandler::MatchResult sdfg::passes::loop_fusion::LoopFusionHandler::try_complex_fuse_producer_into_consumer ( FusionLoopCandidate & first,
FusionLoopCandidate & second,
bool no_uses_between,
bool domains_match )

◆ update_candidate_args_up()

void sdfg::passes::loop_fusion::LoopFusionHandler::update_candidate_args_up ( ControlFlowNode * first_top,
loop_fusion::FusionLoopCandidate * first_current,
loop_fusion::FusionLoopCandidate * second_current,
const std::function< void(const std::string &name, loop_fusion::FusionArg &source_arg, std::unordered_map< std::string, loop_fusion::FusionArg > &target_args)> & action )
protected

Helper that walks up from the innermost loops fused (first_current & second_current) until reaching top.

Parameters
first_topthe outermost loop considered for fusing (first_current is this or a nested loop)
first_current
second_current
actionis given the container, the source arg from the first loop and the target_args from the second loop

◆ update_candidate_state()

void sdfg::passes::loop_fusion::LoopFusionHandler::update_candidate_state ( ControlFlowNode * first_top,
loop_fusion::FusionLoopCandidate * first_current,
loop_fusion::FusionLoopCandidate * second_current,
const symbolic::ExpressionMapping & canonical_indvars )
protected

◆ update_copied_leaf_contents_from_first_to_second()

void sdfg::passes::loop_fusion::LoopFusionHandler::update_copied_leaf_contents_from_first_to_second ( const Plan & plan,
FusionLoopCandidate * first_current,
FusionLoopCandidate * second_current )
overrideprotectedvirtual

Moved non-loop contents from first_current to second_current.

Parameters
plan
first_current
second_current

Implements sdfg::passes::loop_fusion::LoopFusionByAccessWorker.

◆ update_fused_seq()

void sdfg::passes::loop_fusion::LoopFusionHandler::update_fused_seq ( Sequence & sequence,
const symbolic::ExpressionMapping & replacements )
protected

◆ update_moved_candidate_states()

void sdfg::passes::loop_fusion::LoopFusionHandler::update_moved_candidate_states ( loop_fusion::FusionLoopCandidate * top,
const symbolic::ExpressionMapping & replace )
protected

The documentation for this class was generated from the following file: