Otawa  0.10
CLP Analysis

Classes

class  otawa::clp::Value
 A set of values represented by a Circular Linear Progression. More...
 
class  otawa::clp::State
 The abstract state of the computer (abstract domain). More...
 
class  otawa::clp::ClpStatePack::Context
 A context allows to share a CLP problem through different constructions of ClpStatePack. More...
 
class  otawa::clp::Manager
 This class allows to exploit the result of a CLP analysis. More...
 

Functions

SilentFeature otawa::clp::FEATURE ("otawa::clp::FEATURE", maker)
 This features ensure that the clp analysis has been identified. More...
 
Identifier< clp::Stateotawa::clp::STATE_IN ("otawa::clp::STATE_IN")
 Put on a basic block, it's the CLP state at the begining of the block. More...
 
Identifier< clp::Stateotawa::clp::STATE_OUT ("otawa::clp::STATE_OUT")
 Put on a basic block, it's the CLP state at the end of the block. More...
 

Variables

SilentFeature otawa::clp::FEATURE
 This features ensure that the clp analysis has been identified. More...
 
Identifier< clp::State > otawa::clp::STATE_IN
 Put on a basic block, it's the CLP state at the begining of the block. More...
 
Identifier< clp::State > otawa::clp::STATE_OUT
 Put on a basic block, it's the CLP state at the end of the block. More...
 
static Identifier< init_t > otawa::clp::Analysis::INITIAL
 Initial state of the analysis. More...
 

Detailed Description

Circular-Linear Progression analysis is a data flow analysis that attempts to assign to each register or to each memory cell a triplet (b, d, n) with b, d, n integers. This triplet represent the set if values {b + k d / 0 <= k <= n }. Such a representation fits well the cases of array addresses where b is the base address of the array, d the size of the array elements and n the number of elements. Therefore, it provides interesting result when processing machine language.

Ensuring it has been performed needs only a requirement on otawa::clp::FEATURE.

This analysis is performed on the semantic (Semantic Instructions) representation of language machine. To use the result of the analysis requires to handle otawa::clp::State at the entry (otawa::clp::STATE_IN) or at the exit (otawa::clp::STATE_OUT) of a basic block. To get a more precise few of the program state inside the basic block, you have to declare otawa::clp::Manager and to use it to traverse semantic instructions paths as in the example below:

#include <otawa/clp/features.h>
...
otawa::clp::Manager man;
man.start(bb);
do {
// do something
} while(man.next());

Function Documentation

SilentFeature otawa::clp::FEATURE ( "otawa::clp::FEATURE"  ,
maker   
)

This features ensure that the clp analysis has been identified.

Default Processor
  • otawa::ClpAnalysis
Hooked Propertues
Identifier<clp::State> otawa::clp::STATE_IN ( "otawa::clp::STATE_IN"  )

Put on a basic block, it's the CLP state at the begining of the block.

Identifier<clp::State> otawa::clp::STATE_OUT ( "otawa::clp::STATE_OUT"  )

Put on a basic block, it's the CLP state at the end of the block.

Variable Documentation

SilentFeature otawa::clp::FEATURE("otawa::clp::FEATURE", maker)

This features ensure that the clp analysis has been identified.

Default Processor
  • otawa::ClpAnalysis
Hooked Propertues

Referenced by otawa::DeadCodeAnalysis::DeadCodeAnalysis(), and otawa::clp::Analysis::processWorkSpace().

Identifier< Analysis::init_t > otawa::clp::Analysis::INITIAL
static

Initial state of the analysis.

This identifier is a configuration for the Analysis processor.

It allows to provide initial values for the registers involved in the analysis. The argument is a pair of register and its initial value as an address. A null address express the fact that the register is initialized with the default stack pointer address.

Referenced by otawa::clp::Analysis::configure().

Identifier<clp::State> otawa::clp::STATE_IN("otawa::clp::STATE_IN")

Put on a basic block, it's the CLP state at the begining of the block.

Referenced by otawa::clp::ClpStatePack::ClpStatePack(), otawa::clp::Manager::start(), and otawa::clp::ClpStatePack::state_before().

Identifier<clp::State> otawa::clp::STATE_OUT("otawa::clp::STATE_OUT")

Put on a basic block, it's the CLP state at the end of the block.

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