Otawa
0.10
|
This class represents the leafs of the AST. More...
#include <otawa/ast/BlockAST.h>
Public Member Functions | |
BlockAST (Inst *block, t::uint32 size) | |
Build a new block AST. More... | |
Inst * | block (void) const |
Get the entry basic block of the AST block. More... | |
t::uint32 | size (void) const |
virtual Inst * | first (void) |
Get the first instruction of the block. More... | |
virtual ast_kind_t | kind (void) const |
Get the kind of the AST. More... | |
virtual BlockAST * | toBlock (void) |
Get the block AST if this AST is a block, null else. More... | |
virtual int | countInstructions (void) const |
Count the number of instructions in the ast block. More... | |
virtual void | release (void) |
Deletion of AST can only be performed using this method. More... | |
virtual bool | isNOP (void) |
Test if the AST is the NOP AST. More... | |
virtual bool | isUndef (void) |
Test if the AST is the undefined AST. More... | |
virtual CallAST * | toCall (void) |
Get the call AST if this AST is a call, null else. More... | |
virtual SeqAST * | toSeq (void) |
Get the sequence AST if this AST is a sequence, null else. More... | |
virtual IfAST * | toIf (void) |
Get the selection AST if this AST is a selection, null else. More... | |
virtual WhileAST * | toWhile (void) |
Get the repetition AST if this AST is a repeatition, null else. More... | |
virtual DoWhileAST * | toDoWhile (void) |
Get the repetition AST if this AST is a repetition, null else. More... | |
virtual ForAST * | toFor (void) |
Get the repetition AST if this AST is a repetition, null else. More... | |
void | lock (void) |
void | unlock () |
Property * | getProp (const AbstractIdentifier *id) const |
Find a property by its identifier. More... | |
void | setProp (Property *prop) |
Set the property in the property list removing any double. More... | |
void | setProp (const AbstractIdentifier *id) |
void | removeProp (const AbstractIdentifier *id) |
Remove a property matching the given identifier. More... | |
void | removeProp (const AbstractIdentifier &id) |
Property * | extractProp (const AbstractIdentifier *id) |
Remove a property matching the given identifier and return it. More... | |
Property * | extractProp (const AbstractIdentifier &id) |
Remove a property matching the given identifier and return it. More... | |
void | addProp (Property *prop) |
Add property to the list without checking of duplication. More... | |
void | removeAllProp (const AbstractIdentifier *id) |
Remove all the properties matching the given identifier. More... | |
bool | hasProp (const AbstractIdentifier &id) const |
Test if the property list contains a property matching the given identifier. More... | |
void | clearProps (void) |
Remove all properties from the list. More... | |
void | addProps (const PropList &props) |
Add all properties from the given property list, in a reverse order. More... | |
void | print (elm::io::Output &out) const |
Display the current property list. More... | |
Static Public Attributes | |
static Identifier< AST * > | ID |
The property matching the given identifier is put on the first instruction of the AST. More... | |
static AST & | NOP = nop_inst |
Unique instance of the NOP AST. More... | |
static AST & | UNDEF = undef_inst |
Unique instance of the Undef AST. More... | |
static const PropList | EMPTY |
This is an empty proplist for convenience. More... | |
Protected Member Functions | |
virtual | ~BlockAST (void) |
Destroy the block AST, cleaning properties put on basic block and basic block head. More... | |
Private Attributes | |
Inst * | _block |
t::uint32 | _size |
This class represents the leafs of the AST.
They link the AST representation with the instructions. The block AST range from its entry instruction to the next block AST entry (here, "next" means following the control flow of the program). Each AST block entry is marked by an ID_Block property. Remark
that an AST block may contains branches due to translation of some language structure: for example, the shortcut evaluation of || and && operators in C. Remark also that a block AST may have many outputs.
|
protectedvirtual |
Destroy the block AST, cleaning properties put on basic block and basic block head.
|
inherited |
Add property to the list without checking of duplication.
prop | Property to add. |
References otawa::Property::_next.
Referenced by otawa::Identifier< T >::add(), otawa::ast::ASTInfo::ASTInfo(), otawa::Identifier< otawa::arm::Info * >::copy(), otawa::AbstractIdentifier::initProps(), otawa::ContextualProperty::make(), otawa::script::Script::makeConfig(), otawa::ccg::Builder::processLBlockSet(), otawa::ipet::ILPSystemGetter::processWorkSpace(), otawa::Identifier< T >::ref(), otawa::ContextualProperty::ref(), and otawa::ContextualProperty::refProps().
|
inherited |
Add all properties from the given property list, in a reverse order.
props | Property list to clone. |
References copy(), otawa::PropList::head, and otawa::Property::next().
Referenced by otawa::display::CFGDrawer::CFGDrawer(), otawa::display::GraphVizGraph::GraphVizGraph(), otawa::ParamFeature::instantiate(), otawa::Manager::loadXML(), otawa::display::GraphVizGraph::newEdge(), otawa::display::GraphVizGraph::newNode(), otawa::PropList::operator=(), otawa::Process::Process(), otawa::PropList::PropList(), otawa::display::GraphVizItem::setProps(), otawa::VirtualBasicBlock::VirtualBasicBlock(), and otawa::VirtualCFG::VirtualCFG().
|
inline |
Get the entry basic block of the AST block.
References _block.
Referenced by otawa::ets::ACSComputation::applyProcess(), and otawa::ets::ACSComputation::initialization().
|
inherited |
Remove all properties from the list.
References otawa::Property::next().
Referenced by otawa::PSTBuilder::getVCFG(), otawa::PropList::operator=(), otawa::display::GraphVizItem::setProps(), otawa::PropList::~PropList(), and otawa::WorkSpace::~WorkSpace().
|
virtual |
Count the number of instructions in the ast block.
Implements otawa::ast::AST.
References _block, _size, and otawa::ProgItem::address().
Referenced by otawa::ets::TrivialAstBlockTime::processAST().
|
inherited |
Remove a property matching the given identifier and return it.
Caller is responsible of the management of the obtained property.
id | Identifier of the property to extract. |
References otawa::Property::_next, and otawa::Property::next().
Referenced by otawa::script::Script::makeConfig().
|
inlineinherited |
Remove a property matching the given identifier and return it.
Caller is responsible of the management of the obtained property.
id | Identifier of the property to extract. |
References otawa::PropList::extractProp().
Referenced by otawa::PropList::extractProp().
|
inlinevirtual |
Get the first instruction of the block.
Implements otawa::ast::AST.
References _block.
Referenced by otawa::ets::ACSComputation::applyProcess(), otawa::ets::CacheFirstMissComputation::computation(), otawa::ets::CacheMissComputation::computation(), otawa::ets::CacheHitComputation::computation(), otawa::ets::WCETComputation::computation(), and otawa::ets::TrivialAstBlockTime::processAST().
|
inherited |
Find a property by its identifier.
id | Identifier of the property to find. |
References otawa::Property::_next, and otawa::Property::next().
Referenced by otawa::Identifier< otawa::arm::Info * >::exists(), otawa::ContextualProperty::exists(), otawa::ContextualProperty::find(), otawa::Identifier< T >::get(), otawa::PropList::hasProp(), otawa::ContextualProperty::make(), otawa::ParamFeature::matches(), otawa::ImmutableRef< T, I >::print(), otawa::ContextualProperty::print(), otawa::Identifier< T >::ref(), otawa::ContextualProperty::ref(), otawa::ContextualProperty::refProps(), otawa::Identifier< T >::set(), otawa::Identifier< T >::use(), and otawa::Identifier< T >::value().
|
inlineinherited |
Test if the property list contains a property matching the given identifier.
id | Property identifier to look for. |
References otawa::PropList::getProp().
Referenced by otawa::ipet::BasicConstraintsBuilder::addEntryConstraint(), otawa::Monitor::configure(), otawa::ImmutableRef< T, I >::exists(), and otawa::Manager::setVerbosity().
|
inlinevirtualinherited |
|
inlinevirtualinherited |
|
inlinevirtual |
Get the kind of the AST.
Implements otawa::ast::AST.
Reimplemented in otawa::ast::CallAST.
References otawa::ast::AST_Block.
|
inherited |
Display the current property list.
out | Output to use. |
Referenced by otawa::operator<<(), and otawa::ContextualProperty::print().
|
virtualinherited |
Deletion of AST can only be performed using this method.
Referenced by otawa::ast::DoWhileAST::~DoWhileAST(), otawa::ast::ForAST::~ForAST(), otawa::ast::IfAST::~IfAST(), otawa::ast::SeqAST::~SeqAST(), and otawa::ast::WhileAST::~WhileAST().
|
inherited |
Remove all the properties matching the given identifier.
id | Identifier of properties to remove. |
References otawa::Property::_next, and otawa::Property::next().
Referenced by otawa::LoopUnroller::unroll().
|
inherited |
Remove a property matching the given identifier.
id | Identifier of the property to remove. |
References otawa::Property::_next, and otawa::Property::next().
Referenced by otawa::PSTBuilder::buildTree(), otawa::BBRemover< T >::clean(), otawa::display::CFGOutput::processCFG(), otawa::SubCFGBuilder::processWorkSpace(), otawa::Ref< T, I >::remove(), and otawa::ContextualPath::Ref< T >::remove().
|
inlineinherited |
References otawa::PropList::removeProp().
Referenced by otawa::PropList::removeProp().
|
inherited |
Set the property in the property list removing any double.
prop | Property to set. |
References otawa::Property::_next, otawa::Property::id(), and otawa::Property::next().
|
inlineinherited |
References otawa::PropList::setProp().
Referenced by otawa::PropList::setProp().
|
inline |
References _size.
Referenced by otawa::ets::ACSComputation::applyProcess(), and otawa::ets::ACSComputation::initialization().
|
inlinevirtual |
Get the block AST if this AST is a block, null else.
Reimplemented from otawa::ast::AST.
|
inlinevirtualinherited |
Get the call AST if this AST is a call, null else.
Reimplemented in otawa::ast::CallAST.
Referenced by otawa::ets::ACSComputation::applyProcess(), otawa::ets::CacheHitComputation::computation(), otawa::ets::CacheFirstMissComputation::computation(), otawa::ets::CacheMissComputation::computation(), otawa::ets::WCETComputation::computation(), otawa::ets::ACSComputation::initialization(), otawa::ets::FlowFactLoader::processAST(), and otawa::ets::TrivialAstBlockTime::processAST().
|
inlinevirtualinherited |
Get the repetition AST if this AST is a repetition, null else.
Reimplemented in otawa::ast::DoWhileAST.
Referenced by otawa::ets::ACSComputation::applyProcess(), otawa::ets::CacheHitComputation::computation(), otawa::ets::CacheFirstMissComputation::computation(), otawa::ets::CacheMissComputation::computation(), otawa::ets::WCETComputation::computation(), otawa::ets::ACSComputation::initialization(), otawa::ets::FlowFactLoader::processAST(), and otawa::ets::TrivialAstBlockTime::processAST().
|
inlinevirtualinherited |
Get the repetition AST if this AST is a repetition, null else.
Reimplemented in otawa::ast::ForAST.
Referenced by otawa::ets::ACSComputation::applyProcess(), otawa::ets::CacheHitComputation::computation(), otawa::ets::CacheFirstMissComputation::computation(), otawa::ets::CacheMissComputation::computation(), otawa::ets::WCETComputation::computation(), otawa::ets::ACSComputation::initialization(), otawa::ets::FlowFactLoader::processAST(), and otawa::ets::TrivialAstBlockTime::processAST().
|
inlinevirtualinherited |
Get the selection AST if this AST is a selection, null else.
Reimplemented in otawa::ast::IfAST.
Referenced by otawa::ets::ACSComputation::applyProcess(), otawa::ets::CacheHitComputation::computation(), otawa::ets::CacheFirstMissComputation::computation(), otawa::ets::CacheMissComputation::computation(), otawa::ets::WCETComputation::computation(), otawa::ets::ACSComputation::initialization(), otawa::ets::FlowFactLoader::processAST(), and otawa::ets::TrivialAstBlockTime::processAST().
|
inlinevirtualinherited |
Get the sequence AST if this AST is a sequence, null else.
Reimplemented in otawa::ast::SeqAST.
Referenced by otawa::ets::ACSComputation::applyProcess(), otawa::ets::CacheHitComputation::computation(), otawa::ets::CacheFirstMissComputation::computation(), otawa::ets::CacheMissComputation::computation(), otawa::ets::WCETComputation::computation(), otawa::ets::ACSComputation::initialization(), otawa::ets::FlowFactLoader::processAST(), and otawa::ets::TrivialAstBlockTime::processAST().
|
inlinevirtualinherited |
Get the repetition AST if this AST is a repeatition, null else.
Reimplemented in otawa::ast::WhileAST.
Referenced by otawa::ets::ACSComputation::applyProcess(), otawa::ets::CacheHitComputation::computation(), otawa::ets::CacheFirstMissComputation::computation(), otawa::ets::CacheMissComputation::computation(), otawa::ets::WCETComputation::computation(), otawa::ets::ACSComputation::initialization(), otawa::ets::FlowFactLoader::processAST(), and otawa::ets::TrivialAstBlockTime::processAST().
|
private |
Referenced by block(), BlockAST(), countInstructions(), and first().
|
private |
Referenced by countInstructions(), and size().
|
staticinherited |
This is an empty proplist for convenience.
|
static |
The property matching the given identifier is put on the first instruction of the AST.
The property contains a pointer to the block AST.
Referenced by BlockAST().