|
OTAWA
2.0
Framework to perform machine analysis and compute WCET.
|
Go to the documentation of this file.
24 #ifndef OTAWA_DFA_HAI_FIRSTUNROLLINGFIXPOINT_H_
25 #define OTAWA_DFA_HAI_FIRSTUNROLLINGFIXPOINT_H_
32 #include <elm/data/Vector.h>
35 namespace otawa {
namespace dfa {
namespace hai {
37 template <
class Listener>
40 typedef typename Listener::Problem
Problem;
64 inline int getIter(
Block *bb)
const {
return(
ai->getFixPointState(bb)->numIter); }
88 template <
class Listener>
91 template <
class Listener >
94 Domain newHeaderState(bottom());
102 assign(newHeaderState, ai->entryEdgeUnion(bb));
109 assign(newHeaderState, ai->backEdgeUnion(bb));
118 assign(newHeaderState, ai->backEdgeUnion(bb));
120 if (prob.equals(newHeaderState, fpstate->
headerState))
130 assign(
in, newHeaderState);
133 template <
class Listener >
146 prob.lub(**
STATE(e), s);
149 template <
class Listener >
155 template <
class Listener >
165 template <
class Listener >
167 return(prob.bottom());
170 template <
class Listener >
172 return(prob.entry());
175 template <
class Listener >
180 template <
class Listener >
185 template <
class Listener >
187 return (prob.equals(a,b));
190 template <
class Listener >
192 prob.update(
out,
in,bb);
195 template <
class Listener >
197 list.blockInterpreted(
this, bb,
in,
out, cur_cfg, callStack);
200 template <
class Listener >
202 list.fixPointReached(
this, bb);
205 template <
class Listener >
207 prob.enterContext(dom, bb, ctx);
210 template <
class Listener >
212 prob.leaveContext(dom, bb, ctx);
215 template <
class Listener >
FixPointState * newState(void)
Definition: FirstUnrollingFixPoint.h:60
typename type_info< T >::out_t out
Definition: FirstUnrollingFixPoint.h:38
Domain firstIterState
Definition: FirstUnrollingFixPoint.h:55
const Domain & bottom(void) const
Definition: FirstUnrollingFixPoint.h:166
void fixPoint(Block *bb, bool &fixpoint, Domain &in, bool firstTime) const
Definition: FirstUnrollingFixPoint.h:92
void lub(Domain &a, const Domain &b) const
Definition: FirstUnrollingFixPoint.h:176
void fixPointReached(Block *bb) const
Definition: FirstUnrollingFixPoint.h:201
void leaveContext(Domain &dom, Block *bb, hai_context_t ctx) const
Definition: FirstUnrollingFixPoint.h:211
void blockInterpreted(Block *bb, const Domain &in, const Domain &out, CFG *cur_cfg, Vector< Edge * > *callStack) const
Definition: FirstUnrollingFixPoint.h:196
void update(Domain &out, const Domain &in, Block *bb)
Definition: FirstUnrollingFixPoint.h:191
~FirstUnrollingFixPoint(void)
Definition: FirstUnrollingFixPoint.h:62
const Domain & top(void) const
Definition: FirstUnrollingFixPoint.h:75
Listener & list
Definition: FirstUnrollingFixPoint.h:47
bool equals(const Domain &a, const Domain &b) const
Definition: FirstUnrollingFixPoint.h:186
void updateEdge(Edge *edge, Domain &dom)
Definition: FirstUnrollingFixPoint.h:216
FastStateWrapper Domain
Definition: GlobalAnalysis.h:38
const Domain & entry(void) const
Definition: FirstUnrollingFixPoint.h:171
typename type_info< T >::in_t in
void init(HalfAbsInt< FirstUnrollingFixPoint > *_ai)
Definition: FirstUnrollingFixPoint.h:65
Definition: HalfAbsInt.h:81
FirstUnrollingFixPoint(Listener &_list)
Definition: FirstUnrollingFixPoint.h:61
Identifier< State * > STATE("otawa::stack::STATE", 0)
Stack analysis state at entry of BBs.
FixPointState(const Domain &bottom)
Definition: FirstUnrollingFixPoint.h:57
ListPrinter< T > list(const T &l, cstring s="", typename ListPrinter< T >::fun_t f=ListPrinter< T >::asis)
void enterContext(Domain &dom, Block *bb, hai_context_t ctx) const
Definition: FirstUnrollingFixPoint.h:206
void markEdge(PropList *e, const Domain &s)
Definition: FirstUnrollingFixPoint.h:134
Definition: FirstUnrollingFixPoint.h:52
Listener::Problem Problem
Definition: FirstUnrollingFixPoint.h:40
void assign(Domain &a, const Domain &b) const
Definition: FirstUnrollingFixPoint.h:181
int getIter(Block *bb) const
Definition: FirstUnrollingFixPoint.h:64
hai_context_t
Definition: HalfAbsInt.h:66
Domain * getMark(PropList *e)
Definition: FirstUnrollingFixPoint.h:156
static Identifier< Domain * > STATE
Definition: FirstUnrollingFixPoint.h:45
void unmarkEdge(PropList *e)
Definition: FirstUnrollingFixPoint.h:150
Problem::Domain Domain
Definition: FirstUnrollingFixPoint.h:41
int numIter
Definition: FirstUnrollingFixPoint.h:56
Domain headerState
Definition: FirstUnrollingFixPoint.h:54
Definition: PropList.h:67
Problem & prob
Definition: FirstUnrollingFixPoint.h:46
HalfAbsInt< FirstUnrollingFixPoint > * ai
Definition: FirstUnrollingFixPoint.h:48
Development Note Letting the ToDo / ToDoList class visible in the header is clumsy.
Definition: ArrayStore.h:25