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

#include <reaching_definitions.h>

Collaboration diagram for retdec::bin2llvmir::ReachingDefinitionsAnalysis:
Collaboration graph
[legend]

Public Member Functions

bool runOnModule (llvm::Module &M, Abi *abi=nullptr, bool trackFlagRegs=false)
 
bool runOnFunction (llvm::Function &F, Abi *abi=nullptr, bool trackFlagRegs=false)
 
void clear ()
 
bool wasRun () const
 
const DefSetdefsFromUse (const llvm::Instruction *I) const
 
const UseSetusesFromDef (const llvm::Instruction *I) const
 
const DefinitiongetDef (const llvm::Instruction *I) const
 
const UsegetUse (const llvm::Instruction *I) const
 

Static Public Member Functions

static std::set< llvm::Instruction * > defsFromUse_onDemand (llvm::Instruction *I)
 
static std::set< llvm::Instruction * > usesFromDef_onDemand (llvm::Instruction *I)
 

Private Member Functions

void run ()
 
const BasicBlockEntrygetBasicBlockEntry (const llvm::Instruction *I) const
 
void initializeBasicBlocks (llvm::Module &M)
 
void initializeBasicBlocks (llvm::Function &F)
 
void initializeBasicBlocksPrev ()
 
void initializeKillGenSets ()
 
void propagate ()
 
void initializeDefsAndUses ()
 
void clearInternal ()
 

Private Attributes

std::map< const llvm::Function *, std::map< const llvm::BasicBlock *, BasicBlockEntry > > bbMap
 
bool _trackFlagRegs = false
 
const llvm::GlobalVariable * _specialGlobal = nullptr
 
bool _run = false
 
Abi_abi = nullptr
 

Friends

std::ostream & operator<< (std::ostream &out, const ReachingDefinitionsAnalysis &rda)
 

Member Function Documentation

◆ clear()

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::clear ( )

◆ clearInternal()

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::clearInternal ( )
private

Clear internal structures used to compute RDA, but not needed to use it once it is computed.

◆ defsFromUse()

const DefSet & retdec::bin2llvmir::ReachingDefinitionsAnalysis::defsFromUse ( const llvm::Instruction *  I) const

◆ defsFromUse_onDemand()

std::set< llvm::Instruction * > retdec::bin2llvmir::ReachingDefinitionsAnalysis::defsFromUse_onDemand ( llvm::Instruction *  I)
static

◆ getBasicBlockEntry()

const BasicBlockEntry & retdec::bin2llvmir::ReachingDefinitionsAnalysis::getBasicBlockEntry ( const llvm::Instruction *  I) const
private

◆ getDef()

const Definition * retdec::bin2llvmir::ReachingDefinitionsAnalysis::getDef ( const llvm::Instruction *  I) const

◆ getUse()

const Use * retdec::bin2llvmir::ReachingDefinitionsAnalysis::getUse ( const llvm::Instruction *  I) const

◆ initializeBasicBlocks() [1/2]

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::initializeBasicBlocks ( llvm::Function &  F)
private

◆ initializeBasicBlocks() [2/2]

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::initializeBasicBlocks ( llvm::Module &  M)
private

◆ initializeBasicBlocksPrev()

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::initializeBasicBlocksPrev ( )
private

◆ initializeDefsAndUses()

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::initializeDefsAndUses ( )
private

◆ initializeKillGenSets()

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::initializeKillGenSets ( )
private

◆ propagate()

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::propagate ( )
private

◆ run()

void retdec::bin2llvmir::ReachingDefinitionsAnalysis::run ( )
private

◆ runOnFunction()

bool retdec::bin2llvmir::ReachingDefinitionsAnalysis::runOnFunction ( llvm::Function &  F,
Abi abi = nullptr,
bool  trackFlagRegs = false 
)

◆ runOnModule()

bool retdec::bin2llvmir::ReachingDefinitionsAnalysis::runOnModule ( llvm::Module &  M,
Abi abi = nullptr,
bool  trackFlagRegs = false 
)

◆ usesFromDef()

const UseSet & retdec::bin2llvmir::ReachingDefinitionsAnalysis::usesFromDef ( const llvm::Instruction *  I) const

◆ usesFromDef_onDemand()

std::set< llvm::Instruction * > retdec::bin2llvmir::ReachingDefinitionsAnalysis::usesFromDef_onDemand ( llvm::Instruction *  I)
static

◆ wasRun()

bool retdec::bin2llvmir::ReachingDefinitionsAnalysis::wasRun ( ) const

Friends And Related Function Documentation

◆ operator<<

std::ostream& operator<< ( std::ostream &  out,
const ReachingDefinitionsAnalysis rda 
)
friend

Member Data Documentation

◆ _abi

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

◆ _run

bool retdec::bin2llvmir::ReachingDefinitionsAnalysis::_run = false
private

◆ _specialGlobal

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

◆ _trackFlagRegs

bool retdec::bin2llvmir::ReachingDefinitionsAnalysis::_trackFlagRegs = false
private

◆ bbMap

std::map<const llvm::Function*, std::map<const llvm::BasicBlock*, BasicBlockEntry> > retdec::bin2llvmir::ReachingDefinitionsAnalysis::bbMap
private

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