24 #ifndef CACHE_BRANCHPROBLEM_H_
25 #define CACHE_BRANCHPROBLEM_H_
53 inline Domain(
const int _size,
const int _A)
57 for (
int i = 0; i <
size; i++)
67 for (
int i = 0; i <
size; i++)
74 for (
int i = 0; i <
size ; i++)
84 for (
int i = 0; i <
size; i++) {
96 for (
int i = 0; i <
size; i++)
103 for (
int i = 0; i <
size; i++)
109 ASSERT((
id <
size) && (
id >= 0));
110 return(
age[
id] !=
A);
116 for (
int i = 0; i <
size; i++) {
121 for (
int i = 0; i <
size; i++) {
132 for (
int i = 0; i <
size; i++) {
154 inline void setAge(
const int id,
const int _age) {
156 ASSERT((_age <=
A) || (_age >= 0));
233 inline Domain(
const int _size,
const int _A)
234 :
A (_A),
size(_size)
237 for (
int i = 0; i <
size; i++)
247 for (
int i = 0; i <
size; i++)
254 for (
int i = 0; i <
size ; i++)
264 for (
int i = 0; i <
size; i++) {
276 for (
int i = 0; i <
size; i++)
283 for (
int i = 0; i <
size; i++)
289 ASSERT((
id <
size) && (
id >= 0));
290 return(
age[
id] !=
A);
296 for (
int i = 0; i <
size; i++) {
301 for (
int i = 0; i <
size; i++) {
312 for (
int i = 0; i <
size; i++) {
334 inline void setAge(
const int id,
const int _age) {
336 ASSERT((_age <=
A) || (_age >= 0));
407 inline Item(
const int _size,
const int _A)
408 :
A (_A),
size(_size)
411 for (
int i = 0; i <
size; i++)
421 for (
int i = 0; i <
size; i++)
428 for (
int i = 0; i <
size ; i++)
436 for (
int i = 0; i <
size; i++) {
437 if ((
age[i] == -1) || ((
age[i] < dom.
age[i]) && (dom.
age[i] != -1)) )
444 for (
int i = 0; i <
size; i++)
451 for (
int i = 0; i <
size; i++)
457 ASSERT((
id <
size) && (
id >= 0));
458 return(
age[
id] != -1);
463 for (
int i = 0; i <
size; i++) {
468 for (
int i = 0; i <
size; i++) {
469 if ((
age[i] != -1) && (
age[i] !=
A))
477 return(
age[
id] ==
A);
484 ASSERT((
id >= 0) && (
id <
size));
491 for (
int i = 0; i <
size; i++) {
496 output << i <<
":" <<
age[i];
517 inline Domain(
const int _size,
const int _A)
525 for (
int i = 0; i <
data.length(); i++)
531 for (
int i = 0; i < source.
data.length(); i++)
546 int sdl = src.
data.length();
547 int dl =
data.length();
548 int minl = (sdl > dl) ? dl : sdl;
549 data.setLength((sdl > dl) ? dl : sdl);
551 for (
int i = 0; i < minl; i++)
554 for (
int i = dl; i < sdl; i++)
575 for (
int i = 0; i < dom.
data.length(); i++)
582 int dl =
data.length();
583 int ddl = dom.
data.length();
584 int length = (dl < ddl) ? dl : ddl;
586 for (
int i = dl - 1, j = ddl - 1, k = 0; k <
length; i--, j--, k++) {
590 for (
int i = 0; i < dl -
length; i++) {
601 for (
int i = 0; i <
data.length(); i++)
611 for (
int i = 0; i < dom.
data.length(); i++) {
619 for (
int i = 0; i <
data.length(); i++)
627 for (
int i = 0; i <
data.length(); i++)
638 inline bool contains(
const int id,
const int index) {
646 for (
int i = 0; i <
data.length(); i++)
651 inline bool isWiped(
const int id,
const int index) {
657 inline int getAge(
const int id,
const int index)
const {
677 for (
int i = 0; i <
data.length(); i++) {
680 data[i]->print(output);
702 return data.length();
707 return(*
data.get(idx));
785 inline Domain(
const int _size,
const int _A)
843 output <<
"] MUST=[ ";
845 output <<
"] MAY=[ ";
void update(Domain &out, const Domain &in, BasicBlock *bb)
Definition: branch_BranchProblem.cpp:156
int * age
Definition: BranchProblem.h:346
void enterContext(Domain &dom, BasicBlock *header, util::hai_context_t ctx)
Definition: BranchProblem.h:880
dtd::RefAttr< BasicBlock * > source("source", dtd::STRICT|dtd::REQUIRED)
void enterContext(Domain &dom, BasicBlock *header, util::hai_context_t ctx)
Definition: BranchProblem.h:205
int getAge(int id) const
Definition: BranchProblem.h:149
Domain ent
Definition: BranchProblem.h:855
Domain & operator=(const Domain &src)
Definition: BranchProblem.h:72
Domain & operator=(const Domain &src)
Definition: BranchProblem.h:252
const Domain & bottom(void) const
Definition: branch_BranchProblem.cpp:50
void update(Domain &out, const Domain &in, BasicBlock *bb)
Definition: branch_BranchProblem.cpp:57
~MUSTBranch()
Definition: branch_BranchProblem.cpp:47
Definition: BranchProblem.h:767
MAYBranch mayProb
Definition: BranchProblem.h:771
bool equals(const Domain &dom) const
Definition: BranchProblem.h:824
Domain(const Domain &source)
Definition: BranchProblem.h:791
void inject(const int id)
Definition: BranchProblem.h:294
void leaveContext(Domain &dom, BasicBlock *header, util::hai_context_t ctx)
Definition: BranchProblem.h:209
bool equals(const Domain &dom) const
Definition: BranchProblem.h:94
const Domain & entry(void) const
Definition: branch_BranchProblem.cpp:53
PERSBranch::Domain pers
Definition: BranchProblem.h:780
Domain(const int _size, const int _A)
Definition: BranchProblem.h:53
MAYBranch::Domain may
Definition: BranchProblem.h:782
void update(Domain &out, const Domain &in, BasicBlock *bb)
Definition: branch_BranchProblem.cpp:84
Item whole
Definition: BranchProblem.h:713
void lub(const Domain &dom)
Definition: BranchProblem.h:563
const Domain & entry(void) const
Definition: branch_BranchProblem.cpp:113
void lub(const Domain &dom)
Definition: BranchProblem.h:814
void lub(Domain &a, const Domain &b) const
Definition: BranchProblem.h:867
bool equals(const Domain &a, const Domain &b) const
Definition: BranchProblem.h:873
int A
Definition: BranchProblem.h:43
Domain bot
Definition: BranchProblem.h:727
void empty()
Definition: BranchProblem.h:828
void lub(const Domain &dom)
Definition: BranchProblem.h:81
void empty()
Definition: BranchProblem.h:102
int * age
Definition: BranchProblem.h:509
bool equals(const Domain &a, const Domain &b) const
Definition: BranchProblem.h:750
bool equals(const Domain &dom) const
Definition: BranchProblem.h:609
MUSTBranch(const int _size, WorkSpace *_fw, const int _A, const int _row)
Definition: branch_BranchProblem.cpp:37
int getAge(const int id) const
Definition: BranchProblem.h:483
~Domain()
Definition: BranchProblem.h:61
int A
Definition: BranchProblem.h:513
genstruct::Vector< Item * > data
Definition: BranchProblem.h:714
int getAge(int id) const
Definition: BranchProblem.h:329
int row
Definition: BranchProblem.h:773
bool equals(const Domain &a, const Domain &b) const
Definition: BranchProblem.h:198
~Item()
Definition: BranchProblem.h:415
BranchProblem(const int _size, WorkSpace *_fw, const int _A, const int _row)
Definition: branch_BranchProblem.cpp:129
dtd::Element bb(dtd::make("bb", _BB).attr(id).attr(address).attr(size))
WorkSpace * fw
Definition: BranchProblem.h:352
int size
Definition: BranchProblem.h:43
int A
Definition: BranchProblem.h:404
Item(const int _size, const int _A)
Definition: BranchProblem.h:407
bool isPersistent(const int id)
Definition: BranchProblem.h:480
int size
Definition: BranchProblem.h:513
void assign(Domain &a, const Domain &b) const
Definition: BranchProblem.h:870
void enterContext(Domain &dom, BasicBlock *header, util::hai_context_t ctx)
Definition: BranchProblem.h:755
void inject(MUSTBranch::Domain *must, const int id)
Definition: BranchProblem.h:644
Definition: BranchProblem.h:222
void updateLBlock(Domain &acs, LBlock *lblock)
void enterContext(Domain &dom, BasicBlock *header, util::hai_context_t ctx)
Definition: BranchProblem.h:385
bool isWiped(const int id, const int index)
Definition: BranchProblem.h:651
Definition: BranchProblem.h:512
void print(elm::io::Output &output) const
Definition: BranchProblem.h:840
void print(elm::io::Output &output) const
Definition: BranchProblem.h:129
MAYBranch::Domain & getMay()
Definition: BranchProblem.h:801
bool equals(const Domain &a, const Domain &b) const
Definition: BranchProblem.h:378
bool equals(const Domain &dom) const
Definition: BranchProblem.h:274
int size
Definition: BranchProblem.h:404
~PERSBranch()
Definition: branch_BranchProblem.cpp:106
int getAge(const int id, const int index) const
Definition: BranchProblem.h:657
int row
Definition: BranchProblem.h:400
PERSBranch(const int _size, WorkSpace *_fw, const int _A, const int _row)
Definition: branch_BranchProblem.cpp:94
void leaveContext(Domain &dom, BasicBlock *header, util::hai_context_t ctx)
Definition: BranchProblem.h:389
MAYBranch(const int _size, WorkSpace *_fw, const int _A, const int _row)
Definition: branch_BranchProblem.cpp:64
bool contains(const int id, const int index)
Definition: BranchProblem.h:638
const Domain & bottom(void) const
Definition: branch_BranchProblem.cpp:109
void lub(const Domain &dom)
Definition: BranchProblem.h:261
int A
Definition: BranchProblem.h:223
const Domain & entry(void) const
Definition: branch_BranchProblem.cpp:80
bool contains(const int id)
Definition: BranchProblem.h:456
A workspace represents a program, its run-time and all information about WCET computation or any othe...
Definition: WorkSpace.h:67
void print(elm::io::Output &output) const
Definition: BranchProblem.h:668
Item & getItem(const int idx) const
Definition: BranchProblem.h:705
The l-block is an abstraction allowing to split the basic block according to the bound of the cache b...
Definition: LBlock.h:43
int size
Definition: BranchProblem.h:223
void lub(Domain &a, const Domain &b) const
Definition: BranchProblem.h:744
PERSBranch::Domain & getPers()
Definition: BranchProblem.h:810
void assign(Domain &a, const Domain &b) const
Definition: BranchProblem.h:195
Item & operator=(const Item &src)
Definition: BranchProblem.h:426
void update(Domain &out, const Domain &in, BasicBlock *bb)
Definition: branch_BranchProblem.cpp:117
Domain & operator=(const Domain &src)
Definition: BranchProblem.h:535
Domain bot
Definition: BranchProblem.h:173
void inject(MUSTBranch::Domain *must, const int id)
Definition: BranchProblem.h:461
sys::SystemOutStream & out
bool isBottom
Definition: BranchProblem.h:514
Domain ent
Definition: BranchProblem.h:728
void empty()
Definition: BranchProblem.h:618
Item & getWhole()
Definition: BranchProblem.h:634
void enterContext()
Definition: BranchProblem.h:686
int length()
Definition: BranchProblem.h:700
void setToBottom()
Definition: BranchProblem.h:626
Domain(const Domain &source)
Definition: BranchProblem.h:245
void print(elm::io::Output &output) const
Definition: BranchProblem.h:309
hai_context_t
Definition: HalfAbsInt.h:50
int row
Definition: BranchProblem.h:218
int row
Definition: BranchProblem.h:38
Domain(const Domain &source)
Definition: BranchProblem.h:65
void lub(const Item &item)
Definition: BranchProblem.h:597
void leaveContext()
Definition: BranchProblem.h:694
void print(elm::io::Output &output) const
Definition: BranchProblem.h:488
void setAge(const int id, const int _age)
Definition: BranchProblem.h:334
Definition: BranchProblem.h:37
MUSTBranch::Domain & getMust()
Definition: BranchProblem.h:805
WorkSpace * fw
Definition: BranchProblem.h:772
Definition: HalfAbsInt.h:51
Domain ent
Definition: BranchProblem.h:354
void leaveContext(Domain &dom, BasicBlock *header, util::hai_context_t ctx)
Definition: BranchProblem.h:886
const Domain & bottom(void) const
Definition: branch_BranchProblem.cpp:147
Definition: BranchProblem.h:42
MUSTBranch::Domain must
Definition: BranchProblem.h:781
Domain ent
Definition: BranchProblem.h:174
Domain bot
Definition: BranchProblem.h:854
This is the minimal definition of a basic block.
Definition: BasicBlock.h:43
Domain(const Domain &source)
Definition: BranchProblem.h:529
void empty()
Definition: BranchProblem.h:282
Definition: BranchProblem.h:777
Domain bot
Definition: BranchProblem.h:353
void lub(Domain &a, const Domain &b) const
Definition: BranchProblem.h:372
Domain(const int _size, const int _A)
Definition: BranchProblem.h:785
void lub(const Item &dom)
Definition: BranchProblem.h:433
PERSBranch persProb
Definition: BranchProblem.h:770
WorkSpace * fw
Definition: BranchProblem.h:172
int getSize(void)
Definition: BranchProblem.h:90
void assign(Domain &a, const Domain &b) const
Definition: BranchProblem.h:747
Domain(const int _size, const int _A)
Definition: BranchProblem.h:233
~Domain()
Definition: BranchProblem.h:241
void lub(Domain &a, const Domain &b) const
Definition: BranchProblem.h:192
Item(const Item &source)
Definition: BranchProblem.h:419
Definition: BranchProblem.h:399
bool isPersistent(const int id, const int index)
Definition: BranchProblem.h:662
void leaveContext(Domain &dom, BasicBlock *header, util::hai_context_t ctx)
Definition: BranchProblem.h:760
Definition: BranchProblem.h:403
int getSize(void)
Definition: BranchProblem.h:270
Domain(const int _size, const int _A)
Definition: BranchProblem.h:517
Domain & operator=(const Domain &src)
Definition: BranchProblem.h:794
int getSize(void)
Definition: BranchProblem.h:820
~MAYBranch()
Definition: branch_BranchProblem.cpp:74
bool equals(const Item &dom) const
Definition: BranchProblem.h:442
void inject(const int id)
Definition: BranchProblem.h:114
void assign(Domain &a, const Domain &b) const
Definition: BranchProblem.h:375
void inject(const int id)
Definition: BranchProblem.h:834
bool contains(const int id)
Definition: BranchProblem.h:108
MUSTBranch mustProb
Definition: BranchProblem.h:769
~Domain()
Definition: BranchProblem.h:524
bool isWiped(const int id)
Definition: BranchProblem.h:476
Definition: BranchProblem.h:217
const Domain & bottom(void) const
Definition: branch_BranchProblem.cpp:77
void empty()
Definition: BranchProblem.h:450
int * age
Definition: BranchProblem.h:166
const Domain & entry(void) const
Definition: branch_BranchProblem.cpp:150
bool contains(const int id)
Definition: BranchProblem.h:288
WorkSpace * fw
Definition: BranchProblem.h:725
void setAge(const int id, const int _age)
Definition: BranchProblem.h:154