VapourSynth-llvmexpr
Loading...
Searching...
No Matches
analysis::ForwardDataflowAnalysis< DomainT > Class Template Referenceabstract

#include <llvmexpr/analysis/framework/ForwardDataflowAnalysis.hpp>

Public Member Functions

 ForwardDataflowAnalysis ()=default
virtual ~ForwardDataflowAnalysis ()=default
 ForwardDataflowAnalysis (const ForwardDataflowAnalysis &)=default
ForwardDataflowAnalysisoperator= (const ForwardDataflowAnalysis &)=default
 ForwardDataflowAnalysis (ForwardDataflowAnalysis &&)=default
ForwardDataflowAnalysisoperator= (ForwardDataflowAnalysis &&)=default
virtual DomainT computeGenSet (size_t block_idx, const std::vector< Token > &tokens, const std::vector< CFGBlock > &cfg_blocks)=0
virtual DomainT meetOperation (const std::vector< DomainT > &inputs)=0
virtual DomainT transferFunction (const DomainT &in_value, const DomainT &gen_set)=0
virtual DomainT getBoundaryValue ()=0
virtual DomainT getInitialOutValue ()
std::pair< std::vector< DomainT >, std::vector< DomainT > > analyze (const std::vector< Token > &tokens, const std::vector< CFGBlock > &cfg_blocks)

Detailed Description

template<typename DomainT>
class analysis::ForwardDataflowAnalysis< DomainT >

Definition at line 32 of file ForwardDataflowAnalysis.hpp.

Constructor & Destructor Documentation

◆ ForwardDataflowAnalysis() [1/3]

template<typename DomainT>
analysis::ForwardDataflowAnalysis< DomainT >::ForwardDataflowAnalysis ( )
default

◆ ~ForwardDataflowAnalysis()

template<typename DomainT>
virtual analysis::ForwardDataflowAnalysis< DomainT >::~ForwardDataflowAnalysis ( )
virtualdefault

◆ ForwardDataflowAnalysis() [2/3]

template<typename DomainT>
analysis::ForwardDataflowAnalysis< DomainT >::ForwardDataflowAnalysis ( const ForwardDataflowAnalysis< DomainT > & )
default

◆ ForwardDataflowAnalysis() [3/3]

template<typename DomainT>
analysis::ForwardDataflowAnalysis< DomainT >::ForwardDataflowAnalysis ( ForwardDataflowAnalysis< DomainT > && )
default

Member Function Documentation

◆ analyze()

template<typename DomainT>
std::pair< std::vector< DomainT >, std::vector< DomainT > > analysis::ForwardDataflowAnalysis< DomainT >::analyze ( const std::vector< Token > & tokens,
const std::vector< CFGBlock > & cfg_blocks )
inline

Definition at line 56 of file ForwardDataflowAnalysis.hpp.

57 {
58 const size_t num_blocks = cfg_blocks.size();
59
61 for (size_t i = 0; i < num_blocks; ++i) {
63 }
64
67
68 if (!cfg_blocks.empty()) {
70 }
71
72 bool changed = true;
73 while (changed) {
74 changed = false;
75
76 for (size_t i = 0; i < num_blocks; ++i) {
78 if (i == 0 || cfg_blocks[i].predecessors.empty()) {
80 } else {
82 pred_outs.reserve(cfg_blocks[i].predecessors.size());
84 cfg_blocks[i].predecessors.end(),
86 [&out_sets](int pred_idx) {
87 return out_sets[pred_idx];
88 });
90 }
91
92 if (new_in != in_sets[i]) {
94 }
95
97
98 if (new_out != out_sets[i]) {
100 changed = true;
101 }
102 }
103 }
104
106 }
virtual DomainT computeGenSet(size_t block_idx, const std::vector< Token > &tokens, const std::vector< CFGBlock > &cfg_blocks)=0
virtual DomainT transferFunction(const DomainT &in_value, const DomainT &gen_set)=0
virtual DomainT meetOperation(const std::vector< DomainT > &inputs)=0
virtual DomainT getBoundaryValue()=0

References computeGenSet(), getBoundaryValue(), getInitialOutValue(), meetOperation(), and transferFunction().

◆ computeGenSet()

template<typename DomainT>
virtual DomainT analysis::ForwardDataflowAnalysis< DomainT >::computeGenSet ( size_t block_idx,
const std::vector< Token > & tokens,
const std::vector< CFGBlock > & cfg_blocks )
pure virtual

◆ getBoundaryValue()

template<typename DomainT>
virtual DomainT analysis::ForwardDataflowAnalysis< DomainT >::getBoundaryValue ( )
pure virtual

◆ getInitialOutValue()

template<typename DomainT>
virtual DomainT analysis::ForwardDataflowAnalysis< DomainT >::getInitialOutValue ( )
inlinevirtual

Reimplemented in analysis::VarInitAnalysis.

Definition at line 53 of file ForwardDataflowAnalysis.hpp.

53{ return DomainT{}; }

Referenced by analyze().

◆ meetOperation()

template<typename DomainT>
virtual DomainT analysis::ForwardDataflowAnalysis< DomainT >::meetOperation ( const std::vector< DomainT > & inputs)
pure virtual

◆ operator=() [1/2]

template<typename DomainT>
ForwardDataflowAnalysis & analysis::ForwardDataflowAnalysis< DomainT >::operator= ( const ForwardDataflowAnalysis< DomainT > & )
default

◆ operator=() [2/2]

template<typename DomainT>
ForwardDataflowAnalysis & analysis::ForwardDataflowAnalysis< DomainT >::operator= ( ForwardDataflowAnalysis< DomainT > && )
default

◆ transferFunction()

template<typename DomainT>
virtual DomainT analysis::ForwardDataflowAnalysis< DomainT >::transferFunction ( const DomainT & in_value,
const DomainT & gen_set )
pure virtual

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