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

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

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

Classes

struct  Plan
struct  FusionRegs

Public Types

enum class  FusionDirection { None = 0 , ProducerIntoConsumer , ConsumerIntoProducer }

Public Member Functions

std::unique_ptr< Plan > try_create_fusion_by_access_plan (FusionLoopCandidate &first, FusionLoopCandidate &second, bool domains_match=false)
ComplexFusionResult apply_fusion_by_access_plan (std::unique_ptr< Plan > plan)
ComplexFusionResult try_fuse_by_access (FusionLoopCandidate &first, FusionLoopCandidate &second, bool domains_match)

Static Public Member Functions

static std::vector< std::pair< symbolic::Symbol, symbolic::Expression > > solve_subsets (const data_flow::Subset &producer_subset, const data_flow::Subset &consumer_subset, const std::vector< structured_control_flow::StructuredLoop * > &producer_loops, const std::vector< structured_control_flow::StructuredLoop * > &consumer_loops, const symbolic::Assumptions &producer_assumptions, const symbolic::Assumptions &consumer_assumptions, bool invert_range_check=false)

Protected Member Functions

 LoopFusionByAccessWorker (bool allow_init_hoist=true)
virtual ~LoopFusionByAccessWorker ()=default
virtual analysis::LoopAnalysis & get_loop_analysis ()=0
virtual FusionLoopCandidate * get_fuse_candidate (structured_control_flow::StructuredLoop &loop)=0
virtual builder::StructuredSDFGBuilder & builder ()=0
virtual void update_copied_leaf_contents_from_first_to_second (const Plan &plan, FusionLoopCandidate *first_current, FusionLoopCandidate *second_current)=0
 Moved non-loop contents from first_current to second_current.
FusionRegs find_fusion_regs (const FusionLoopCandidate &first, const FusionLoopCandidate &second)
std::vector< structured_control_flow::StructuredLoop * > collect_structured_sub_tree (structured_control_flow::StructuredLoop &top)
 Returns a vector of loops from top to its innermost StructuredLoop, assuming they are all perfectly nested.
std::vector< structured_control_flow::StructuredLoop * > collect_loop_parents (structured_control_flow::Sequence *sequence, structured_control_flow::StructuredLoop *loop)
virtual ComplexFusionResult apply_producer_into_consumer (Plan &plan)
virtual ComplexFusionResult apply_consumer_into_producer (Plan &plan)

Protected Attributes

bool allow_init_hoist_ = true

Member Enumeration Documentation

◆ FusionDirection

Enumerator
None 
ProducerIntoConsumer 
ConsumerIntoProducer 

Constructor & Destructor Documentation

◆ LoopFusionByAccessWorker()

sdfg::passes::loop_fusion::LoopFusionByAccessWorker::LoopFusionByAccessWorker ( bool allow_init_hoist = true)
inlineprotected

◆ ~LoopFusionByAccessWorker()

virtual sdfg::passes::loop_fusion::LoopFusionByAccessWorker::~LoopFusionByAccessWorker ( )
protectedvirtualdefault

Member Function Documentation

◆ apply_consumer_into_producer()

virtual ComplexFusionResult sdfg::passes::loop_fusion::LoopFusionByAccessWorker::apply_consumer_into_producer ( Plan & plan)
protectedvirtual

◆ apply_fusion_by_access_plan()

ComplexFusionResult sdfg::passes::loop_fusion::LoopFusionByAccessWorker::apply_fusion_by_access_plan ( std::unique_ptr< Plan > plan)

◆ apply_producer_into_consumer()

virtual ComplexFusionResult sdfg::passes::loop_fusion::LoopFusionByAccessWorker::apply_producer_into_consumer ( Plan & plan)
protectedvirtual

◆ builder()

virtual builder::StructuredSDFGBuilder & sdfg::passes::loop_fusion::LoopFusionByAccessWorker::builder ( )
protectedpure virtual

◆ collect_loop_parents()

std::vector< structured_control_flow::StructuredLoop * > sdfg::passes::loop_fusion::LoopFusionByAccessWorker::collect_loop_parents ( structured_control_flow::Sequence * sequence,
structured_control_flow::StructuredLoop * loop )
protected

◆ collect_structured_sub_tree()

std::vector< structured_control_flow::StructuredLoop * > sdfg::passes::loop_fusion::LoopFusionByAccessWorker::collect_structured_sub_tree ( structured_control_flow::StructuredLoop & top)
protected

Returns a vector of loops from top to its innermost StructuredLoop, assuming they are all perfectly nested.

◆ find_fusion_regs()

FusionRegs sdfg::passes::loop_fusion::LoopFusionByAccessWorker::find_fusion_regs ( const FusionLoopCandidate & first,
const FusionLoopCandidate & second )
protected

◆ get_fuse_candidate()

virtual FusionLoopCandidate * sdfg::passes::loop_fusion::LoopFusionByAccessWorker::get_fuse_candidate ( structured_control_flow::StructuredLoop & loop)
protectedpure virtual

◆ get_loop_analysis()

virtual analysis::LoopAnalysis & sdfg::passes::loop_fusion::LoopFusionByAccessWorker::get_loop_analysis ( )
protectedpure virtual

◆ solve_subsets()

std::vector< std::pair< symbolic::Symbol, symbolic::Expression > > sdfg::passes::loop_fusion::LoopFusionByAccessWorker::solve_subsets ( const data_flow::Subset & producer_subset,
const data_flow::Subset & consumer_subset,
const std::vector< structured_control_flow::StructuredLoop * > & producer_loops,
const std::vector< structured_control_flow::StructuredLoop * > & consumer_loops,
const symbolic::Assumptions & producer_assumptions,
const symbolic::Assumptions & consumer_assumptions,
bool invert_range_check = false )
static

◆ try_create_fusion_by_access_plan()

std::unique_ptr< Plan > sdfg::passes::loop_fusion::LoopFusionByAccessWorker::try_create_fusion_by_access_plan ( FusionLoopCandidate & first,
FusionLoopCandidate & second,
bool domains_match = false )

◆ try_fuse_by_access()

ComplexFusionResult sdfg::passes::loop_fusion::LoopFusionByAccessWorker::try_fuse_by_access ( FusionLoopCandidate & first,
FusionLoopCandidate & second,
bool domains_match )

◆ update_copied_leaf_contents_from_first_to_second()

virtual void sdfg::passes::loop_fusion::LoopFusionByAccessWorker::update_copied_leaf_contents_from_first_to_second ( const Plan & plan,
FusionLoopCandidate * first_current,
FusionLoopCandidate * second_current )
protectedpure virtual

Moved non-loop contents from first_current to second_current.

Parameters
plan
first_current
second_current

Implemented in sdfg::passes::loop_fusion::LoopFusionHandler.

Member Data Documentation

◆ allow_init_hoist_

bool sdfg::passes::loop_fusion::LoopFusionByAccessWorker::allow_init_hoist_ = true
protected

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