VapourSynth-llvmexpr
Loading...
Searching...
No Matches
analysis::VarInitAnalysis Class Reference
Inheritance diagram for analysis::VarInitAnalysis:
Collaboration diagram for analysis::VarInitAnalysis:

Public Member Functions

 VarInitAnalysis (const std::set< std::string > &all_vars)
std::set< std::string > computeGenSet (size_t block_idx, const std::vector< Token > &tokens, const std::vector< CFGBlock > &cfg_blocks) override
std::set< std::string > meetOperation (const std::vector< std::set< std::string > > &inputs) override
std::set< std::string > transferFunction (const std::set< std::string > &in_value, const std::set< std::string > &gen_set) override
std::set< std::string > getBoundaryValue () override
std::set< std::string > getInitialOutValue () override
Public Member Functions inherited from analysis::ForwardDataflowAnalysis< std::set< std::string > >
 ForwardDataflowAnalysis ()=default
virtual ~ForwardDataflowAnalysis ()=default
ForwardDataflowAnalysisoperator= (const ForwardDataflowAnalysis &)=default
std::pair< std::vector< std::set< std::string > >, std::vector< std::set< std::string > > > analyze (const std::vector< Token > &tokens, const std::vector< CFGBlock > &cfg_blocks)

Detailed Description

Definition at line 32 of file VarInitPass.cpp.

Constructor & Destructor Documentation

◆ VarInitAnalysis()

analysis::VarInitAnalysis::VarInitAnalysis ( const std::set< std::string > & all_vars)
inlineexplicit

Definition at line 36 of file VarInitPass.cpp.

37 : all_vars(all_vars) {}

Member Function Documentation

◆ computeGenSet()

std::set< std::string > analysis::VarInitAnalysis::computeGenSet ( size_t block_idx,
const std::vector< Token > & tokens,
const std::vector< CFGBlock > & cfg_blocks )
inlineoverridevirtual

Implements analysis::ForwardDataflowAnalysis< std::set< std::string > >.

Definition at line 40 of file VarInitPass.cpp.

41 {
42 std::set<std::string> gen_set;
43 const auto& block = cfg_blocks[block_idx];
44 for (int j = block.start_token_idx; j < block.end_token_idx; ++j) {
45 if (tokens[j].type == TokenType::VarStore) {
46 gen_set.insert(
47 std::get<TokenPayloadVar>(tokens[j].payload).name);
48 } else if (tokens[j].type == TokenType::ArrayAllocStatic ||
49 tokens[j].type == TokenType::ArrayAllocDyn) {
50 const auto& array_name =
51 std::get<TokenPayloadArrayOp>(tokens[j].payload).name;
52 gen_set.insert(var_naming::getArrayName(array_name));
53 }
54 }
55 return gen_set;
56 }
@ ArrayAllocStatic
Definition Tokenizer.hpp:51
std::string getArrayName(std::string_view base_name)
Definition VarNaming.hpp:30

References ArrayAllocDyn, ArrayAllocStatic, analysis::var_naming::getArrayName(), and VarStore.

◆ getBoundaryValue()

std::set< std::string > analysis::VarInitAnalysis::getBoundaryValue ( )
inlineoverridevirtual

Implements analysis::ForwardDataflowAnalysis< std::set< std::string > >.

Definition at line 84 of file VarInitPass.cpp.

84{ return {}; }

◆ getInitialOutValue()

std::set< std::string > analysis::VarInitAnalysis::getInitialOutValue ( )
inlineoverridevirtual

Reimplemented from analysis::ForwardDataflowAnalysis< std::set< std::string > >.

Definition at line 86 of file VarInitPass.cpp.

86{ return all_vars; }

◆ meetOperation()

std::set< std::string > analysis::VarInitAnalysis::meetOperation ( const std::vector< std::set< std::string > > & inputs)
inlineoverridevirtual

Implements analysis::ForwardDataflowAnalysis< std::set< std::string > >.

Definition at line 59 of file VarInitPass.cpp.

59 {
60 if (inputs.empty()) {
61 return {};
62 }
63
64 std::set<std::string> result = inputs[0];
65 for (size_t i = 1; i < inputs.size(); ++i) {
66 std::set<std::string> temp_intersect;
67 std::set_intersection(
68 result.begin(), result.end(), inputs[i].begin(),
69 inputs[i].end(),
70 std::inserter(temp_intersect, temp_intersect.begin()));
71 result = std::move(temp_intersect);
72 }
73 return result;
74 }

◆ transferFunction()

std::set< std::string > analysis::VarInitAnalysis::transferFunction ( const std::set< std::string > & in_value,
const std::set< std::string > & gen_set )
inlineoverridevirtual

Implements analysis::ForwardDataflowAnalysis< std::set< std::string > >.

Definition at line 77 of file VarInitPass.cpp.

78 {
79 std::set<std::string> out_value = gen_set;
80 out_value.insert(in_value.begin(), in_value.end());
81 return out_value;
82 }

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