14 for (a=0; a<p->
narg; a++)
29 if (!bshas(b->
in, r.
val)) {
43 int k, t, m[2], n, chg, nlv[2];
56 for (n=f->
nblk-1; n>=0; n--) {
70 memset(nlv, 0,
sizeof nlv);
94 if (nlv[k] > b->
nlive[k])
103 if (!req(i->
to,
R)) {
104 assert(rtype(i->
to) ==
RTmp);
112 switch (rtype(i->
arg[k])) {
115 bset(ma->
base, b, nlv, f->
tmp);
119 bset(i->
arg[k], b, nlv, f->
tmp);
123 if (nlv[k] > b->
nlive[k])
124 b->
nlive[k] = nlv[k];
133 fprintf(stderr,
"\n> Liveness analysis:\n");
135 fprintf(stderr,
"\t%-10sin: ", b->
name);
137 fprintf(stderr,
"\t out: ");
139 fprintf(stderr,
"\t gen: ");
141 fprintf(stderr,
"\t live: ");
142 fprintf(stderr,
"%d %d\n", b->
nlive[0], b->
nlive[1]);
Blk * start
Указатель на блок функции, являющийся её входной точкой
void liveon(BSet *v, Blk *b, Blk *s)
void bsunion(BSet *, BSet *)
Структура, хранящая информацию об инструкциях.
void bsinit(BSet *, uint)
void bscopy(BSet *, BSet *)
Структура, хранящая описание переменных (более подробное описание переменной ищите в Tmp)...
Содержит информацию о переменной
Tmp * tmp
Массив используемых функцией переменных
int ntmp
Размер массива tmp.
Непосредственно информация о базовом блоке.
int bsiter(BSet *, int *)
int bsequal(BSet *, BSet *)
uint nblk
Количество блоков в функции
bits(* retregs)(Ref, int[2])
Blk ** rpo
Ссылка на массив блоков, пронумерованных в порядке Reverse-Post Order, заполняется функцией fillrpo...
bits(* argregs)(Ref, int[2])
void dumpts(BSet *, Tmp *, FILE *)
Структура, хранящая в себе информацию о функции