24 #ifndef CACHE_PERSPROBLEM_H_
25 #define CACHE_PERSPROBLEM_H_
28 #include <elm/assert.h>
46 inline Item(
const int _size,
const int _A)
50 for (
int i = 0; i <
size; i++)
60 for (
int i = 0; i <
size; i++)
67 for (
int i = 0; i <
size ; i++)
73 ASSERT((
id >= 0) && (
id <
size));
75 if ((newage != -1) && ((
age[
id] > newage) || (
age[
id] == -1)))
82 for (
int i = 0; i <
size; i++) {
83 if ((
age[i] == -1) || ((
age[i] < dom.
age[i]) && (dom.
age[i] != -1)) )
90 for (
int i = 0; i <
size; i++)
97 for (
int i = 0; i <
size; i++)
103 ASSERT((
id <
size) && (
id >= 0));
104 return(
age[
id] != -1);
109 for (
int i = 0; i <
size; i++) {
115 for (
int i = 0; i <
size; i++) {
116 if ((
age[i] != -1) && (
age[i] !=
A))
124 return(
age[
id] ==
A);
131 ASSERT((
id >= 0) && (
id <
size));
136 ASSERT((
id >= 0) && (
id <
size));
147 for (
int i = 0; i <
size; i++) {
152 output << i <<
":" <<
age[i];
173 inline Domain(
const int _size,
const int _A)
181 for (
int i = 0; i <
data.length(); i++)
187 for (
int i = 0; i < source.
data.length(); i++)
202 int sdl = src.
data.length();
203 int dl =
data.length();
204 int minl = (sdl > dl) ? dl : sdl;
205 data.setLength((sdl > dl) ? dl : sdl);
207 for (
int i = 0; i < minl; i++)
210 for (
int i = dl; i < sdl; i++)
231 for (
int i = 0; i < dom.
data.length(); i++)
238 int dl =
data.length();
239 int ddl = dom.
data.length();
240 int length = (dl < ddl) ? dl : ddl;
242 for (
int i = dl - 1, j = ddl - 1, k = 0; k <
length; i--, j--, k++) {
246 for (
int i = 0; i < dl -
length; i++) {
257 for (
int i = 0; i <
data.length(); i++)
267 for (
int i = 0; i < dom.
data.length(); i++) {
275 for (
int i = 0; i <
data.length(); i++)
283 for (
int i = 0; i <
data.length(); i++)
294 inline bool contains(
const int id,
const int index) {
302 for (
int i = 0; i <
data.length(); i++)
307 inline bool isWiped(
const int id,
const int index) {
313 inline int getAge(
const int id,
const int index)
const {
323 inline void addDamage(
const int id,
const int index,
int damage) {
325 data[index]->addDamage(
id, damage);
330 for (
int n = 0; n <
data.length(); n++)
335 inline void refresh(
const int id,
const int index,
int newage) {
337 data[index]->refresh(
id, newage);
340 inline void refresh(
const int id,
int newage) {
342 for (
int n = 0; n <
data.length(); n++)
356 for (
int i = 0; i <
data.length(); i++) {
359 data[i]->print(output);
381 return data.length();
386 return(*
data.get(idx));
void inject(MUSTProblem::Domain *must, const int id)
Definition: PERSProblem.h:107
dtd::RefAttr< BasicBlock * > source("source", dtd::STRICT|dtd::REQUIRED)
Domain callstate
Definition: PERSProblem.h:398
WorkSpace * fw
Definition: PERSProblem.h:405
void leaveContext(Domain &dom, BasicBlock *header, hai_context_t ctx)
Definition: PERSProblem.h:443
void empty()
Definition: PERSProblem.h:96
Domain & operator=(const Domain &src)
Definition: PERSProblem.h:191
Item whole
Definition: PERSProblem.h:392
Domain bot
Definition: PERSProblem.h:407
int A
Definition: PERSProblem.h:169
Domain(const Domain &source)
Definition: PERSProblem.h:185
LBlockSet * lbset
Definition: PERSProblem.h:403
CFG * cfg
Definition: PERSProblem.h:404
Item & getItem(const int idx) const
Definition: PERSProblem.h:384
void print(elm::io::Output &output) const
Definition: PERSProblem.h:347
int length()
Definition: PERSProblem.h:379
void setToBottom()
Definition: PERSProblem.h:282
int getAge(const int id, const int index) const
Definition: PERSProblem.h:313
bool contains(const int id, const int index)
Definition: PERSProblem.h:294
~Item()
Definition: PERSProblem.h:54
void lub(const Domain &dom)
Definition: PERSProblem.h:219
void lub(Domain &a, const Domain &b) const
Definition: PERSProblem.h:425
dtd::Element bb(dtd::make("bb", _BB).attr(id).attr(address).attr(size))
void refresh(const int id, const int index, int newage)
Definition: PERSProblem.h:335
void refresh(const int id, int newage)
Definition: PERSProblem.h:340
bool isPersistent(const int id, const int index)
Definition: PERSProblem.h:318
Definition: PERSProblem.h:42
elm::io::Output & operator<<(elm::io::Output &out, Address addr)
Definition: base.cpp:188
Control Flow Graph representation.
Definition: CFG.h:42
Item(const int _size, const int _A)
Definition: PERSProblem.h:46
const hard::Cache * cache
Definition: PERSProblem.h:406
void enterContext(Domain &dom, BasicBlock *header, hai_context_t ctx)
Definition: PERSProblem.h:436
void assign(Domain &a, const Domain &b) const
Definition: PERSProblem.h:428
void inject(MUSTProblem::Domain *must, const int id)
Definition: PERSProblem.h:300
bool equals(const Domain &dom) const
Definition: PERSProblem.h:265
Problem for computing the PERS ACS of L-blocks.
Definition: PERSProblem.h:38
const Domain & entry(void) const
Definition: cache_PERSProblem.cpp:62
int size
Definition: PERSProblem.h:169
bool isPersistent(const int id)
Definition: PERSProblem.h:127
bool isWiped(const int id)
Definition: PERSProblem.h:123
int size
Definition: PERSProblem.h:43
void update(Domain &out, const Domain &in, BasicBlock *bb)
Definition: cache_PERSProblem.cpp:66
Item & getWhole()
Definition: PERSProblem.h:290
int A
Definition: PERSProblem.h:43
bool isBottom
Definition: PERSProblem.h:170
A workspace represents a program, its run-time and all information about WCET computation or any othe...
Definition: WorkSpace.h:67
void addDamage(const int id, int damage)
Definition: PERSProblem.h:328
int getAge(const int id) const
Definition: PERSProblem.h:130
This class contains the configuration of a level of cache of processor.
Definition: Cache.h:34
bool contains(const int id)
Definition: MUSTProblem.h:127
void leaveContext()
Definition: PERSProblem.h:373
void lub(const Item &dom)
Definition: PERSProblem.h:79
sys::SystemOutStream & out
This class represents the list of l-blocks of a task for a chosen cache row.
Definition: LBlockSet.h:38
void print(elm::io::Output &output) const
Definition: PERSProblem.h:144
hai_context_t
Definition: HalfAbsInt.h:50
void addDamage(const int id, int damage)
Definition: PERSProblem.h:135
Definition: HalfAbsInt.h:51
const Domain & bottom(void) const
Definition: cache_PERSProblem.cpp:58
bool contains(const int id)
Definition: PERSProblem.h:102
~PERSProblem()
Definition: cache_PERSProblem.cpp:55
This is the minimal definition of a basic block.
Definition: BasicBlock.h:43
void empty()
Definition: PERSProblem.h:274
PERSProblem(const int _size, LBlockSet *_lbset, WorkSpace *_fw, const hard::Cache *_cache, const int _A)
Definition: cache_PERSProblem.cpp:37
void lub(const Item &item)
Definition: PERSProblem.h:253
const int line
Definition: PERSProblem.h:409
Item(const Item &source)
Definition: PERSProblem.h:58
Item & operator=(const Item &src)
Definition: PERSProblem.h:65
genstruct::Vector< Item * > data
Definition: PERSProblem.h:393
void enterContext()
Definition: PERSProblem.h:365
Domain(const int _size, const int _A)
Definition: PERSProblem.h:173
Definition: PERSProblem.h:168
bool equals(const Item &dom) const
Definition: PERSProblem.h:88
void refresh(int id, int newage)
Definition: PERSProblem.h:72
bool equals(const Domain &a, const Domain &b) const
Definition: PERSProblem.h:431
bool isWiped(const int id, const int index)
Definition: PERSProblem.h:307
void addDamage(const int id, const int index, int damage)
Definition: PERSProblem.h:323
int * age
Definition: PERSProblem.h:165
Domain ent
Definition: PERSProblem.h:408
Definition: MUSTProblem.h:44
~Domain()
Definition: PERSProblem.h:180