Otawa  0.10
otawa::se::FilterBuilder Class Reference

#include <otawa/data/clp/SymbolicExpr.h>

Public Member Functions

 FilterBuilder (BasicBlock *_bb, clp::ClpProblem &problem)
 Build a filter and install them on the current BB. More...
 

Private Member Functions

void getFilters (void)
 Find filters that apply on the basic block Two properties are sets: REG_FILTERS for filters on registers ADDR_FILTERS for filters on memory addresses. More...
 
void iterateBranchPaths (Inst *inst, const Vector< Inst * > &insts)
 Iterate on all semantics execution paths and call makeFilters(). More...
 
sem::cond_t reverseCond (sem::cond_t cond)
 Build the reverse of a condition. More...
 
SECmpmakeFilters (SECmp *se, Inst *cur_inst, sem::Block &block)
 Accumulate in the reg_filters and addr_filters filters for the given block. More...
 
void addFilters (SECmp *se, const Vector< Inst * > &insts)
 Add the filters for the current instruction list (taken backward). More...
 

Private Attributes

BasicBlockbb
 
Vector< SECmp * > reg_filters
 
Vector< SECmp * > addr_filters
 
Vector< Vknown_reg
 
Vector< Vknown_addr
 
clp::ClpStatePack pack
 

Constructor & Destructor Documentation

otawa::se::FilterBuilder::FilterBuilder ( BasicBlock _bb,
clp::ClpProblem &  problem 
)

Build a filter and install them on the current BB.

Parameters
_bbBB to work on.

References getFilters().

Member Function Documentation

void otawa::se::FilterBuilder::addFilters ( SECmp se,
const Vector< Inst * > &  insts 
)
private

Add the filters for the current instruction list (taken backward).

Parameters
seCurrent conditional branch comparison.
instsInstructions of the block.

References _, cerr, elm::genstruct::Vector< T >::clear(), elm::genstruct::Vector< T >::count(), makeFilters(), out, and TRACEGF.

Referenced by getFilters(), and iterateBranchPaths().

void otawa::se::FilterBuilder::getFilters ( void  )
private

Find filters that apply on the basic block Two properties are sets: REG_FILTERS for filters on registers ADDR_FILTERS for filters on memory addresses.

References elm::genstruct::Vector< T >::add(), addFilters(), otawa::se::ADDR_FILTERS, addr_filters, bb, otawa::sem::branch(), iterateBranchPaths(), otawa::se::REG_FILTERS, and reg_filters.

Referenced by FilterBuilder().

void otawa::se::FilterBuilder::iterateBranchPaths ( Inst inst,
const Vector< Inst * > &  insts 
)
private
SECmp * otawa::se::FilterBuilder::makeFilters ( SECmp se,
Inst cur_inst,
sem::Block b 
)
private

Accumulate in the reg_filters and addr_filters filters for the given block.

Parameters
seCurrent comparison.
cur_instCurrent instruction.
bBlock to work on.

References _, otawa::sem::inst::a, otawa::se::SymbExpr::a(), otawa::sem::ADD, otawa::sem::add(), addr_filters, otawa::ProgItem::address(), otawa::clp::Value::all, otawa::sem::ANY_COND, otawa::se::SECmp::asString(), otawa::sem::inst::b, otawa::se::SymbExpr::b(), otawa::se::SECmp::canonize(), cerr, otawa::sem::CMP, otawa::se::CMP, otawa::sem::cmp(), otawa::sem::CMPU, otawa::se::CMPU, otawa::sem::inst::cond(), otawa::se::SECmp::copy(), otawa::sem::inst::d(), elm::io::endl, otawa::se::EQ, otawa::sem::EQ, otawa::se::GE, otawa::sem::GE, otawa::se::getFilterForAddr(), otawa::se::getFilterForReg(), otawa::se::GT, otawa::sem::GT, otawa::sem::IF, otawa::clp::Value::isConst(), known_addr, known_reg, otawa::se::LE, otawa::sem::LE, elm::genstruct::Vector< T >::length(), otawa::sem::LOAD, otawa::clp::Value::lower(), otawa::se::LT, otawa::sem::LT, otawa::se::NE, otawa::sem::NE, otawa::se::NONE, otawa::sem::inst::op, otawa::se::SymbExpr::op(), pack, otawa::se::SymbExpr::print(), otawa::clp::REG, reg_filters, otawa::se::SymbExpr::replace(), otawa::sem::SCRATCH, otawa::sem::SET, otawa::sem::SETI, otawa::clp::ClpStatePack::state_after(), otawa::sem::SUB, otawa::sem::sub(), TRACEGF, otawa::se::UGE, otawa::sem::UGE, otawa::se::UGT, otawa::sem::UGT, otawa::se::ULE, otawa::sem::ULE, otawa::se::ULT, otawa::sem::ULT, otawa::se::SymbExpr::used_addr(), otawa::se::SymbExpr::used_reg(), and otawa::se::SymbExpr::val().

Referenced by addFilters(), and iterateBranchPaths().

sem::cond_t otawa::se::FilterBuilder::reverseCond ( sem::cond_t  cond)
private

Build the reverse of a condition.

Parameters
condCondition to reverse.
Returns
Reversed condition.

References otawa::sem::ANY_COND, otawa::sem::EQ, otawa::sem::GE, otawa::sem::GT, otawa::sem::LE, otawa::sem::LT, otawa::sem::NE, otawa::sem::NO_COND, otawa::sem::UGE, otawa::sem::UGT, otawa::sem::ULE, and otawa::sem::ULT.

Referenced by iterateBranchPaths().

Member Data Documentation

Vector<SECmp *> otawa::se::FilterBuilder::addr_filters
private
BasicBlock* otawa::se::FilterBuilder::bb
private

Referenced by getFilters().

Vector<V> otawa::se::FilterBuilder::known_addr
private

Referenced by makeFilters().

Vector<V> otawa::se::FilterBuilder::known_reg
private

Referenced by makeFilters().

clp::ClpStatePack otawa::se::FilterBuilder::pack
private

Referenced by makeFilters().

Vector<SECmp *> otawa::se::FilterBuilder::reg_filters
private

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