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
-
FixPoint | Class describing the ProbleM. |
Listener | Class 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
-
FixPoint | Class describing the ProbleM. |
Listener | Class 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();
}