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

#include <simple_types.h>

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

Public Member Functions

 SimpleTypesAnalysis ()
 
virtual bool runOnModule (llvm::Module &m) override
 
virtual void getAnalysisUsage (llvm::AnalysisUsage &AU) const override
 

Static Public Attributes

static char ID = 0
 

Private Member Functions

void buildEqSets (llvm::Module &M)
 
void buildEquations ()
 
void processRoot (llvm::Value *root)
 
void processValue (std::queue< llvm::Value * > &toProcess, EqSet &eqSet)
 
void processUse (llvm::Value *c, llvm::Value *x, std::queue< llvm::Value * > &toProcess, EqSet &eqSet)
 
void eraseObsoleteInstructions ()
 
void setGlobalConstants ()
 

Private Attributes

ValueMap processedObjs
 
EqSetContainer eqSets
 
ValuePairList val2PtrVal
 
ReachingDefinitionsAnalysis RDA
 
llvm::Module * module = nullptr
 
const llvm::GlobalVariable * _specialGlobal = nullptr
 
Configconfig = nullptr
 
FileImageobjf = nullptr
 
std::unordered_set< llvm::Instruction * > instToErase
 

Detailed Description

Simple data type analysis.

Constructor & Destructor Documentation

◆ SimpleTypesAnalysis()

retdec::bin2llvmir::SimpleTypesAnalysis::SimpleTypesAnalysis ( )

Member Function Documentation

◆ buildEqSets()

void retdec::bin2llvmir::SimpleTypesAnalysis::buildEqSets ( llvm::Module &  M)
private

◆ buildEquations()

void retdec::bin2llvmir::SimpleTypesAnalysis::buildEquations ( )
private

◆ eraseObsoleteInstructions()

void retdec::bin2llvmir::SimpleTypesAnalysis::eraseObsoleteInstructions ( )
private

◆ getAnalysisUsage()

void retdec::bin2llvmir::SimpleTypesAnalysis::getAnalysisUsage ( llvm::AnalysisUsage &  AU) const
overridevirtual

◆ processRoot()

void retdec::bin2llvmir::SimpleTypesAnalysis::processRoot ( llvm::Value *  root)
private

◆ processUse()

void retdec::bin2llvmir::SimpleTypesAnalysis::processUse ( llvm::Value *  c,
llvm::Value *  x,
std::queue< llvm::Value * > &  toProcess,
EqSet eqSet 
)
private

◆ processValue()

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

While not empty, pop value from toProcess queue and add it to eqSet. Go through all users of this value and based on their instruction types do one of the following: (1) Nothing. (2) Add some value(s) directly to eqSet – user of this value will not be processed. (3) Add some value(s) to toProcess – value will be added to eqSet when popped and its users will be processed.

Parameters
toProcessQueue of values to process.
eqSetEquivalence set to create.

◆ runOnModule()

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

◆ setGlobalConstants()

void retdec::bin2llvmir::SimpleTypesAnalysis::setGlobalConstants ( )
private

Member Data Documentation

◆ _specialGlobal

const llvm::GlobalVariable* retdec::bin2llvmir::SimpleTypesAnalysis::_specialGlobal = nullptr
private

◆ config

Config* retdec::bin2llvmir::SimpleTypesAnalysis::config = nullptr
private

◆ eqSets

EqSetContainer retdec::bin2llvmir::SimpleTypesAnalysis::eqSets
private

◆ ID

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

◆ instToErase

std::unordered_set<llvm::Instruction*> retdec::bin2llvmir::SimpleTypesAnalysis::instToErase
private

◆ module

llvm::Module* retdec::bin2llvmir::SimpleTypesAnalysis::module = nullptr
private

◆ objf

FileImage* retdec::bin2llvmir::SimpleTypesAnalysis::objf = nullptr
private

◆ processedObjs

ValueMap retdec::bin2llvmir::SimpleTypesAnalysis::processedObjs
private

◆ RDA

ReachingDefinitionsAnalysis retdec::bin2llvmir::SimpleTypesAnalysis::RDA
private

◆ val2PtrVal

ValuePairList retdec::bin2llvmir::SimpleTypesAnalysis::val2PtrVal
private

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