Функция fillrpo
Версия от 15:10, 6 апреля 2018; Admin (обсуждение | вклад)
Функция fillrpo(Fn) - функция, реализованная в Си интерфейсе QBE. Располагается в файле cfg.c
и "подключается" в all.h
.
Назначение
fillrpo осуществляет обход дерева блоков в reverse postorder порядке. Вычисленные номера блоков записываются в blk->id
.
Исходный код
Функция fillrpo из cfg.c
void fillrpo(Fn *f) { uint n; Blk *b, **p; for (b=f->start; b; b=b->link) b->id = -1u; n = 1 + rporec(f->start, f->nblk-1); f->nblk -= n; f->rpo = alloc(f->nblk * sizeof f->rpo[0]); for (p=&f->start; (b=*p);) { if (b->id == -1u) { edgedel(b, &b->s1); edgedel(b, &b->s2); *p = b->link; } else { b->id -= n; f->rpo[b->id] = b; p = &b->link; } } }