Otawa  0.10
otawa::etime::EdgeTimeBuilder Class Reference

Compute execution time by edge using the parametric exegraph approach. More...

#include <otawa/etime/EdgeTimeBuilder.h>

Inheritance diagram for otawa::etime::EdgeTimeBuilder:
otawa::GraphBBTime< ParExeGraph > otawa::BBProcessor otawa::CFGProcessor otawa::Processor otawa::Monitor

Classes

class  EventComparator
 

Public Types

enum  place_t { IN_PREFIX = 0, IN_EDGE = 1, IN_BLOCK = 2, IN_SIZE = 3 }
 
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 Member Functions

 EdgeTimeBuilder (p::declare &r=reg)
 
void processWorkSpace (WorkSpace *ws)
 Process the given framework. More...
 
elm::genstruct::SLList
< PathContext * > * 
buildListOfPathContexts (BasicBlock *bb, int depth=1)
 
void FillSequence (PathContext *ctxt, elm::genstruct::SLList< PathContext * > *context_list, int depth)
 
ParExeSequencebuildSequence (PathContext *ctxt)
 
void analyzePathContext (PathContext *ctxt, int context_index)
 
int analyzeTimingContext (ParExeGraph *graph, TimingContext *NC_ctxt, TimingContext *FM_ctxt)
 
void outputGraph (ParExeGraph *graph, int bb_number, int context_number, int case_number, const string &info="")
 Output the given graph in the directory configured by GRAPHS_OUTPUT_DIRECTORY. More...
 
elm::String name (void) const
 
elm::Version version (void) const
 
void process (WorkSpace *ws, const PropList &props=PropList::EMPTY)
 Execute the code processor on the given framework. More...
 
WorkSpaceworkspace (void)
 Get the current workspace. More...
 
bool isVerbose (void) const
 Test if the verbosity is activated. More...
 
bool logFor (log_level_t tested) const
 Test if the given log level is activated or not. More...
 
log_level_t logLevel (void) const
 

Public Attributes

elm::io::Output out
 Provide a stream to perform output for the user. More...
 
elm::io::Output log
 Provide a stream to perform log output. More...
 

Static Public Attributes

static p::declare reg
 
static Identifier< 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 Identifier< 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 Identifier< bool > RECURSIVE
 
static Identifier< Progress * > PROGRESS
 Install. More...
 
static Identifier< bool > COLLECT_STATS
 This property allows to activate collection of statistics for the work of the current processor. More...
 
static Identifier
< 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 Identifier
< 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 Identifier< bool > & VERBOSE = otawa::VERBOSE
 This property activates the verbose mode of the processor: information about the processor work will be displayed. More...
 
static Identifier< 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 Identifier
< elm::system::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 Monitornull = __null_mon
 Monitor that output nothing. More...
 

Protected Types

typedef Pair< Event *, place_tevent_t
 
typedef genstruct::Vector
< event_t
event_list_t
 
typedef genstruct::Vector
< ConfigSet
config_list_t
 

Protected Member Functions

virtual void configure (const PropList &props)
 Configure the current processor. More...
 
virtual void setup (WorkSpace *ws)
 This method is called before an anlysis to let the processor do some initialization. More...
 
virtual void processBB (WorkSpace *ws, CFG *cfg, BasicBlock *bb)
 Perform the work of the given basic block. More...
 
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 ParExeGraphmake (ParExeSequence *seq)
 This method is called to build the parametric execution graph. More...
 
virtual void processEdge (WorkSpace *ws, CFG *cfg)
 
virtual void processSequence (void)
 Compute and process the time for the given sequence. More...
 
virtual void clean (ParExeGraph *graph)
 Called to cleanup a graph allocated by a call to make(). More...
 
void processTimes (const config_list_t &confs)
 Process the computed time and generate associated objective functions and constraints. More...
 
void applyStrictSplit (const config_list_t &confs)
 Application of two time approach, LTS and HTS time. More...
 
void applyFloppySplit (const config_list_t &confs)
 Application of two time approach, LTS and HTS time. More...
 
void applyWeightedSplit (const config_list_t &confs)
 Performing split by computing an heuristic based on weights of BB and events. More...
 
void contributeConst (void)
 Generate contribution for constant events. More...
 
void contributeSplit (const config_list_t &confs, t::uint32 pos, t::uint32 neg, t::uint32 com, ot::time lts_time, ot::time hts_time)
 Contribute to WCET estimation in split way, x_HTS and x_LTS, with two sets of times. More...
 
void makeSplit (const config_list_t &confs, int p, ConfigSet &hts, ot::time &lts_time, ot::time &hts_time)
 Build the set after split. More...
 
genstruct::Vector< Resource * > * ressources (void)
 
virtual int cacheMissPenalty (Address addr) const
 
virtual int memoryLatency (Address addr) const
 
virtual void buildNCTimingContextListForICache (elm::genstruct::SLList< TimingContext * > *list, ParExeSequence *seq)
 
virtual void buildFMTimingContextListForICache (elm::genstruct::SLList< TimingContext * > *list, ParExeSequence *seq)
 
virtual void computeDefaultTimingContextForICache (TimingContext *dtctxt, ParExeSequence *seq)
 
virtual void BuildVectorOfHwResources ()
 
virtual void configureMem (WorkSpace *ws)
 
virtual void processCFG (WorkSpace *ws, CFG *cfg)
 See CFGProcessor::processCFG() More...
 
virtual void cleanupCFG (WorkSpace *ws, CFG *cfg)
 This function may be overridden by a subclass to provide custom cleanup for a CFG. More...
 
virtual void cleanupBB (WorkSpace *ws, CFG *cfg, BasicBlock *bb)
 When the function doCleanup() is called, this function is called for each basic block of the task. More...
 
template<class T >
void trackBB (const AbstractFeature &feature, const Identifier< T * > &id)
 Track and delete the content of the given identifier on each basic block. More...
 
template<class T >
void trackBB (const AbstractFeature &feature, const Identifier< T > &id)
 Track and remove properties put on basic blocks. More...
 
void doCleanUp (void)
 Trigger associated with CFG. 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...
 
CFGcfg (void) const
 Get the current CFG. More...
 
bool isTimed (void) const
 Test if the timed mode is activated (recording of timings in the statistics). More...
 
bool recordsStats (void) const
 Test if the statictics mode is activated. More...
 
bool isAllocated (void) const
 
bool isPrepared (void) const
 
bool isCollectingStats (void) const
 
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...
 
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 invalidate (const AbstractFeature &feature)
 Usually called from a processor constructor, this method records a feature invalidated by the work of the current processor. More...
 
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...
 
WorkSpaceworkspace (void) const
 Get the current workspace. More...
 
Progressprogress (void)
 Get the current progress handler. More...
 
void recordStat (const AbstractFeature &feature, StatCollector *collector)
 Add a statistics collector to the current workspace collection. More...
 
void addCleaner (const AbstractFeature &feature, Cleaner *cleaner)
 Add a cleaner for the given feature. More...
 
template<class T >
void addRemover (const AbstractFeature &feature, const Ref< T, Identifier< T > > &ref)
 
template<class T >
void addDeletor (const AbstractFeature &feature, const Ref< T *, Identifier< T * > > &ref)
 
virtual void prepare (WorkSpace *ws)
 This method called to let the processor customize its requirements according to some generic feature. More...
 
virtual void collectStats (WorkSpace *ws)
 This method is invoked if the user has required to collect statistics about the processor. More...
 
virtual void processFrameWork (WorkSpace *fw)
 Process the given workspace. More...
 
template<class T >
T * track (const AbstractFeature &feature, T *object)
 
template<class T >
void track (const AbstractFeature &feature, const Ref< T *, Identifier< T * > > &ref)
 Track the release of an allocated object assigned to an identifier relatively to the given feature. More...
 
template<class T >
void track (const AbstractFeature &feature, const Ref< T *, const Identifier< T * > > &ref)
 Track the release of an allocated object assigned to an identifier relatively to the given feature. More...
 
virtual void requireDyn (WorkSpace *ws, const PropList &props)
 Method called after registration requirements to support dynamic requirements. More...
 
void setWorkspace (WorkSpace *workspace)
 Set the current workspace. More...
 

Static Protected Member Functions

static EventCollector::case_t make (const Event *e, EdgeTimeBuilder::place_t place, bool on)
 Build an event selector case. More...
 

Protected Attributes

bool _do_output_graphs
 
bool _do_consider_icache
 
const hard::Memorymem
 
const hard::Cacheicache
 
ParExeProc_microprocessor
 
elm::genstruct::Vector
< Resource * > 
_hw_resources
 
PropListstats
 
t::uint32 flags
 Contains various bit flags. More...
 

Static Protected Attributes

static const t::uint32 IS_TIMED = 0x01 << CUSTOM_SHIFT
 
static const t::uint32 IS_ALLOCATED = 0x04 << CUSTOM_SHIFT
 
static const t::uint32 IS_PREPARED = 0x08 << CUSTOM_SHIFT
 
static const t::uint32 IS_COLLECTING = 0x10 << CUSTOM_SHIFT
 
static const t::uint32 IS_VERBOSE = 0x01
 
static const t::uint32 CUSTOM_SHIFT = 16
 

Private Member Functions

void apply (Event *event, ParExeInst *inst)
 Apply the given event to the given instruction. More...
 
void rollback (Event *event, ParExeInst *inst)
 Rollback the given event to the given instruction. More...
 
EventCollectorget (Event *event)
 Get the collector for the given event. More...
 
void genForOneCost (ot::time cost, Edge *edge, event_list_t &events)
 Generate the constraints when only one cost is considered for the edge. More...
 
ParExeNodegetBranchNode (void)
 Get the branch node resolving a branch prediction. More...
 
int splitConfs (const config_list_t &confs, const event_list_t &events, bool &lower)
 Partition the configuration times in two sets: configuration times in [0, p[ are the low time set (LTS) and the configuration times in [p, ...] are the high time set (HTS). More...
 
void sortEvents (event_list_t &events, BasicBlock *bb, place_t place, Edge *edge=0)
 Sort events according the instructions they apply to. More...
 
void displayConfs (const genstruct::Vector< ConfigSet > &confs, const event_list_t &events)
 Display the list of configuration sorted by cost. More...
 
int countVarEvents (const event_list_t &events)
 Count the number of variable events in the event list. More...
 

Private Attributes

bool _explicit
 
ilp::Systemsys
 
bool predump
 
int event_th
 
Edgeedge
 
genstruct::Vector< event_tall_events
 
event_list_t events
 
ParExeSequenceseq
 
ParExeGraphgraph
 
ParExeNodebnode
 
ParExeEdgebedge
 
BasicBlocksource
 
BasicBlocktarget
 
genstruct::HashTable< Event
*, EventCollector * > 
colls
 

Detailed Description

Compute execution time by edge using the parametric exegraph approach.

Notice that only two times are considered by edge: worst time and best time. Possible execution are classified in two sets, worst and best, and max of these sets represent the worst and the best time. The repartition is made to maximize the gap between max of best set and min of worst set.

Provided Features
Required Features

Member Typedef Documentation

Member Enumeration Documentation

Enumerator
LOG_NONE 
LOG_PROC 
LOG_FILE 
LOG_DEPS 
LOG_FUN 
LOG_CFG 
LOG_BLOCK 
LOG_BB 
LOG_INST 
Enumerator
IN_PREFIX 
IN_EDGE 
IN_BLOCK 
IN_SIZE 

Constructor & Destructor Documentation

otawa::etime::EdgeTimeBuilder::EdgeTimeBuilder ( p::declare r = reg)

Member Function Documentation

void otawa::Processor::addCleaner ( const AbstractFeature feature,
Cleaner cleaner 
)
inlineprotectedinherited

Add a cleaner for the given feature.

A cleaner is an object with a virtual destructor that is called when the associated feature is removed: this let the processor to release and clean up the resources it allocated to implement the provided features.

Parameters
featureFeature the cleaner apply to.
cleanerCleaner to add.

Referenced by otawa::DelayedBuilder::cleanup(), otawa::StackAnalysis::cleanup(), otawa::Dominance::processCFG(), otawa::CFGCollector::processWorkSpace(), otawa::clp::Analysis::processWorkSpace(), and otawa::Processor::recordStat().

template<class T >
void otawa::Processor::addDeletor ( const AbstractFeature feature,
const Ref< T *, Identifier< T * > > &  ref 
)
inlineprotectedinherited
template<class T >
void otawa::Processor::addRemover ( const AbstractFeature feature,
const Ref< T, Identifier< T > > &  ref 
)
inlineprotectedinherited
void otawa::GraphBBTime< ParExeGraph >::analyzePathContext ( PathContext ctxt,
int  context_index 
)
inherited
int otawa::GraphBBTime< ParExeGraph >::analyzeTimingContext ( ParExeGraph graph,
TimingContext NC_ctxt,
TimingContext FM_ctxt 
)
inherited
void otawa::etime::EdgeTimeBuilder::apply ( Event event,
ParExeInst inst 
)
private
void otawa::etime::EdgeTimeBuilder::applyFloppySplit ( const config_list_t confs)
protected

Application of two time approach, LTS and HTS time.

To perform the split, an evaluation function is maximized according the two sets so that:

  • difference of time in LTS is the lowest,
  • difference of time between HTS and LTS is the biggest.
  • a feasible HTS is also a good point,

References all_events, contributeSplit(), edge, events, genForOneCost(), otawa::etime::ConfigSet::isFeasible(), otawa::Monitor::isVerbose(), elm::genstruct::Vector< T >::length(), otawa::Monitor::log, makeSplit(), otawa::etime::maskToString(), otawa::sem::neg(), otawa::etime::ConfigSet::pop(), otawa::etime::ConfigSet::push(), otawa::etime::ConfigSet::scan(), and elm::genstruct::Vector< T >::top().

void otawa::etime::EdgeTimeBuilder::applyStrictSplit ( const config_list_t confs)
protected

Application of two time approach, LTS and HTS time.

To perform the split, an evaluation function is maximized according the two sets so that:

  • the HTS is feasible,
  • difference of time in LTS is the lowest,
  • difference of time between HTS and LTS is the biggest.

References all_events, contributeSplit(), edge, events, genForOneCost(), hex(), otawa::etime::ConfigSet::isFeasible(), otawa::Monitor::isVerbose(), elm::genstruct::Vector< T >::length(), otawa::Monitor::log, makeSplit(), otawa::etime::maskToString(), otawa::sem::neg(), otawa::etime::ConfigSet::pop(), otawa::etime::ConfigSet::push(), otawa::etime::ConfigSet::scan(), and elm::genstruct::Vector< T >::top().

virtual void otawa::GraphBBTime< ParExeGraph >::buildFMTimingContextListForICache ( elm::genstruct::SLList< TimingContext * > *  list,
ParExeSequence seq 
)
protectedvirtualinherited
elm::genstruct::SLList<PathContext *>* otawa::GraphBBTime< ParExeGraph >::buildListOfPathContexts ( BasicBlock bb,
int  depth = 1 
)
inherited
virtual void otawa::GraphBBTime< ParExeGraph >::buildNCTimingContextListForICache ( elm::genstruct::SLList< TimingContext * > *  list,
ParExeSequence seq 
)
protectedvirtualinherited
ParExeSequence* otawa::GraphBBTime< ParExeGraph >::buildSequence ( PathContext ctxt)
inherited
virtual void otawa::GraphBBTime< ParExeGraph >::BuildVectorOfHwResources ( )
protectedvirtualinherited
virtual int otawa::GraphBBTime< ParExeGraph >::cacheMissPenalty ( Address  addr) const
protectedvirtualinherited
CFG * otawa::CFGProcessor::cfg ( void  ) const
inlineprotectedinherited
void otawa::etime::EdgeTimeBuilder::clean ( ParExeGraph graph)
protectedvirtual

Called to cleanup a graph allocated by a call to make().

Parameters
grapGraph to clean.

References graph.

void otawa::etime::EdgeTimeBuilder::cleanup ( WorkSpace ws)
protectedvirtual

This method is called after the end of the processor analysis to let it do some clean up.

Parameters
wsWorkspace to work on.

Reimplemented from otawa::Processor.

References elm::genstruct::Vector< T >::clear(), colls, events, and sys.

void otawa::BBProcessor::cleanupBB ( WorkSpace ws,
CFG cfg,
BasicBlock bb 
)
protectedvirtualinherited

When the function doCleanup() is called, this function is called for each basic block of the task.

As a default do nothing.

Warning
If you override the cleanupCFG() function, do not forget to perform a call to the CFGProcessor original version.
Parameters
wsCurrent workspace.
cfgCurrent CFG.
bbCurrent BB.

Referenced by otawa::BBProcessor::cleanupCFG().

void otawa::BBProcessor::cleanupCFG ( WorkSpace ws,
CFG cfg 
)
protectedvirtualinherited

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.

Parameters
wsCurrent workspace.
cfgCurrent CFG.

Reimplemented from otawa::CFGProcessor.

References otawa::cfgio::bb(), and otawa::BBProcessor::cleanupBB().

void otawa::Processor::collectStats ( WorkSpace ws)
protectedvirtualinherited

This method is invoked if the user has required to collect statistics about the processor.

In its default implementation, this method does nothing but it may be customized if the current implementation provides statistics. It is called after the main computation of the processor.

Statistics must be objects inheriting from the class StatCollector and recorded with method recordStat().

Parameters
wsCurrent workspace.

Reimplemented in otawa::dcache::CatConstraintBuilder, otawa::ipet::WCETComputation, and otawa::CAT2OnlyConstraintBuilder.

Referenced by otawa::Processor::process().

virtual void otawa::GraphBBTime< ParExeGraph >::computeDefaultTimingContextForICache ( TimingContext dtctxt,
ParExeSequence seq 
)
protectedvirtualinherited
void otawa::etime::EdgeTimeBuilder::configure ( const PropList props)
protectedvirtual

Configure the current processor.

Parameters
propsConfiguration properties.

Reimplemented from otawa::GraphBBTime< ParExeGraph >.

References _explicit, otawa::GraphBBTime< G >::configure(), event_th, otawa::etime::EVENT_THRESHOLD, otawa::ipet::EXPLICIT, predump, and otawa::etime::PREDUMP.

virtual void otawa::GraphBBTime< ParExeGraph >::configureMem ( WorkSpace ws)
inlineprotectedvirtualinherited
void otawa::etime::EdgeTimeBuilder::contributeConst ( void  )
protected

Generate contribution for constant events.

References all_events, otawa::etime::ALWAYS, edge, make(), otawa::etime::NEVER, and otawa::ipet::VAR.

Referenced by contributeSplit(), and genForOneCost().

int otawa::etime::EdgeTimeBuilder::countVarEvents ( const event_list_t events)
private

Count the number of variable events in the event list.

Parameters
eventsEvent list to process.
Returns
Number of variable events.

References elm::genstruct::Vector< T >::length(), and otawa::etime::SOMETIMES.

Referenced by processEdge().

void otawa::etime::EdgeTimeBuilder::displayConfs ( const genstruct::Vector< ConfigSet > &  confs,
const event_list_t events 
)
private

Display the list of configuration sorted by cost.

Parameters
confsList of configuration to display.

References elm::genstruct::Vector< T >::length(), and otawa::Monitor::log.

Referenced by processSequence().

void otawa::CFGProcessor::doCleanUp ( void  )
protectedinherited

Trigger associated with CFG.

For each CFG, perform a call to cleanupCFG() that may be customized by a subclass.

References otawa::CFGProcessor::cleanupCFG(), otawa::CFGCollection::count(), otawa::CFGCollection::get(), otawa::INVOLVED_CFGS, and otawa::Processor::workspace().

void otawa::GraphBBTime< ParExeGraph >::FillSequence ( PathContext ctxt,
elm::genstruct::SLList< PathContext * > *  context_list,
int  depth 
)
inherited
void otawa::etime::EdgeTimeBuilder::genForOneCost ( ot::time  cost,
Edge edge,
event_list_t events 
)
private

Generate the constraints when only one cost is considered for the edge.

Parameters
costEdge cost.
edgeCurrent edge.
eventsList of edge events.

References otawa::ilp::System::addObjectFunction(), contributeConst(), otawa::Monitor::log, otawa::Monitor::LOG_BB, otawa::Monitor::logFor(), make(), otawa::etime::SOMETIMES, sys, and otawa::ipet::VAR.

Referenced by applyFloppySplit(), applyStrictSplit(), and processSequence().

EventCollector * otawa::etime::EdgeTimeBuilder::get ( Event event)
private

Get the collector for the given event.

If it doesn't exist, create it.

Parameters
eventConcerned event.
Returns
Matching collector (never null).

References colls.

ParExeNode * otawa::etime::EdgeTimeBuilder::getBranchNode ( void  )
private

Get the branch node resolving a branch prediction.

Returns
Node of resolution.

References bnode, otawa::BasicBlock::controlInst(), seq, and source.

Referenced by apply().

void otawa::Processor::invalidate ( const AbstractFeature feature)
protectedinherited

Usually called from a processor constructor, this method records a feature invalidated by the work of the current processor.

Parameters
featureInvalidated feature.

References otawa::Processor::_reg, otawa::AbstractRegistration::features, otawa::Monitor::flags, otawa::FeatureUsage::invalidate, otawa::Processor::IS_ALLOCATED, otawa::Processor::isAllocated(), and otawa::Processor::isPrepared().

Referenced by otawa::LoopReductor::LoopReductor().

bool otawa::Processor::isAllocated ( void  ) const
inlineprotectedinherited
bool otawa::Processor::isCollectingStats ( void  ) const
inlineprotectedinherited
bool otawa::Processor::isPrepared ( void  ) const
inlineprotectedinherited
bool otawa::Processor::isTimed ( void  ) const
inlineprotectedinherited

Test if the timed mode is activated (recording of timings in the statistics).

Returns
True if timed mode is activated, false else.
Note
If statistics are not activated, this method returns ever false.

References flags.

Referenced by otawa::Processor::process().

bool otawa::Monitor::isVerbose ( void  ) const
inlineinherited

Test if the verbosity is activated.

Returns
True if verbosity is activated, false else.

References flags.

Referenced by otawa::ccg::LBlockBuilder::addLBlock(), otawa::LBlockBuilder::addLBlock(), applyFloppySplit(), applyStrictSplit(), applyWeightedSplit(), makeSplit(), processSequence(), and otawa::dcache::BlockBuilder::setup().

bool otawa::Monitor::logFor ( log_level_t  tested) const
inlineinherited

Test if the given log level is activated or not.

Parameters
testedTested log level.
Returns
True if the log level is activated, false else.

Referenced by otawa::CFGBuilder::addCFG(), otawa::ipet::ConstraintLoader::addConstraint(), otawa::PFGBuilder::addFunction(), applyWeightedSplit(), otawa::DelayedBuilder::buildBB(), otawa::CFGBuilder::buildCFG(), otawa::DelayedBuilder::buildEdges(), otawa::branch::BranchBuilder::categorize(), otawa::ipet::FlowFactLoader::cleanup(), otawa::dcache::CATBuilder::cleanup(), otawa::DelayedBuilder::cloneEdge(), otawa::ACSBuilder::configure(), otawa::CAT2Builder::configure(), genForOneCost(), otawa::etime::StandardEventBuilder::handleVariableBranchPred(), otawa::Processor::init(), otawa::FlowFactLoader::load(), otawa::script::Script::makeConfig(), otawa::CFGBuilder::nextBB(), otawa::FlowFactLoader::onLoop(), otawa::FlowFactLoader::onMemoryAccess(), otawa::FlowFactLoader::onNoInline(), otawa::FlowFactLoader::onReturn(), otawa::FlowFactLoader::onSetInlining(), otawa::Processor::process(), otawa::branch::OnlyConsBuilder::processBB(), otawa::branch::CondNumber::processBB(), otawa::ipet::FlowFactConstraintBuilder::processBB(), otawa::dcache::CLPBlockBuilder::processBB(), otawa::etime::StandardEventBuilder::processBB(), otawa::dcache::BlockBuilder::processBB(), otawa::CFGCheckSummer::processCFG(), otawa::EdgeProcessor::processCFG(), otawa::CAT2Builder::processCFG(), otawa::display::CFGOutput::processCFG(), otawa::ipet::ConstraintLoader::processCFG(), otawa::ContextualProcessor::processCFG(), otawa::BBProcessor::processCFG(), processEdge(), otawa::VarTextDecoder::processEntry(), otawa::dcache::CATBuilder::processLBlockSet(), otawa::ACSMayBuilder::processLBlockSet(), otawa::CAT2Builder::processLBlockSet(), otawa::dcache::ACSBuilder::processLBlockSet(), processSequence(), otawa::VarTextDecoder::processWorkSpace(), otawa::TextDecoder::processWorkSpace(), otawa::LBlockProcessor::processWorkSpace(), otawa::ipet::WCETComputation::processWorkSpace(), otawa::FixedTextDecoder::processWorkSpace(), otawa::dcache::CatConstraintBuilder::processWorkSpace(), otawa::PFGBuilder::processWorkSpace(), otawa::StackAnalysis::processWorkSpace(), otawa::ipet::ILPSystemGetter::processWorkSpace(), otawa::branch::BranchBuilder::processWorkSpace(), otawa::CFGCollector::processWorkSpace(), otawa::CFGProcessor::processWorkSpace(), otawa::Virtualizer::processWorkSpace(), otawa::clp::Analysis::processWorkSpace(), otawa::script::Script::processWorkSpace(), otawa::ilp::Output::setup(), otawa::BBRatioDisplayer::setup(), otawa::dcache::BlockBuilder::setup(), otawa::CFGBuilder::thisBB(), otawa::ipet::FlowFactLoader::transfer(), otawa::Virtualizer::virtualize(), and otawa::script::Script::work().

log_level_t otawa::Monitor::logLevel ( void  ) const
inlineinherited
ParExeGraph * otawa::etime::EdgeTimeBuilder::make ( ParExeSequence seq)
protectedvirtual

This method is called to build the parametric execution graph.

As a default, build a usual ParExeGraph but it may be overridden to build a custom graph.

Parameters
seqSequence to build graph for.
Returns
Built graph.

References otawa::GraphBBTime< ParExeGraph >::_hw_resources, otawa::GraphBBTime< ParExeGraph >::_microprocessor, otawa::ParExeGraph::build(), graph, and otawa::Processor::workspace().

Referenced by contributeConst(), contributeSplit(), genForOneCost(), and processSequence().

void otawa::etime::EdgeTimeBuilder::makeSplit ( const config_list_t confs,
int  p,
ConfigSet hts,
ot::time lts_time,
ot::time hts_time 
)
protected

Build the set after split.

Parameters
confsCurrent configuration.
pSplit position.
htsHTS result set.
lts_timeLTS time.
hts_timeHTS time.

References otawa::etime::ConfigSet::add(), events, otawa::Monitor::isVerbose(), elm::genstruct::Vector< T >::length(), otawa::Monitor::log, and elm::genstruct::Vector< T >::top().

Referenced by applyFloppySplit(), applyStrictSplit(), and applyWeightedSplit().

virtual int otawa::GraphBBTime< ParExeGraph >::memoryLatency ( Address  addr) const
protectedvirtualinherited
void otawa::GraphBBTime< ParExeGraph >::outputGraph ( ParExeGraph graph,
int  bb_number,
int  context_number,
int  case_number,
const string info = "" 
)
inherited

Output the given graph in the directory configured by GRAPHS_OUTPUT_DIRECTORY.

The name of the file is formed by the concatenation of:

"b" bb_number "-ctxt" context_index "-case" case_index ".dot";
        
Parameters
graphGraph to output.
bb_numberBasic number.
context_indexIndex of the context.
case_indexIndex of case.
infoInformation to display in the graph.

Referenced by processSequence().

void otawa::Processor::prepare ( WorkSpace ws)
protectedvirtualinherited

This method called to let the processor customize its requirements according to some generic feature.

When overload, the original method MUST be called at the end of the custom overriding implementation.

Parameters
wsCurrent workspace.

References otawa::Monitor::flags, and otawa::Processor::IS_PREPARED.

Referenced by otawa::Processor::process().

void otawa::Processor::process ( WorkSpace fw,
const PropList props = PropList::EMPTY 
)
inherited

Execute the code processor on the given framework.

Parameters
fwWorkspace to work on.
propsConfiguration properties.

References _, otawa::Processor::_reg, elm::genstruct::Vector< T >::add(), otawa::Processor::cleaners, otawa::Processor::cleanup(), otawa::Processor::collectStats(), otawa::Processor::configure(), elm::genstruct::Vector< T >::contains(), otawa::WorkSpace::getDependency(), otawa::FeatureUsage::invalidate, otawa::WorkSpace::invalidate(), otawa::WorkSpace::isCancelled(), otawa::Processor::isCollectingStats(), otawa::Processor::isPrepared(), otawa::WorkSpace::isProvided(), otawa::Processor::isTimed(), kind, otawa::Monitor::log, otawa::Monitor::LOG_CFG, otawa::Monitor::LOG_DEPS, otawa::Monitor::LOG_PROC, otawa::Monitor::logFor(), otawa::AbstractRegistration::name(), otawa::Processor::name(), otawa::Processor::prepare(), otawa::Processor::processWorkSpace(), otawa::FeatureUsage::provide, otawa::WorkSpace::provide(), otawa::Processor::recordsStats(), elm::genstruct::Vector< T >::remove(), otawa::FeatureUsage::require, otawa::WorkSpace::require(), otawa::Processor::RUNTIME, otawa::Processor::setup(), otawa::Processor::stats, otawa::FeatureUsage::use, otawa::AbstractRegistration::uses(), otawa::Processor::version(), and otawa::Processor::ws.

Referenced by otawa::PFGBuilder::finalizeBB(), otawa::WorkSpace::getCFGInfo(), otawa::FlowFactLoader::onIgnoreEntry(), otawa::SilentFeature::process(), otawa::ActualFeature::process(), otawa::DynProcessor::process(), otawa::Feature< T, C >::process(), otawa::p::feature::process(), otawa::TextDecoder::processWorkSpace(), otawa::cat::CATBuilder::processWorkSpace(), and otawa::DelayedBuilder::setup().

void otawa::etime::EdgeTimeBuilder::processBB ( WorkSpace ws,
CFG cfd,
BasicBlock bb 
)
protectedvirtual

Perform the work of the given basic block.

Parameters
fwContainer framework.
cfgParent CFG.
bbBasic block to process.

Implements otawa::BBProcessor.

References edge, in, otawa::BasicBlock::isEnd(), and processEdge().

void otawa::Processor::processFrameWork ( WorkSpace fw)
protectedvirtualinherited

Process the given workspace.

Parameters
fwWorkspace to process.
Deprecated:
Use processWorkSpace() instead.

Referenced by otawa::Processor::processWorkSpace().

void otawa::etime::EdgeTimeBuilder::processTimes ( const config_list_t confs)
protected

Process the computed time and generate associated objective functions and constraints.

References applyWeightedSplit().

Referenced by processSequence().

void otawa::GraphBBTime< ParExeGraph >::processWorkSpace ( WorkSpace ws)
virtualinherited

Process the given framework.

Parameters
fwFramework to process.
Deprecated:
Use processWorkSpace() instead.

Reimplemented from otawa::CFGProcessor.

Progress & otawa::Processor::progress ( void  )
inlineprotectedinherited

Get the current progress handler.

Returns
Progress handler.
void otawa::Processor::provide ( const AbstractFeature feature)
protectedinherited
bool otawa::Processor::recordsStats ( void  ) const
inlineprotectedinherited

Test if the statictics mode is activated.

Returns
True if the statistics mode is activated, false else.

Referenced by otawa::Processor::init(), otawa::Processor::process(), and otawa::CFGProcessor::processWorkSpace().

void otawa::Processor::recordStat ( const AbstractFeature feature,
StatCollector collector 
)
protectedinherited

Add a statistics collector to the current workspace collection.

The statistics object is tracked and linked to the feature. In case of the feature invalidation, the statistics information instance is purged of the statistics collector.

Parameters
featureFeature to link the collector to.
collectorStatistics collector to add.

References otawa::StatInfo::add(), otawa::Processor::addCleaner(), otawa::Processor::isCollectingStats(), and otawa::Processor::workspace().

Referenced by otawa::CAT2OnlyConstraintBuilder::collectStats(), otawa::ipet::WCETComputation::collectStats(), and otawa::dcache::CatConstraintBuilder::collectStats().

void otawa::Processor::requireDyn ( WorkSpace ws,
const PropList props 
)
protectedvirtualinherited

Method called after registration requirements to support dynamic requirements.

As a default, do nothing.

Parameters
wsCurrent workspace.
propsCurrent properties.
genstruct::Vector<Resource *>* otawa::etime::EdgeTimeBuilder::ressources ( void  )
inlineprotected
void otawa::etime::EdgeTimeBuilder::rollback ( Event event,
ParExeInst inst 
)
private

Rollback the given event to the given instruction.

Parameters
eventEvent to apply.
instInstruction to apply to.

References _, bedge, otawa::etime::BRANCH, cerr, otawa::etime::FETCH, otawa::ParExeInst::fetchNode(), graph, otawa::etime::Event::kind(), otawa::ParExeNode::latency(), otawa::etime::MEM, otawa::GenGraph< N, E >::remove(), and otawa::ParExeNode::setLatency().

Referenced by processSequence().

void otawa::etime::EdgeTimeBuilder::setup ( WorkSpace ws)
protectedvirtual

This method is called before an anlysis to let the processor do some initialization.

Parameters
wsProcessed workspace.

Reimplemented from otawa::Processor.

References sys, and otawa::ipet::SYSTEM.

void otawa::Monitor::setWorkspace ( WorkSpace workspace)
inlineprotectedinherited

Set the current workspace.

Parameters
workspaceNew current workspace.
void otawa::etime::EdgeTimeBuilder::sortEvents ( event_list_t events,
BasicBlock bb,
place_t  place,
Edge edge = 0 
)
private

Sort events according the instructions they apply to.

Parameters
eventsData structure to store events to.
bbBasicBlock to look events in.
placePlace in the sequence.
edgeEdge events to include.

References otawa::etime::EVENT, IN_EDGE, elm::pair(), and elm::genstruct::Vector< T >::push().

Referenced by processEdge().

int otawa::etime::EdgeTimeBuilder::splitConfs ( const config_list_t confs,
const event_list_t events,
bool &  lower 
)
private

Partition the configuration times in two sets: configuration times in [0, p[ are the low time set (LTS) and the configuration times in [p, ...] are the high time set (HTS).

Parameters
confsConfiguration set to find partition for.
eventsList of events.
Returns
Position of partition in confs.

References otawa::etime::ConfigSet::isFeasible(), elm::genstruct::Vector< T >::length(), otawa::etime::ConfigSet::pop(), and otawa::etime::ConfigSet::push().

string otawa::CFGProcessor::str ( const Address address)
protectedinherited

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.

Parameters
addressAddress to display.
Returns
Address transformed in string.

References otawa::Address::null.

Referenced by otawa::ipet::FlowFactLoader::processBB().

string otawa::CFGProcessor::str ( const Address base,
const Address address 
)
protectedinherited

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.

Parameters
baseBase address of the function containing the give address.
addressAddress to display.
Returns
Address transformed in string.

References _, otawa::CFGProcessor::_cfg, otawa::ProgItem::address(), otawa::ot::address(), otawa::WorkSpace::findInstAt(), otawa::CFG::firstInst(), otawa::FUNCTION_LABEL, hex(), otawa::Address::isNull(), otawa::Address::offset(), and otawa::Processor::workspace().

template<class T >
T* otawa::Processor::track ( const AbstractFeature feature,
T *  object 
)
inlineprotectedinherited
template<class T >
void otawa::Processor::track ( const AbstractFeature feature,
const Ref< T *, Identifier< T * > > &  ref 
)
inlineprotectedinherited

Track the release of an allocated object assigned to an identifier relatively to the given feature.

When the feature is deleted, the object is fried and the identifier is removed. It is used as below:

track(MY_FEATURE, MY_ID(props) = value);
Parameters
featureLinked feature.
refReference to the identifier to remove.
template<class T >
void otawa::Processor::track ( const AbstractFeature feature,
const Ref< T *, const Identifier< T * > > &  ref 
)
inlineprotectedinherited

Track the release of an allocated object assigned to an identifier relatively to the given feature.

When the feature is deleted, the object is fried and the identifier is removed. It is used as below:

track(MY_FEATURE, MY_ID(props) = value);
Parameters
featureLinked feature.
refReference to the identifier to remove.
template<class T >
void otawa::BBProcessor::trackBB ( const AbstractFeature feature,
const Identifier< T * > &  id 
)
inlineprotectedinherited

Track and delete the content of the given identifier on each basic block.

Parameters
featureFeature this identifier is linked to.
idIdentifier of the properties to remove.
template<class T >
void otawa::BBProcessor::trackBB ( const AbstractFeature feature,
const Identifier< T > &  id 
)
inlineprotectedinherited

Track and remove properties put on basic blocks.

Parameters
featureFeature this identifier is linked to.
idIdentifier of the properties to remove.
void otawa::Processor::use ( const AbstractFeature feature)
protectedinherited

Usually called from a processor constructor, this method records a feature as used by the work of the current processor.

Parameters
featureUsed feature.

References otawa::Processor::_reg, otawa::AbstractRegistration::features, otawa::Monitor::flags, otawa::Processor::IS_ALLOCATED, otawa::Processor::isAllocated(), otawa::Processor::isPrepared(), and otawa::FeatureUsage::use.

elm::Version otawa::Processor::version ( void  ) const
inlineinherited
WorkSpace * otawa::Monitor::workspace ( void  )
inlineinherited

Get the current workspace.

Returns
Current workspace.

Member Data Documentation

bool otawa::GraphBBTime< ParExeGraph >::_do_consider_icache
protectedinherited
bool otawa::GraphBBTime< ParExeGraph >::_do_output_graphs
protectedinherited

Referenced by processSequence().

bool otawa::etime::EdgeTimeBuilder::_explicit
private

Referenced by configure(), and contributeSplit().

elm::genstruct::Vector<Resource *> otawa::GraphBBTime< ParExeGraph >::_hw_resources
protectedinherited

Referenced by make(), and ressources().

ParExeProc* otawa::GraphBBTime< ParExeGraph >::_microprocessor
protectedinherited

Referenced by make().

genstruct::Vector<event_t> otawa::etime::EdgeTimeBuilder::all_events
private
ParExeEdge* otawa::etime::EdgeTimeBuilder::bedge
private

Referenced by apply(), and rollback().

ParExeNode* otawa::etime::EdgeTimeBuilder::bnode
private

Referenced by getBranchNode(), and processEdge().

Identifier< bool > otawa::Processor::COLLECT_STATS
staticinherited

This property allows to activate collection of statistics for the work of the current processor.

See also
StatInfo class.

Referenced by otawa::Processor::init().

genstruct::HashTable<Event *, EventCollector *> otawa::etime::EdgeTimeBuilder::colls
private

Referenced by cleanup(), and get().

const t::uint32 otawa::Monitor::CUSTOM_SHIFT = 16
staticprotectedinherited
int otawa::etime::EdgeTimeBuilder::event_th
private

Referenced by configure(), and processEdge().

t::uint32 otawa::Monitor::flags
protectedinherited

Contains various bit flags.

Bits from 0 to CUSTOM_SHIFT - 1 are private while bits from CUSTOM_SHIFT to 31 may be customized. To build a bit mask for custom bit i, the CUSTOM_SHIFT may be used as below:

static const t::uint32 MY_MASK = 1 << (i + CUSTOM_SHIFT);

Referenced by otawa::Processor::init(), otawa::Processor::invalidate(), otawa::Processor::prepare(), otawa::Processor::Processor(), otawa::Processor::provide(), otawa::Processor::require(), otawa::Processor::use(), and otawa::Processor::~Processor().

ParExeGraph* otawa::etime::EdgeTimeBuilder::graph
private

Referenced by clean(), make(), processSequence(), and rollback().

const hard::Cache* otawa::GraphBBTime< ParExeGraph >::icache
protectedinherited
const t::uint32 otawa::Processor::IS_ALLOCATED = 0x04 << CUSTOM_SHIFT
staticprotectedinherited
const t::uint32 otawa::Processor::IS_COLLECTING = 0x10 << CUSTOM_SHIFT
staticprotectedinherited

Referenced by otawa::Processor::init().

const t::uint32 otawa::Processor::IS_PREPARED = 0x08 << CUSTOM_SHIFT
staticprotectedinherited
const t::uint32 otawa::Processor::IS_TIMED = 0x01 << CUSTOM_SHIFT
staticprotectedinherited

Referenced by otawa::Processor::init().

const t::uint32 otawa::Monitor::IS_VERBOSE = 0x01
staticprotectedinherited
elm::io::Output otawa::Monitor::log
inherited

Provide a stream to perform log output.

Should be used only when verbosity is activated.

Referenced by otawa::CFGBuilder::addCFG(), otawa::ipet::ConstraintLoader::addConstraint(), otawa::PFGBuilder::addFunction(), otawa::ccg::LBlockBuilder::addLBlock(), otawa::LBlockBuilder::addLBlock(), applyFloppySplit(), applyStrictSplit(), applyWeightedSplit(), otawa::DelayedBuilder::buildBB(), otawa::CFGBuilder::buildCFG(), otawa::branch::BranchBuilder::categorize(), otawa::ipet::FlowFactLoader::cleanup(), otawa::ipet::TrivialDataCacheManager::configure(), otawa::ACSBuilder::configure(), displayConfs(), otawa::ipet::ConstraintLoader::error(), genForOneCost(), otawa::ipet::ConstraintLoader::getBB(), otawa::VarTextDecoder::getInst(), otawa::ipet::ConstraintLoader::getVar(), otawa::etime::StandardEventBuilder::handleVariableBranchPred(), otawa::Processor::init(), ipet_error(), otawa::FlowFactLoader::load(), otawa::script::Script::makeConfig(), makeSplit(), otawa::ipet::ConstraintLoader::newEdgeVar(), otawa::CFGBuilder::nextBB(), otawa::script::Script::onError(), otawa::FlowFactLoader::onLoop(), otawa::FlowFactLoader::onMemoryAccess(), otawa::FlowFactLoader::onNoInline(), otawa::FlowFactLoader::onReturn(), otawa::FlowFactLoader::onSetInlining(), otawa::script::Script::onWarning(), otawa::Processor::process(), otawa::branch::OnlyConsBuilder::processBB(), otawa::branch::CondNumber::processBB(), otawa::ipet::FlowFactConstraintBuilder::processBB(), otawa::dcache::CLPBlockBuilder::processBB(), otawa::etime::StandardEventBuilder::processBB(), otawa::dcache::BlockBuilder::processBB(), otawa::CFGCheckSummer::processCFG(), otawa::CAT2Builder::processCFG(), otawa::ipet::ConstraintLoader::processCFG(), otawa::ContextualProcessor::processCFG(), otawa::BBProcessor::processCFG(), processEdge(), otawa::VarTextDecoder::processEntry(), otawa::dcache::CATBuilder::processLBlockSet(), otawa::ACSMayBuilder::processLBlockSet(), otawa::CAT2Builder::processLBlockSet(), otawa::dcache::ACSBuilder::processLBlockSet(), processSequence(), otawa::TextDecoder::processWorkSpace(), otawa::VarTextDecoder::processWorkSpace(), otawa::LBlockProcessor::processWorkSpace(), otawa::ipet::WCETComputation::processWorkSpace(), otawa::FixedTextDecoder::processWorkSpace(), otawa::dcache::CatConstraintBuilder::processWorkSpace(), otawa::StackAnalysis::processWorkSpace(), otawa::ipet::ILPSystemGetter::processWorkSpace(), otawa::branch::BranchBuilder::processWorkSpace(), otawa::CFGCollector::processWorkSpace(), otawa::CFGProcessor::processWorkSpace(), otawa::Virtualizer::processWorkSpace(), otawa::clp::Analysis::processWorkSpace(), otawa::ilp::Output::setup(), otawa::BBRatioDisplayer::setup(), otawa::dcache::BlockBuilder::setup(), otawa::CFGBuilder::thisBB(), otawa::ipet::FlowFactLoader::transfer(), otawa::Virtualizer::virtualize(), otawa::Processor::warn(), and otawa::script::Script::work().

Identifier< elm::io::OutStream * > & otawa::Processor::LOG = otawa::LOG
staticinherited

This property identifier is used for setting the log stream used by the processor to write messages (information, warning, error).

Deprecated:

Referenced by otawa::Processor::init(), otawa::Manager::loadBin(), and otawa::LiExeGraphBBTime::processBB().

Identifier< Processor::log_level_t > & otawa::Processor::LOG_LEVEL = otawa::LOG_LEVEL
staticinherited

Property passed in the configuration property list of a processor to select the log level between LOG_PROC, LOG_CFG or LOG_BB.

Deprecated:

Referenced by otawa::Application::run().

const hard::Memory* otawa::GraphBBTime< ParExeGraph >::mem
protectedinherited
Monitor & otawa::Monitor::null = __null_mon
staticinherited

Monitor that output nothing.

Identifier< elm::io::OutStream * > & otawa::Processor::OUTPUT = otawa::OUTPUT
staticinherited

This property identifier is used for setting the output stream used by the processor to write results.

Deprecated:

Referenced by otawa::Processor::init().

bool otawa::etime::EdgeTimeBuilder::predump
private

Referenced by configure(), and processSequence().

Identifier< Progress * > otawa::Processor::PROGRESS
staticinherited

Install.

Referenced by otawa::Processor::init().

Identifier<bool> otawa::Processor::RECURSIVE
staticinherited
p::declare otawa::etime::EdgeTimeBuilder::reg
static
Initial value:
= p::init("otawa::etime::EdgeTimeBuilder", Version(1, 0, 0))
.maker<EdgeTimeBuilder>()
.require(WEIGHT_FEATURE)
.require(EVENTS_FEATURE)
Identifier< elm::system::time_t > otawa::Processor::RUNTIME
staticinherited

This property identifier is used to store in the statistics of a processor the overall run time of the processor work.

Referenced by otawa::Processor::process().

ParExeSequence* otawa::etime::EdgeTimeBuilder::seq
private
BasicBlock* otawa::etime::EdgeTimeBuilder::source
private
Identifier< PropList * > otawa::Processor::STATS
staticinherited

This property identifiers is used to pass a property list to the processor that will be used to store statistics about the performed work.

Implicitly, passing such a property activates the statistics recording facilities.

Referenced by otawa::Processor::init().

ilp::System* otawa::etime::EdgeTimeBuilder::sys
private
BasicBlock * otawa::etime::EdgeTimeBuilder::target
private
Identifier< bool > otawa::Processor::TIMED
staticinherited

If the value of the associated property is true (default to false), time statistics will also be collected with other processor statistics.

Passing such a property without PROC_STATS has no effects.

Referenced by otawa::Processor::init().

Identifier< bool > & otawa::Processor::VERBOSE = otawa::VERBOSE
staticinherited

This property activates the verbose mode of the processor: information about the processor work will be displayed.

Deprecated:

Referenced by otawa::Application::run(), and otawa::Manager::setVerbosity().


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