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

Represents pre-cached data for 1 Loop that fullfills the prerequisits for fusing with another candidate Goal is to collect every harder to get data once for all involved loops. More...

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

Public Member Functions

 FusionLoopCandidate (structured_control_flow::StructuredLoop *loop, const symbolic::Assumption *indvar_boundaries, symbolic::Assumptions assumptions, bool is_map=false, bool is_by_domain_candidate=false)
void non_indvar_writes ()
void aliasing_encountered ()
void replace (const symbolic::ExpressionMapping &mapping)

Public Attributes

structured_control_flow::StructuredLoop * loop
const symbolic::Assumption * indvar_boundaries
symbolic::Assumptions assumptions
bool is_map = false
bool is_by_domain_candidate = false
std::unordered_map< RegId, FusionArg > args
bool incompatible = false
bool nested_incompatible = false

Detailed Description

Represents pre-cached data for 1 Loop that fullfills the prerequisits for fusing with another candidate Goal is to collect every harder to get data once for all involved loops.

Because we likely need to compare a candidate against many others, reusing the same data. Also structured in a way, that the data can be merged & updated if fusing between candidates actually happens

Also, since not every loop is eligible to be a candidate, this flattens the loop-tree. Relevant data of nested loops that are not themselves candidates will need to be folded into its nearest parent candidate

Constructor & Destructor Documentation

◆ FusionLoopCandidate()

sdfg::passes::loop_fusion::FusionLoopCandidate::FusionLoopCandidate ( structured_control_flow::StructuredLoop * loop,
const symbolic::Assumption * indvar_boundaries,
symbolic::Assumptions assumptions,
bool is_map = false,
bool is_by_domain_candidate = false )
inline

Member Function Documentation

◆ aliasing_encountered()

void sdfg::passes::loop_fusion::FusionLoopCandidate::aliasing_encountered ( )

◆ non_indvar_writes()

void sdfg::passes::loop_fusion::FusionLoopCandidate::non_indvar_writes ( )

◆ replace()

void sdfg::passes::loop_fusion::FusionLoopCandidate::replace ( const symbolic::ExpressionMapping & mapping)

Member Data Documentation

◆ args

std::unordered_map<RegId, FusionArg> sdfg::passes::loop_fusion::FusionLoopCandidate::args

◆ assumptions

symbolic::Assumptions sdfg::passes::loop_fusion::FusionLoopCandidate::assumptions

◆ incompatible

bool sdfg::passes::loop_fusion::FusionLoopCandidate::incompatible = false

◆ indvar_boundaries

const symbolic::Assumption* sdfg::passes::loop_fusion::FusionLoopCandidate::indvar_boundaries

◆ is_by_domain_candidate

bool sdfg::passes::loop_fusion::FusionLoopCandidate::is_by_domain_candidate = false

◆ is_map

bool sdfg::passes::loop_fusion::FusionLoopCandidate::is_map = false

◆ loop

structured_control_flow::StructuredLoop* sdfg::passes::loop_fusion::FusionLoopCandidate::loop

◆ nested_incompatible

bool sdfg::passes::loop_fusion::FusionLoopCandidate::nested_incompatible = false

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