retdec
Public Member Functions | Static Public Attributes | Private Types | Private Member Functions | Private Attributes | List of all members
retdec::bin2llvmir::TypesPropagator Class Reference

#include <types_propagator.h>

Inheritance diagram for retdec::bin2llvmir::TypesPropagator:
Inheritance graph
[legend]
Collaboration diagram for retdec::bin2llvmir::TypesPropagator:
Collaboration graph
[legend]

Public Member Functions

 TypesPropagator ()
 
virtual bool runOnModule (llvm::Module &m) override
 
bool runOnModuleCustom (llvm::Module &m, Abi *abi)
 

Static Public Attributes

static char ID = 0
 

Private Types

using EqSet = std::unordered_set< llvm::Value * >
 
using EqSets = std::list< EqSet >
 

Private Member Functions

bool run ()
 
void buildEquationSets ()
 
void processRoot (llvm::Value *val)
 
void processValue (std::queue< llvm::Value * > &toProcess, EqSet &eqSet)
 
void processUserInstruction (llvm::Value *val, llvm::Instruction *user, std::queue< llvm::Value * > &toProcess, EqSet &eqSet)
 
bool skipRootProcessing (llvm::Value *val)
 
EqSetgetEqSetForValue (llvm::Value *val)
 
bool wasProcessed (llvm::Value *val)
 
void addToProcessQueue (llvm::Value *val, std::queue< llvm::Value * > &toProcess)
 

Private Attributes

llvm::Module * _module = nullptr
 
Abi_abi = nullptr
 
ReachingDefinitionsAnalysis _RDA
 
EqSets _eqSets
 
std::unordered_map< llvm::Value *, EqSet * > _val2eqSet
 

Member Typedef Documentation

◆ EqSet

using retdec::bin2llvmir::TypesPropagator::EqSet = std::unordered_set<llvm::Value*>
private

◆ EqSets

Constructor & Destructor Documentation

◆ TypesPropagator()

retdec::bin2llvmir::TypesPropagator::TypesPropagator ( )

Member Function Documentation

◆ addToProcessQueue()

void retdec::bin2llvmir::TypesPropagator::addToProcessQueue ( llvm::Value *  val,
std::queue< llvm::Value * > &  toProcess 
)
private

◆ buildEquationSets()

void retdec::bin2llvmir::TypesPropagator::buildEquationSets ( )
private

◆ getEqSetForValue()

TypesPropagator::EqSet * retdec::bin2llvmir::TypesPropagator::getEqSetForValue ( llvm::Value *  val)
private

◆ processRoot()

void retdec::bin2llvmir::TypesPropagator::processRoot ( llvm::Value *  val)
private

◆ processUserInstruction()

void retdec::bin2llvmir::TypesPropagator::processUserInstruction ( llvm::Value *  val,
llvm::Instruction *  user,
std::queue< llvm::Value * > &  toProcess,
EqSet eqSet 
)
private

◆ processValue()

void retdec::bin2llvmir::TypesPropagator::processValue ( std::queue< llvm::Value * > &  toProcess,
EqSet eqSet 
)
private

◆ run()

bool retdec::bin2llvmir::TypesPropagator::run ( )
private

◆ runOnModule()

bool retdec::bin2llvmir::TypesPropagator::runOnModule ( llvm::Module &  m)
overridevirtual

◆ runOnModuleCustom()

bool retdec::bin2llvmir::TypesPropagator::runOnModuleCustom ( llvm::Module &  m,
Abi abi 
)

◆ skipRootProcessing()

bool retdec::bin2llvmir::TypesPropagator::skipRootProcessing ( llvm::Value *  val)
private

◆ wasProcessed()

bool retdec::bin2llvmir::TypesPropagator::wasProcessed ( llvm::Value *  val)
private

Member Data Documentation

◆ _abi

Abi* retdec::bin2llvmir::TypesPropagator::_abi = nullptr
private

◆ _eqSets

EqSets retdec::bin2llvmir::TypesPropagator::_eqSets
private

◆ _module

llvm::Module* retdec::bin2llvmir::TypesPropagator::_module = nullptr
private

◆ _RDA

ReachingDefinitionsAnalysis retdec::bin2llvmir::TypesPropagator::_RDA
private

◆ _val2eqSet

std::unordered_map<llvm::Value*, EqSet*> retdec::bin2llvmir::TypesPropagator::_val2eqSet
private

◆ ID

char retdec::bin2llvmir::TypesPropagator::ID = 0
static

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