Otawa  0.10
otawa::dcache Namespace Reference

Classes

class  ACS
 Representation of an Abstract Cache State where each data cache block is represented by its age. More...
 
class  ACSBuilder
 This builder performs analysis of the L1 data cache and produces ACS for MUST and, according to the configuration proerties, persistence. More...
 
class  ACSMayBuilder
 This processor computes the ACS for the MAY cache analysis. More...
 
class  Block
 Represents a single block used by the data cache. More...
 
class  BlockAccess
 A block access represents a data memory access of an instruction. More...
 
class  BlockBuilder
 Build the list of blocks used for L1 data cache analysis and decorate each basic block with the list of performed accesses. More...
 
class  BlockCollection
 A block collections stores the list of data blocks used in a task for a specific line. More...
 
class  CATBuilder
 Processor to get the categories for each block access of a data cache. More...
 
class  CatConstraintBuilder
 This processor allocates the variable to count misses of a data cache and makes the constraints for these variables. More...
 
class  CLPBlockBuilder
 Build the list of blocks used for L1 data cache analysis and decorate each basic block with the list of performed accesses, based on a CLP analysis. More...
 
class  DirtyManager
 A dirty manager allows to exploit the results of the dirty analysis (DIRTY_FEATURE). More...
 
class  MAYProblem
 
class  MUSTPERS
 
class  MUSTProblem
 The MUST problem provides the abstract interpretation of L1 data cache for the MUST case. More...
 
class  PERSProblem
 Problem for computing the PERS ACS of L-blocks. More...
 
class  WCETFunctionBuilder
 Default implementation of feature WCET_FUNCTION_FEATURE. More...
 

Typedefs

typedef elm::genstruct::Vector
< MAYProblem::Domain * > 
may_acs_t
 
typedef enum
otawa::dcache::data_fmlevel_t 
data_fmlevel_t
 
typedef
genstruct::AllocatedTable< ACS * > 
acs_stack_t
 
typedef genstruct::Vector< ACS * > acs_table_t
 
typedef genstruct::Vector
< acs_stack_t
acs_stack_table_t
 

Enumerations

enum  data_fmlevel_t { DFML_INNER = 0, DFML_OUTER = 1, DFML_MULTI = 2, DFML_NONE }
 
enum  purge_t {
  INV_PURGE = 0, NO_PURGE = 1, PERS_PURGE = 2, MAY_PURGE = 3,
  MUST_PURGE = 4
}
 

Functions

elm::io::Outputoperator<< (elm::io::Output &output, const MUSTProblem::Domain &dom)
 
elm::io::Outputoperator<< (elm::io::Output &output, const MAYProblem::Domain &dom)
 
io::Outputoperator<< (io::Output &out, const ACS &acs)
 
io::Outputoperator<< (io::Output &out, const Block &block)
 
io::Outputoperator<< (io::Output &out, const BlockAccess &acc)
 
io::Outputoperator<< (io::Output &out, const Pair< int, BlockAccess * > &v)
 
io::Outputoperator<< (io::Output &out, BlockAccess::action_t action)
 
io::Outputoperator<< (io::Output &out, const DirtyManager::t &v)
 
io::Outputoperator<< (io::Output &out, purge_t purge)
 
elm::io::Outputoperator<< (elm::io::Output &output, const PERSProblem::Domain &dom)
 
p::feature MUST_ACS_FEATURE ("otawa::dcache::MUST_ACS_FEATURE", new Maker< ACSBuilder >())
 This feature ensures that the ACS (Abstract Cache State) for the MUST data cache analysis has been built. More...
 
Identifier< genstruct::Vector
< ACS * > * > 
MUST_ACS ("otawa::dcache::MUST_ACS", 0)
 Provide for each basic block the ACS (Abstract Cache State) of the data cache for each set of the cache. More...
 
Identifier< Vector< ACS * > * > ENTRY_MUST_ACS ("otawa::dcache::ENTRY_MUST_ACS", 0)
 This configuration property is shared by all processor implementing the MUST_ACS_FEATURE. More...
 
Identifier< bool > DATA_PSEUDO_UNROLLING ("otawa::dcache::PSEUDO_UNROLLING", false)
 This configuration property activates, if set to true (default), the pseudo-unrolling for the cache analysis of ACSBuilder. More...
 
Identifier< data_fmlevel_tDATA_FIRSTMISS_LEVEL ("otawa::dcache::FIRSTMISS_LEVEL", DFML_MULTI)
 According to its value, select the way the first-miss analysis is performed: – analysis of inner loop (average precision but costly in time),. More...
 
p::feature PERS_ACS_FEATURE ("otawa::dcache::PERS_ACS_FEATURE", new Maker< ACSBuilder >())
 Feature ensuring that the persistence analysis has been performed. More...
 
Identifier< genstruct::Vector
< ACS * > * > 
PERS_ACS ("otawa::dcache::PERS_ACS", 0)
 This identifier gives an array of ACS for the persistence analysis. More...
 
Identifier< genstruct::Vector
< ACS * > * > 
ENTRY_PERS_ACS ("otawa::dcache::ENTRY_PERS_ACS", 0)
 This configuration property allows to provide an non-empty ACS for the persistence analysis. More...
 
Identifier< acs_stack_table_t * > LEVEL_PERS_ACS ("otawa::dcache::LEVEL_PERS_ACS", 0)
 This identifier allows to get an array on a stack of ACS, one entry for each set of the analyzed cache. More...
 
p::feature MAY_ACS_FEATURE ("otawa::dcache::MAY_ACS_FEATURE", new Maker< ACSMayBuilder >())
 This feature that the MAY analysis has been performed for the L1 data cache and that the ACS are provided at the entry of each basic block. More...
 
Identifier< Vector< ACS * > * > MAY_ACS ("otawa::dcache::MAY_ACS", 0)
 Provide the ACS for the MAY analysis. More...
 
Identifier< Vector< ACS * > * > ENTRY_MAY_ACS ("otawa::dcache::ENTRY_MAY_ACS", 0)
 Configuration property giving the ACS at the startup of the task. More...
 
Identifier< AddressINITIAL_SP ("otawa::dcache::INITIAL_SP", Address::null)
 Provide the address of the stack pointer at the start of the task. More...
 
p::feature DATA_BLOCK_FEATURE ("otawa::dcache::DATA_BLOCK_FEATURE", new Maker< BlockBuilder >())
 This feature ensures that information about the data cache accesses has been provided on each basic block. More...
 
Identifier< const
BlockCollection * > 
DATA_BLOCK_COLLECTION ("otawa::dcache::DATA_BLOCK_COLLECTION", 0)
 Gives the list of used blocks in the data cache. More...
 
Identifier< Pair< int,
BlockAccess * > > 
DATA_BLOCKS ("otawa::dcache::DATA_BLOCKS", pair(0,(BlockAccess *) 0))
 Give the list of accesses to the data cache. More...
 
p::feature CATEGORY_FEATURE ("otawa::dcache::CATEGORY_FEATURE", new Maker< CATBuilder >())
 This features ensures that a category each data block access have received a category describing its hit/miss behavior. More...
 
Identifier< BasicBlock * > CATEGORY_HEADER ("otawa::dcache::CATEGORY_HEADER", 0)
 When a cache access has a category of cache::FIRST_MISS, the "first" part is relative to a particular loop whose header is given by this property. More...
 
Identifier< cache::category_tCATEGORY ("otawa::dcache::category", cache::INVALID_CATEGORY)
 Gives the category for a data cache block access. More...
 
p::feature CONSTRAINTS_FEATURE ("otawa::dcache::CONSTRAINTS_FEATURE", new Maker< CatConstraintBuilder >())
 This feature ensures that the constraints associated with each data cache block categories has been translated to ILP constraints and that miss count variables are declared. More...
 
Identifier< ilp::Var * > MISS_VAR ("otawa::dcache::MISS_VAR", 0)
 This property gives the variable counting the number of misses of a BlockAccess. More...
 
p::feature WCET_FUNCTION_FEATURE ("otawa::dcache::WCET_FUNCTION_FEATURE", new Maker< WCETFunctionBuilder >())
 This feature provides an easy and naive way to add data cache time to the WCET computation by adding to the objective function representing the WCET the miss time multiplied by the number of occurrences of the miss. More...
 
p::feature DIRTY_FEATURE ("otawa::dcache::DIRTY_FEATURE", new Maker< DirtyAnalysis >())
 This feature is only useful for data cache with write-back mechanism. More...
 
Identifier< AllocatedTable
< DirtyManager::t > > 
DIRTY ("otawa::dcache::DIRTY", AllocatedTable< DirtyManager::t >::EMPTY)
 This property contains information about the dirty state of a block. More...
 
p::feature PURGE_FEATURE ("otawa::dcache::PURGE_FEATURE", new Maker< PurgeAnalysis >())
 
Identifier< purge_tPURGE ("otawa::dcache::PURGE", INV_PURGE)
 

Variables

p::feature DATA_BLOCK_FEATURE
 This feature ensures that information about the data cache accesses has been provided on each basic block. More...
 
p::feature CLP_BLOCK_FEATURE
 
Identifier< Pair< int,
BlockAccess * > > 
DATA_BLOCKS
 Give the list of accesses to the data cache. More...
 
Identifier< const
BlockCollection * > 
DATA_BLOCK_COLLECTION
 Gives the list of used blocks in the data cache. More...
 
Identifier< AddressINITIAL_SP
 Provide the address of the stack pointer at the start of the task. More...
 
p::feature MUST_ACS_FEATURE
 This feature ensures that the ACS (Abstract Cache State) for the MUST data cache analysis has been built. More...
 
p::feature PERS_ACS_FEATURE
 Feature ensuring that the persistence analysis has been performed. More...
 
Identifier< acs_table_t * > MUST_ACS
 Provide for each basic block the ACS (Abstract Cache State) of the data cache for each set of the cache. More...
 
Identifier< acs_table_t * > ENTRY_MUST_ACS
 This configuration property is shared by all processor implementing the MUST_ACS_FEATURE. More...
 
Identifier< acs_table_t * > PERS_ACS
 This identifier gives an array of ACS for the persistence analysis. More...
 
Identifier< acs_table_t * > ENTRY_PERS_ACS
 This configuration property allows to provide an non-empty ACS for the persistence analysis. More...
 
Identifier< acs_stack_table_t * > LEVEL_PERS_ACS
 This identifier allows to get an array on a stack of ACS, one entry for each set of the analyzed cache. More...
 
Identifier< bool > DATA_PSEUDO_UNROLLING
 This configuration property activates, if set to true (default), the pseudo-unrolling for the cache analysis of ACSBuilder. More...
 
Identifier< data_fmlevel_tDATA_FIRSTMISS_LEVEL
 According to its value, select the way the first-miss analysis is performed: – analysis of inner loop (average precision but costly in time),. More...
 
p::feature CATEGORY_FEATURE
 This features ensures that a category each data block access have received a category describing its hit/miss behavior. More...
 
Identifier< cache::category_tCATEGORY
 Gives the category for a data cache block access. More...
 
Identifier< BasicBlock * > CATEGORY_HEADER
 When a cache access has a category of cache::FIRST_MISS, the "first" part is relative to a particular loop whose header is given by this property. More...
 
p::feature CONSTRAINTS_FEATURE
 This feature ensures that the constraints associated with each data cache block categories has been translated to ILP constraints and that miss count variables are declared. More...
 
Identifier< ilp::Var * > MISS_VAR
 This property gives the variable counting the number of misses of a BlockAccess. More...
 
Identifier< Vector< ACS * > * > ENTRY_MAY_ACS
 Configuration property giving the ACS at the startup of the task. More...
 
p::feature MAY_ACS_FEATURE
 This feature that the MAY analysis has been performed for the L1 data cache and that the ACS are provided at the entry of each basic block. More...
 
Identifier< Vector< ACS * > * > MAY_ACS
 Provide the ACS for the MAY analysis. More...
 
p::feature DIRTY_FEATURE
 This feature is only useful for data cache with write-back mechanism. More...
 
Identifier< AllocatedTable
< DirtyManager::t > > 
DIRTY
 This property contains information about the dirty state of a block. More...
 
p::feature PURGE_FEATURE
 
Identifier< purge_tPURGE
 
p::feature WCET_FUNCTION_FEATURE
 This feature provides an easy and naive way to add data cache time to the WCET computation by adding to the objective function representing the WCET the miss time multiplied by the number of occurrences of the miss. More...
 

Typedef Documentation

Enumeration Type Documentation

Enumerator
DFML_INNER 
DFML_OUTER 
DFML_MULTI 
DFML_NONE 
Enumerator
INV_PURGE 
NO_PURGE 
PERS_PURGE 
MAY_PURGE 
MUST_PURGE 

Function Documentation

Identifier<AllocatedTable<DirtyManager::t> > otawa::dcache::DIRTY ( "otawa::dcache::DIRTY"  ,
AllocatedTable< DirtyManager::t >::EMPTY   
)

This property contains information about the dirty state of a block.

To use it, creates a DirtyManager with the target row of the data cache, the DIRTY value to methods mayBeDirty() or mustBeDirty() and apply the sequence of BlockAccess of the concerned basic block.

Hook

p::feature otawa::dcache::DIRTY_FEATURE ( "otawa::dcache::DIRTY_FEATURE"  ,
new Maker< DirtyAnalysis >  () 
)

This feature is only useful for data cache with write-back mechanism.

In this case, it is needed before wiping out a block if it dirty (modified) or not. If it is dirty, additional time is spent writing its value back to memory. Notice that the dirty state is made of a MAY component (better case dirty) and a MUST component (worst case dirty). If the block is in the MUST set, it is asserted it is dirty. If the block is not in the MAY set, it is asserted it is not dirty. Else it must be dirty or not (not-classified case).

Properties

Default Processor

  • DirtyAnalysis
Identifier<Address> otawa::dcache::INITIAL_SP ( "otawa::dcache::INITIAL_SP"  ,
Address::null   
)

Provide the address of the stack pointer at the start of the task.

io::Output& otawa::dcache::operator<< ( io::Output &  out,
const ACS &  acs 
)
inline

References out, and otawa::dcache::ACS::print().

io::Output& otawa::dcache::operator<< ( io::Output &  out,
const Block &  block 
)
inline
elm::io::Output & otawa::dcache::operator<< ( elm::io::Output output,
const MAYProblem::Domain &  dom 
)
elm::io::Output & otawa::dcache::operator<< ( elm::io::Output output,
const MUSTProblem::Domain &  dom 
)
elm::io::Output & otawa::dcache::operator<< ( elm::io::Output output,
const PERSProblem::Domain &  dom 
)
io::Output& otawa::dcache::operator<< ( io::Output &  out,
const BlockAccess &  acc 
)
inline
io::Output& otawa::dcache::operator<< ( io::Output &  out,
const Pair< int, BlockAccess * > &  v 
)
inline

References out.

io::Output & otawa::dcache::operator<< ( io::Output &  out,
BlockAccess::action_t  action 
)

References out.

io::Output& otawa::dcache::operator<< ( io::Output &  out,
const DirtyManager::t &  v 
)
inline
io::Output & otawa::dcache::operator<< ( io::Output &  out,
purge_t  purge 
)
Identifier<purge_t> otawa::dcache::PURGE ( "otawa::dcache::PURGE"  ,
INV_PURGE   
)
p::feature otawa::dcache::PURGE_FEATURE ( "otawa::dcache::PURGE_FEATURE"  ,
new Maker< PurgeAnalysis >  () 
)
p::feature otawa::dcache::WCET_FUNCTION_FEATURE ( "otawa::dcache::WCET_FUNCTION_FEATURE"  ,
new Maker< WCETFunctionBuilder >  () 
)

This feature provides an easy and naive way to add data cache time to the WCET computation by adding to the objective function representing the WCET the miss time multiplied by the number of occurrences of the miss.

Variable Documentation

p::feature otawa::dcache::CLP_BLOCK_FEATURE
Identifier<AllocatedTable<DirtyManager::t> > otawa::dcache::DIRTY("otawa::dcache::DIRTY", AllocatedTable< DirtyManager::t >::EMPTY)

This property contains information about the dirty state of a block.

To use it, creates a DirtyManager with the target row of the data cache, the DIRTY value to methods mayBeDirty() or mustBeDirty() and apply the sequence of BlockAccess of the concerned basic block.

Hook

p::feature otawa::dcache::DIRTY_FEATURE("otawa::dcache::DIRTY_FEATURE", new Maker< DirtyAnalysis >())

This feature is only useful for data cache with write-back mechanism.

In this case, it is needed before wiping out a block if it dirty (modified) or not. If it is dirty, additional time is spent writing its value back to memory. Notice that the dirty state is made of a MAY component (better case dirty) and a MUST component (worst case dirty). If the block is in the MUST set, it is asserted it is dirty. If the block is not in the MAY set, it is asserted it is not dirty. Else it must be dirty or not (not-classified case).

Properties

Default Processor

  • DirtyAnalysis
Identifier<Address> otawa::dcache::INITIAL_SP("otawa::dcache::INITIAL_SP", Address::null)

Provide the address of the stack pointer at the start of the task.

Referenced by otawa::dcache::BlockBuilder::configure().

Identifier<purge_t> otawa::dcache::PURGE("otawa::dcache::PURGE", INV_PURGE)
p::feature otawa::dcache::PURGE_FEATURE("otawa::dcache::PURGE_FEATURE", new Maker< PurgeAnalysis >())
p::feature otawa::dcache::WCET_FUNCTION_FEATURE("otawa::dcache::WCET_FUNCTION_FEATURE", new Maker< WCETFunctionBuilder >())

This feature provides an easy and naive way to add data cache time to the WCET computation by adding to the objective function representing the WCET the miss time multiplied by the number of occurrences of the miss.