Otawa  0.10
otawa::dfa::hai::FirstUnrollingFixPoint< Listener > Class Template Reference

FixPoint class for HalfAbsInt The DefaultFixPoint manages loops in a simple way. More...

#include <otawa/dfa/hai/FirstUnrollingFixPoint.h>

Classes

class  FixPointState
 State info class for FirstUnrollingFixPoint This FixPoint needs to remember: More...
 

Public Types

typedef Listener::Problem Problem
 
typedef Problem::Domain Domain
 

Public Member Functions

FixPointStatenewState (void)
 
 FirstUnrollingFixPoint (Listener &_list)
 
 ~FirstUnrollingFixPoint (void)
 
int getIter (BasicBlock *bb) const
 
void init (HalfAbsInt< FirstUnrollingFixPoint > *_ai)
 
void fixPoint (BasicBlock *bb, bool &fixpoint, Domain &in, bool firstTime) const
 
void markEdge (PropList *e, const Domain &s)
 
void unmarkEdge (PropList *e)
 
DomaingetMark (PropList *e)
 
void updateEdge (Edge *edge, Domain &dom)
 
const Domainbottom (void) const
 
const Domainentry (void) const
 
void lub (Domain &a, const Domain &b) const
 
void assign (Domain &a, const Domain &b) const
 
bool equals (const Domain &a, const Domain &b) const
 
void update (Domain &out, const Domain &in, BasicBlock *bb)
 
void blockInterpreted (BasicBlock *bb, const Domain &in, const Domain &out, CFG *cur_cfg, elm::genstruct::Vector< Edge * > *callStack) const
 
void fixPointReached (BasicBlock *bb) const
 
void enterContext (Domain &dom, BasicBlock *bb, hai_context_t ctx) const
 
void leaveContext (Domain &dom, BasicBlock *bb, hai_context_t ctx) const
 

Protected Attributes

Problemprob
 
Listener & list
 
HalfAbsInt
< FirstUnrollingFixPoint > * 
ai
 

Static Protected Attributes

static Identifier< Domain * > STATE
 

Detailed Description

template<class Listener>
class otawa::dfa::hai::FirstUnrollingFixPoint< Listener >

FixPoint class for HalfAbsInt The DefaultFixPoint manages loops in a simple way.

FixPoint class for HalfAbsInt The WideningFixPoint manages loops in a simple way.

FixPoint class for HalfAbsInt Like the DefaultFixPoint, but: Makes the distinction between the first iteration and the other iterations of any loop.

When a loop header is reached, it iterates over the loop until a fixpoint is reached.

Parameters
FixPointClass describing the ProbleM.
ListenerClass used to retrieve the informations computed by the analysis
Problem

This parameter must match the following signature (the method's meaning are the same as in DefaultFixPoint class):

class Problem {

                class Domain; (May be defined by a typedef)

                const Domain& bottom();
                const Domain& entry()
                void lub(Domain &a, const Domain &b) const;
                void assign(Domain &a, const Domain &b) const;
                bool equals(const Domain &a, const Domain &b) const;
                void update(Domain& out, Domain& in, BasicBlock *bb);
                void enterContext(Domain &dom, BasicBlock *header)
                void leaveContext(Domain &dom, BasicBlock *header)
}

Listener

This parameter must match the following signature (the method's meaning are the same as in DefaultFixPoint class):

class Listener {
                class Problem; (Will usually be defined by a typedef )
        void blockInterpreted(const DefaultFixPoint< DefaultListener >  *fp, BasicBlock* bb, const typename Problem::Domain& in, const typename Problem::Domain& out, CFG *cur_cfg) const;
                void fixPointReached(const DefaultFixPoint<DefaultListener > *fp, BasicBlock*bb );
                Problem& getProb();
}

getIter() method enables the Problem to know which iteration it is.

When a loop header is reached, it iterates over the loop until a fixpoint is reached.

Parameters
FixPointClass describing the ProbleM.
ListenerClass used to retrieve the informations computed by the analysis
Problem

This parameter must match the following signature (the method's meaning are the same as in WideningFixPoint class):

class Problem {

                class Domain; (May be defined by a typedef)

                const Domain& bottom();
                const Domain& entry()
                void lub(Domain &a, const Domain &b) const;
                void assign(Domain &a, const Domain &b) const;
                bool equals(const Domain &a, const Domain &b) const;
                void update(Domain& out, Domain& in, BasicBlock *bb);
                void enterContext(Domain &dom, BasicBlock *header)
                void leaveContext(Domain &dom, BasicBlock *header)
}

Listener

This parameter must match the following signature (the method's meaning are the same as in WideningFixPoint class):

class Listener {
                class Problem; (Will usually be defined by a typedef )
        void blockInterpreted(const WideningFixPoint< DefaultListener >  *fp, BasicBlock* bb, const typename Problem::Domain& in, const typename Problem::Domain& out, CFG *cur_cfg) const;
                void fixPointReached(const WideningFixPoint<DefaultListener > *fp, BasicBlock*bb );
                Problem& getProb();
}

Member Typedef Documentation

template<class Listener>
typedef Problem::Domain otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::Domain
template<class Listener>
typedef Listener::Problem otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::Problem

Constructor & Destructor Documentation

template<class Listener>
otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::FirstUnrollingFixPoint ( Listener &  _list)
inline
template<class Listener>
otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::~FirstUnrollingFixPoint ( void  )
inline

Member Function Documentation

template<class Listener>
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::assign ( Domain a,
const Domain b 
) const
inline
template<class Listener>
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::blockInterpreted ( BasicBlock bb,
const Domain in,
const Domain out,
CFG cur_cfg,
elm::genstruct::Vector< Edge * > *  callStack 
) const
inline
template<class Listener >
const FirstUnrollingFixPoint< Listener >::Domain & otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::bottom ( void  ) const
inline
template<class Listener >
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::enterContext ( Domain dom,
BasicBlock bb,
hai_context_t  ctx 
) const
inline
template<class Listener >
const FirstUnrollingFixPoint< Listener >::Domain & otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::entry ( void  ) const
inline
template<class Listener>
bool otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::equals ( const Domain a,
const Domain b 
) const
inline
template<class Listener >
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::fixPointReached ( BasicBlock bb) const
inline
template<class Listener>
int otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::getIter ( BasicBlock bb) const
inline
template<class Listener >
FirstUnrollingFixPoint< Listener >::Domain * otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::getMark ( PropList e)
inline

References otawa::stack::STATE.

template<class Listener>
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::init ( HalfAbsInt< FirstUnrollingFixPoint< Listener > > *  _ai)
inline
template<class Listener >
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::leaveContext ( Domain dom,
BasicBlock bb,
hai_context_t  ctx 
) const
inline
template<class Listener>
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::lub ( Domain a,
const Domain b 
) const
inline
template<class Listener >
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::markEdge ( PropList e,
const Domain s 
)
inline

References otawa::stack::STATE.

template<class Listener>
FixPointState* otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::newState ( void  )
inline
template<class Listener >
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::unmarkEdge ( PropList e)
inline

References otawa::stack::STATE.

template<class Listener>
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::update ( Domain out,
const Domain in,
BasicBlock bb 
)
inline
template<class Listener >
void otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::updateEdge ( Edge edge,
Domain dom 
)
inline

Member Data Documentation

template<class Listener>
Listener& otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::list
protected
template<class Listener>
Problem& otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::prob
protected
template<class Listener>
Identifier< typename Listener::Problem::Domain * > otawa::dfa::hai::FirstUnrollingFixPoint< Listener >::STATE
staticprotected

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