OTAWA
2.0
Framework to perform machine analysis and compute WCET.
|
#include <otawa/proc/CFGProcessor.h>
Public Member Functions | |
CFGProcessor (AbstractRegistration ®) | |
Build a new CFG processor with the given registration information. More... | |
CFGProcessor (cstring name, const Version &version, AbstractRegistration ®) | |
CFGProcessor (cstring name, elm::Version version) | |
Build a new named processor. More... | |
CFGProcessor (void) | |
Build a new CFG processor. More... | |
Public Member Functions inherited from otawa::Processor | |
virtual void * | interfaceFor (const AbstractFeature &feature) |
Get the interface corresponding to the given feature. More... | |
elm::String | name (void) const |
Processor (AbstractRegistration ®istration) | |
For internal use only. More... | |
Processor (const PropList &props) | |
Build a new processor. More... | |
Processor (elm::String name, elm::Version version, const PropList &props) | |
Build a new processor with name and version. More... | |
Processor (String name, Version version) | |
Build a new processor with name and version. More... | |
Processor (String name, Version version, AbstractRegistration ®istration) | |
For internal use only. More... | |
Processor (void) | |
Build a simple anonymous processor. More... | |
AbstractRegistration & | registration (void) const |
elm::Version | version (void) const |
virtual | ~Processor (void) |
Public Member Functions inherited from otawa::Monitor | |
void | configure (const PropList &props, string name="") |
bool | isQuiet () const |
bool | isVerbose () const |
bool | logFor (log_level_t tested) const |
log_level_t | logLevel (void) const |
Monitor () | |
Monitor (Monitor &mon) | |
Build a monitor by copy. More... | |
WorkSpace * | workspace (void) |
~Monitor () | |
Static Public Attributes | |
static p::declare | reg |
Static Public Attributes inherited from otawa::Processor | |
static p::id< bool > | COLLECT_STATS |
This property allows to activate collection of statistics for the work of the current processor. More... | |
static p::id< elm::io::OutStream * > & | LOG = otawa::LOG |
This property identifier is used for setting the log stream used by the processor to write messages (information, warning, error). More... | |
static p::id< string > & | LOG_FOR = otawa::LOG_FOR |
Logging message will only be displayed for the named processor. More... | |
static p::id< log_level_t > & | LOG_LEVEL = otawa::LOG_LEVEL |
Property passed in the configuration property list of a processor to select the log level between LOG_PROC, LOG_CFG or LOG_BB. More... | |
static Processor & | null = _null |
Singleton representing a null processor. More... | |
static p::id< elm::io::OutStream * > & | OUTPUT = otawa::OUTPUT |
This property identifier is used for setting the output stream used by the processor to write results. More... | |
static p::id< Progress * > | PROGRESS |
Record a progress listener for the execution of the processors. More... | |
static p::id< bool > | RECURSIVE |
static p::declare | reg |
static p::id< elm::sys::time_t > | RUNTIME |
This property identifier is used to store in the statistics of a processor the overall run time of the processor work. More... | |
static p::id< PropList * > | STATS |
This property identifiers is used to pass a property list to the processor that will be used to store statistics about the performed work. More... | |
static p::id< bool > | TIMED |
If the value of the associated property is true (default to false), time statistics will also be collected with other processor statistics. More... | |
static p::id< bool > & | VERBOSE = otawa::VERBOSE |
This property activates the verbose mode of the processor: information about the processor work will be displayed. More... | |
Static Public Attributes inherited from otawa::Monitor | |
static Monitor & | null = __null_mon |
Monitor that output nothing. More... | |
Protected Member Functions | |
CFG * | cfg (void) const |
const CFGCollection & | cfgs (void) const |
virtual void | cleanupCFG (WorkSpace *ws, CFG *cfg) |
This function may be overridden by a subclass to provide custom cleanup for a CFG. More... | |
void | configure (const PropList &props) override |
Configure the current processor. More... | |
void | destroy (WorkSpace *ws) override |
This method is called when the properties produced by a processor are no more useful and can be release. More... | |
virtual void | destroyCFG (WorkSpace *ws, CFG *cfg) |
Propagate the destroy phase to CFG resources. More... | |
void | doCleanUp (void) |
Trigger associated with CFG. More... | |
void | dump (WorkSpace *ws, Output &out) override |
Function called for debugging purpose when dump properties (otawa::DUMP, otawa::DUMP_FOR) are provided. More... | |
virtual void | dumpCFG (CFG *cfg, Output &out) |
The default implementation of CFGProcessor dump calls this function for each CFG of the program. More... | |
Block * | entry () const |
Block * | exit () const |
virtual void | processAll (WorkSpace *ws) |
This function is called once the CFG collection has been obtained. More... | |
virtual void | processCFG (WorkSpace *ws, CFG *cfg)=0 |
void | processWorkSpace (WorkSpace *ws) override |
Process the given framework. More... | |
string | str (const Address &address) |
Transform an address to a smart string, that is, if a source line is available, transform it to "source_file:source_line", if the CFG has a label, it gives "label + 0xoffset", else return the address. More... | |
string | str (const Address &base, const Address &address) |
Transform an address to a smart string, that is, if a source line is available, transform it to "source_file:source_line", if the CFG has a label, it gives "label + 0xoffset", else return the address. More... | |
CFG * | taskCFG () const |
Block * | taskEntry () const |
Protected Member Functions inherited from otawa::Processor | |
void | addCleaner (const AbstractFeature &feature, Cleaner *cleaner) |
template<class T > | |
void | addDeletor (const AbstractFeature &feature, const Ref< T *, Identifier< T * > > &ref) |
template<class T > | |
void | addRemover (const AbstractFeature &feature, const Ref< T, Identifier< T > > &ref) |
virtual void | cleanup (WorkSpace *ws) |
This method is called after the end of the processor analysis to let it do some clean up. More... | |
virtual void | collectStats (WorkSpace *ws) |
This method is invoked if the user has required to collect statistics about the processor. More... | |
virtual void | commit (WorkSpace *ws) |
This processor is called as soon as all the required and invalidated features has been removed to let the processor install its own properties. More... | |
void | invalidate (const AbstractFeature &feature) |
Usually called from a processor constructor, this method records a feature invalidated by the work of the current processor. More... | |
bool | isAllocated (void) const |
bool | isCollectingStats (void) const |
bool | isDone () const |
bool | isDumping () const |
bool | isPrepared (void) const |
bool | isTimed (void) const |
virtual void | prepare (WorkSpace *ws) |
This method called to let the processor customize its requirements according to some generic feature. More... | |
Progress & | progress (void) |
void | provide (const AbstractFeature &feature) |
Usually called from a processor constructor, this method records a feature provided by the work of the current processor. More... | |
void | record (StatCollector *collector) |
Add a statistics collector to the current workspace collection. More... | |
bool | recordsStats (void) const |
void | recordStat (const AbstractFeature &feature, StatCollector *collector) |
Add a statistics collector to the current workspace collection. More... | |
void | require (const AbstractFeature &feature) |
Usually called from a processor constructor, this method records a required feature for the work of the current processor. More... | |
virtual void | requireDyn (WorkSpace *ws, const PropList &props) |
Method called after registration requirements to support dynamic requirements. More... | |
virtual void | setup (WorkSpace *ws) |
This method is called before an anlysis to let the processor do some initialization. More... | |
void | track (Cleaner *cleaner) |
Track the given cleaner, that is, record the cleaner in the analysis and trigger when the analysis is deleted. More... | |
template<class T > | |
void | track (const AbstractFeature &feature, const Ref< T *, const Identifier< T * > > &ref) |
template<class T > | |
void | track (const AbstractFeature &feature, const Ref< T *, Identifier< T * > > &ref) |
template<class T > | |
void | track (const AbstractFeature &feature, const Ref< T, const Identifier< T > > &ref) |
template<class T > | |
void | track (const AbstractFeature &feature, const Ref< T, Identifier< T > > &ref) |
template<class T > | |
T * | track (const AbstractFeature &feature, T *object) |
template<class T > | |
void | track (const Ref< T *, const Identifier< T * > > &ref) |
template<class T > | |
void | track (const Ref< T, const Identifier< T > > &ref) |
template<class T > | |
T * | track (T *object) |
void | use (const AbstractFeature &feature) |
Usually called from a processor constructor, this method records a feature as used by the work of the current processor. More... | |
void | warn (const String &message) |
Display a warning. More... | |
WorkSpace * | workspace (void) const |
Protected Member Functions inherited from otawa::Monitor | |
void | setWorkspace (WorkSpace *workspace) |
Update the workspace in the monitor. More... | |
Private Member Functions | |
void | init (const PropList &props) |
Initialize the processor. More... | |
Private Attributes | |
CFG * | _cfg |
const CFGCollection * | _coll |
Additional Inherited Members | |
Public Types inherited from otawa::Monitor | |
enum | log_level_t { LOG_NONE = 0, LOG_PROC = 1, LOG_FILE = 2, LOG_DEPS = LOG_FILE, LOG_FUN = 3, LOG_CFG = LOG_FUN, LOG_BLOCK = 4, LOG_BB = LOG_BLOCK, LOG_INST = 5 } |
typedef enum otawa::Monitor::log_level_t | log_level_t |
Public Attributes inherited from otawa::Monitor | |
elm::io::Output | log |
elm::io::Output | out |
Protected Attributes inherited from otawa::Processor | |
PropList * | stats |
Protected Attributes inherited from otawa::Monitor | |
t::uint32 | flags |
Static Protected Attributes inherited from otawa::Processor | |
static const t::uint32 | CLOSE_DUMP = 0x100 << CUSTOM_SHIFT |
static const t::uint32 | IS_ALLOCATED = 0x004 << CUSTOM_SHIFT |
static const t::uint32 | IS_COLLECTING = 0x010 << CUSTOM_SHIFT |
static const t::uint32 | IS_DONE = 0x040 << CUSTOM_SHIFT |
static const t::uint32 | IS_DUMPING = 0x080 << CUSTOM_SHIFT |
static const t::uint32 | IS_PREPARED = 0x008 << CUSTOM_SHIFT |
static const t::uint32 | IS_TIED = 0x020 << CUSTOM_SHIFT |
static const t::uint32 | IS_TIMED = 0x001 << CUSTOM_SHIFT |
Static Protected Attributes inherited from otawa::Monitor | |
static const t::uint32 | CUSTOM_SHIFT = 16 |
static const t::uint32 | IS_QUIET = 0x02 |
static const t::uint32 | IS_VERBOSE = 0x01 |
This is a specialization of the processor class dedicated to CFG processing. The Processor::processFrameWork() method just take each CFG of the framework and apply the processor on.
It accepts in configuration the following properties:
If statistics are required, it provides:
Finally, it puts on the framework the following properties:
otawa::CFGProcessor::CFGProcessor | ( | AbstractRegistration & | reg | ) |
Build a new CFG processor with the given registration information.
reg | Registration information. |
otawa::CFGProcessor::CFGProcessor | ( | cstring | name, |
elm::Version | version | ||
) |
otawa::CFGProcessor::CFGProcessor | ( | cstring | name, |
const Version & | version, | ||
AbstractRegistration & | reg | ||
) |
Get the current CFG.
Get the current CFG.
References _cfg.
Referenced by entry(), exit(), otawa::cfgio::Output::id(), otawa::ConcurrentCFGProcessor::nextCFG(), otawa::cfgio::Output::processBB(), and otawa::cfgio::Output::processCFG().
|
inlineprotected |
Get a range on the CFG of the current task.
References _coll.
Referenced by otawa::ai::BlockAnalysis< D, S >::processWorkSpace().
This function may be overridden by a subclass to provide custom cleanup for a CFG.
It is called for each CFG of the task when doCleanUp() is called. As a default, do nothing.
ws | Current workspace. |
cfg | Current CFG. |
Reimplemented in otawa::BBProcessor, and otawa::EdgeProcessor.
Referenced by doCleanUp().
Configure the current processor.
props | Configuration properties. |
Reimplemented from otawa::Processor.
Reimplemented in otawa::GraphBBTime< EdgeTimeGraph >, otawa::GraphBBTime< ParExeGraph >, otawa::AccessedAddressFromStack, otawa::dynbranch::DynamicBranchingAnalysis, and otawa::BBRatioDisplayer.
References otawa::Processor::configure(), and init().
Referenced by otawa::ipet::CachePenaltiesObjectFunctionBuilder::configure(), otawa::CFGChecker::configure(), otawa::ipet::VarAssignment::configure(), otawa::cfgio::Output::configure(), otawa::ipet::FlowFactConstraintBuilder::configure(), otawa::BBRatioDisplayer::configure(), otawa::branch::OnlyConsBuilder::configure(), otawa::CAT2Builder::configure(), otawa::dcache::BlockBuilder::configure(), otawa::EdgeCAT2Builder::configure(), otawa::ipet::BasicConstraintsBuilder::configure(), otawa::etime::StandardEventBuilder::configure(), otawa::bpred::BPredProcessor::configure(), otawa::ipet::ConstraintLoader::configure(), otawa::display::CFGOutput::configure(), and otawa::ipet::FlowFactConflictConstraintBuilder::configure().
This method is called when the properties produced by a processor are no more useful and can be release.
This happens (a) when the workspace is release or (b) the features provided by the processor are invalidated.
The processor has to retain the properties of the provided features until this function is called.
The default implementation activates the clean list.
Reimplemented from otawa::Processor.
References otawa::CFGCollection::count(), destroyCFG(), otawa::CFGCollection::get(), otawa::INVOLVED_CFGS, otawa::Processor::workspace(), and otawa::Processor::ws.
Propagate the destroy phase to CFG resources.
Default implementation does nothing.
Reimplemented in otawa::PostDominance, and otawa::BBProcessor.
Referenced by destroy().
Trigger associated with CFG.
For each CFG, perform a call to cleanupCFG() that may be customized by a subclass.
References cleanupCFG(), otawa::CFGCollection::count(), otawa::CFGCollection::get(), otawa::INVOLVED_CFGS, and otawa::Processor::workspace().
Function called for debugging purpose when dump properties (otawa::DUMP, otawa::DUMP_FOR) are provided.
The default implementation does nothing. The dumped data should be human readable.
ws | Current workspace. |
out | Output to dump to. |
Reimplemented from otawa::Processor.
The default implementation of CFGProcessor dump calls this function for each CFG of the program.
So it can be redefined to provide a custom dump. The default implementation does nothing.
g | CFG to dump. |
out | Stream to output to. |
Reimplemented in otawa::Dominance, and otawa::BBProcessor.
Referenced by dump().
|
inlineprotected |
Get the entry block of the current CFG.
References cfg(), and otawa::CFG::entry().
Referenced by otawa::cfgio::Output::processCFG().
|
inlineprotected |
Get the exit block of the current CFG.
References cfg(), and otawa::CFG::exit().
Referenced by otawa::cfgio::Output::processCFG().
This function is called once the CFG collection has been obtained.
It can be overriden to apply analysis on the whole task (collection of CFGs). As a default, it call processCFG() for each CFG of the collection.
In this function, the following functions are available:
ws | Current workspace. |
References _cfg, _coll, endl, otawa::Monitor::log, otawa::Monitor::LOG_CFG, otawa::Monitor::logFor(), processCFG(), and otawa::Processor::ws.
Referenced by processWorkSpace().
Implemented in otawa::ai::BlockAnalysis< D, S >, otawa::BBProcessor, otawa::bpred::BPredProcessor, otawa::ipet::BasicConstraintsBuilder, otawa::CFGSaver, otawa::CFGChecker, otawa::cfgio::Output, otawa::EdgeProcessor, otawa::CFGCheckSummer, otawa::Dominance, otawa::ContextualProcessor, otawa::PostDominance, otawa::ContextTreeByCFGBuilder, otawa::display::CFGOutput, otawa::ipet::ConstraintLoader, otawa::BBRatioDisplayer, otawa::EdgeCAT2Builder, otawa::CAT2Builder, otawa::PSTBuilder, and otawa::FirstLastBuilder.
Referenced by otawa::ConcurrentCFGProcessor::nextCFG(), and processAll().
Process the given framework.
fw | Framework to process. |
Reimplemented from otawa::Processor.
Reimplemented in otawa::GraphBBTime< EdgeTimeGraph >, otawa::GraphBBTime< ParExeGraph >, and otawa::ConcurrentCFGProcessor.
References _coll, otawa::CFGCollection::count(), otawa::INVOLVED_CFGS, processAll(), otawa::PROCESSED_CFG, otawa::Processor::recordsStats(), otawa::Processor::stats, and otawa::Processor::ws.
Referenced by otawa::ConcurrentCFGProcessor::processWorkSpace(), otawa::cfgio::Output::processWorkSpace(), and otawa::ipet::FlowFactConflictConstraintBuilder::processWorkSpace().
Transform an address to a smart string, that is, if a source line is available, transform it to "source_file:source_line", if the CFG has a label, it gives "label + 0xoffset", else return the address.
base | Base address of the function containing the give address. |
address | Address to display. |
|
inlineprotected |
Get the CFG entry point of the current task.
References _coll, and otawa::CFGCollection::entry().
Referenced by taskEntry().
|
inlineprotected |
Get the entry block of the current task entry CFG.
References otawa::CFG::entry(), and taskCFG().
|
private |
Referenced by cfg(), and processAll().
|
private |
Referenced by cfgs(), dump(), processAll(), processWorkSpace(), and taskCFG().
|
static |