23 mult = 1 + (bs->
s1 == bs->
s2);
28 for (a=0; p->
blk[a]!=bs; a++)
31 memmove(&p->
blk[a], &p->
blk[a+1],
32 sizeof p->
blk[0] * (p->
narg-a));
33 memmove(&p->
arg[a], &p->
arg[a+1],
34 sizeof p->
arg[0] * (p->
narg-a));
37 for (a=0; bd->
pred[a]!=bs; a++)
38 assert(a+1<bd->
npred);
40 memmove(&bd->
pred[a], &bd->
pred[a+1],
68 if (b->
s2 && b->
s2 != b->
s1)
74 if (b->
s2 && b->
s2 != b->
s1)
84 if (!b || b->
id != -1u)
89 if (s1 && s2 && s1->
loop > s2->
loop) {
112 for (p=&f->
start; (b=*p);) {
138 if (b1->
id < b2->
id) {
143 while (b1->
id > b2->
id) {
165 for (n=1; n<fn->
nblk; n++) {
168 for (p=0; p<b->
npred; p++)
171 d = inter(d, b->
pred[p]);
192 while (b2->
id > b1->
id)
200 return b1 == b2 ||
sdom(b1, b2);
208 for (n=0; n<a->
nfron; n++)
245 for (p=0; p<b->
npred; ++p)
246 loopmark(hd, b->
pred[p], f);
257 for (n=0; n<fn->
nblk; ++n) {
259 for (p=0; p<b->
npred; ++p)
261 loopmark(b, b->
pred[p], f);
283 uffind(
Blk **pb,
Blk **uf)
287 pb1 = &uf[(*pb)->id];
319 if (0 <= c && c <=
NCmp)
320 if (b->
s1 == b->
s2) {
Blk * start
Указатель на блок функции, являющийся её входной точкой
void multloop(Blk *hd, Blk *b)
void loopiter(Fn *fn, void f(Blk *, Blk *))
void * vnew(ulong, size_t, Pool)
int dom(Blk *b1, Blk *b2)
Непосредственно информация о базовом блоке.
void vgrow(void *, ulong)
uint nblk
Количество блоков в функции
Blk ** rpo
Ссылка на массив блоков, пронумерованных в порядке Reverse-Post Order, заполняется функцией fillrpo...
void edgedel(Blk *bs, Blk **pbd)
int sdom(Blk *b1, Blk *b2)
Структура, хранящая в себе информацию о функции